2021团体程序设计天梯赛题解
Posted Mr_渣渣辉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021团体程序设计天梯赛题解相关的知识,希望对你有一定的参考价值。
先贴成绩
今年L1的题偏基础,比赛用了一个小时切完了,(算上PTA系统网络错误崩了20分钟和BW傻等…QAQ)L2顺着做的,L2-1模拟过了去看L2-2,并查集写完数据跑错了,调了一个小时发现题目说明唯一前驱,想改dfs但是心态崩了没思路- -骗了12分就撤了,去看L2-3发现没思路- -,看了看队友都做了,又回头读题发现是个水题,敲完18分看了眼表,还剩半个多小时,寻思没时间做L2-4了,然后改了二十多分钟没改出来又去看L2-2,最后十分钟交了十遍,提到20分比赛结束了。赛后问赵神L2-4发现也是个水题,但是没有时间看题干了,题干太长。今年比赛吃亏在L2-2了,网传是L2最难的一个题,掉坑里了没有办法,差10分拿国三确实感觉很遗憾,希望明年能有机会打一次退役赛吧,也希望BTTCACM越办越好,人丁兴旺,学弟学妹们加油!
L1-073 人与神 (5 分)
#include <bits/stdc++.h>
using namespace std;
int main()
cout<<"To iterate is human, to recurse divine."<<endl;
return 0;
L1-074 两小时学完C语言 (5 分)
#include <bits/stdc++.h>
using namespace std;
int main()
int a,b,c;
cin>>a>>b>>c;
cout<<a-b*c<<endl;
return 0;
L1-075 强迫症 (10 分)
#include <bits/stdc++.h>
using namespace std;
int main()
string s;
cin>>s;
if(s.length()==6)
for(int i=0;i<6;i++)
if(i==4)cout<<"-";
cout<<s[i];
cout<<endl;
else
int temp=(s[0]-'0')*10+(s[1]-'0');
if(temp<22)cout<<20;
else cout<<19;
for(int i=0;i<4;i++)
if(i==2)cout<<"-";
cout<<s[i];
cout<<endl;
return 0;
L1-076 降价提醒机器人 (10 分)
#include <bits/stdc++.h>
using namespace std;
int main()
int n,m;
cin>>n>>m;
while(n--)
double p;
cin>>p;
if(p<m)
printf("On Sale! %.1lf\\n",p);
return 0;
L1-077 大笨钟的心情 (15 分)
#include <bits/stdc++.h>
using namespace std;
int main()
int sj[24];
for(int i=0;i<24;i++)
cin>>sj[i];
int t;
while(cin>>t)
if(t<0||t>23)break;
cout<<sj[t]<<" ";
if(sj[t]>50)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
return 0;
L1-078 吉老师的回归 (15 分)
#include <bits/stdc++.h>
using namespace std;
int main()
int n,m;
cin>>n>>m;
string s[35];
getchar();
for(int i=0;i<n;i++)
getline(cin,s[i]);
int ans=0;
for(int i=0;i<n;i++)
if((s[i].find("qiandao")==string::npos) && (s[i].find("easy")==string::npos))
if(m==0)
ans=i;
break;
m--;
if(ans!=0)
cout<<s[ans]<<endl;
else
cout<<"Wo AK le"<<endl;
return 0;
L1-079 天梯赛的善良 (20 分)
#include <bits/stdc++.h>
using namespace std;
const int maxn =1e6+5;
int a[maxn];
int main()
int n;
cin>>n;
int temp;
for(int i=0;i<n;i++)
cin>>temp;
a[temp]++;
for(int i=1;i<maxn;i++)
if(a[i]!=0)
cout<<i<<" "<<a[i]<<endl;
break;
for(int i=maxn-1;i>=1;i--)
if(a[i]!=0)
cout<<i<<" "<<a[i]<<endl;
break;
return 0;
L1-080 乘法口诀数列 (20 分)
#include <bits/stdc++.h>
using namespace std;
int main()
int a1,a2,n;
cin>>a1>>a2>>n;
int a[1005];
a[0]=a1,a[1]=a2;
int index=2;
for(int i=2;i<n+5;i++)
int temp=a[i-1]*a[i-2];
if(temp<10)
a[index++]=temp;
else
int b[1005],k=0;
while(temp>0)
b[k++]=temp%10;
temp/=10;
for(int j=k-1;j>=0;j--)
a[index++]=b[j];
for(int i=0;i<n-1;i++)
cout<<a[i]<<" ";
cout<<a[n-1]<<endl;
return 0;
L2-037 包装机 (25 分)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+5;
int book[maxn];
string s[maxn];
int main()
int N,M,S;
cin>>N>>M>>S;
for(int i=0;i<N;i++)
cin>>s[i];
memset(book,0,sizeof(book));
int OP;
stack<char>st;
int top=0;
vector<char>v;
while(cin>>OP)
if(OP==-1)break;
switch(OP)
case 0:
if(!st.empty())
v.push_back(st.top());
st.pop();
top--;
;break;
default :
if(book[OP-1]>=s[OP-1].length())
break;
if(top==S)
v.push_back(st.top());
st.pop();
top--;
st.push(s[OP-1][book[OP-1]]);
book[OP-1]++;
top++;
;break;
for(int i=0;i<v.size();i++)
cout<<v.at(i);
cout<<endl;
return 0;
L2-038 病毒溯源 (25 分)
//20分代码,待改
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4+5;
int tree[maxn];
int sum=0;
int YYY;
void init(int N)
for(int i=0;i<N;i++)
tree[i]=i;
int get(int x)
sum++;
if(x==tree[x])
return x;
get(tree[x]);
void put(int x)
if(x!=tree[x])
put(tree[x]);
if(x==tree[x])return ;
cout<<" "<<x;
void Merge(int x,int y)
tree[y]=x;
int main()
int N;
cin>>N;
init(N);
for(int i=0;i<N;i++)
int j;
cin>>j;
if(j!=0)
int t;
while(j--)
cin>>t;
Merge(i,t);
int ans=0,mark=0;
for(int i=N-1;i>=0;i--)
sum=0;
get(i);
if(ans<=sum)
ans=sum;
mark=i;
cout<<ans<<endl;
int YYY=get(mark);
cout<<YYY;
put(mark);
cout<<endl;
return 0;
L2-039 清点代码库 (25 分)
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
struct Seq
vector<int> v;
int sum;
t[maxn];
bool cmp(Seq a,Seq b)
if(a.sum==b.sum)
for(int i=0;i<a.v.size();i++)
if(a.v.at(i)!=b.v.at(i))
return a.v.at(i)<b.v.at(i);
else
return a.sum>b.sum;
int main()
int n,m;
scanf("%d %d",&n,&m);
map<vector<int>,int>mp;
int p,ans=0,k=0;
for(int i=0;i<n;i++)
vector<int>temp;
for(int j=0;j<m;j++)
scanf("%d",&p);
temp.push_back(p);
if(mp[temp]==0)
ans++;
mp[temp]++;
map<vector<int>,int>::iterator it;
for(it=mp.begin();it!=mp.end();it++)
t[k].v=it->first,t[k++].sum=it->second;
sort(t,t+k,cmp);
printf("%d\\n",ans);
for(int i=0;i<k;i++)
printf("%d ",t[i].sum);
for(int j=0;j<t[i].v.size()-1;j++)
printf("%d ",t[i].v.at(j));
printf("%d\\n",t[i].v.at(t[i].v.size()-1));
return 0;
L2-040 哲哲打游戏 (25 分)
#include <bits/stdc++.h>
using namespace std;
int main()
int N,M;
scanf("%d %d",&N,&M);
map<int,vector<int> >mp;
int t,p;
for(int i=1;i<=N;i++)
scanf("%d",&t);
for(int j=0;j<t;j++2021团体程序设计天梯赛题解