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以上是关于2021团体程序设计天梯赛题解的主要内容,如果未能解决你的问题,请参考以下文章