团体程序设计天梯赛--5分题
Posted 星河欲转。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了团体程序设计天梯赛--5分题相关的知识,希望对你有一定的参考价值。
L1-001 Hello World!
#include<bits/stdc++.h>
using namespace std;
int main()
cout<<"Hello World!";
return 0;
L1-004 计算摄氏温度
#include<bits/stdc++.h>
using namespace std;
int main()
int a,b;
cin>>a;
b=5*(a-32)/9;
cout<<"Celsius = "<<b;
return 0;
L1-012 计算指数
#include<bits/stdc++.h>
using namespace std;
int main()
int n,x;
cin>>n;
x=pow(2,n);
cout<<"2^"<<n<<" = "<<x;
return 0;
L1-014 简单题
#include<bits/stdc++.h>
using namespace std;
int main()
cout<<"This is a simple problem.";
return 0;
L1-021 重要的话说三遍
#include<bits/stdc++.h>
using namespace std;
int main()
cout<<"I'm gonna WIN!\\nI'm gonna WIN!\\nI'm gonna WIN!\\n";
return 0;
L1-024 后天
#include<bits/stdc++.h>
using namespace std;
int main()
int d;
cin>>d;
if(d>=6)cout<<(d+2)%7;
else cout<<d+2;
return 0;
L1-026 I Love GPLT
#include<bits/stdc++.h>
using namespace std;
int main()
printf("I\\n \\nL\\no\\nv\\ne\\n \\nG\\nP\\nL\\nT");
return 0;
L1-029 是不是太胖了
#include<bits/stdc++.h>
using namespace std;
int main()
int h;double w;
cin>>h;
w=(h-100)*0.9*2;
printf("%.1f",w);
return 0;
L1-036 A乘以B
#include<bits/stdc++.h>
using namespace std;
int main()
int a,b;
cin>>a>>b;
cout<<a*b;
return 0;
L1-038 新世界
#include<bits/stdc++.h>
using namespace std;
int main()
cout<<"Hello World\\nHello New World";
return 0;
L1-042 日期格式化
#include<bits/stdc++.h>
using namespace std;
int main()
int a,b,c;
scanf("%d-%d-%d",&a,&b,&c);
printf("%d-%02d-%02d",c,a,b);
return 0;
L1-045 宇宙无敌大招呼
#include<bits/stdc++.h>
using namespace std;
int main()
string s;
cin>>s;
cout<<"Hello "<<s;
return 0;
L1-051 打折
#include<bits/stdc++.h>
using namespace std;
int main()
double a,b;
cin>>a>>b;
printf("%.2f",a*b/10.0);
return 0;
L1-052 2018我们要赢
#include<bits/stdc++.h>
using namespace std;
int main()
printf("2018\\nwo3 men2 yao4 ying2 !");
return 0;
L1-057 PTA使我精神焕发
#include<bits/stdc++.h>
using namespace std;
int main()
cout<<"PTA shi3 wo3 jing1 shen2 huan4 fa1 !";
return 0;
L1-060 心理阴影面积
#include<bits/stdc++.h>
using namespace std;
int main()
int x,y;
cin>>x>>y;
cout<<5000-(x*y/2+(100-x)*(y+100)/2);
return 0;
L1-065 嫑废话上代码
#include<bits/stdc++.h>
using namespace std;
int main()
cout<<"Talk is cheap. Show me the code.";
return 0;
L1-066 猫是液体
#include<bits/stdc++.h>
using namespace std;
int main()
int a,b,c;
cin>>a>>b>>c;
cout<<a*b*c;
return 0;
L1-073 人与神
#include<bits/stdc++.h>
using namespace std;
int main()
cout<<"To iterate is human, to recurse divine.";
return 0;
L1-074 两小时学完C语言
#include<bits/stdc++.h>
using namespace std;
int main()
int a,b,c;
cin>>a>>b>>c;
a=a-b*c;
cout<<a;
return 0;
L1-081 今天我要赢
#include<bits/stdc++.h>
using namespace std;
int main()
cout<<"I'm gonna win! Today!\\n2022-04-23";
return 0;
L1-082 种钻石
#include<bits/stdc++.h>
using namespace std;
int main()
int a,b;
cin>>a>>b;
cout<<a/b;
return 0;
L4-109 考试周
#include<bits/stdc++.h>
using namespace std;
int main()
int a,b;
cin>>a>>b;
printf("%d/%.1f=%d",a,b,a*1.0/b);
return 0;
L4-114 自动编程
#include<bits/stdc++.h>
using namespace std;
int main()
int n;
cin>>n;
cout<<"print("<<n<<")";
return 0;
L4-115 太神奇了
#include<bits/stdc++.h>
using namespace std;
int main()
int a,b;
cin>>a>>b;
cout<<b+a-1;
return 0;
团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分)
知识点:最短路dij
#include<bits/stdc++.h>
#define debug(x,y) printf("%s = %d\\n",x,y);
typedef long long ll;
using namespace std;
inline int read()
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')if(ch=='-')w=-1;ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
return s*w;
const int INF=0x3f3f3f;
const int maxn=1000;
int a[maxn];
int edge[maxn][maxn];
int n,m,s,d;
int dis[maxn];
int vis[maxn];
int cnt[maxn];
int num_a[maxn];//最短路上的最大救援队
int pathnum[maxn];//最短路的数量
int path[maxn];
void dij()
pathnum[s]=1;
dis[s]=0;
vis[s]=1;
num_a[s]=a[s];
for(int i=0;i<n;i++)
dis[i]=edge[s][i];
if(edge[s][i]<=INF&&i!=s)
path[i]=s;
num_a[i]=num_a[s]+a[i];
pathnum[i]=1;
for(int i=1;i<n;i++)
int now=0;
int minn=INF;
for(int j=0;j<n;j++)
if(vis[j]==0&&dis[j]<minn)
now=j;
minn=dis[j];
vis[now]=1;
for(int j=0;j<n;j++)
if(!vis[j])
if(dis[j]==edge[now][j]+minn)
pathnum[j]+=pathnum[now];
if(num_a[j]<num_a[now]+a[j])
num_a[j]=num_a[now]+a[j];
path[j]=now;
else if(dis[j]>edge[now][j]+minn)
dis[j]=edge[now][j]+minn;
num_a[j]=num_a[now]+a[j];
pathnum[j]=pathnum[now];
path[j]=now;
void print(int now)
if(now==s)
return ;
print(path[now]);
cout<<" "<<now;
int main()
// memset(edge,0x3f3f3f,sizeof(edge));
cin>>n>>m>>s>>d;
for(int i=0;i<n;i++)
dis[i]=INF;
for(int j=0;j<n;j++)
edge[i][j]=edge[j][i]=INF;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=1;i<=m;i++)
int u,v,w;
cin>>u>>v>>w;
edge[u][v]=w;
edge[v][u]=w;
dij();
cout<<pathnum[d]<<" "<<num_a[d]<<endl;
cout<<s;
print(d);
L2-002 链表去重 (25 分)
知识点:模拟链表
#include<bits/stdc++.h>
#define debug(x,y) printf("%s = %d\\n",x,y);
typedef long long ll;
using namespace std;
inline int read()
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')if(ch=='-')w=-1;ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
return s*w;
const int maxn=2e5+9;
struct node
int add;
int val,next;
link[maxn],b[maxn];
int vis[maxn];
int tot=0;
int main()
int beg,n;
cin>>beg>>n;
for(int i=1;i<=n;i++)
int add,val,nex;
cin>>add>>val>>nex;
link[add].val=val;
link[add].next=nex;
int now=beg;
// printf("----\\n");
while(1)
// printf("now=%d\\n",now);
if(now==-1)
break;
if(vis[abs(link[now].val)]==0)
if(now!=beg)
printf("%05d\\n",now);
vis[abs(link[now].val)]=1;
printf("%05d %d ",now,link[now].val);
// cout<<now<<" "<<link[now].val<<" "<<link[now].next<<endl;
now=link[now].next;
else
b[++tot].next=link[now].next;
b[tot].add=now;
b[tot].val=link[now].val;
now=link[now].next;
printf("-1\\n");
if(tot)
printf("%05d %d ",b[1].add,b[1].val);
for(int i=2;i<=tot;i++)
printf("%05d\\n%05d %d ",b[i].add,b[i].add,b[i].val);
printf("-1\\n");
L2-003 月饼 (25 分)
知识点:贪心
注意要将种类数和需求数都开成double,不然会被卡一个点
#include<bits/stdc++.h>
#define debug(x,y) printf("%s = %d\\n",x,y);
typedef long long ll;
using namespace std;
inline int read()
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')if(ch=='-')w=-1;ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
return s*w;
const int maxn=2000;
//int num[maxn];
//int val[maxn];
struct node
double num,val;
double ave;
a[maxn];
bool cmp(node a,node b)
return a.val*b.num>b.val*a.num;
int main()
int n,d;
cin>>n>>d;
for(int i=1;i<=n;i++)cin>>a[i].num;
for(int i=1;i<=n;i++)cin>>a[i].val;
for(int i=1;i<=n;i++)a[i].ave=1.0*a[i].val/a[i].num;
sort(a+1,a+1+n,cmp);
double sum=0;
for(int i=1;i<=n;i++)
// cout<<a[i].ave<<endl;
if(d>=a[i].num)
d-=a[i].num;
sum+=a[i].val;
else
sum+=d*a[i].ave;
break;
printf("%.2f\\n",sum);
L2-004 这是二叉搜索树吗? (25 分)
知识点:考察了前序遍历和后序遍历的应用
#include<bits/stdc++.h>
#define debug(x,y) printf("%s = %d\\n",x,y);
typedef long long ll;
using namespace std;
inline int read()
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')if(ch=='-')w=-1;ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
return s*w;
const int maxn=2000;
int pos[maxn];
int iff=0;
vector<int>post;
void getpos(int l,int r)
if(l>r)return ;
int tl=l+1,tr=r;
if(!iff)//正常的二叉搜索树
while(tl<=r&&pos[tl]<pos[l])tl++;//找到第一个大的
while(tr>l&&pos[tr]>=pos[l])tr--; //找到第一个小的
else //镜像的
while(tl<=r&&pos[tl]>=pos[l])tl++;
while(tr>l&&pos[tr]<pos[l])tr--;
if(tl!=tr+1)return ;
getpos(l+1,tr);
getpos(tl,r);
// cout<<pos[l]<<endl;
post.push_back(pos[l]);
int main()
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>pos[i];
getpos(1,n);
if(post.size()!=n)
iff=1;
post.clear();
getpos(1,n);
if(post.size()!=n)
cout<<"NO"<<endl;
return 0;
cout<<"YES"<<endl;
for(int i=0;i<n;i++)
if(i==0)
printf("%d",post[i]);
else printf(" %d",post[i]);
return 0;
L2-005 集合相似度 (25 分)
知识点:考察对set的应用情况
#include<bits/stdc++.h>
#define debug(x,y) printf("%s = %d\\n",x,y);
typedef long long ll;
using namespace std;
inline int read()
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')if(ch=='-')w=-1;ch=getchar()以上是关于团体程序设计天梯赛--5分题的主要内容,如果未能解决你的问题,请参考以下文章
团体程序设计天梯赛-练习集L1-001 Hello World (5 分)