首页 > 代码库 > 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
#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
思路:貌似这题有点水。。
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题)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。