• Codeforces Round #258 (Div. 2)


    A

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 #include<list>
    11 using namespace std;
    12 #define N 135
    13 #define LL long long
    14 #define INF 0xfffffff
    15 const double eps = 1e-8;
    16 const double pi = acos(-1.0);
    17 const double inf = ~0u>>2;
    18 
    19 
    20 int main()
    21 {
    22 
    23     int n,m;
    24     cin>>n>>m;
    25     if(min(n,m)%2)
    26     puts("Akshat");
    27     else puts("Malvika");
    28     return 0;
    29 }
    View Code

    B

    排序后比较

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 #include<list>
    11 using namespace std;
    12 #define N 101000
    13 #define LL long long
    14 #define INF 0xfffffff
    15 const double eps = 1e-8;
    16 const double pi = acos(-1.0);
    17 const double inf = ~0u>>2;
    18 int a[N],b[N];
    19 
    20 int main()
    21 {
    22 
    23     int n,i;
    24     cin>>n;
    25     for(i = 1; i <= n; i++)
    26     {
    27         cin>>a[i];
    28         b[i] = a[i];
    29     }
    30     sort(a+1,a+n+1);
    31     int f = 0;
    32     int flag = 1,st = 1,en = 1;
    33     for(i = 1; i <= n ;i++)
    34     {
    35         if(a[i]!=b[i]&&!f)
    36         {
    37             st = i;
    38             f = 1;
    39         }
    40         else if(a[i]!=b[i])
    41         en = i;
    42     }
    43     int j = en;
    44     for(i = st ; i <= en ; i++)
    45     {
    46         if(a[j--]!=b[i])
    47         {
    48             flag = 0;
    49             break;
    50         }
    51     }
    52     if(flag) printf("yes
    %d %d
    ",st,en);
    53     else printf("no
    ");
    54     return 0;
    55 }
    View Code

    C

    根据d1d2的符号 分四种情况讨论,注意k和n的取值范围

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 #include<list>
    11 using namespace std;
    12 #define N 101000
    13 #define LL long long
    14 #define INF 0xfffffff
    15 const double eps = 1e-8;
    16 const double pi = acos(-1.0);
    17 const double inf = ~0u>>2;
    18 int a[N],b[N];
    19 
    20 int main()
    21 {
    22 
    23     int t,i,j;
    24     cin>>t;
    25     LL n,k,d1,d2;
    26     while(t--)
    27     {
    28         LL tk;
    29         scanf("%I64d%I64d%I64d%I64d",&n,&k,&d1,&d2);
    30 
    31         tk = n-k;
    32         if(n%3!=0)
    33         {
    34             puts("no");
    35             continue;
    36         }
    37         if(d1+d2+d2<=k&&3*(d1+d2)<=n)
    38         {
    39             LL k1 = d1+d2+d1;
    40             if((tk>=k1&&(tk-k1)%3==0))
    41             {
    42                 puts("yes");
    43                 continue;
    44             }
    45         }
    46         if(max(d1,d2)+abs(d1-d2)<=k&&3*d1<=n&&3*d2<=n)
    47         {
    48             LL k2 = d1+d2;
    49             if(tk>=k2&&(tk-k2)%3==0)
    50             {
    51                 puts("yes");
    52                 continue;
    53             }
    54         }
    55         if((d1+d2+d1)<=k&&3*(d2+d1)<=n)
    56         {
    57             LL k3 = d2+d2+d1;
    58             if((tk>=k3&&(tk-k3)%3==0))
    59             {
    60                 puts("yes");
    61                 continue;
    62             }
    63         }
    64         if((d1+d2)<=k&&3*max(d1,d2)<=n)
    65         {
    66             LL k4 = max(d1,d2)+abs(d2-d1);
    67             if(tk>=k4&&(tk-k4)%3==0)
    68             {
    69                 puts("yes");
    70                 continue;
    71             }
    72         }
    73         puts("no");
    74     }
    75     return 0;
    76 }
    View Code

    D

    因为只含ab 所以只要头尾相同肯定就是回文串,然后就统计一下第奇偶个位置上a,b的数目计数就可以了。

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 using namespace std;
    11 #define N 100010
    12 #define LL long long
    13 #define INF 0xfffffff
    14 const double eps = 1e-8;
    15 const double pi = acos(-1.0);
    16 const double inf = ~0u>>2;
    17 char s[N];
    18 LL num[2][2],ans[2];
    19 int main()
    20 {
    21     int n,i,j;
    22     cin>>s;
    23     int k = strlen(s);
    24     for(i = 0 ;i < k ;i++)
    25     {
    26         j = s[i]-'a';
    27         num[i&1][j]++;
    28         ans[0]+=num[(i+1)&1][j];
    29         ans[1]+=num[i&1][j];
    30     }
    31     cout<<ans[0]<<" "<<ans[1]<<endl;
    32     return 0;
    33 }
    View Code

    E

    组合数学的知识。

    组合数学P113有同等类型题目讲解。

    具有重复的组合,可以先求出无限制的T*集合  然后根据容斥原理去除超出限制的组合个数。

    T* = C(n+m-1,n)  = C(n+m-1,m-1)

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 #include<vector>
     7 #include<cmath>
     8 #include<queue>
     9 #include<set>
    10 using namespace std;
    11 #define N 100010
    12 #define LL long long
    13 #define INF 0xfffffff
    14 const double eps = 1e-8;
    15 const double pi = acos(-1.0);
    16 const double inf = ~0u>>2;
    17 #define mod 1000000007
    18 LL a[22],inv[22];
    19 LL getInv(LL x)
    20 {
    21     LL ret = 1;
    22     x %= mod;
    23     for (int a = mod - 2; a; a /= 2, x = x * x % mod)
    24         if (a % 2 == 1)
    25             ret = ret * x % mod;
    26     return ret;
    27 }
    28 
    29 int C(LL n, int m)
    30 {
    31     if (n < m)
    32         return 0;
    33     int ret = 1;
    34     for (LL i = n; i > n - m; -- i)
    35         ret = ret * (i % mod) % mod * inv[n - i + 1] % mod;
    36     return ret;
    37 }
    38 int main()
    39 {
    40     int n,i,j;
    41     LL s;
    42     for(i = 0 ; i <= 20 ; i++)
    43         inv[i] = getInv(i);
    44     cin>>n>>s;
    45     for(i = 0 ; i< n; i++)
    46         cin>>a[i];
    47     LL ans = C(s+n-1,n-1);//元素个数无限制的S集
    48     for(i = 1; i < (1<<n) ; i++)
    49     {
    50         LL ss = s;
    51         int o = 0;
    52         for(j =0 ; j< n ; j++)
    53             if(i&(1<<j))
    54             {
    55                 ss-=(a[j]+1);//超过限制的
    56                 o++;
    57             }
    58         if(ss<0) continue;
    59         if(o&1) ans-=C(ss+n-1,n-1);
    60         else ans+=C(ss+n-1,n-1);
    61         ans = (ans%mod+mod)%mod;//mod
    62     }
    63     cout<<ans<<endl;
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
    simlescalar CPU模拟器源代码分析
    基于webRTC技术 音频和视频,IM解
    SVM明确的解释1__ 线性可分问题
    Atititjs javascript异常处理机制java异常转换.js exception process
    hibernate annotation 相关主键生成策略
    切向量,普通矢量,渐变
    C++动态数组简单的模拟二元堆
    [Angular] Create a custom validator for reactive forms in Angular
    [RxJS] Marbles Testings
  • 原文地址:https://www.cnblogs.com/shangyu/p/3867707.html
Copyright © 2020-2023  润新知