标签:cnt idx int Codeforces cin -- str Div 805
C. Train and Queries
思路:
开一个map记录一个数字出现的最小坐标和最大坐标
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> PII; const int N = 200010; int n, k; PII a[N]; int main() { int T; cin >> T; while(T -- ) { int n, k; cin >> n >> k; map<int, PII> idx; for (int i = 1; i <= n; i ++ ) { int x; cin >> x; if(idx[x].first == 0) idx[x].first = idx[x].second = i; idx[x].first = min(idx[x].first, i); idx[x].second = max(idx[x].second, i); } while(k -- ) { int a, b; cin >> a >> b; if(idx[a].first == 0 || idx[b].first == 0) cout << "no" << endl; else if(idx[b].second < idx[a].first) cout << "no" << endl; else cout << "yes" << endl; } } return 0; }
D. Not a Cheap String
思路:
贪心,开一个map记录各字母出现的次数,然后从z到a开始删,删的是map里这些字符的个数,直到总代价小于等于p。最后输出剩余的字符
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> PII; const int N = 200010; int n, k; PII a[N]; int main() { int T; cin >> T; while(T -- ) { string str; cin >> str; int p; cin >> p; map<char, int> cnt; int sum = 0; for(int i = 0; i < str.size(); i ++ ) { sum += str[i] - 'a' + 1; cnt[str[i]]++; } for (int i = 'z'; i >= 'a'; i -- ) { if(sum <= p) break; while(sum > p && cnt[i]) { sum -= (i - 'a' + 1); cnt[i]--; } } for (int i = 0; i < str.size(); i ++ ) if(cnt[str[i]]) { cnt[str[i]]--; cout << str[i]; } cout << endl; } return 0; }
标签:cnt,idx,int,Codeforces,cin,--,str,Div,805 来源: https://www.cnblogs.com/yctql/p/16528488.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。