送气球.jpg
https://ac.nowcoder.com/acm/contest/318#question
題解:真正的簽到題。
由于通過一個題目只會給一個氣球,所以我們可以開一個二維數組vis[i][j]來記錄一下,第i 個隊是否通過了第j 個題目,vis[i][j] = 1表示已經通過,vis[i][j] = 0,則表示沒有。接著再用一個數組num統計一下每個隊伍通過的題目數量即可。由于是多組輸入,不要忘記初始化。
C++版本一
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int using namespace std; typedef long long ll; //typedef __int128 lll; const int N=10000; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,q; int a[N]; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endifscanf("%d",&t);int T=0;while(t--){scanf("%d%d",&n,&m);char c,str[5];map<char,int>s[N];memset(a,0,sizeof(a));for(int i=1;i<=m;i++){scanf("%d %c %s",&q,&c,str);if(!s[q][c]&&str[0]=='A'){a[q]++;s[q][c]++;}}printf("Case #%d:\n",++T);for(int i=1;i<=n;i++){if(i!=n)printf("%d ",a[i]);elseprintf("%d\n",a[i]);}}//cout << "Hello world!" << endl;return 0; }C++版本二
#include <bits/stdc++.h> using namespace std;int n, m, _; int num[55]; bool vis[55][15];int main() {int cas = 1;for (scanf("%d", &_); _; _--) {memset(num, 0, sizeof(num));memset(vis, 0, sizeof(vis));scanf("%d%d", &n, &m);int team_id;char problem_id[2], submit_status[5];while (m--) {scanf("%d%s%s", &team_id, problem_id, submit_status);if (strcmp(submit_status, "AC") == 0) {if (!vis[team_id][problem_id[0] - 'A']) {num[team_id]++;vis[team_id][problem_id[0] - 'A'] = 1;}}}printf("Case #%d:\n", cas++);for (int i = 1; i <= n; i++)printf("%d%c", num[i], i == n ? '\n' : ' ');}return 0; }?
總結