标签:random color click body ase hid closed i++ gif
solve | A | B | C | D | E | F | G | H | I | J | K | L | |||
5/12 | ac | ac | ac | ac | ac | try |
题意 : 一个字符串,每个子串都要是回文的,问你最少翻几个。
如果每一个字符串都是回文串,那么最终奇数位等于奇数位,偶数位等于偶数位,
#include<bits/stdc++.h> using namespace std; const int N=1e2+5; char s[N]; int a[30],b[30]; int main(){ int t; scanf("%d",&t); while(t--){ memset(a,0,sizeof a); memset(b,0,sizeof b); scanf("%s",s); int len=strlen(s); for(int i=0;i<len;i++){ if(i&1)a[s[i]-‘a‘]++; else b[s[i]-‘a‘]++; } sort(a,a+26,greater<int>() ); sort(b,b+26,greater<int>() ); int ans=len-a[0]-b[0]; printf("%d\n",ans); } // system("pause"); return 0; }
题意:一颗任意的树,求期望排列,逆元+思维。
总情况肯定是 n!个,对于每一个节点,被作为树根的构造方案是(n-1)/k,累加即可。
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; typedef long long ll; const ll MOD=998244353; ll a[N]; ll quickPower(ll a, ll b,ll m) { //计算a的b次方 ll ans = 1; ll base = a; while (b) { if (b & 1) { ans *= base; ans %= m; } base *= base; base %= m; b >>= 1; //注意是b>>=1 not b>>1 } return ans; } int main(){ int t,n; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++)scanf("%lld",&a[i]); ll nv=1; for(int i=1;i<n;i++)nv=(nv*i)%MOD; ll t=nv,sum=nv*a[0]%MOD; for(int i=1;i<n;i++){ t=(t+nv*quickPower(i*1ll,MOD-2,MOD)%MOD)%MOD; sum=(sum+t*a[i])%MOD; } nv=(nv*n)%MOD; ll ans=(sum*quickPower(nv*1ll,MOD-2,MOD)%MOD)%MOD; printf("%lld\n",ans); } // system("pause"); return 0; }
标签:random color click body ase hid closed i++ gif
原文地址:https://www.cnblogs.com/littlerita/p/12663912.html