Codeforces Round #562 (Div. 2)

前天晚上没做 昨晚上回去补了两道题

Codeforces Round #562 (Div. 2)

Codeforces Round #562 (Div. 2)

A题:

有两条地铁线路 一条正向1, 2, 3, ..., n 另一条逆向n, n-1, n-2, ..., 1 有两个人分别沿正向和逆向出发 给出总站数 还有两人的起点和终点 问两人是否能相遇

模拟+简单数学题啦

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 typedef unsigned long long ull;
 5 
 6 namespace io {
 7     const int SIZE = 1e7 + 10;
 8     char inbuff[SIZE];
 9     char *l, *r;
10     inline void init() {
11         l = inbuff;
12         r = inbuff + fread(inbuff, 1, SIZE, stdin);
13     }
14     inline char gc() {
15         if (l == r) init();
16         return (l != r) ? *(l++) : EOF;
17     }
18     void read(int &x) {
19         x = 0; char ch = gc();
20         while(!isdigit(ch)) ch = gc();
21         while(isdigit(ch)) x = x * 10 + ch - '0', ch = gc();
22     }
23 } using io::read;
24 
25 int main(){
26     int n, a, x, b, y;
27     cin>>n>>a>>x>>b>>y;
28     bool flag = false;
29     for (int i = 0;; i++){
30         if (a == b) flag = true;
31         a++;
32         b--;
33         if (a == n + 1) a = 1;
34         if (b == 0) b = n;
35         if (a == x || b == y) break;
36     }
37     if (a == b) flag = true;
38     if (flag) cout<<"YES"<<endl;
39     else cout<<"NO"<<endl;
40     return 0;
41 }

 

Codeforces Round #562 (Div. 2)

 

 Codeforces Round #562 (Div. 2)

B题 给出m对在1~n之间的数 现在问 是否能找出两个不相等的数x y 使得每一对数至少有一个数等于x或y

假设一对数(a, b)中至少有一个数为x或y 下一对(c, d)中 若(c, d) != (a, b) 则(c, d)中也至少存在一个数为x或y 即(x, y)为(a, c) || (a, d) || (b, c) || (b, d) 就只需要判断这m对数是否满足这个条件就行啦 若(c, d) == (a, b) 那(a, b)中就一个数为x 另一个数为y

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 typedef unsigned long long ull;
 5 
 6 namespace io {
 7     const int SIZE = 1e7 + 10;
 8     char inbuff[SIZE];
 9     char *l, *r;
10     inline void init() {
11         l = inbuff;
12         r = inbuff + fread(inbuff, 1, SIZE, stdin);
13     }
14     inline char gc() {
15         if (l == r) init();
16         return (l != r) ? *(l++) : EOF;
17     }
18     void read(int &x) {
19         x = 0; char ch = gc();
20         while(!isdigit(ch)) ch = gc();
21         while(isdigit(ch)) x = x * 10 + ch - '0', ch = gc();
22     }
23 } using io::read;
24 
25 pair<int, int> p[300005];
26 int n, m;
27 
28 bool judge(int a, int b){
29     for (int i = 0; i < m; i++)
30         if (p[i].first != a && p[i].first != b &&
31             p[i].second != a && p[i].second != b)
32             return false;
33     return true;
34 }
35 
36 int main(){
37     cin>>n>>m;
38     int a, b;
39     int c = 0, d = 0;
40     bool flag = false;
41     cin>>p[0].first>>p[0].second;
42     a = p[0].first;
43     b = p[0].second;
44     for (int i = 1; i < m; i++){
45         cin>>p[i].first>>p[i].second;
46         if (p[i].first != a && p[i].first != b &&
47             p[i].second != a && p[i].second != b){
48             c = p[i].first;
49             d = p[i].second;
50         }
51     }
52     if (judge(a, b) || judge(a, c) || judge(a, d) || judge(b, c) || judge(b, d))
53         flag = true;
54     if (flag) cout<<"YES"<<endl;
55     else cout<<"NO"<<endl;
56     return 0;
57 }

 

上一篇:Codeforces Round #562 (Div. 2)


下一篇:Codeforces Round #562 (Div. 2) B题 Pairs