Codeforces Round #551 (Div. 2) (A,B,C)

太过爱你忘了你带给我的痛 2022-02-20 15:09 340阅读 0赞

一开始做出来两道题,提交第三题一直wa,就在这个时候A题突然被人hack了,啊啊啊~我是猪吗?!A题也能错!

刚刚看A题的时候,才发现怎么代码里还有一个n—,什么鬼?!一定是昨天不清醒,导致最后rating又掉了11,下一场加油,让rating快点涨上去。不说了,补题。

题目链接:Codeforces Round #551 (Div. 2)

A. Serval and Bus

遍历一遍,让Serval同学等待时间最短的那班车的编号,如果多种结果,任选一种输出。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int n,t,s,d,k,ans,tmp;
  5. scanf("%d%d",&n,&t);
  6. scanf("%d%d",&s,&d);
  7. //n--; //hack点
  8. ans=1;
  9. if(t<=s){
  10. k=s-t;
  11. }else{
  12. if((t-s)%d==0) k=0;
  13. else k=d-(t-s)%d;
  14. }
  15. for(int i=2;i<=n;i++){
  16. scanf("%d%d",&s,&d);
  17. if(t<=s){
  18. tmp=s-t;
  19. }else{
  20. if((t-s)%d==0) tmp=0;
  21. else tmp=d-(t-s)%d;
  22. }
  23. if(tmp<k){
  24. ans=i;
  25. k=tmp;
  26. }
  27. }
  28. printf("%d\n",ans);
  29. return 0;
  30. }

B. Serval and Toy Bricks

题意:给你主视图,左视图,俯视图,让你输出满足这三种情况的立体图形。

思路:从俯视图出发,任何一个位置的高度取决于主视图和左视图中高度较小值,想到这点,这个题就迎刃而解了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=110;
  4. int a[maxn],b[maxn],c[maxn][maxn];
  5. int main(){
  6. int n,m,h;
  7. scanf("%d%d%d",&n,&m,&h);
  8. for(int i=1;i<=m;i++){
  9. scanf("%d",&a[i]);
  10. }
  11. for(int i=1;i<=n;i++){
  12. scanf("%d",&b[i]);
  13. }
  14. for(int i=1;i<=n;i++){
  15. for(int j=1;j<=m;j++){
  16. scanf("%d",&c[i][j]);
  17. if(c[i][j]==1){
  18. c[i][j]=min(b[i],a[j]);
  19. }
  20. }
  21. }
  22. for(int i=1;i<=n;i++){
  23. for(int j=1;j<=m;j++){
  24. if(j==m) printf("%d\n",c[i][j]);
  25. else printf("%d ",c[i][j]);
  26. }
  27. }
  28. return 0;
  29. }

C. Serval and Parenthesis Sequence

一开始做这道题的时候思路也不是很严谨,所以导致第6个测试点就过不了了。

题意:先说一个概念,正确的括号序列就是每个左括号都有一个右括号和它匹配,右括号也没有多余的。给你一个序列,问你在它的前缀都不是正确的括号序列的情况下,它有没有可能是正确的括号序列?是的话任选一中满足要求的匹配情况输出,否则输出“:(”。

思路:一开始,我就想只要第一个括号是左括号,最后一个括号是右括号,且最左边的括号和最右边的括号相匹配,那么整个序列的前缀就不是正确的括号序列,这一点是满足要求的。具体如何实现呢?输入序列的第一个字符和最后一个字符特判,然后看里面还得插入多少个左括号,原则就是能插左括号就插左括号。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=3*1e5+10;
  4. int main(){
  5. ios::sync_with_stdio(false);
  6. cin.tie(0);
  7. cout.tie(0);
  8. int len;
  9. string t;
  10. cin>>len;
  11. cin>>t;
  12. bool flag=true;
  13. if(len%2==1||t[0]==')'||t[len-1]=='(') flag=false;
  14. if(flag){
  15. t[0]='(';
  16. t[len-1]=')';
  17. int rc=0; //右括号的数量
  18. int lc=0; //左括号的数量
  19. for(int i=1;i<len-1;i++){
  20. if(t[i]==')') rc++;
  21. else if(t[i]=='(') lc++;
  22. }
  23. if(rc>(len-2)/2||lc>(len-2)/2) flag=false;
  24. lc=(len-2)/2-lc; //还需要添加lc左括号
  25. if(flag){
  26. int L=0; //[1,i-1]中还未匹配的左括号的数量
  27. for(int i=1;i<len-1;i++){
  28. if(t[i]=='('){
  29. L++;
  30. }else if(t[i]==')'){
  31. if(L!=0){
  32. L--;
  33. }else{
  34. flag=false;
  35. break;
  36. }
  37. }else if(t[i]=='?'){
  38. if(lc){
  39. t[i]='(';
  40. lc--;
  41. L++;
  42. }else if(L!=0){
  43. t[i]=')';
  44. L--;
  45. }else{
  46. flag=false;
  47. break;
  48. }
  49. }
  50. }
  51. //if(L!=0||lc!=0) flag=false;
  52. }
  53. }
  54. if(flag) cout<<t<<endl;
  55. else cout<<":("<<endl;
  56. //cout<<t<<endl;
  57. return 0;
  58. }

发表评论

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

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

相关阅读