Educational Codeforces Round 83 (Rated for Div. 2)
Posted 2017py
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 83 (Rated for Div. 2)相关的知识,希望对你有一定的参考价值。
Educational Codeforces Round 83 (Rated for Div. 2)
A. Two Regular Polygons
题意
给出一个正(n)边形,问能否使用这(n)个点重新构成正(m)边形
题解
正多边形转正多边形,直接判断点能不能均分就好了
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define def 110
using namespace std;
int main()
{ long _,n,m;
for(scanf("%ld",&_);_;_--){
scanf("%ld%ld",&n,&m);
if(n%m==0)
printf("YES
");
else
printf("NO
");
}
return 0;
}
B. Bogosort
题意
给出(n)个数,重新排列使得对于所有的(i)和(j),(a[i]-i ot= a[j]-j)
题解
从大到小排个序,就能保证对于所有(i<j),(a[i]>=a[j]),从而(a[i]-i>a[j]-j)
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define def 110
using namespace std;
long a[def];
int main()
{ long _,n,i,j;
for(scanf("%ld",&_);_;_--){
scanf("%ld",&n);
for(i=1;i<=n;i++)
scanf("%ld",&a[i]);
sort(a+1,a+n+1,[&](long a,long b){return a>b;});
for(i=1;i<=n;i++)
printf("%ld ",a[i]);
printf("
");
}
return 0;
}
C. Adding Powers
题意
给出一串数和一个基数(k),每次可以选择一个数减去(k^p(p>=0)),求能否做到在每个p只用一次的情况下,将所有数都变为0
题解
因为每个(p)只能用一次,而且(k^p>=k^{p-1}),所以对每个数直接枚举(p)然后减去即可,过程中记录下p的使用记录,保证用过的不再使用
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#define def 110
using namespace std;
bool b[def];
ll ksm(ll a,long b)
{
if(!b)
return 1;
else
if(b%2)
return ksm(a*a,b/2)*a;
else
return ksm(a*a,b/2);
}
int main()
{ long _,n,m,i,j;
ll maxx,x;
bool t;
for(scanf("%ld",&_);_;_--){
scanf("%ld%ld",&n,&m);
for(maxx=1;ksm(m,maxx)<=10000000000000000LL;maxx++);
maxx--;
t=true;
memset(b,false,sizeof(b));
for(i=1;i<=n;i++){
scanf("%lld",&x);
for(j=maxx;j>=0;j--)
if(x>=ksm(m,j)&&!b[j]){
x-=ksm(m,j);
b[j]=true;
}
if(x)
t=false;
}
if(t)
printf("YES
");
else
printf("NO
");
}
return 0;
}
D. Count the Arrays
题意
构建长度为(m)的数列,其中每个数范围([1,n]),有且只有一对重复的数,并且可以构成“金字塔形”(先增后减),问这样的数列有多少种
题解
组合数问题,先在m个里选n-1个数;
然后在n-1个里挑一个来重复,因为挑出来的数中间一定得有比他大的数,所以,只有n-2种选择;
最后排列一下剩下的数,除了最大值,每个数都在最大值的左右二选一,所以是pow(2,n-3)
综上,答案就是(C_m^{n-1}*(n-3)*pow(2,n-2))
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#define MOD 998244353
#define def 200010
using namespace std;
ll jc[def],ny[def];
ll ksm(ll a,long b)
{
if(!b)
return 1;
else
if(b%2)
return ksm(a*a%MOD,b/2)*a%MOD;
else
return ksm(a*a%MOD,b/2);
}
ll C(long n,long m)
{
return jc[n]*ny[m]%MOD*ny[n-m]%MOD;
}
int main()
{ long n,m,i;
ll ans=0;
scanf("%ld%ld",&n,&m);
jc[0]=1;
ny[0]=ksm(jc[0],MOD-2);
for(i=1;i<=m;i++){
jc[i]=jc[i-1]*i%MOD;
ny[i]=ksm(jc[i],MOD-2);
}
printf("%lld
",C(m,n-1)*ksm(2,n-3)%MOD*(n-2)%MOD);
return 0;
}
E. Array Shrinking
明天补题
loading……
以上是关于Educational Codeforces Round 83 (Rated for Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 7 A
Educational Codeforces Round 7
Educational Codeforces Round 90
Educational Codeforces Round 33