Home >Web Front-end >HTML Tutorial >Codeforces Round #281 (Div. 2) (A、B、C、D题)_html/css_WEB-ITnose
Yesterday’s CF match was quite enjoyable, but the rating just didn’t increase and I didn’t seize the opportunity to increase the rating. .
I could have passed four questions, but failed. After re-evaluation, I knelt down on two questions. . Alas:-(
A. Vasya and Football
Idea: count 1 for yellow cards and 2 for red cards.
Output when the number exceeds 2 for the first time. >
Question link: A. Vasya and Football
AC code:
#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
Idea: First use sum to determine whether the score is 0, sum>0 => first, sum< ;0 => second,
sum=0, then determine the dictionary order, if it is the same again, determine the last action. >Note that sum needs to be long. >
AC code:
C. Vasya and Basketball
#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;}
Question link: C. Vasya and Basketball
D. Vasya and Chess
Thinking: It seems like this question is a bit confusing. Question link: D. Vasya and Chess
AC code:
#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 0xfffffffpair<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;}