2024年第九届团队程序设计天梯赛c++题解L1-L3-1(附PTA网址)

发布于:2025-04-17 ⋅ 阅读:(34) ⋅ 点赞:(0)

L1-1 编程解决一切 5分

L1-097 编程解决一切 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388416

#include<bits/stdc++.h>
#define int long long
using namespace std;
bool tin = 0 ;	
void solve()
{
    cout<<"Problem? The Solution: Programming.";
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L1-2 再进去几个人 5分

L1-098 再进去几个人 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388417

#include<bits/stdc++.h>
using namespace std;
int main()
{
    	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
    int a,b;
    cin>>a>>b;
    cout<<b-a;
    return 0; 
}

L1-3 帮助色盲 10分

L1-099 帮助色盲 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388418

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
    int a,b;
    cin>>a>>b;
    if(b||a==2)
    {
        cout<<"-\n";
    } 
    else if(a==0)
    {
        cout<<"biii\n";
    }
    else if(a==1)
    {
        cout<<"dudu\n";
    }
    
    if(a==0||a==2)
        cout<<"stop";
    else if(a==1)
    {
        cout<<"move";
    }
}
signed main()
{
		ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	//cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L1-4 四项全能 10分

L1-100 四项全能 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388419

#include<bits/stdc++.h>
using namespace std;
#define int long long
bool tin =0;
void solve()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);	
    int n,m;
    cin>>n>>m;
    int sum=0;
    for(int i=0;i<m;i++)
    {
        int x;
        cin>>x;
        sum+=x;
    }
    int ma=n*(m-1);
    cout<<max(0LL,sum-ma);
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L1-5 别再来这么多猫娘了!15分

L1-101 别再来这么多猫娘了! - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?page=1&problemSetProblemId=1781658570803388420

#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
    ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
    int n;
    cin>>n;
    vector <string > s(n);
    for(int i=0;i<n;i++)
        cin>>s[i];
    int k;
    cin>>k;
    cin.ignore();
    string ss;
    getline(cin,ss);
    int ans=0;
    string st="遮沙避风了";//是啥都行,与原字符区分开就行,最好使用组合符号如x_x;
    int nn=st.size();
    for(int i=0;i<n;i++)
    {
       while(ss.find(s[i])!=-1)
       {
           int b=ss.find(s[i]);
           ss.erase(b,s[i].size());
           ss.insert(b,st);
           ans++;
       }
    }
           while(ss.find(st)!=-1)
       {
           int b=ss.find(st);
           ss.erase(b,nn);
           ss.insert(b,"<censored>");
       }
    if(ans>=k)
    {
        cout<<ans<<'\n';
        ss="He Xie Ni Quan Jia!";
    }
    cout<<ss;
}

signed main()
{
	int T;
	T=1;
	//cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L1-6 兰州牛肉面 15分

L1-102 兰州牛肉面 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?page=1&problemSetProblemId=1781658570803388421

#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
    map<int,double> pri;
    map<int,int> num;
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        double a;
        cin>>a;
        pri[i]=a;
    }
    while(1)
    {
        int a,b;
        cin>>a>>b;
        num[a]+=b;
        if(!a&&!b)
            break;
    }
    double ans=0;
    for(int i=1;i<=n;i++)
    {
        cout<<num[i]<<'\n';
        ans+=pri[i]*1.0*num[i];
    }
    cout<<fixed<<setprecision(2)<<ans;
}

signed main()
{
	int T;
	T=1;
	//cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L1-7 整数的持续性 20分

L1-103 整数的持续性 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388422&page=1

#include<bits/stdc++.h>
#define int long long
using namespace std;
bool tin = 0;
int ans[100005];
void solve()
{
    int a,b;
    cin>>a>>b;
    int n=b-a;
    for(int i=a;i<=b;i++)
    {
        int t=i;
        int num=0;
        while(t>=10)
        {
            num++;
            int ne=1;
            while(t)
            {
                ne*=t%10;
                t/=10;
            }
            t=ne;
        }
        ans[i-a]=num;
    }
    int m=0;
    for(int i=0;i<=n;i++)
    {
        m=max(m,ans[i]);
    }
    int j=0;
    cout<<m<<'\n';
    for(int i=0;i<=n;i++)
    {
        if(ans[i]==m)
        {
            if(j)
                cout<<' ';
            else
                j=1;
            cout<<i+a;
        }
    }
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L1-8 九宫格 20分

L1-104 九宫格 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388423&page=1

#include<bits/stdc++.h>
using namespace std;
#define int long long
bool tin =1;
int n=9;
bool hang(vector <vector<int>>a)
{
    for(int i=0;i<n;i++)
    {
    	set<int> st;
    	for(int j=0;j<n;j++)
    	{
    		if(a[i][j]>=1&&a[i][j]<=9)
    		{
    			if(st.count(a[i][j]))
    			return 0;
    			st.insert(a[i][j]);
			}
			else
			return 0;
		}
	}
	return 1;
}
bool lie(vector <vector<int>>a)
{
       for(int i=0;i<n;i++)
    {
    	set<int> st;
    	for(int j=0;j<n;j++)
    	{
    		if(a[j][i]>=1&&a[j][i]<=9)
    		{
    			if(st.count(a[j][i]))
    			return 0;
    			st.insert(a[j][i]);
			}
			else
			return 0;
		}
	}
	return 1; 
}
bool gong(vector <vector<int>>a)
{
	for(int i=0;i<n;i+=3)
	{
		for(int j=0;j<n;j+=3)
		{
			  	set<int> st;
			for(int k=i;k<i+3;k++)
			{
				for(int l=j;l<j+3;l++)
				{
						   		if(a[k][l]>=1&&a[k][l]<=9)
		    		{
		    			if(st.count(a[k][l]))
		    			return 0;
		    			st.insert(a[k][l]);
					}
					else
					return 0;	
				}
			}
		}
	}
	return 1;
}
void solve()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);	
    vector <vector <int> > a(n,vector <int>(n));
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cin>>a[i][j];
    }
    if(hang(a)&&lie(a)&&gong(a))
        cout<<'1';
    else
        cout<<'0';
    cout<<'\n';
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L2-1 鱼与熊掌 25分

L2-049 鱼与熊掌 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?page=1&problemSetProblemId=1781658570803388424

#include<bits/stdc++.h>
#define int long long
using namespace std;
bool tin = 0;
vector <int> h[100005];
void solve()
{
    int n,m,k,x,y;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>k;
        while(k--)
        {
            cin>>x;
            h[x].push_back(i);
        }
    }
    cin>>k;
    while(k--)
    {
        int ans=0;
        cin>>x>>y;
        map<int,bool> ma;
        for(auto x:h[x])
            ma[x]=1;
        for(auto x:h[y])
            ans+=ma[x];
        cout<<ans<<'\n';
    }
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L2-2 懂蛇语 25分

L2-050 懂蛇语 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388425&page=1

#include<bits/stdc++.h>
#define int long long
using namespace std;
bool tin = 0;
string ans[100005];
void solve()
{
	unordered_map<string,vector <string> > ma;
    int n;
    cin>>n;
    string s;     
    getline(cin,s);
    for(int i=0;i<n;i++)
    {
        getline(cin,s);
        string st="";
        int t=s.size();
        for(int i=0;i<t;i++)
        {
             if(i==0&&s[i]!=' '||s[i]!=' '&&s[i-1]==' ')
                st+=s[i];
        }
        ma[st].push_back(s);
    }
    int m;
    cin>>m;
 	getline(cin,s);
    
        for(int i=0;i<m;i++)
    {
        getline(cin,s);
        string st="";
        int t=s.size();
        for(int i=0;i<t;i++)
        {
            if(i==0&&s[i]!=' '||s[i]!=' '&&s[i-1]==' ')
                st+=s[i];
        }
            int ok=1;
            int num=0;
            for(auto x:ma[st])
                ans[num++]=x;
            sort(ans,ans+num);
            if(num)
            {
                for(int i=0;i<num;i++)
                {
                    if(i)
                        cout<<"|";
                    cout<<ans[i];
                }
            }
                else
                    cout<<s;
            cout<<'\n';
    }
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L2-3 满树的遍历 25分

L2-051 满树的遍历 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388426&page=1

#include<bits/stdc++.h>
#define int long long
using namespace std;
bool tin = 0;
vector <int> h[100005];	
int n,x;
int num=0;
int ans[100005];
void dfs(int t)
{
	ans[num++]=t;
	for(auto y:h[t])
	dfs(y);
}
void solve()
{

    cin>>n;
    int g=0;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        if(x)
        h[x].push_back(i);
        else
            g=i;
    }
    int k=h[g].size();
    int ok=1;
    //cout<<k<<'\n';
    for(int i=1;i<=n;i++)
    {
        if(ok)
        {
            if(h[i].size())
            {
                if(h[i].size()!=k)
                {
                    ok=0;
                }
            }
        }
        if(!ok)
        {
            if(h[i].size()>k)
                k=h[i].size();
        }
    }
    cout<<k<<' ';
    if(ok)
        cout<<"yes";
    else
        cout<<"no";
    cout<<'\n';
    dfs(g);
    for(int i=0;i<num;i++)
    {
        if(i)
            cout<<' ';
        cout<<ans[i];
    }
    
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L2-4 吉利矩阵 25分

L2-052 吉利矩阵 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388427&page=1

#include<bits/stdc++.h>
#define int long long
using namespace std;
bool tin = 0 ;	
int l,n;
int ans=0;
int xx[5],yy[5];
void dfs(int num)
{
   // cout<<num<<' ';
    if(num==n*n)
    {
        ans++;
    }
    else
    {
        for(int i=0;i<=l;i++)
        {
            int x=num/n,y=num%n;
            if(xx[x]+i>l||yy[y]+i>l)
                break;
            if(x==n-1)
                i=l-yy[y];
            if(y==n-1)
                i=l-xx[x];
            xx[x]+=i,yy[y]+=i;
            dfs(num+1);
            xx[x]-=i,yy[y]-=i;
        }
    }
}
void solve()
{
    cin>>l>>n;
    dfs(0);
    cout<<ans;
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

L3-1 夺宝大赛 30分

L3-037 夺宝大赛 - 团体程序设计天梯赛-练习集 (pintia.cn)https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1781658570803388428&page=1其实是一道简单题,多起点单终点直接看成单起点多终点,bfs一便记录步数然后处理数据即可

#include<bits/stdc++.h>
#define int long long
using namespace std;
bool tin = 0 ;	
int ma[125][125];
pair <int,int> bb[120];
    int n,m;
int nu[120][120];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void bfs(int a,int b)
{
    queue <pair <int,int> > q;
    q.push({a,b});
    nu[a][b]=1;
    while(!q.empty())
    {
        int x=q.front().first,y=q.front().second;
        q.pop();
        for(int i=0;i<4;i++)
        {
            int xx=x+dx[i],yy=y+dy[i];
            if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&nu[xx][yy]==0&&ma[xx][yy]!=0)
            {
                q.push({xx,yy});
                nu[xx][yy]=nu[x][y]+1;
            }
        }
    }
}
void solve()
{
    cin>>n>>m;
    int ax=0,bx=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>ma[i][j];
            if(ma[i][j]==2)
                ax=i,bx=j;
        }
    }
    bfs(ax,bx);
    int k;
    cin>>k;
    int a,b;
    map<int,int> mp;
    mp[INT_MAX]++;
    vector <pair <int,int> > ans(k+1);
    for(int i=1;i<=k;i++)
    {
        cin>>b>>a;
        ans[i].first=nu[a][b];
        if(ans[i].first==0)
            ans[i].first=INT_MAX;
        mp[ans[i].first]++;
        ans[i].second=i;
    }
    sort(ans.begin()+1,ans.end());
    int ok=1;
    for(int i=1;i<=k;i++)
    {
        if(mp[ans[i].first]==1)
        {
            cout<<ans[i].second<<' '<<ans[i].first-1;
            ok=0;
            break;
        }
    }
    if(ok)
        cout<<"No winner.";
}
signed main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int T=1;
	if(tin)
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到