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;
}