csu1164 Dominating

這是昨天做的一道挺有意思的模擬題,模擬題最主要的細心,

這道題認真審題,有一個稍微小小的坑就是,如果殺的人大於等於10的話,金錢數總是加1000;

代碼如下:

#include <algorithm>
#include<cmath>
#include<map>
#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;
map<string, int> cnt;
char s[10][20];
struct zhuan
{
    int k;  //記錄殺人次數
    int bk; //記錄被殺次數
};
int c[10] = {200, 275, 325, 400, 475, 575, 675, 800, 900, 1000};
int main()
{
    while((scanf("%s", s[0]))!=EOF)
    {
        zhuan b[10];
        int z[10];  //每個人的金錢數
        for(int i=0; i<10; i++)  //初始化
        {
            b[i].bk = 0;
            b[i].k = 0;
            z[i] = 4726;
        }
        cnt[s[0]] = 0;
        for(int i=1; i<10; i++)
        {
            scanf("%s", s[i]);
            cnt[s[i]] = i;
        }
        int n;
        scanf("%d", &n);
        char a[20], e[20];
        for(int i=0; i<n; i++)
        {
            scanf("%s%s", a, e);
            if(strcmp(a, e)!=0)   //非自殺
            {
                if((cnt[a]<5&&cnt[e]<5)||(cnt[a]>=5&&cnt[e]>=5))  //殺的是隊友
                {
                    if(z[cnt[e]]-c[b[cnt[e]].bk]>0)  //被殺的金錢還夠減
                    {
                        z[cnt[e]] -= c[b[cnt[e]].bk];
                    }
                    else  
                        z[cnt[e]] = 0;
                    b[cnt[e]].k = 0;
                    b[cnt[e]].bk++;
                }
                else   //殺的不是隊友
                {
                    if(z[cnt[e]]-c[b[cnt[e]].bk]>0)
                    {
                        if(b[cnt[a]].k>=9)   //殺的人>=10
                            z[cnt[a]] += c[9];
                        else
                            z[cnt[a]] += c[b[cnt[a]].k];
                        b[cnt[a]].k++;
                        z[cnt[e]] -= c[b[cnt[e]].bk];
                        b[cnt[e]].k = 0;
                        b[cnt[e]].bk++;
                    }
                    else
                    {
                        if(b[cnt[a]].k>=9)
                            z[cnt[a]] += c[9];
                        else
                            z[cnt[a]] += c[b[cnt[a]].k];
                        z[cnt[e]] = 0;
                        b[cnt[a]].k++;
                        b[cnt[e]].bk++;
                        b[cnt[e]].k = 0;
                    }
                }
            }
        }
        for(int i=0; i<10; i++)
        {
            printf("%d\n", z[i]);
        }
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章