首页 > 代码库 > Codeforces Round #258 (Div. 2)
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 13513 #define LL long long14 #define INF 0xfffffff15 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 }
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 10100013 #define LL long long14 #define INF 0xfffffff15 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\n%d %d\n",st,en);53 else printf("no\n");54 return 0;55 }
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 10100013 #define LL long long14 #define INF 0xfffffff15 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 }
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 10001012 #define LL long long13 #define INF 0xfffffff14 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 }
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 10001012 #define LL long long13 #define INF 0xfffffff14 const double eps = 1e-8;15 const double pi = acos(-1.0);16 const double inf = ~0u>>2;17 #define mod 100000000718 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;//mod62 }63 cout<<ans<<endl;64 return 0;65 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。