Background:
Hearing Szt && BS' English is poor last night.
So I try writting this in English this time. /xyx
Examination process:
7:30 hand out test questions
7:45 Finish T1
8:20 Finish T2
8:30 ~ 9:00 Begin to do T3
9:30 Be sure I can't finish T3
9:00 ~ 11:00 Play very happily /cy
Dream: pts:100 + 100 + 0 = 200
True: pts: 100 + 40 + 0 = 40
ahh Why My T2 Hang up ??
T1 buy book
solution
Easy problem!!
Simulated topic meaning.
Only notice: When you encounter 20, first consider using 10.
Time: (O(n))
code
#include<bits/stdc++.h>
using namespace std;
int read() {
int x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
}
int n, cnt[5];
int main() {
//freopen("book.in", "r", stdin);
//freopen("book.out", "w", stdout);
n = read();
for (int i = 1; i <= n; i++) {
int x = read();
if(i == 1 && x > 5) {puts("NO"); return 0;}
if(x == 5) cnt[1]++;
else if(x == 10) {
if(!cnt[1]) {puts("NO"); return 0;}
cnt[1]--, cnt[2]++;
}
else if(x == 20) {
if(!cnt[1]) {puts("NO"); return 0;}
cnt[1]--;
if(cnt[2]) cnt[2]--, cnt[3]++;
else {
if(cnt[1] < 2) {puts("NO"); return 0;}
cnt[1] -= 2, cnt[3]++;
}
}
}
puts("YES");
return 0;
}
T2 program
solution
Using a stack to do this from tail to head.
This problem will become very easy !!
I didn't take care of the details, So I hang up 60pts
Time: (O(n))
code
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
int read() {
int x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
}
int n, m, st[MAXN], a[MAXN], tp, pos[MAXN];
int main() {
//freopen("program.in", "r", stdin);
//freopen("program.out", "w", stdout);
n = read();
for (int i = 1; i <= n; i++) a[i] = read();
m = read();
for (int i = 1, x; i <= m; i++) {
x = read();
if(a[x] > 0) a[x] = -a[x];
}
st[++tp] = a[n], pos[tp] = n;
for (int i = n - 1; i >= 1; i--) {
if(a[i] < 0) st[++tp] = a[i], pos[tp] = i;
else {
if(abs(st[tp]) == a[i]) {
if(a[pos[tp]] > 0) a[pos[tp]] = -a[pos[tp]];
tp--;
}
else st[++tp] = a[i], pos[tp] = i;
}
}
if(tp) puts("NO");
else {
for (int i = 1; i <= n; i++) {
if(a[i] > 0) printf("+%d ", a[i]);
else printf("%d ", a[i]);
}
}
return 0;
}
T3 maze
Bracket match on figure
code
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 110;
const int MAXM = 50010;
int read() {
int x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
}
int n, m, T;
struct node{int u, v, w;};
queue<node> q;
bool f[110][110][21];
void Init() {
for (int i = 1, u, v, w; i <= m; i++) {
u = read(), v = read(), w = read();
if(!w) {
f[u][v][w] = f[v][u][w] = true;
q.push((node){u, v, w}), q.push((node){v, u, w});
}
else if (w < 0) {
w = -w;
f[u][v][w] = f[v][u][w] = true;
}
else {
w += 10;
f[u][v][w] = f[v][u][w] = true;
q.push((node){u, v, w}), q.push((node){v, u, w});
}
}
}
void Update() {
while(!q.empty()) {
int u = q.front().u, v = q.front().v, w = q.front().w;
q.pop();
if(!w) {
for (int i = 1; i <= n; i++) {
if (f[i][u][0] && !f[i][v][0]) {
f[i][v][0] = 1;
q.push((node){i, v, 0});
}
if(f[v][i][0] && !f[u][i][0]) {
f[u][i][0] = 1;
q.push((node){u, i, 0});
}
for (int j = 11; j <= 20; j++) {
if (f[i][u][j] && !f[i][v][j]) {
f[i][v][j] = 1;
q.push((node){i, v, j});
}
}
}
}
else {
for (int i = 1; i <= n; i++) {
if(f[v][i][w - 10] && !f[u][i][0]) {
f[u][i][0] = 1;
q.push((node){u, i, 0});
}
}
}
}
}
int main() {
n = read(), m = read();
for (int i = 1; i <= n; i++) f[i][i][0] = 1;
Init();
Update();
T = read();
for (int i = 1, u, v; i <= T; i++){
u = read(), v = read();
puts(f[u][v][0] ? "YES" : "NO");
}
return 0;
}