這是昨天做的一道挺有意思的模擬題,模擬題最主要的細心,
這道題認真審題,有一個稍微小小的坑就是,如果殺的人大於等於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;
}