SMU 2024 spring 天梯赛1
7-1种钻石
查看代码
void solve() {
int n,v;
cin>>n>>v;
cout<<n/v;
}
7-21-1 输出金字塔图案
查看代码
void solve() {
cout<<" *\n"
" ***\n"
" *****\n"
"*******";
}
7-3强迫症
查看代码
void solve() {
string s;
cin>>s;
if(s.size()==6){
s.insert(s.begin()+4,'-');
cout<<s;
}else{
string l=s.substr(0,2);
int a= stoi(l);
if(a<22){
s="20"+s;
}else s="19"+s;
s.insert(s.begin()+4,'-');
cout<<s;
}
}
7-4小孩子才做选择,大人全都要
题目有点抽象…
查看代码
void solve() {
int a,b;
cin>>a>>b;
int ma=max({a, b,0ll});
int c=max(0ll,a+b);
cout<<ma<<' '<<c<<'\n';
if(a<0&&b<0)cout<<"-_-";
else if(a<0||b<0)cout<<"T_T";
else cout<<"^_^";
}
7-5胎压监测
查看代码
void solve() {
vector<PII>ve(4);
int low,d;
for(int i=0;i<4;++i)cin>>ve[i].first,ve[i].second=i+1;
cin>>low>>d;
int p,cnt=0;
sort(ve.begin(),ve.end());
for(int i=0;i<3;++i){
if(ve[3].first-ve[i].first>d||ve[i].first<low)cnt++,p=ve[i].second;
}
if(ve[3].first<low)cnt++,p=ve[3].second;
if(cnt==0)cout<<"Normal";
else if(cnt==1)cout<<"Warning: please check #"<<p<<"!";
else cout<<"Warning: please check all the tires!";
}
7-6吉老师的回归
查看代码
void solve() {
int n,m;
cin>>n>>m;
vector<string>ve(n);
int idx=0;
string ans="Wo AK le";
bool ok=true;
::getchar();
for(int i=0;i<n;++i){
getline(cin,ve[i]);
if(ve[i].find("qiandao")==-1&&ve[i].find("easy")==-1)++idx;
if(idx==m+1&&ok){
ans=ve[i];
ok=false;
}
}
cout<<ans;
}
7-7静静的推荐
思路:一个名单内PTA分数严格递增,若分数相同需到达面试分数线,对于有多个分数相同的人中,到达面试分数线的人可以任意的加进名单里,而没到达面试分数的人一个名单只能有一个,统计下每个分数已用的名单,若有没到达面试分数打的人,判断下是否还剩下名单
查看代码
bool cmp(PII a,PII b){
if(a.first!=b.first)return a.first>b.first;
return a.second>b.second;
}
void solve() {
int n,k,s;
cin>>n>>k>>s;
vector<int>cnt(300);
vector<PII>f(n);
for(int i=0;i<n;++i)cin>>f[i].first>>f[i].second;
sort(f.begin(),f.end(),cmp);
int ans=0;
for(int i=0;i<n;++i){
if(f[i].first<175)break;
if(f[i].second>=s)ans++;
else if(cnt[f[i].first]+1<=k){
ans++,cnt[f[i].first]++;
}
}
cout<<ans;
}
7-8机工士姆斯塔迪奥
思路:每一行每一列的个数已定,找出有多少行以及多少列,但是还存在重复覆盖的格子,每一行与每一列都会有一个重复覆盖的格子,行数乘列数即为总重复覆盖数
查看代码
void solve() {
int n,m,q;
cin>>n>>m>>q;
set<int>x,y;
while(q--){
int a,b;
cin>>a>>b;
if(a==0)x.insert(b);
else y.insert(b);
}
int xx=x.size(),yy=y.size();
int c=xx*m+yy*n-xx*yy;
cout<<n*m-c;
}
7-9彩虹瓶
思路:模拟啦,想清楚过程就比较好写
查看代码
void solve() {
int n,m,k;
cin>>n>>m>>k;
while(k--){
vector<int>ve(n),st(n);
for(int i=0;i<n;++i)cin>>ve[i];
stack<int>s;
int idx=0,now=0;
bool ok=true;
while(now<n){
while(!s.empty()&&s.top()==now+1&&now+1<=n){
now++,s.pop();
}
if(now==n)break;
while(idx<n&&ve[idx]!=now+1){
if(s.size()==m){
ok=false;
break;
}else{
s.push(ve[idx++]);
}
}
if(!ok)break;
if(idx<n&&ve[idx]==now+1){
now++,idx++;
}else{
ok=false;
break;
}
}
if(ok)cout<<"YES\n";
else cout<<"NO\n";
}
}
7-10简单计算器
思路:题目已经告诉怎么做啦,写就对了
查看代码
void solve() {
int n;
cin>>n;
stack<int>s1;
stack<char>s2;
for(int i=0;i<n;++i){
int x;
cin>>x;
s1.push(x);
}
for(int i=1;i<n;++i){
char x;
cin>>x;
s2.push(x);
}
while(s1.size()>1){
int n1=s1.top();s1.pop();
int n2=s1.top();s1.pop();
char op=s2.top();s2.pop();
if(op=='+')s1.push(n2+n1);
else if(op=='-')s1.push(n2-n1);
else if(op=='*')s1.push(n2*n1);
else if(op=='/'){
if(n1==0){
cout<<"ERROR: "<<n2<<"/"<<n1;
return ;
}
else s1.push(n2/n1);
}
}
cout<<s1.top();
}
7-11龙龙送外卖
思路:手动画画图,发现就是连接所有送餐点的最小连通块,由于最后一点送完不用跑回外卖店,来回总路径再减去最长的一条送餐路线
—-错了几发,找不到哪错,果然又是题读漏了(外卖店以为就是1
查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=1e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
int n,m,p;
vector<int>g;
vector<int>d;
int all=0,ma=0,len;
void dfs(int u){
if(d[u]!=-1||u==p)return ;
if(d[g[u]]==-1){
dfs(g[u]);
}
len++;
d[u]=d[g[u]]+1;
return ;
}
void solve() {
cin>>n>>m;
d=g=vector<int>(n+1,-1);
// d[1]=0;
for(int i=1;i<=n;++i){
cin>>g[i];
if(g[i]==-1)p=i;
}
d[p]=0;
for(int i=0;i<m;++i){
int x;
cin>>x;
len=0;
dfs(x);
ma=max(ma,d[x]);
all+=len*2;
// cout<<all<<'\n';
cout<<all-ma<<"\n";
// cout<<d[x]<<'\n';
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t=1;
// cin>>t;
// init();
while(t--){
solve();
}
return 0;
}
7-12智能护理中心统计
思路:暴力
统计所有管理节点的老人个数,T就将老人修改到目标管理节点即可。Q就跑dfs求子树的老人个数
查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
//#define int __int128
#define double long double
typedef pair<int,int>PII;
typedef pair<string,int>PSI;
typedef pair<string,string>PSS;
const int N=3e5+5,INF=0x3f3f3f3f,Mod=1e9+7,mod=998244353;
const int MAXN=1e8+5;
const double eps=1e-12;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
vector<int>old,up;
vector<vector<int>>down;
vector<int>have;
int n,m,idx=1;
map<string,int>mp;
void updown(int u,int d){
have[u]+=d;
// if(up[u]!=-1){
// updown(up[u],d);
// }
}
int downn(int u){
int ans=have[u];
for(auto v:down[u]){
if(up[v]==u){
ans+=downn(v);
}
}
return ans;
}
void solve() {
cin>>n>>m;
old=vector<int>(n+1,-1);
up=vector<int>(N+1,-1);
down=vector<vector<int>>(N+1);
have=vector<int>(N+1,0);
for(int i=0;i<m;++i){
string a,b;
cin>>a>>b;
if(mp.count(b)==0)mp[b]=idx++;
int fa=mp[b];
if(a[0]>='0'&&a[0]<='9'){
int aa=stoi(a);
old[aa]=fa;
have[fa]++;
}else{
if(mp.count(a)==0)mp[a]=idx++;
int son=mp[a];
down[fa].push_back(son);
up[son]=fa;
}
}
char op;
// int x=mp["XAHP"];
// cout<<have[x]<<'\n';
cin>>op;
while(op!='E'){
if(op=='Q'){
string b;
cin>>b;
if(mp.count(b)==0){
mp[b]=idx++;
}
int ans=downn(mp[b]);
cout<<ans<<'\n';
}else if(op=='T'){
int a;
string b;
cin>>a>>b;
if(old[a]==-1){
if(mp.count(b)==0)mp[b]=idx++;
old[a]=mp[b];
have[mp[b]]++;
}else{
if(mp.count(b)==0)mp[b]=idx++;
int fa=old[a];
// updown(fa,-1);
have[fa]--;
old[a]=mp[b];
have[mp[b]]++;
// updown(mp[b],1);
}
}
cin>>op;
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t=1;
// cin>>t;
// init();
while(t--){
solve();
}
return 0;
}
7-13计算图
7-14教科书般的亵渎
7-15超能力者大赛
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。