1. 程式人生 > >2017 浙江省省賽 (A、B、C、D)

2017 浙江省省賽 (A、B、C、D)

簽到題

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define line cout<<"-----------------"<<endl;

typedef long long ll;
const int maxn = 1e5+10;
const int MAXN = 1e6+10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9+7;
const int N = 1010;

int n;

int main(){
    int T;
    cin >> T;
    while(T--){
        scanf("%d", &n);
        int a = 0, b = 0;
        int x;
        for(int i = 0; i < n; i++){
            scanf("%d", &x);
            if(x == 1) a++;
            else if(x == 2) b ++ ;
        }
        if(a > b) puts("Kobayashi");
        else if(a == b) puts("Draw");
        else puts("Tohru");
    }
    return 0;
}

模擬即可

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define line cout<<"-----------------"<<endl;

typedef long long ll;
const int maxn = 1e5+10;
const int MAXN = 1e6+10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9+7;
const int N = 110;

int T, n;
int a[N];

int main(){
    scanf("%d", &T);
    while(T--){
        clr(a);
        bool flag = true;
        scanf("%d", &n);
        int num1 = 0;
        int maxx = -1;
        for(int i = 1; i <= n; i++) {
            scanf("%d", &a[i]);
            if(a[i] > maxx) maxx = a[i];
            if(a[i] == 1) num1 ++;
            if(a[i] <= 0) flag = false;
        }
        sort(a+1, a+n+1);
        if(!flag || num1 < 2 || n > 13 || n < 10){
            printf("No\n");
            continue;
        }
        int cnt = 0;
        for(int i = 1; i <= n; i++){
            if(a[i] == maxx) {
                cnt ++ ;
            }
        }
        if(cnt != 1)  flag = false;
        else{
            for(int i = 2; i <= n; i++){
                if(abs(a[i] - a[i-1]) > 2 && a[i] != maxx && a[i-1] != maxx){
                    flag = false;
                    break;
                }
            }
        }
        if(!flag) printf("No\n");
        else printf("Yes\n");
    }
    return 0;
}

map + hash

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define clr(a) memset(a, 0, sizeof(a))
#define line cout<<"-----------"<<endl

typedef long long ll;
const int maxn = 1e5 + 10;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int N = 1010;

int T, n, m, q, c;
string s;
map<string, int> mp;
map<int, string> pm;

int main(){
    scanf("%d", &T);
    while(T--){
        mp.clear(); pm.clear();
        scanf("%d%d%d", &n, &q, &c);
        for(int i = 1; i <= c; i++){
            cin >> s;
            mp[s] = 0;
        }
        for(int i = 0; i < q; i++){
            scanf("%d", &m);
            for(int j = 0; j < m; j++){
                cin >> s;
                mp[s] += (1<<i);
            }
        }
        map<string, int>::iterator it;
        for(it = mp.begin(); it != mp.end(); it++){
            if(pm.find(it->second) == pm.end())
                pm[it->second] = it->first;
            else
                pm[it->second] = "Let's go to the library!!";
        }
        for(int i = 0; i < n; i++){
            int sum = 0, x;
            for(int j = 0; j < q; j++){
                scanf("%d", &x);
                sum += (1<<j) * x;
            }
            if(pm.find(sum) == pm.end())
                printf("Let's go to the library!!\n");
            else    printf("%s\n", pm[sum].c_str());
        }
    }
    return 0;
}

模擬即可

#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a, 0, sizeof(a))
#define line cout<<"-----------"<<endl

typedef long long ll;
const ll INF = 0x3f3f3f3f;
const ll N = 110;

ll T, n, m, x, y, num, ans;
struct node{
    ll l, r;
}a[N], b[N], f[N];

bool cmp(node a, node b){
    if(a.l != b.l) return a.l < b.l;
    else return a.r < b.r;
}

int main(){
    scanf("%lld", &T);
    while(T--){
        clr(a); clr(b); clr(f);
        ans = num = 0;
        scanf("%lld%lld%lld%lld", &n, &m, &x, &y);
        for(ll i = 0; i < x; i++)
            scanf("%lld%lld", &a[i].l, &a[i].r);
        sort(a, a + x, cmp);
        for(ll i = 0; i < y; i++)
            scanf("%lld%lld", &b[i].l, &b[i].r);
        sort(b, b + y, cmp);
        ll u = 0, v = 0;
        ll maxx, minn;
        while(x > u && y > v){
            maxx = max(a[u].l, b[v].l);
            minn = min(a[u].r, b[v].r);
            if(minn - maxx - m + 2 > 0)
                ans += (minn - maxx - m + 2);
            if(a[u].r <= b[v].r) u++;
            else v++;
        }
        printf("%lld\n", ans);
    }
    return 0;
}