模拟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 */
View Code

 

以上是关于模拟ECNA 2015 I What's on the Grille? (Codeforces GYM 100825)的主要内容,如果未能解决你的问题,请参考以下文章

ECNA 2014 部分题解 | 训练记录0703

ECNA 2014 部分题解 | 训练记录0703

what&#39;s new in vc2015

What's friendship?

On Windows, I got "Unable to delete directory". What's wrong?

宽搜ECNA 2015 D Rings (Codeforces GYM 100825)