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

2021团体程序设计天梯赛题解

2021团体程序设计天梯赛题解

2023年团体程序设计天梯赛 题解

题解PAT团体程序设计天梯赛 - 模拟赛

题解PTA团体程序设计天梯赛L1-014 简单题 (5 分) Go语言|Golang

题解PTA团体程序设计天梯赛L1-038 新世界 (5 分) Go语言|Golang