首页 > 代码库 > Codeforces Round #281 (Div. 2) (A、B、C、D题)

Codeforces Round #281 (Div. 2) (A、B、C、D题)

昨天这场CF打的还挺爽的,不过就是没咋涨Rating,没把握好涨Rating的机会。。

本来可以过四题的,,但是很失败,重评后跪了两道。。唉:-(



A. Vasya and Football

思路:给每个人计数,黄牌+1,红牌+2。

当数字第一次超过2时输出。


题目链接:A. Vasya and Football


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。


题目链接:B. Vasya and Wrestling


AC代码:


#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

昨天做题的时候有点小混乱。。


题目链接:C. Vasya and Basketball


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

思路:貌似这题有点水。。


题目链接: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;
}




Codeforces Round #281 (Div. 2) (A、B、C、D题)