csu1164 Dominating

来源:互联网 发布:逆天pcb软件 编辑:程序博客网 时间:2024/06/07 15:08

这是昨天做的一道挺有意思的模拟题,模拟题最主要的细心,

这道题认真审题,有一个稍微小小的坑就是,如果杀的人大于等于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;}


0 0