标签:
A .Drazil and Date
题目大意:问是否有一条路径,从(0,0)到(x,y)正好走s步的路线存在,每步可以上下左右移动一格
思路:显然先计算出(0,0)到(x,y)的最短距离后,看剩下的步数是否是偶数就可以了,注意x,y为负数的情况
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int mabs(int x) 5 { 6 if(x>0)return x;else return -x; 7 } 8 int main() 9 { 10 int n,m,step; 11 scanf("%d%d%d",&n,&m,&step); 12 int u=mabs(n)+mabs(m); 13 if(u>step)printf("No\n"); 14 else if((step-u)&1)printf("No\n"); 15 else printf("Yes\n"); 16 return 0; 17 }
B. Drazil and His Happy Friends
题目大意:n个男生从0编号到n-1,m个女生编号从0到m-1,男女中有些快乐有些不快乐,每次邀请编号为i mod n的男生和i mod m编号的女生,只要有一个快乐,两个人就都快乐了,问是否有可能让所有人都快乐?
思路:感觉使劲想应该有数学公式可以推的,懒了那么一下下于是一个大模拟搞定
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #define maxn 1000 5 using namespace std; 6 int boy[maxn],girl[maxn],b,g,x; 7 int main() 8 { 9 int n,m; 10 scanf("%d%d",&n,&m); 11 scanf("%d",&b); 12 for(int i=1;i<=b;i++) 13 { 14 scanf("%d",&x); 15 boy[x]=1; 16 } 17 scanf("%d",&g); 18 for(int i=1;i<=g;i++) 19 { 20 scanf("%d",&x); 21 girl[x]=1; 22 } 23 int max_=max(n,m); 24 for(int i=0;i<max_*100;i++) 25 { 26 girl[i%m]=boy[i%n]=girl[i%m]|boy[i%n]; 27 } 28 for(int i=0;i<n;i++) 29 { 30 if(boy[i]==0){printf("No\n");return 0;} 31 //printf("%d ",boy[i]); 32 } 33 for(int i=0;i<m;i++)if(girl[i]==0){printf("No\n");return 0;} 34 printf("Yes\n"); 35 return 0; 36 }
C. Drazil and Factorial
题目大意:给出函数F(x)为x的十进制下各位数阶乘的乘积,求最大的y使得F(x)=F(y)并且y中不含有0和1
思路:应该挺容易想的,首先素数显然只能放在那儿不能动,合数的话尽量拆成较多的数,比如9!可以拆成7!*3!*3!*2!一次类推,总共就2到9一共8个数,除去素数就只要手推几个数这题就出来了
1 #include<cstdio> 2 using namespace std; 3 char ch[1000]; 4 int cnt[100]; 5 int main() 6 { 7 int n; 8 scanf("%d",&n); 9 scanf("%s",ch+1); 10 for(int i=1;i<=n;i++) 11 { 12 int u=ch[i]-‘0‘; 13 if(u<=1)continue; 14 else if(u==4) 15 { 16 cnt[2]+=2; 17 cnt[3]++; 18 } 19 else if(u==6) 20 { 21 cnt[3]++; 22 cnt[5]++; 23 } 24 else if(u==8) 25 { 26 cnt[7]++; 27 cnt[2]+=3; 28 } 29 else if(u==9) 30 { 31 cnt[2]++; 32 cnt[3]+=2; 33 cnt[7]++; 34 } 35 else 36 { 37 cnt[u]++; 38 } 39 } 40 for(int i=9;i>=2;i--) 41 { 42 for(int j=1;j<=cnt[i];j++)printf("%d",i); 43 } 44 printf("\n"); 45 return 0; 46 }
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<queue> 5 #define maxn 4000 6 using namespace std; 7 const int dx[10]={0,1,-1,0,0};//down up rig,lef 8 const int dy[10]={0,0,0,1,-1}; 9 int map[maxn][maxn]; 10 queue<pair<int , int > > q; 11 char ch[maxn]; 12 //can 1 13 int check(int x,int y) 14 { 15 for(int i=1;i<=4;i++)if(map[x+dx[i]][y+dy[i]]==1) 16 { 17 int flag=0; 18 for(int j=1;j<=4;j++)if(j!=i) 19 { 20 if(map[x+dx[j]][y+dy[j]]==1){flag=1;break;} 21 } 22 if(flag==0)return i; 23 } 24 return 0; 25 } 26 int main() 27 { 28 int n,m; 29 scanf("%d%d",&n,&m); 30 for(int i=1;i<=n;i++) 31 { 32 scanf("%s",ch+1); 33 for(int j=1;j<=m;j++) 34 { 35 if(ch[j]==‘.‘)map[i][j]=1;else map[i][j] = 0; 36 } 37 } 38 for(int i=1;i<=n;i++) 39 { 40 for(int j=1;j<=m;j++) 41 { 42 int u; 43 if(u=check(i,j) && map[i][j]==1)q.push(make_pair(i,j)); 44 } 45 } 46 while(!q.empty()) 47 { 48 pair<int,int> temp=q.front(); 49 q.pop(); 50 int x=temp.first,y=temp.second; 51 int u=check(x,y); 52 if(u==0)continue; 53 if(u==1) 54 { 55 map[x][y]=‘^‘; 56 map[x+1][y]=‘v‘;x++; 57 } 58 if(u==2) 59 { 60 map[x][y]=‘v‘; 61 map[x-1][y]=‘^‘;x--; 62 } 63 if(u==3) 64 { 65 map[x][y]=‘<‘; 66 map[x][y+1]=‘>‘;y++; 67 } 68 if(u==4) 69 { 70 map[x][y]=‘>‘; 71 map[x][y-1]=‘<‘;y--; 72 } 73 for(int i=1;i<=4;i++) 74 { 75 int xx=temp.first+dx[i],yy=temp.second+dy[i]; 76 if(map[xx][yy]==1 && check(xx,yy))q.push(make_pair(xx,yy)); 77 } 78 for(int i=1;i<=4;i++) 79 { 80 81 int xx=x+dx[i],yy=y+dy[i]; 82 if(map[xx][yy]==1 && check(xx,yy))q.push(make_pair(xx,yy)); 83 } 84 } 85 for(int i=1;i<=n;i++) 86 { 87 for(int j=1;j<=m;j++) 88 { 89 if(map[i][j]==1) 90 { 91 printf("Not unique\n"); 92 return 0; 93 } 94 } 95 } 96 for(int i=1;i<=n;i++) 97 { 98 for(int j=1;j<=m;j++) 99 { 100 if(map[i][j]==0) 101 { 102 printf("*"); 103 } 104 else printf("%c",map[i][j]); 105 } 106 printf("\n"); 107 } 108 return 0; 109 }
Codeforces Round #292 (Div. 2)
标签:
原文地址:http://www.cnblogs.com/philippica/p/4296487.html