標籤:icpc acm codeforces iostream 解題報告
昨天這場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 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;}
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題)