zoukankan      html  css  js  c++  java
  • 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

    C - Hakase and Nano

     HDU - 6266 

    可以这样考虑:

    先手时:n是三的倍数3而且全是1,那么没办法,只能输了。

    后手时:n是三的倍数加一,而且全是1时,没办法,必输。

        n是三的倍数加一,而且有一个不是1时,另一个人取走一堆,转化上面情况。

        n是三的倍数,有一个不是1,把那堆取到剩一个1,转化上面情况。

      

    #include<bits/stdc++.h>
    using namespace std;
    #define pb push_back
    #define fi first
    #define se second
    typedef long long ll;
    typedef double db;
    const double eps=1e-8;
    const int N=1e6+6;
    int main(){
      int n,t,d;
      scanf("%d",&t);
      while(t--){
      scanf("%d %d",&n,&d);
      int a,cnt=0;
      for(int i=1;i<=n;i++){
        scanf("%d",&a);
        if(a==1)cnt++;
      }
      if(d==1){
      if(n%3==0&&cnt==n)puts("No");
      else puts("Yes");
      }
      else if(d==2){
        if(n%3==1&&cnt==n)puts("No");
        else if(n%3==1&&cnt==n-1)puts("No");
        else if(n%3==0&&cnt==n-1)puts("No");
        else puts("Yes");    
      }
      }
      // system("pause");
      return 0;
    }
    View Code
    想的太多,做的太少;
  • 相关阅读:
    Sprinig.net 双向绑定 Bidirectional data binding and data model management 和 UpdatePanel
    Memcached是什么
    Spring.net 网络示例 codeproject
    jquery.modalbox.show 插件
    UVA 639 Don't Get Rooked
    UVA 539 The Settlers of Catan
    UVA 301 Transportation
    UVA 331 Mapping the Swaps
    UVA 216 Getting in Line
    UVA 10344 23 out of 5
  • 原文地址:https://www.cnblogs.com/littlerita/p/12663912.html
Copyright © 2011-2022 走看看