2019杭電多校第二場

2022-02-24 15:13:01 字數 1735 閱讀 5848

給定乙個\(n\),從\([1,n]\)中等概率取出乙個數,再等概率生成乙個\(n\)的全排列,再計算這個全排列的函式值,求這個函式值的期望。

函式表達為輸入乙個全排列,計算其逆序數,再等概率取出乙個子串行(可以是空,可以是原序列),遞迴計算該子串行的函式值,累加返回。

#include using namespace std;

typedef long long ll;

const ll mod=998244353;

ll pow(ll a,ll n)

a=a*a%mod;

n/=2;

}return ans;

}ll inv(ll x)

ll n;

int main(void)

return 0;

}

給定乙個字串,詢問\(1-n\)每種長度的回文子串有多少個,且必須滿足前半部分也是回文串。

#include using namespace std;

typedef long long ll;

typedef unsigned ull;

const int n=3e5+50;

const ull base=19260817;

int ans[n];

ull has[n],pw[n];

void inithash()

}void getans()

ll ans=1ll;

for(ll i=2ll;i<=n;i++)

printf("%lld\n",ans);

}return 0;

}

給n個棍子,多次詢問區間內能組成三角形的最大周長。

#include using namespace std;

#define mid (l+r)/2

typedef long long ll;

const int n=1e5+50;

int tr[n*30],sum[n*30],lr[n*30],rr[n*30];

int n,q,a[n],b[n],l,r;

int cnt;

int build(int l,int r)

lr[rt]=build(l,mid);

rr[rt]=build(mid+1,r);

return rt;

}int update(int pre,int l,int r,int x)

if(x<=mid)else

return rt;

}int kth(int a,int b,int l,int r,int k)

int x=sum[lr[b]]-sum[lr[a]];

if(k<=x)else

}int main(void)

//權值建樹記得離散化

sort(b+1,b+1+n);

int m=unique(b+1,b+1+n)-b-1;

//多組記得初始化

cnt=0;

//離散化後範圍記得是m

tr[0]=build(1,m);

for(int i=1;i<=n;i++)

while(q--)

ans=1ll*aa+1ll*bb+1ll*cc;

break;

}printf("%lld\n",ans);}}

return 0;

}

2019杭電多校第二場

今天也是一條鹹魚orz 場上三題 e,j,k e everything is generated in equal probability 題解 乙個長度為n的排列的逆序期望為c n,2 2 因為每一對下標的貢獻都是1 2.然後設dp i dp i dp i 為長度為i ii的隨機排列的culcul...

2019 杭電多校第二場 string

題意 找到所有的回文串滿足它的前一半也是回文串。思路 回文自動機 樹上倍增 我們要處理兩件事情,第一件是每種回文串出現了多少次。我們回想回文自動機的構造過程,發現fail指標只會由標號大的指向標號小的。這樣我們只需要標號從大到小遍歷即可處理出每種回文串出現的次數。第二件是倍增的寫法,倍增是不需要初始...

2018暑假杭電多校第二場

問了yxz後做的。這個是我一般寫線段樹的方法,才覺得感覺有點麻煩,還是yxz的寫法安逸些 include bits stdc h define out x cout x typedef long long ll const ll maxn 5e5 5 int n,m int b maxn struc...