SMU 2024 spring 天梯赛1
7-3 强迫症
简单的模拟但是注意这句话:对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。
点击查看代码
#include<bits/stdc++.h> using namespace std; #define int long long void solve() { string s; cin>>s; int n=s.size(); if(n==6) { for(int i=0;i<=3;i++) cout<<s[i]; cout<<"-"; for(int i=4;i<=5;i++) cout<<s[i]; } if(n==4) { if(s[0]>='2'&&s[1]>='2'){ cout<<"19"; for(int i=0;i<=1;i++) cout<<s[i]; cout<<"-"; for(int i=2;i<=3;i++) cout<<s[i]; } else{ cout<<"20"; for(int i=0;i<=1;i++) cout<<s[i]; cout<<"-"; for(int i=2;i<=3;i++) cout<<s[i]; } } } signed main() { solve(); }
7-4 小孩子才做选择,大人全都要
同样是简单的模拟,分类讨论一下即可
点击查看代码
#include<bits/stdc++.h> using namespace std; #define int long long void solve() { int a,b,maxx,minn; cin>>a>>b; if(a>0&&b>0){ maxx=max(a,b); cout<<maxx<<" "<<a+b<<endl; cout<<"^_^"; } else if(a<0&&b>0||a>0&&b<0) { maxx=max(a,b); minn=min(a,b); if(maxx+minn<=0){ cout<<maxx<<" "<<"0"<<endl; cout<<"T_T"; } else { cout<<maxx<<" "<<maxx+minn<<endl; cout<<"T_T"; } } else if(a<0&&b<0){ cout<<"0"<<" "<<"0"<<endl; cout<<"-_-"; } } signed main() { solve(); }
7-5 胎压监测
还是简单的模拟
点击查看代码
#include<bits/stdc++.h> using namespace std; #define int long long void solve() { int a[5],minn,p; int maxx=-1; for(int i=1;i<=4;i++){ int x; cin>>x; a[i]=x; maxx=max(maxx,x); } cin>>minn>>p; int cnt1=0,mark; for(int i=1;i<=4;i++) { if(abs(maxx-a[i])>p||a[i]<minn){ cnt1++; mark=i; } } if(cnt1==1) cout<<"Warning: please check #"<<mark<<"!"; else if(cnt1>=2) cout<<"Warning: please check all the tires!"; else cout<<"Normal"; } signed main() { solve(); }
7-6 吉老师的回归
这题先用cnt记录一下不是qiandao和easy的题目有多少个,然后开个标记数组,记录一下每个不是easy和qiandao的题的下标,然后看cnt有没有大于这个m如果有就是,就是在做第m+1题,注意输入完nm以后要有一个getline来抵消一个回车键,再开始输入字符串
点击查看代码
#include<bits/stdc++.h> using namespace std; #define int long long void solve() { int n,m,cnt=0,temp=1,a[35]={0}; string s[35],s1; cin>>n>>m; getline(cin,s1); for(int i=1;i<=n;i++) { getline(cin,s[i]); int pos1=s[i].find("qiandao"); int pos2=s[i].find("easy"); //cout<<pos1<<" "<<pos2<<endl; if(pos1==-1&&pos2==-1) { a[temp]=i; temp++; cnt++; } } if(cnt<=m) cout<<"Wo AK le"; if(cnt>m) cout<<s[a[m+1]]; } signed main() { solve(); }
7-7 静静的推荐
这一题我们以点来从大到小排序,如果第一个数不相等就按第一个数从大到小排,如果第一个数相等的比较第二个数,这是一个好的排序方法,值得学习,韦大不愧是个人才,然后我们先选175分以上pta分数够的人,然后那些不看pta分数的人不能超过批次数k
点击查看代码
#include<bits/stdc++.h> using namespace std; typedef pair<int,int>pii; bool cmp(pii a,pii b) { if(a.first!=b.first) return a.first>b.first; else return a.second>b.second; } void solve() { int n,k,s; cin>>n>>k>>s; vector<pii>ve(n+1); vector<int>cnt(300);//用来标记不看pta的人收了几个 for(int i=1;i<=n;i++) cin>>ve[i].first>>ve[i].second; sort(ve.begin()+1,ve.end(),cmp); int ans=0; for(int i=1;i<=n;i++) { if(ve[i].first<175) break; if(ve[i].second>=s) ans++; else if(cnt[ve[i].first]+1<=k) { ans++; cnt[ve[i].first]++; } } cout<<ans; } int main() { solve(); }
7-8 机工士姆斯塔迪奥
这题我还傻傻的bfs了,其实不用bfs直接用总数减去被标记过的数就可以了,但是注意行和列交叉的点会重复的减,所以需要加上行数*列数,开两个set防止重复减掉了一些,一个放行一个放列
点击查看代码
#include<bits/stdc++.h> using namespace std; typedef pair<int,int> pii; #define int long long void solve() { set<int>se1,se2; int n,m,q; cin>>n>>m>>q; while(q--) { int a,b; cin>>a>>b; if(a==0) se1.insert(b); else se2.insert(b); } int xx=se1.size(),yy=se2.size(); int ans=n*m+(xx*yy)-xx*m-yy*n;//记得行数应该是×m 列数×n cout<<ans; } signed main() { solve(); }
7-9彩虹瓶
还是一道stl的模拟题,我们每次要放一个货物的时候,就检查一下货架上有没有符合的,下列的代码有详细的注解
点击查看代码
#include<bits/stdc++.h> using namespace std; typedef pair<int,int> pii; void solve() { int n,m,k; cin>>n>>m>>k; while(k--) { stack<int>q; int need=1;//用来检查以下的货物是否符合要求 for(int i=1;i<=n;i++) { int x; cin>>x; if(x==need) { need++; continue; } else if(q.size()&&q.top()==need)//就是我们输入的货物号不满足need时,去栈里找是否有符合的 { while(q.size()&&q.top()==need) { need++; q.pop(); } q.emplace(x); } else if(q.size()<m)//如果说你输入的这个货物号不满足need且你刚刚放入栈中的也不满足 //就把这个货物放入栈中 { q.emplace(x); } } //输入完了以后开始在栈里找 while(q.size()&&q.top()==need) { need++; q.pop(); } if(need-1==n) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } signed main() { solve(); }
7-10 简单计算器
记得栈是先入后出别看到样例直接从左往右算了,且记住0不作分母只在‘/’下成立
点击查看代码
#include<bits/stdc++.h> using namespace std; #define int long long typedef pair<int,int> pii; stack<int>q; stack<char>p; void solve() { int n; cin>>n; for(int i=1;i<=n;i++) { int a; cin>>a; q.push(a); } int temp; for(int i=1;i<=n-1;i++){ char c; cin>>c; p.push(c); } while(!p.empty()) { int t=q.top(); q.pop(); int k=q.top(); q.pop(); int c=p.top(); p.pop(); if(c=='+') { temp=t+k; q.push(temp); } if(c=='-') { temp=k-t; q.push(temp); } if(c=='*') { temp=k*t; q.push(temp); } if(c=='/') { //注意0作为分母这种情况,只在除号下有效 if(t==0){ cout<<"ERROR: "<<k<<"/0";//注意‘:’后面有个空格 return ; } temp=k/t; q.push(temp); } } cout<<temp; } signed main() { solve(); }
posted on 2024-03-17 12:41 swj2529411658 阅读(21) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人