-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathT3 小H的时间.cpp
165 lines (161 loc) · 4.14 KB
/
T3 小H的时间.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
//问题描述
//小H有两块用于显示时间的LCD显示器,第一个显示器显示的时间为当前时间,而第二个显示器显示的时间比当前时间晚15分钟。
//两个显示器都只能显示4个整数,每个整数占用3 * 3的字符矩阵,
//包含’ | ’, ’_’和空格三种字符,当显示器正常工作时,0-9的显示如下方所示
// _ _ _ _ _ _ _ _
//| | | _| _||_||_ |_ ||_||_|
//|_| ||_ _| | _||_| ||_| _|
//所以如果当前时间为9:30,则第一块显示器会显示0930,第二块显示器会显示0915。
//现在小H不小心损坏了两块显示器,显示器中的某些位置的字符无法正常显示了(注:无法显示的地方会变成空格),
//而他迫切的想要知道当前时间,你能帮帮他吗?
//
//输入格式
//第一行一个整数t,表示测试数据组数
//对于每个测试数据,包含3行,依次表示第一个显示器显示的时间和第二个显示器显示的时间,两者之间用空白列隔开
//
//输出格式
//对于每一组测试数据,如果有唯一确定的时间则输出当前时间,否则输出"Not Sure"
//
//样例输入
//2
//_ _ _ _ _
//| _ _ || _ ||
//| _ | _ | | _ | _ |
//_ _ _ _ _ _
//|| _ _ || _| ||
//| _ | _ | || |_ |
//
//样例输出
//Not Sure
//0825
#include<bits/stdc++.h>
using namespace std;
vector<int> a[8];
string s[3] = { " _ _ _ _ _ _ _ _ ","| | | _| _||_||_ |_ ||_||_|","|_| ||_ _| | _||_| ||_| _|" };
bool check(int x1, int x2, string my[3]) {
if (x2 <= 3) {
for (int i = 0; i < 3; i++) {
for (int j = 3 * x1, k = 3 * x2; j < 3 * (x1 + 1); j++, k++) {
if (s[i][j] != my[i][k] && my[i][k] != ' ') {
return 0;
}
}
}
return 1;
}
else {
for (int i = 0; i < 3; i++) {
for (int j = 3 * x1, k = 3 * x2 + 1; j < 3 * (x1 + 1); j++, k++) {
if (s[i][j] != my[i][k] && my[i][k] != ' ') {
return 0;
}
}
}
return 1;
}
}
int main()
{
int t;
cin >> t;
string my[3];
getchar();
for (int i = 0; i < t; i++) {
for (int j = 0; j < 3; j++) {
getline(cin, my[j]);
}
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 10; j++) {
if (check(j, i, my)) {
if (i == 0 || i == 4) {
if (j <= 2) {
a[i].push_back(j);
}
continue;
}
else if (i == 2 || i == 6) {
if (j <= 6) {
a[i].push_back(j);
}
continue;
}
a[i].push_back(j);
}
}
}
vector<int> t1;
vector<int> t2;
int cnt = 0;
int ans;
for (int i1 = 0; i1 < a[0].size(); i1++) {
for (int i2 = 0; i2 < a[1].size(); i2++) {
for (int i3 = 0; i3 < a[2].size(); i3++) {
for (int i4 = 0; i4 < a[3].size(); i4++) {
int temp1 = a[0][i1] * 10 + a[1][i2];
int temp2 = a[2][i3] * 10 + a[3][i4];
if (temp1 <= 24 && temp2 <= 59) {
t1.push_back(100 * temp1 + temp2);
}
}
}
}
}
for (int i1 = 0; i1 < a[4].size(); i1++) {
for (int i2 = 0; i2 < a[5].size(); i2++) {
for (int i3 = 0; i3 < a[6].size(); i3++) {
for (int i4 = 0; i4 < a[7].size(); i4++) {
int temp1 = a[4][i1] * 10 + a[5][i2];
int temp2 = a[6][i3] * 10 + a[7][i4];
if (temp1 <= 24 && temp2 <= 59) {
t2.push_back(100 * temp1 + temp2);
}
}
}
}
}
bool p = 1;
for (int i = 0; i < t1.size() && p; i++) {
for (int j = 0; j < t2.size() && p; j++) {
if (t2[j] / 100 == t1[i] / 100 && t2[j] + 15 == t1[i]) {
cnt++;
ans = t1[i];
}
else if (t2[j] / 100 + 1 == t1[i] / 100 && t2[j] + 55 == t1[i]) {
cnt++;
ans = t1[i];
}
else if (t2[j] >= 2345 && t1[i] == t2[j] - 2345) {
cnt++;
ans = t1[i];
}
if (cnt > 1) {
p = 0;
cout << "Not Sure" << endl;
}
}
}
if (cnt == 1) {
if (ans < 1000 && ans >= 100) {
cout << '0' << ans << endl;
}
else if (ans < 100 && ans >= 10) {
cout << "00" << ans << endl;
}
else if (ans < 10) {
cout << "000" << ans << endl;
}
else {
cout << ans << endl;
}
}
if (cnt == 0) {
cout << "Not Sure" << endl;
}
t1.clear();
t2.clear();
for (int i = 0; i < 8; i++) {
a[i].clear();
}
}
return 0;
}