A. Two Regular Polygons
解题思路:这一题是一个几何题,但不要被这个吓到,其实很简单的,它说要求在原有得基础上构造一个正多边形,其实只要两个数能够整除就行,不要想太多
#include<iostream> #include<math.h> #include<algorithm> #define ll long long using namespace std; bool cmp(int a,int b){ return a>b; } int main() { int t;/*样例的数量*/ int n,m;/*长度*/ cin>>t;/*样例数*/ while(t--){ cin>>n>>m; if(n%m==0){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } return 0; }
B. Bogosort
解题思路:这一题也非常简单,题目要求队原来的数组排序,要求是每个元素与他们的差值不相等,题目还表明结果不唯一,其实只要将原数组按从大到小的排序然后顺序输出即可。so easy!
#include<iostream> #include<math.h> #include<algorithm> #define ll long long using namespace std; bool cmp(int a,int b){ return a>b; } int main() { int t;/*样例的数量*/ int n;/*长度*/ cin>>t;/*样例数*/ while(t--){ cin>>n; int num[200]={0}; for(int i=1;i<=n;i++){ cin>>num[i]; } //输入完毕 sort(num+1,num+1+n,cmp); for(int i=1;i<=n;i++){ cout<<num[i]; if(i<n){ cout<<" "; }else{ cout<<endl; } } } return 0; }
C. Adding Powers
https://codeforces.com/contest/1312/problem/C解题思路:这一题比较有难度,比较难想,其实只要题做多了,也不难,在剥去题目的层层外套之后其实就是一个进制转换问题,将原序列的每一个数都转换为k进制,然后对应的k进制的数的每一位的和不能大于等于2,否则输出“NO”即可。
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; long long a[40]={0}; int b[40][64],c[40],vis[40],sum[64]; void f(int p,int k){//转换为k进制 long long d=a[p]; int t=0; while(d){ b[p][t++]=d%k; d=d/k; } } int main(){ int t; cin>>t; int n,k; while(t--){ cin>>n>>k; memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); memset(vis,0,sizeof(vis)); memset(sum,0,sizeof(sum)); memset(a,0,sizeof(a)); for(int i=1;i<=n;i++){ cin>>a[i]; if(a[i]==0){ vis[i]=1; } } for(int i=1;i<=n;i++){ if(vis[i]==0){ f(i,k);//进制转换函数 } }//进制转换完毕,下面开始总结 for(int i=0;i<=63;i++){ for(int j=1;j<=n;j++){ sum[i]=sum[i]+b[j][i]; } } int flag=1; for(int i=0;i<63;i++){ if(sum[i]>=2){ flag=0; printf("NO\n"); break; } } if(flag==1){ printf("YES\n"); } } return 0; }