题意:给一个字符串,对它重新排列使得它是60的倍数。
模拟一下,需要能整除60 字符串中需要 能整除2 3 10,所以需要字符串各位数之和能整除3 并且有 一个偶数和一个0 或者两个0也行【没考虑到,WA到自闭QAQ】, 特殊情况 全为0 也行,
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 signed main(){ 5 int _;cin>>_; 6 while(_--){ 7 string str; 8 cin>>str; 9 int flag=0;int s=0; 10 int flag1=0; 11 for(int i=0;i<str.size();i++){ 12 if(str[i]=='0'){ 13 flag++; 14 } 15 if((str[i]-'0')%2==0&&(str[i]!='0')){ 16 flag1=1; 17 } 18 s+=str[i]-'0'; 19 } 20 if((flag1&&s%3==0&&flag)||(s%3==0&&flag>=2)){ 21 cout<<"red"<<' '; 22 }else{ 23 cout<<"cyan"<<' '; 24 } 25 } 26 return 0; 27 } 28 29 /* 30 31 */
题意:给一个数,问他是不是可以由一个骰子塔的所有接触空气的面的数字构成。
思路:每一圈之和恒为14。则判断一下<14的就OK
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define int long long 4 5 signed main(){ 6 int _; 7 cin>>_; 8 while(_--){ 9 10 int n; 11 cin>>n; 12 if(n%14<=6&&n%14>=1&&n>=14){ 13 cout<<"YES"; 14 }else{ 15 cout<<"NO"; 16 } 17 cout<<' '; 18 } 19 return 0; 20 }
题意:往一个矩阵里面填数,使得每行每列的gcd都两两各不相同。且最大的gcd最小。
思路:按照题意构造。
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 #define int long long 5 int arr[151000]; 6 int mp[1500][1500]; 7 signed main(){ 8 int r,c; 9 cin>>r>>c; 10 if(r==1&&c==1){ 11 cout<<"0"; 12 return 0; 13 } 14 if(r==1){ 15 int num=2; 16 for(int i=1;i<=c;i++){ 17 printf("%lld ",num); 18 num++; 19 } 20 }else if(c==1){ 21 int num=2; 22 for(int i=1;i<=r;i++){ 23 printf("%lld ",num); 24 num++; 25 } 26 }else{ 27 int num=c+1; 28 for(int i=1;i<=r;i++){ 29 arr[i]=num; 30 num++; 31 } 32 for(int i=1;i<=c;i++){ 33 for(int j=1;j<=r;j++){ 34 mp[j][i]=i*arr[j]; 35 } 36 } 37 for(int i=1;i<=r;i++){ 38 for(int j=1;j<=c;j++){ 39 printf("%lld ",mp[i][j]); 40 } 41 printf(" "); 42 } 43 } 44 return 0; 45 }