19.5.17 CF #562 (Div. 2) 解题报告 (2 / 5)

A. Circle Metro

  • 直接模拟即可
  • ac代码
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
/*************************************************************************
> File Name: a.cpp
> Author: Wqr_
> Mail: xueduanwei@126.com
> Created Time: 2019年05月26日 星期日 23时06分30秒
************************************************************************/

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>
#include<map>
#include<queue>
#include<cmath>
using namespace std;
typedef long long ll;
int n, a, x, b, y;
int main(){
cin >> n >> a >> x >> b >> y;
int cura = a;
int curb = b;
bool flag = 0;
for(;;){
if(cura == curb){
flag = 1;
}
if(cura == x || curb == y) break;
cura++;
if(cura > n) cura = 1;
curb--;
if(curb < 1) curb = n;
}
if(flag) cout << "YES" << endl;
else cout << "NO" << endl;
return 0;
}

B. Pairs

  • 其实挺好写的, 可惜当时没想出来
  • 记录第一个出现的两个数(记为ta tb), 然后记录和ta tb都不相同的pair的两个数(记为tc td). 然后暴力扫6遍即可
  • ac代码
    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
    /*************************************************************************
    > File Name: b_2.cpp
    > Author: Wqr_
    > Mail: xueduanwei@126.com
    > Created Time: 2019年05月27日 星期一 00时09分21秒
    ************************************************************************/

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<map>
    #include<queue>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> P;
    P ps[300030];
    int n, m;
    bool check(int a, int b){
    bool tore = 1;
    for(int i = 0; i < m; i++){
    if(ps[i].first != a && ps[i].first != b && ps[i].second != a && ps[i].second != b){
    tore = 0;
    break;
    }
    }
    return tore;
    }
    int main(){
    cin >> n >> m;
    int a, b;
    int ta, tb, tc = -1, td = -1;
    for(int i = 0; i < m; i++){
    scanf("%d %d", &a, &b);
    ps[i].first = a;
    ps[i].second = b;
    if(i == 0){
    ta = a;
    tb = b;
    }
    if(a != ta && a != tb && b != ta && b != tb) {
    tc = a;
    td = b;
    }
    }
    bool ans = 0;
    //printf("%d-%d-%d-%d\n", ta, tb, tc, td);
    if(check(ta, tc)) ans = 1;
    if(check(ta, td)) ans = 1;
    if(check(tb, tc)) ans = 1;
    if(check(tb, td)) ans = 1;
    if(check(ta, tb)) ans = 1;
    if(check(tc, td)) ans = 1;
    if(ans) cout << "YES" << endl;
    else cout << "NO" << endl;
    return 0;
    }