ccpc2017杭州

Posted littlerita

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ccpc2017杭州相关的知识,希望对你有一定的参考价值。

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
",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
",ans);
    }
    // system("pause");
    return 0;
}
View Code

 

 

 

以上是关于ccpc2017杭州的主要内容,如果未能解决你的问题,请参考以下文章

ccpc2017杭州

2017 CCPC 杭州

2017CCPC杭州-C. Hakase and Nano

2017ccpc杭州站 Problem B. Master of Phi

ccpc杭州站 赛后总结

2017CCPC 杭州 J. Master of GCD差分标记/线段树/GCD