昨天这场CF打的还挺爽的,不过就是没咋涨Rating,没把握好涨Rating的机会。。
本来可以过四题的,,但是很失败,重评后跪了两道。。唉:-(
A. Vasya and Football
思路:给每个人计数,黄牌+1,红牌+2。
当数字第一次超过2时输出。
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
struct node
{
char name[25];
int a[105];
}home, away;
int main()
{
for(int i=0; i<105; i++)
{
home.a[i] = 0;
away.a[i] = 0;
}
scanf("%s %s", home.name, away.name);
int n;
scanf("%d", &n);
while(n--)
{
int t, e;
char ch1[3], ch2[3];
scanf("%d %s %d %s", &t, ch1, &e, ch2);
if(ch1[0]=='h')
{
if(ch2[0]=='y')
{
home.a[e]++;
if(home.a[e]==2)printf("%s %d %d\n", home.name, e, t);
}
else if(ch2[0]=='r')
{
home.a[e]+=2;
if(home.a[e]==2||home.a[e]==3)printf("%s %d %d\n", home.name, e, t);
}
}
else
{
if(ch2[0]=='y')
{
away.a[e]++;
if(away.a[e]==2)printf("%s %d %d\n", away.name, e, t);
}
else if(ch2[0]=='r')
{
away.a[e]+=2;
if(away.a[e]==2||away.a[e]==3 ) printf("%s %d %d\n", away.name, e, t);
}
}
}
return 0;
}
B. Vasya and Wrestling
思路:先用sum是否为0判断分高的,sum>0 => first, sum<0 => second,
sum=0则相同,再判断字典序,如果再相同则判断最后一次动作。
注意sum需要long long。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
int judge(int a[], int b[], int na, int nb)
{
int i, j;
for(i=0, j=0; i<na, j<nb; i++, j++)
{
if(a[i]>b[i])return 1;
else if(a[i]<b[i])return 0;
}
if(i==na&&j!=nb)return 0;
else if(j==nb&&i!=na)return 1;
else if(i==na&&j==nb)return 2;
}
int main()
{
long long sum=0;
int n, a[200005], b[200005], na=0, nb=0;
scanf("%d", &n);
int t;
for(int i=0; i<n; i++)
{
scanf("%d", &t);
if(t>0)a[na++] = t;
else if(t<0)b[nb++] = -t;
sum+=t;
}
if(sum>0)printf("first\n");
else if(sum<0)printf("second\n");
else if(judge(a,b,na,nb)==1)printf("first\n");
else if(judge(a,b,na,nb)==0)printf("second\n");
else if(judge(a,b,na,nb)==2&&t>0)printf("first\n");
else if(judge(a,b,na,nb)==2&&t<0)printf("second\n");
return 0;
}
C. Vasya and Basketball
思路:给所有球排序,先把全部都赋值为3,然后依次减为2,再判断其中间过程的MAX
昨天做题的时候有点小混乱。。
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
#define LL long long
#define INF 0xfffffff
pair<int,bool> p[400010];
int main()
{
int n, m;
scanf("%d", &n);
for(int i=0; i<n; i++)
{
scanf("%d", &p[i].first);
p[i].second=1;
}
scanf("%d", &m);
for(int i=n; i<n+m; i++)
{
scanf("%d", &p[i].first);
p[i].second=0;
}
sort(p, p+n+m);
p[n+m].first=-1;
int as=n*3, bs=m*3, ansa, ansb;
int MAX = -0xfffffff;
for(int i=0; i<=n+m; i++)
{
if(i==0||p[i].first!=p[i-1].first)
{
if(as-bs>MAX)
{
MAX=as-bs;
ansa=as;
ansb=bs;
}
}
if(p[i].second==1) as--;
else bs--;
}
printf("%d:%d\n", ansa, ansb);
return 0;
}
D. Vasya and Chess
思路:貌似这题有点水。。
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <cmath>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
if(n%2==1)
printf("black\n");
else if(n%2==0)
{
printf("white\n1 2\n");
}
return 0;
}