首页 > 其他 > 详细

ccpc2017杭州

时间:2020-04-09 01:10:32      阅读:104      评论:0      收藏:0      [点我收藏+]
solve   A B C D E F G H I J K L      
5/12     ac ac ac ac           ac try        

A - Super-palindrome

题意 : 一个字符串,每个子串都要是回文的,问你最少翻几个。

如果每一个字符串都是回文串,那么最终奇数位等于奇数位,偶数位等于偶数位,

技术分享图片
#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;
}
View Code

 

 

 D - Master of Random

题意:一颗任意的树,求期望排列,逆元+思维。

总情况肯定是 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;
}
View Code

 

 

 

ccpc2017杭州

原文:https://www.cnblogs.com/littlerita/p/12663912.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!