Day2总结

· 2026-7-13 16:44:36

A.Replace To Make Regular Bracket Sequencehttps://qycode64.com/course/6a47850a69fcccaa3fd46be4/exam/6a48ab9769fcccaa3fd48e3c/problem/CF612C?lang=zh题型:栈的运用思路:长度奇数 → 无解 栈匹配: 左括号入栈 右括号与栈顶匹配,不匹配则操作数 +1 栈空时遇到右括号 → 无解 结束后栈非空 → 无解未错#include<bits/stdc++.h>using namespace std;stackzx;int main(){ string s; cin>>s; if(s.size()%21){ cout<<"Impossible"; return 0; } int ans=0; for(int i=0;i<s.size();i++){ char c=s[i]; if(c'<'||c=='('||c=='{'||c=='[')zx.push(c); else{ if(zx.empty()){cout<<"Impossible";return 0;} char x=zx.top(); zx.pop(); if((x=='<'&&c!='>')||(x=='('&&c!=')')||(x=='{'&&c!='}')||(x=='['&&c!=']'))ans++; } } if(!zx.empty()){ cout<<"Impossible"; return 0; } cout<<ans; return 0;}B.Catch Overflow!https://qycode64.com/course/6a47850a69fcccaa3fd46be4/exam/6a48ab9769fcccaa3fd48e3c/problem/CF1175B?lang=zh题型:栈思路:栈维护当前循环乘积:栈底为 1,每进入一个循环就乘以 n 乘法前检测,超过 2^32-1 设为 2^32(一个足够大的值,保证后续检测溢出) add 时×上栈顶的循环次数,检查是否溢出#include<bits/stdc++.h>using namespace std;stack zx;int main(){ int l; cin>>l; zx.push(1); long long ans=0; for(int i=0;i<l;i++){ string s; cin>>s; if(s=="for"){ int n; cin>>n; long long g=zx.top()n; if(g>4294967295) g=4294967296; zx.push(g); } else if(s=="add"){ ans+=zx.top(); if(ans>4294967295){ cout<<"OVERFLOW!!!"; return 0; } } else zx.pop(); } cout<<ans; return 0;}C.Bill Total Valuehttps://qycode64.com/course/6a47850a69fcccaa3fd46be4/exam/6a48ab9769fcccaa3fd48e3c/problem/CF727B?lang=zh题型:字符串中取数字,小数点思路:1,遇到字母说明是商品名,之前累积的c就是价格 2,找到最后一个 .,如果后面正好两位数字 → 美分部分,否则是整数美元去掉所有 .(千位分隔符),累加美元 3,转成美分:(d100+c) 4,美元部分每三位加 .美分>0时输出 .XX错因:没理解美元部分每三位加 .,导致代码没有思路。#include<bits/stdc++.h>using namespace std;int main(){ string s,zx=""; cin>>s; long long sum=0; for(int i=0;i<=s.size();i++){ if(is.size()||(s[i]>='a'&&s[i]<='z')){ if(!zx.empty()){ long long d=0,c=0; int p=zx.rfind('.'); if(p!=-1&&zx.size()-p-12){ for(int j=0;j<p;j++) if(zx[j]!='.') d=d10+(zx[j]-'0'); c=(zx[p+1]-'0')10+(zx[p+2]-'0'); } else{ for(int j=0;j<zx.size();j++) if(zx[j]!='.') d=d10+(zx[j]-'0'); c=0; } sum+=d100+c; zx=""; } } else zx+=s[i]; } long long d=sum/100,c=sum%100; string s1=to_string(d),r=""; int cnt=0; for(int i=s1.size()-1;i>=0;i--){ r=s1[i]+r; cnt++; if(cnt%30&&i!=0) r="."+r; } if(c>0){ r+="."; if(c<10) r+="0"; r+=to_string(c); } cout<<r; return 0;}D.Page Numbershttps://qycode64.com/course/6a47850a69fcccaa3fd46be4/exam/6a48ab9769fcccaa3fd48e3c/problem/CF34C?lang=zh思路:1,遇到逗号或结尾,存入数组 a 2,升序排序 3,只保留与前一个不同的数字 4,找连续段,输出区间或单独数字#include<bits/stdc++.h>using namespace std;int a[110],q[110];int main(){ string s; cin>>s; int n=0,x=0; for(int i=0;i<=s.size();i++){ if(is.size()||s[i]','){ a[++n]=x; x=0; } else x=x*10+(s[i]-'0'); } sort(a+1,a+n+1); int m=0; for(int i=1;i<=n;i++){ if(i1||a[i]!=a[i-1]) q[++m]=a[i]; } for(int i=1;i<=m;i++){ int j=i; while(j+1<=m&&q[j+1]q[j]+1) j++; if(ij) cout<<q[i]; else cout<<q[i]<<"-"<<q[j]; if(j<m) cout<<","; i=j; } return 0;}E.Email addresshttps://qycode64.com/course/6a47850a69fcccaa3fd46be4/exam/6a48ab9769fcccaa3fd48e3c/problem/CF41C思路:1,选择 at 位置:从左到右找第一个 "at",不能是开头和结尾,选择最左边的 ,@小于字母,字典序更小。 2,替换 at 为 @:只换选中的那一个。 3, 替换 dot 为 .:所有能换的都换。#include<bits/stdc++.h>using namespace std;int main(){ string s; cin>>s; string ans="", x=""; int at=-1; for(int i=0;i+1<s.size();i++){ if(s[i]'a'&&s[i+1]'t'){ if(i>0 && i+1<s.size()-1){ at=i; break; } } } for(int i=0;i<s.size();){ if(iat){ ans+='@'; i+=2; } else{ ans+=s[i]; i++; } } for(int i=0;i<ans.size();){ if(i+2<ans.size() && ans[i]'d'&&ans[i+1]'o'&&ans[i+2]'t'){ if(i>0 && i+2<ans.size()-1){ x+='.'; i+=3; } else{ x+=ans[i]; i++; } } else{ x+=ans[i]; i++; } } cout<<x; return 0;}F.Bracket Sequencehttps://qycode64.com/course/6a47850a69fcccaa3fd46be4/exam/6a48ab9769fcccaa3fd48e3c/problem/CF223A?lang=zh思路:与第一题类似要使用栈匹配左右括号, 使用前缀和统计左括号错因:只想到用栈匹配左右括号,没想到使用前缀和统计左括号。#include<bits/stdc++.h>using namespace std;stack st;int main(){ string s; cin>>s; int n=s.size(); vector a(n+1,0); vector asval(n,-1); for(int i=0;i<n;i++) a[i+1]=a[i]+(s[i]'['); int ash=12,l=0,r=-1; ash=0; for(int i=0;i<n;i++){ if(s[i]'('||s[i]'[') st.push(i); else{ if(!st.empty()){ int zx=st.top(); if(s[zx]'('&&s[i]')'){ st.pop(); int g=zx; if(zx>0&&asval[zx-1]>=0) g=asval[zx-1]; asval[i]=g; if(a[i+1]-a[g]>ash){ ash=a[i+1]-a[g]; l=g; r=i; } } else if(s[zx]'['&&s[i]']'){ st.pop(); int g=zx; if(zx>0&&asval[zx-1]>=0) g=asval[zx-1]; asval[i]=g; if(a[i+1]-a[g]>ash){ ash=a[i+1]-a[g]; l=g; r=i; } } else while(!st.empty()) st.pop(); } } } if(r-1)cout<<0; else cout<<ash<<"\n"<<s.substr(l,r-l+1); return 0;}

1 次查看 举报

0 条评论

目前还没有评论...

Be the first to comment!

返回讨论列表
高士渠
95
通过题目
11
发帖数