ARC 087

C

#include <bits/stdc++.h>
 
#define REP(i,n) for(int i=0; i<(int)(n); ++i)
#define FOR(i,k,n) for(int i=(k);i<(int)(n);++i)
typedef long long int ll;
using namespace std;
 
int main(void) {
    int N;
    map<int, int> m;
    cin >> N;
    REP(i, N) {
        int j;
        cin >> j;
        m[j]++;
    }
    int ans = 0;
    for(auto k : m) {
        if (k.second >= k.first) {
            ans += k.second - k.first;
        } else {
            ans += k.second;
        }
 
    } 
    cout << ans << endl;
}

Submission #1874632 - AtCoder Regular Contest 087

D

#include <bits/stdc++.h>
 
#define REP(i,n) for(int i=0; i<(int)(n); ++i)
#define FOR(i,k,n) for(int i=(k);i<(int)(n);++i)
typedef long long int ll;
using namespace std;
 
int dx3[16010];
int dy3[16010];
int *dx = dx3+8005;
int *dy = dy3+8005;
 
int dx4[16010];
int dy4[16010];
int *dx2 = dx4+8005;
int *dy2 = dy4+8005;
 
int main(void) {
    string s;
    cin >> s;
    int gx, gy;
    cin >> gx >> gy;
 
    bool isX = true;
    int t = 0;
    vector<int> X, Y;
    for(int i=0; i<s.size(); ++i) {
        if(s[i] == 'F') t++;
        if(s[i] == 'T' || i==s.size()-1) {
            if(isX) {
                X.push_back(t);
            } else {
                Y.push_back(t);
            }
            t = 0;
            isX = !isX;
        }
    }
    dx[X[0]] = 1;
    for(int i=1; i<X.size(); ++i) {
        int mx = X[i];
        if(i%2==1) {
            for(int j=-8000; j<=8000; ++j) {
                if(dx[j] == 1) {
                    dx2[j+mx] = 1;
                    dx2[j-mx] = 1;
                    dx[j] = 0;
                }
            }
        } else {
            for(int j=-8000; j<=8000; ++j) {
                if(dx2[j] == 1) {
                    dx[j+mx] = 1;
                    dx[j-mx] = 1;
                    dx2[j] = 0;
                }
            }
        }
    }
 
    if(Y.size() > 0) {
        dy[Y[0]] = 1;
        dy[-Y[0]] = 1;
    } else {
        dy2[0] = 1;
    }
    for(int i=1; i<Y.size(); ++i) {
        if(i%2==1) {
            for(int j=-8000; j<=8000; ++j) {
                if(dy[j] == 1) {
                    dy2[j+Y[i]] = 1;
                    dy2[j-Y[i]] = 1;
                    dy[j] = 0;
                }
            }
        } else {
            for(int j=-8000; j<=8000; ++j) {
                if(dy2[j] == 1) {
                    dy[j+Y[i]] = 1;
                    dy[j-Y[i]] = 1;
                    dy2[j] = 0;
                }
            }
        }
    }
 
    bool okX = false;
    if(X.size()%2 == 0) {
        if(dx2[gx] == 1) okX = true;
    } else {
        if(dx[gx] == 1) okX = true;
    }
    bool okY = false;
    if(Y.size()%2 == 0) {
        if(dy2[gy] == 1) okY = true;
    } else {
        if(dy[gy] == 1) okY = true;
    }
 
    if(okX && okY) cout << "Yes" << endl;
    else cout << "No" << endl;
}

Submission #1878861 - AtCoder Regular Contest 087