#include<iostream>#include<unordered_map>#include<queue>usingnamespace std;constint N =25;int n, m, k, Q;
queue<int> q[N];int sum[N];
unordered_map<int,int> ma;intmain(){scanf("%d%d%d%d",&n,&m,&k,&Q);for(int i =1, s; i <= k &&scanf("%d",&s); i ++){int t =0;for(int j =0; j < n; j ++){if(i <= n * m){if(q[t].size()> q[j].size()) t = j;}else{if(q[t].front()> q[j].front()) t = j;}}sum[t]+= s;if(i > n * m) q[t].pop();q[t].push(sum[t]);if(sum[t]- s <540) ma[i]= sum[t];}int id;while(Q --){scanf("%d",&id);if(ma.count(id))printf("%02d:%02d\n", ma[id]/60+8, ma[id]%60);elseprintf("Sorry\n");}}
#include<iostream>usingnamespace std;constint N =1e5+10;int a[N], c[N];intmain(){int n;cin >> n;for(int i =0; i < n; i ++){cin >> a[i];c[a[i]]++;}for(int i =0; i < n; i ++)if(c[a[i]]==1){cout << a[i];return0;}puts("None");return0;}
#include<iostream>#include<cstring>usingnamespace std;constint N =60;int p[N], q[N], w[N];voidprint(int x){if(x <=13) cout <<'S'<< x;elseif(x <=26) cout <<'H'<< x -13;elseif(x <=39) cout <<'C'<< x -26;elseif(x <=52) cout <<'D'<< x -39;else cout <<'J'<< x -52;}intmain(){int k;cin >> k;for(int i =1; i <=54; i ++) cin >> q[i];for(int i =1; i <=54; i ++) p[i]= i;while(k --){memcpy(w, p,sizeof p);for(int i =1; i <=54; i ++) p[q[i]]= w[i];}for(int i =1; i <=54; i ++){print(p[i]);if(i !=54) cout <<' ';}}
1047 Student List for Course (25 分)
題意 :
給出每個學(xué)生對應(yīng)參加的所有課程,求輸出每門課程分別有哪些學(xué)生參與
思路 :
由于說了課程號是1-k,因此直接用裝string的vector即可,不需要map
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;#definepbpush_backconstint N =2510;int n, k;
vector<string> lesson[N];intmain(){scanf("%d%d",&n,&k);char str[5];int cnt, l;while(n --){scanf("%s %d", str,&cnt);while(cnt --){scanf("%d",&l);lesson[l].pb(str);}}for(int i =1; i <= k; i ++){printf("%d %d\n", i, lesson[i].size());sort(lesson[i].begin(), lesson[i].end());for(auto& l : lesson[i])printf("%s\n", l.c_str());}}
1054 The Dominant Color (20 分)
題意 :找到n * m的矩陣中出現(xiàn)次數(shù)超過n * m / 2的并輸出,直接模擬即可。
#include<iostream>#include<unordered_map>usingnamespace std;intmain(){int n, m;cin >> m >> n;unordered_map<int,int> cnt;for(int i =0; i < n; i ++)for(int j =0; j < m; j ++){int x;cin >> x;if(++ cnt[x]> n * m /2){cout << x;break;}}return0;}
#include<iostream>#include<vector>usingnamespace std;constint N =1010;int n, m;int w[N], Rank[N];intmain(){scanf("%d%d",&n,&m);for(int i =0; i < n &&scanf("%d",&w[i]); i ++);vector<int>cur(n);for(int i =0; i < n &&scanf("%d",&cur[i]); i ++);while(cur.size()>1){vector<int> next;int remain =((int)cur.size()+ m -1)/ m;for(int i =0; i < cur.size();){int j =min((int)cur.size()-1, i + m -1);int t =-1;for(int k = i; k <= j; k ++)if(t ==-1|| w[cur[t]]< w[cur[k]])t = k;next.push_back(cur[t]);for(int k = i; k <= j; k ++)if(k != t)Rank[cur[k]]= remain +1;i = j +1;}cur = next;}Rank[cur[0]]=1;for(int i =0; i < n; i ++) cout << Rank[i]<<" \n"[i == n -1];}
#include<iostream>usingnamespace std;typedeflonglong LL;boolcheck(LL a, LL b, LL c){LL d = a + b;if(a >=0&& b >=0&& d <0)returntrue;if(a <0&& b <0&& d >=0)returnfalse;return a + b > c;}intmain(){int n;cin >> n;for(int i =1; i <= n; i ++){LL a, b, c;scanf("%lld%lld%lld",&a,&b,&c);if(check(a, b, c))printf("Case #%d: true\n", i);elseprintf("Case #%d: false\n", i);}return0;}
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;vector<int>get(int n){int nums[4];for(int i =0; i <4; i ++){nums[i]= n %10;n /=10;}sort(nums, nums +4);int a =0;for(int i =0; i <4; i ++) a = a *10+ nums[i];reverse(nums, nums +4);int b =0;for(int i =0; i <4; i ++) b = b *10+ nums[i];return{b, a};}intmain(){int n;cin >> n;do{auto t =get(n);printf("%04d - %04d = %04d\n", t[0], t[1], t[0]- t[1]);n = t[0]- t[1];}while(n && n !=6174);return0;}
#include<iostream>#include<algorithm>usingnamespace std;constint N =1010;int n;double m;structCake{double p, w;booloperator<(const Cake &t)const{return p / w > t.p / t.w;}}c[N];intmain(){scanf("%d %lf",&n,&m);for(int i =0; i < n &&scanf("%lf",&c[i].w); i ++);for(int i =0; i < n &&scanf("%lf",&c[i].p); i ++);sort(c, c + n);double res =0;for(int i =0; i < n && m >0; i ++){double r =min(m, c[i].w);m -= r;res += r * c[i].p / c[i].w;}printf("%.2lf\n", res);}
1071 Speech Patterns (25 分)
題意 :
alphanumerical文數(shù)字的,one character from the set [0-9 A-Z a-z].;case insensitive不區(qū)分大小寫;lexicographically字典序
#include<iostream>#include<unordered_map>usingnamespace std;boolcheck(char c){if(c >='0'&& c <='9')returntrue;if(c >='a'&& c <='z')returntrue;returnfalse;}intmain(){string s;getline(cin, s);for(int i =0; i < s.size(); i ++) s[i]=tolower(s[i]);unordered_map<string,int> hash;for(int i =0; i < s.size(); i ++){if(check(s[i])){string word;int j = i;while(j < s.size()&&check(s[j])) word += s[j ++];hash[word]++;i = j;}}string word;int cnt =-1;for(auto item : hash){if(cnt < item.second ||(cnt == item.second && word > item.first)){cnt = item.second;word = item.first;}}printf("%s %d", word.c_str(), cnt);}
1092 To Buy or Not to Buy (20 分)
思路 :多多少和少多少相互之間是沒有影響的,如果少多少是0才輸出多多少
語法 :unordered_map的遍歷
#include<iostream>#include<unordered_map>usingnamespace std;intmain(){string a, b;cin >> a >> b;unordered_map<char,int> S;for(auto c : a) S[c]++;for(auto c : b) S[c]--;int sp =0, sn =0;for(auto item : S)if(item.second >0) sp += item.second;else sn -= item.second;if(sn)printf("No %d", sn);elseprintf("Yes %d", sp);return0;}
#include<iostream>#include<vector>#include<algorithm>usingnamespace std;constint N =1e4+10;int w[N];intmain(){int n;scanf("%d",&n);for(int i =1; i <= n; i ++)scanf("%d",&w[i]);sort(w +1, w + n +1, greater<int>());int r, c;for(int i =1; i * i <= n; i ++)if(n % i ==0){r = n / i;c = i;}vector<vector<int>>res(r, vector<int>(c));int dx[]={0,1,0,-1}, dy[]={1,0,-1,0};for(int i =1, x =0, y =0, d =0; i <= n; i ++){res[x][y]= w[i];int a = x + dx[d], b = y + dy[d];if(a <0|| a >= r || b <0|| b >= c || res[a][b]){d =(d +1)%4;a = x + dx[d], b = y + dy[d];}x = a, y = b;}for(int i =0; i < r; i ++){for(int j =0; j < c; j ++){printf("%d", res[i][j]);if(j != c -1)printf(" ");}if(i != r -1)puts("");}}
1109 Group Photo (25 分)
題意 :
the division result must be rounded down to the nearest integer意思是向下取整,不是四舍五入
合影時隊形非常重要,給出 N 個人排成 K 行的規(guī)則,如下所示:
每行的人數(shù)必須為 N/K(向下取整),所有多余的人(如果有)都放到最后一行;
位于后排的所有人都不得矮于位于前排的任何人;
在每一行中,最高的人站在該行的中心位置(定義為位置 (m/2+1),位置從1開始編號,其中 m 是該行的總?cè)藬?shù),除法結(jié)果向下取整);
#include<iostream>#include<cstring>#include<algorithm>usingnamespace std;constint N =10010;int n, m;structPerson{string name;int h;booloperator<(const Person &t)const{if(h != t.h)return h > t.h;return name < t.name;}}p[N];
string line[N];intmain(){cin >> n >> m;for(int i =0; i < n; i ++) cin >> p[i].name >> p[i].h;sort(p, p + n);for(int i =0, j =0; i < m; i ++){int len = n / m;if(!i) len += n % m;// 特判最后一排for(int r = len /2+1, l = r -1; l >0|| r <= len; l --, r ++){if(r <= len) line[r]= p[j ++].name;if(l >0) line[l]= p[j ++].name;}cout << line[1];for(int k =2; k <= len; k ++) cout <<' '<< line[k];cout << endl;}return0;}
1121 Damn Single (25 分)
思路 :
查詢的m個id中,如果其中包含輸入的某一對關(guān)系,則將這兩個一起從m個id中刪除
語法 :
set的count
set的erase表示刪除這個元素
#include<iostream>#include<unordered_set>#include<algorithm>usingnamespace std;constint N =5e4+10;structCouple{int a, b;}c[N];int ans[N], k;intmain(){int n, m;scanf("%d",&n);for(int i =0; i < n; i ++)scanf("%d%d",&c[i].a,&c[i].b);unordered_set<int> se;scanf("%d",&m);for(int i =0, id; i < m &&scanf("%d",&id); i ++){se.insert(id);}for(int i =0; i < n; i ++){int a = c[i].a, b = c[i].b;if(se.count(a)&& se.count(b)){se.erase(a), se.erase(b);}}for(auto s : se) ans[k ++]= s;sort(ans, ans + k);printf("%d\n", k);if(k){printf("%05d", ans[0]);for(int i =1; i < k; i ++)printf(" %05d", ans[i]);}}
#include<iostream>#include<algorithm>usingnamespace std;constint N =5e5+10;int n, m;int cnt[N];int top_k[N], k;intmain(){scanf("%d%d",&n,&m);int id;for(int i =0; i < n; i ++){scanf("%d",&id);if(i){printf("%d:", id);for(int j =0; j < k; j ++)printf(" %d", top_k[j]);if(i != n -1)puts("");}cnt[id]++;bool exists =false;for(int j =0; j < k; j ++)if(top_k[j]== id){exists =true;break;}if(!exists) top_k[k ++]= id;sort(top_k, top_k + k,[](int x,int y){if(cnt[x]!= cnt[y])return cnt[x]> cnt[y];return x < y;});k =min(k, m);}}
1132 Cut Integer (20 分)
語法 :當(dāng)將任何變量放在“/‘后面或者”%“后面都要注意它是否為0
#include<iostream>usingnamespace std;intmain(){int T;cin >> T;while(T --){string s;cin >> s;int len = s.size()/2;int left =stoi(s.substr(0, len));int right =stoi(s.substr(len, len));int n =stoi(s);if(left * right && n %(left * right)==0)puts("Yes");elseputs("No");}return0;}
#include<iostream>usingnamespace std;intmain(){int d, n;cin >> d >> n;string cur =to_string(d);for(int k =0; k < n -1; k ++){string next;for(int i =0; i < cur.size();){int j = i +1;while(j < cur.size()&& cur[i]== cur[j]) j ++;next += cur[i]+to_string(j - i);i = j;}cur = next;}cout << cur;return0;}與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖