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

A. Arya and Bran

水题

#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 n, k;
int a[105];

int main() {
    //FIN
    while(~scanf("%d%d", &n, &k)) {
        for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
        int cnt = 0;
        int i ;
        int flag = 0;
        for(i = 1; i <= n; i++) {
            cnt += a[i];
            if(cnt >= 8) cnt -= 8, k -= 8;
            else k -= cnt, cnt = 0;
            if(k <= 0) {
                flag = 1;
                break;
            }
        }
        if(flag) printf("%d\n", i);
        else puts("-1");


    }

    return 0;
}

  

B. Game of the Rows

要注意很多细节....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 n, k;
int a[105];
int b[10];

int main() {
    //FIN
    while(~scanf("%d%d", &n, &k)) {
        memset(b, 0, sizeof(b));
        for(int i = 1; i <= k; i++) {
            scanf("%d", &a[i]);
            int tmp = a[i];
            b[4] += tmp / 4;
            tmp %= 4;
            b[2] += tmp / 2;
            tmp %= 2;
            b[1] += tmp;
        }



        //4
        int k = b[4];
        while(k--) {
            n -= 1;
            if(b[2] >= 2) b[2] -= 2;
            else if(k > 0) k--;
            else if(b[2] == 1 && b[1] >= 1) b[2] -= 1, b[1] -= 1;
            else if(b[2] == 1 && b[1] == 0) b[2] -= 1;
            else if(b[1] >= 2) b[1] -= 2;
            else if(b[1] == 1) b[1] -= 1;
        }



        if(n < 0) {
            printf("NO\n");
            continue;
        }

        int for1 = n;
        int for1n2 = n * 3;

        //1and2

        if(b[1] > n) b[1] -= n, for1 -= n;
        else for1 -= b[1], b[1] = 0;

        b[2] -= (for1 / 2);

        int tmp = b[1] + b[2];
        if(tmp <= for1n2) printf("YES\n");
        else printf("NO\n");
    }

    return 0;
}

  

C. Journey

dfs途中保存路径长度

#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 = 200000 + 5;

int n;

vector<int> Vec[maxn];

double dfs(int st, int ed) {
    int flag = 0;
    double cnt = 0.0;
    double sum = 0.0;
    for(int i = 0; i < Vec[st].size(); i++) {
        if(Vec[st][i] == ed) continue;
        flag = 1;
        cnt += 1.0;
        sum += dfs(Vec[st][i], st);
    }
    if(flag) return 1.0 + sum / cnt;
    else return 0;
}

int main() {
    //FIN
    scanf("%d", &n);
    int st, ed;
    for(int i = 1; i < n; i++) {
        scanf("%d%d", &st, &ed);
        Vec[st].push_back(ed);
        Vec[ed].push_back(st);
    }
    printf("%.15lf\n", dfs(1, 0));
    return 0;
}

  

posted @ 2017-08-19 20:03  Hyouka  阅读(203)  评论(0编辑  收藏  举报