模拟ECNA 2015 I What's on the Grille? (Codeforces GYM 100825)
Posted Coolxxx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟ECNA 2015 I What's on the Grille? (Codeforces GYM 100825)相关的知识,希望对你有一定的参考价值。
题目链接:
http://codeforces.com/gym/100825
题目大意:
栅栏密码。给定N(N<=10),密钥为一个N*N的矩阵,\'.\'代表空格可以看到,\'X\'代表被遮挡,还有密文字符串S,长度为N*N
每次将这个矩阵顺时针旋转90°,把矩阵中空格对应的位置按照从上到下从左到右的顺序依次填充上密文字符,求最终这个密文字符能否填满N*N的矩阵,能按顺序输出得到的答案,不能输出"invalid grille"
题目思路:
【模拟】
直接模拟即可。旋转的坐标公式很好推。
1 // 2 //by coolxxx 3 //#include<bits/stdc++.h> 4 #include<iostream> 5 #include<algorithm> 6 #include<string> 7 #include<iomanip> 8 #include<map> 9 #include<stack> 10 #include<queue> 11 #include<set> 12 #include<bitset> 13 #include<memory.h> 14 #include<time.h> 15 #include<stdio.h> 16 #include<stdlib.h> 17 #include<string.h> 18 //#include<stdbool.h> 19 #include<math.h> 20 #define min(a,b) ((a)<(b)?(a):(b)) 21 #define max(a,b) ((a)>(b)?(a):(b)) 22 #define abs(a) ((a)>0?(a):(-(a))) 23 #define lowbit(a) (a&(-a)) 24 #define sqr(a) ((a)*(a)) 25 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b)) 26 #define mem(a,b) memset(a,b,sizeof(a)) 27 #define eps (1e-10) 28 #define J 10000 29 #define mod 1000000007 30 #define MAX 0x7f7f7f7f 31 #define PI 3.14159265358979323 32 #define N 14 33 #define M 104 34 using namespace std; 35 typedef long long LL; 36 double anss; 37 LL aans; 38 int cas,cass; 39 int n,m,lll,ans; 40 struct xxx 41 { 42 int x,y; 43 }q[M]; 44 char s[N][N],a[N][N]; 45 char c[M]; 46 bool cmp(xxx aa,xxx bb) 47 { 48 if(aa.x!=bb.x)return aa.x<bb.x; 49 return aa.y<bb.y; 50 } 51 void print() 52 { 53 int i,j; 54 for(i=0;i<n;i++) 55 printf("%s",a[i]); 56 puts(""); 57 } 58 bool work() 59 { 60 int i,j,k; 61 for(k=1;k<4;k++) 62 { 63 for(i=1;i<=m;i++) 64 { 65 j=q[i].x; 66 q[i].x=q[i].y; 67 q[i].y=n-j-1; 68 } 69 sort(q+1,q+m+1,cmp); 70 for(i=1;i<=m;i++) 71 { 72 if(a[q[i].x][q[i].y])return 0; 73 a[q[i].x][q[i].y]=c[cas++]; 74 } 75 } 76 for(i=0;i<n;i++) 77 for(j=0;j<n;j++) 78 if(!a[i][j])return 0; 79 return 1; 80 } 81 int main() 82 { 83 #ifndef ONLINE_JUDGE 84 freopen("1.txt","r",stdin); 85 // freopen("2.txt","w",stdout); 86 #endif 87 int i,j,k; 88 int x,y,z; 89 // init(); 90 // for(scanf("%d",&cass);cass;cass--) 91 // for(scanf("%d",&cas),cass=1;cass<=cas;cass++) 92 // while(~scanf("%s",s)) 93 while(~scanf("%d",&n)) 94 { 95 mem(a,0);cas=0;m=0; 96 for(i=0;i<n;i++) 97 scanf("%s",s[i]); 98 scanf("%s",c); 99 if(n==1) 100 { 101 puts("invalid grille"); 102 continue; 103 } 104 for(i=0;i<n;i++) 105 for(j=0;j<n;j++) 106 if(s[i][j]==\'.\') 107 { 108 a[i][j]=c[cas++]; 109 q[++m].x=i,q[m].y=j; 110 } 111 if(!work())puts("invalid grille"); 112 else print(); 113 } 114 return 0; 115 } 116 /* 117 // 118 119 // 120 */
以上是关于模拟ECNA 2015 I What's on the Grille? (Codeforces GYM 100825)的主要内容,如果未能解决你的问题,请参考以下文章
On Windows, I got "Unable to delete directory". What's wrong?