9/15越努力越幸运-思维赛(2)

F.CodeForces - 999C

题意:给一个字符串,k次操作,每次操作删除最左边字典序最小的字母;

解:统计所有字母的个数,从’a’到’z’,用k-每个字母的个数,找到不能删除的那个字母,或者不能完全删除的那个字母;

遍历字母串,不删的直接输出,删的continue;特别处理一下不能完全删除的部分,用cnt来记录不能完全删除那个字母的个数;

用vis来标记那个位置;然后输出即可(可能表述不对,看代码咯~)

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN=4e5+10;
  4. const int INF=0x3f3f3f3f;
  5. typedef long long ll;
  6. bool vis[MAXN];
  7. int num[30];
  8. int main(){
  9. ios::sync_with_stdio(false);
  10. int n,k;
  11. string s;
  12. cin>>n>>k>>s;
  13. for(int i=0;i<n;i++){
  14. num[s[i]-'a']++;
  15. }
  16. if(k>=n)cout<<endl;
  17. else {
  18. int sum=0,cnt=0;
  19. int flag=0;
  20. for(int i=0;i<26;i++){
  21. sum+=num[i];
  22. if(sum>=k){
  23. flag=i;break;
  24. }
  25. }
  26. if(sum==k){
  27. for(int i=0;i<n;i++)
  28. if((s[i]-'a')>flag)
  29. cout<<s[i];
  30. cout<<endl;
  31. }
  32. else {
  33. cnt=sum-k;
  34. for(int i=n-1;i>=0;i--){
  35. if((s[i]-'a')==flag){
  36. vis[i]=true;
  37. cnt--;
  38. }
  39. if(cnt==0)break;
  40. }
  41. for(int i=0;i<n;i++){
  42. if((s[i]-'a')>flag||vis[i])cout<<s[i];
  43. }
  44. cout<<endl;
  45. }
  46. }
  47. return 0;
  48. }

E.CodeForces - 1005B

题意:给两个字符串:s和t;每次只能删除字符串最左边的一个字符,求最少删掉多少个能让两个字符串相等(两个字符串都能删)

解:求最少能删掉的个数==所有个数-最终两个字符串相等个数*2

所以只要求最终两个字符串相等的长度,又因为每次只能删掉最左边的一个,所有从后往前遍历,s[i]==t[j],对答案的贡献+2;不相等直接退出;

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN=2e5+10;
  4. const int INF=0x3f3f3f3f;
  5. typedef long long ll;
  6. int main(){
  7. ios::sync_with_stdio(false);
  8. string s,t;
  9. cin>>s>>t;
  10. int len1=s.size();
  11. int len2=t.size();
  12. int l=len1-1,r=len2-1;
  13. //cout<<l<<' '<<r<<endl;
  14. int ans=0;
  15. while(l>=0&&r>=0&&s[l]==t[r]){
  16. ans++;
  17. l--,r--;
  18. }
  19. //cout<<ans<<endl;
  20. cout<<len1+len2-ans*2<<endl;
  21. return 0;
  22. }

D.CodeForces - 999B

题意:给一个长度为n字符串,让你解密;
加密规则:设d为n的因子,每次反转字符串[1-d];因子从n开始一直到1
解:解密—也是反转字符串,因子从1开始一直到n;
用了vector的翻转;

ContractedBlock.gif ExpandedBlockStart.gif

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN=1e5+10;
  4. const int INF=0x3f3f3f3f;
  5. typedef long long ll;
  6. int tot;
  7. int divx[MAXN];
  8. void get_div(int n){
  9. for(int i=2;i<=n;i++){
  10. if(n%i==0){
  11. divx[tot++]=i;
  12. }
  13. }
  14. }
  15. int main(){
  16. ios::sync_with_stdio(false);
  17. int n;
  18. string s;
  19. cin>>n>>s;
  20. get_div(n);
  21. //for(int i=0;i<tot;i++)cout<<divx[i]<<' ';cout<<endl;
  22. vector<char>vec;
  23. for(int i=0;i<tot;i++){
  24. for(int j=0;j<divx[i];j++){
  25. vec.push_back(s[j]);
  26. }
  27. reverse(vec.begin(),vec.end());
  28. for(int j=0;j<divx[i];j++){
  29. s[j]=vec[j];
  30. }
  31. vec.clear();
  32. }
  33. cout<<s<<endl;
  34. return 0;
  35. }

转载于:https://www.cnblogs.com/lin1874/p/11524370.html

发表评论

表情:
评论列表 (有 0 条评论,92人围观)

还没有评论,来说两句吧...

相关阅读

    相关 努力贬值?

    朋友小王时常吐槽,说自己平时工作从不迟到,工作饱和。加班累成狗,996甚至007都不在话下。 可是每次的绩效考核却只得了个B,更别说升职加薪了。 今年公司效益不好,要

    相关 好还是好?

    内存越大越好吗?PCI66一定好吗?1的……让你玩得更好其实,根据应用需求的不同搭配合适的内存才是最好注:本文所指内存均为SDRAM。内存价格的直线下降,使得个人用户配置大容量

    相关 长大,幸运

    飘过了大半个2015,在这个秋天停下脚步,看看一路风景,岂不是最美好的事情. ![Center][] 项目经验: 1. \\收费系统 自工作以来