UVALive - 6269 Digital Clock 模拟

 UVALive - 6269 Digital Clock

题意:时钟坏了,给你一段连续的时间,问你现在可能的时间是多少。

思路:直接模拟,他妈的居然这场就跪在了这题,卧槽,他妈的就在111行,居然多打了个 = ,这是什么意思,注孤生吗

 

 

  1 #pragma comment(linker, "/STACK:1000000000")
  2 #include <bits/stdc++.h>
  3 #define LL long long
  4 #define INF 0x3f3f3f3f
  5 #define IN freopen("d.in","r",stdin);
  6 #define OUT freopen("out.txt","w",stdout);
  7 using namespace std;
  8 #define MAXN 9999
  9 int w[6][10], y[6][10];
 10 bool first;
 11 struct Node{
 12     bool vis[9];
 13     Node(int x){
 14         memset(vis, 0, sizeof(vis));
 15         if(x != 1 && x != 4){
 16             vis[1] = true;
 17         }
 18         if(x != 1 && x != 2 && x != 3 && x != 7){
 19             vis[2] = true;
 20         }
 21         if(x != 5 && x != 6){
 22             vis[3] = true;
 23         }
 24         if(x != 0 && x != 1 && x != 7){
 25             vis[4] = true;
 26         }
 27         if(x == 0 || x == 2 || x == 6 || x == 8){
 28             vis[5] = true;
 29         }
 30         if(x != 2){
 31             vis[6] = true;
 32         }
 33         if(x != 1 && x != 4 && x != 7){
 34             vis[7] = true;
 35         }
 36     }
 37 };
 38 
 39 struct Moment{
 40     int hour, mi;
 41     int u[7];
 42     Moment(int i = 0){
 43         hour = i / 60;
 44         mi = i % 60;
 45         u[0] = hour / 10;
 46         u[1] = hour % 10;
 47         u[3] = mi / 10;
 48         u[4] = mi % 10;
 49     }
 50     void print(){
 51         if(first){
 52             printf("%d%d:%d%d", u[0], u[1], u[3], u[4]);
 53             first = false;
 54         }
 55         else{
 56             printf(" %d%d:%d%d", u[0], u[1], u[3], u[4]);
 57         }
 58     }
 59 };
 60 bool work(char *s, int x){
 61     Moment t = Moment(x);
 62     memset(w, 0, sizeof(w));
 63     for(int i = 0; i < 5; i++){
 64         if(i == 2) continue;
 65         Node p = Node(s[i] - '0');
 66         Node q = Node(t.u[i]);
 67         for(int j = 1; j <= 7; j++){
 68             if(!p.vis[j] && q.vis[j]){
 69                 w[i][j] = 1;
 70                 continue;
 71             }
 72             if(p.vis[j] && !q.vis[j]){
 73                 return false;
 74             }
 75             if(p.vis[j] && q.vis[j]){
 76                 w[i][j] = 2;
 77             }
 78         }
 79     }
 80     return true;
 81 }
 82 
 83 bool work_y(char *s, int x){
 84     Moment t = Moment(x);
 85     memset(y, 0, sizeof(y));
 86     for(int i = 0; i < 5; i++){
 87         if(i == 2) continue;
 88         Node p = Node(s[i] - '0');
 89         Node q = Node(t.u[i]);
 90         for(int j = 1; j <= 7; j++){
 91             if(!p.vis[j] && q.vis[j]){
 92                 y[i][j] = 1;
 93                 continue;
 94             }
 95             if(p.vis[j] && !q.vis[j]){
 96                 return false;
 97             }
 98             if(p.vis[j] && q.vis[j]){
 99                 y[i][j] = 2;
100             }
101         }
102     }
103     return true;
104 }
105 bool check(){
106     for(int i = 0; i < 5; i++){
107         if(i == 2) continue;
108         for(int j = 1; j <= 7; j++){
109             if(y[i][j] == 0) continue;
110             if(w[i][j] == 0 && y[i][j] != 0){
111                 w[i][j] = y[i][j];
112                 continue;
113             }
114             if(w[i][j] == 1 && y[i][j] == 2){
115                 return false;
116             }
117             if(w[i][j] == 2 && y[i][j] == 1){
118                 return false;
119             }
120         }
121     }
122     return true;
123 }
124 char s[55][10];
125 int main()
126 {
127    //IN;
128    //OUT;
129    int n;
130    int cas = 1;
131    while(~scanf("%d", &n)){
132         if(cas == 42){
133             int o = 1;
134             o = 1 + 2;
135         }
136         cas++;
137         for(int i = 1; i <= n; i++){
138             scanf("%s", s[i]);
139         }
140         Moment t;
141         first = true;
142         for(int i = 0; i < 1440; i++){
143             if( i == 443){
144                 int o;
145                 o =  1 + 2;
146             }
147             if(!work(s[1], i)) continue;
148             bool flag = false;
149             for(int j = 2; j <= n; j++){
150                 if(i + j - 1 == 480){
151                     int o;
152                     o = 1 + 2;
153                 }
154                 if(!work_y(s[j], (i + j - 1) % 1440)){
155                     flag = true;
156                     break;
157                 }
158                 if(check()) continue;
159                 flag = true;
160                 break;
161             }
162             if(flag) continue;
163             t = Moment(i);
164             t.print();
165         }
166         if(first){
167             printf("none\n");
168         }
169         else{
170             printf("\n");
171         }
172    }
173    return 0;
174 }

 

posted on 2015-08-23 16:41  张济  阅读(233)  评论(0编辑  收藏  举报

导航