根据上票状态判断是否投降。4票及以上赞同投降则投降成功。
- $1\leq i \leq 5$
- $1\leq j\leq i,S[j]\in\{Y,N\}$
计数模拟即可。
1
2
3
4
5
6
7
8
9
10
11
| void solve() {
string s;cin >> s;
int y = 0, n = 0;
for (auto c : s) {
if (c == 'Y')y++;
else if (c == 'N')n++;
}
if (y >= 4)cout << "1\n";
else if (n >= 2)cout << "-1\n";
else cout << "0\n";
}
|
使用std::pair
声明$n$个变量,进行对于这些变量的$q$个询问,回答其数据类型。
每行输入不超过5000字符
按.
分割询问的变量,逐层确定当前的数据类型。
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
| #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double ld;
const int maxn = 1e6 + 50;
map<string, string>mp;
void solve() {
int n, q;cin >> n >> q;
for (int i = 0;i < n;i++) {
string s1, s2;
cin >> s1 >> s2;
if (s2.back() == ';')s2.pop_back();
mp[s2] = s1;
}
while (q--) {
string s;cin >> s;
s = s + ".";
vector<string>stk;
int p = s.find(".");
int pr = 0;
while (p != -1) {
string t = s.substr(pr, p - pr);
stk.push_back(t);
s = s.substr(p + 1);
p = s.find(".");
}
string typ = mp[stk.front()];
for (int i = 1;i < stk.size();i++) {
string c = stk[i];
vector<int>v;
int pp; // 中点的','位置
int cnt1, cnt2;
cnt1 = cnt2 = 0;
for (int j = 0;j < typ.size();j++) {
if (typ[j] == '<') {
cnt1++;
}
else if (typ[j] == ',') {
cnt2++;
v.push_back(j);
}
else if (typ[j] == '>') {
cnt1--, cnt2--;
if (!cnt1 && !cnt2) {
pp = v.back();
break;
}
v.pop_back();
}
}
if (c == "first") {
typ = typ.substr(5, pp - 5);
}
else {
typ = typ.substr(pp + 1, typ.size() - pp - 2);
}
}
cout << typ << "\n";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t = 1;
// cin >> t;cin.get();
while (t--)
solve();
return 0;
}
|
在$\{1,…,n\}\times \{1,…,n\}$的坐标逐渐加入$n\times n$个数,如果即将加入的这个数与已有的形成了三点共线,则该数不能被成功加入,输出一个长度为$n\times n$的01
串,表示第$i$个点能否成功加入。