1. 程式人生 > >Codeforces Round #423 (Div. 2) A-C

Codeforces Round #423 (Div. 2) A-C

include 組成 tro return for can sta har min

A. Restaurant Tables

這裏看錯題意還wa了兩發....

按題意模擬就行了 水題

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <iomanip>
#include <math.h>
#include <map>
using namespace std;
#define FIN     freopen("input.txt","r",stdin);
#define FOUT    freopen("output.txt","w",stdout);
#define INF     0x3f3f3f3f
#define INFLL   0x3f3f3f3f3f3f3f
#define lson    l,m,rt<<1
#define rson    m+1,r,rt<<1|1
typedef long long LL;
typedef pair<int, int> PII;
using namespace std;

int main() {
    //FIN
    int n, a, b;
    scanf("%d%d%d", &n, &a, &b);
    int ans = 0;
    int flag = 0;
    for(int i = 1; i <= n; i++) {
        int x;
        scanf("%d", &x);
        if(x == 1) {
            if(a >= 1) a--;
            else if(b >= 1){
                b--;
                flag++;
            }
            else if(flag >= 1) {
                flag--;
            }
            else ans++;
        }
        else {
            if(b >= 1) b--;
            else ans += 2;

        }
    }
    printf("%d\n", ans);
    return 0;
}

  

B. Black Square

問補全一個B組成的正方形至少還要多少個B

直接記錄四個角的值然後就差不多了

一個B都沒有的話直接輸出1就行

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <iomanip>
#include <math.h>
#include <map>
using namespace std;
#define FIN     freopen("input.txt","r",stdin);
#define FOUT    freopen("output.txt","w",stdout);
#define INF     0x3f3f3f3f
#define INFLL   0x3f3f3f3f3f3f3f
#define lson    l,m,rt<<1
#define rson    m+1,r,rt<<1|1
typedef long long LL;
typedef pair<int, int> PII;
using namespace std;

char mp[105][105];

int main() {
    //FIN
    int n, m;
    while(~scanf("%d%d", &n, &m)) {
         for(int i = 0; i < n; i++) scanf("%s", mp[i]);
         //for(int i = 0; i < n; i++) cout << mp[i] << endl;
         int minx = 105, miny = 105, maxx = -1, maxy = -1;
         int cnt = 0;
         for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                if(mp[i][j] == ‘B‘) {
                    cnt++;
                    minx = min(minx, j);
                    miny = min(miny, i);
                    maxy = max(maxy, i);
                    maxx = max(maxx, j);
                }
            }
         }
         if(cnt == 0) {
            printf("1\n");
            continue;
         }

         int c = maxx - minx + 1;
         int k = maxy - miny + 1;
         int mx = max(c, k);
         int ans = mx * mx - cnt;
         if(mx > n || mx > m) {
            printf("-1\n");
            continue;
         }
         else {
            printf("%d\n", ans);
         }

    }

    return 0;
}

  

C. String Reconstruction

題意:告訴你一些字符串在原字符串中出現的位置 然你輸出原字符串 沒告訴你的地方就輸出a

直接模擬 但是要註意剪枝 訪問過的久不用再訪問了

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <iomanip>
#include <math.h>
#include <map>
using namespace std;
#define FIN     freopen("input.txt","r",stdin);
#define FOUT    freopen("output.txt","w",stdout);
#define INF     0x3f3f3f3f
#define INFLL   0x3f3f3f3f3f3f3f
#define lson    l,m,rt<<1
#define rson    m+1,r,rt<<1|1
typedef long long LL;
typedef pair<int, int> PII;
using namespace std;

const int maxn = 2000006;

char s[maxn];
char op[maxn];

int main() {
    //FIN
    int n;
    scanf("%d", &n);
    memset(s, ‘a‘, sizeof(s));
    int mxpos = 0;
    for(int i = 1; i <= n; i++) {
        scanf("%s", op);
        int k;
        int tmp = -INF;
        int len = strlen(op);
        scanf("%d", &k);
        for(int j = 1; j <= k; j++) {
            int pos;
            scanf("%d", &pos);
            mxpos = max(mxpos, pos + len);
            for(int z = max(tmp, pos); z < pos + len; z++) {
                s[z] = op[z - pos];
            }
            tmp = pos + len;
        }
    }
    for(int i = 1; i <= mxpos - 1; i++) printf("%c", s[i]);
    printf("\n");



    return 0;
}

  

Codeforces Round #423 (Div. 2) A-C