码迷,mamicode.com
首页 > 其他好文 > 详细

2020团体程序设计天梯赛 补题

时间:2020-12-11 11:38:53      阅读:2      评论:0      收藏:0      [点我收藏+]

标签:结构体   题目   error:   data   nod   为什么   都对   error   order   

L2-1 简单计算器 (25分)

这个题会用栈就能做出来了。按题目要求写就行,比赛没做全对。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
stack<int>s1;
stack<char>s2;
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int t;
cin>>t;
s1.push(t);
}
for(int i=0;i<n-1;i++)
{
char t;
cin>>t;
s2.push(t);
}
int n1,n2;
char n3;
n--;
int f=0;
while(n--)
{
f=0;
n1=s1.top();
s1.pop();
n2=s1.top();
s1.pop();
n3=s2.top();
s2.pop();
if(n3==‘+‘)n2+=n1;
if(n3==‘-‘)n2-=n1;
if(n3==‘*‘)n2*=n1;
if(n3==‘/‘)
{
if(n1==0)
{
cout<<"ERROR: "<<n2<<"/"<<n1<<endl;
//这个地方比赛的时候直接输出了0而不是n1,所以有两个样例没过得了18分
f=1;
break;
}
else n2/=n1;
}
if(f)break;
//cout<<n2<<endl;
s1.push(n2);
}
if(!f)cout<<n2<<endl;
}

L2-3 完全二叉树的层序遍历 (25分)

这种题主要是背模板

#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

struct Node
{
int data;
int l,r;
}node[31];
void postOrder(int d)
{
if(node[d].l!=0)postOrder(node[d].l);//递归后序遍历,建树
if(node[d].r!=0)postOrder(node[d].r);
cin>>node[d].data;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
if(i*2<=n)node[i].l=i*2;
if(i*2+1<=n)node[i].r=i*2+1;
}
postOrder(1);
cout<<node[1].data;
for(int i=2;i<=n;i++)
{
cout<<" "<<node[i].data;
}
}

L2-4 网红点打卡攻略 (25分)

样例都对但不知道哪错了只有18分

#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
/*
*/
struct data
{
int id;
ll summ;
} d[205];//结构体存符合的攻略
bool cmp(data x,data y)//排序来找出要输出的那个
{
if(x.summ==y.summ)return x.id<y.id;
return x.summ<y.summ;
}
int main()
{
ll n,m;
cin>>n>>m;
ll s[n+1][n+1]= {0};//二维数组存每条路线的价格
for(int i=0;i<=n;i++)//不知道为什么直接让数组={0}无法全部初始化,就用遍历初始化了一次
{
for(int j=0;j<=n;j++)
{
s[i][j]=0;
}
}
for(int i=1; i<=m; i++)
{
ll a,b,c;
cin>>a>>b>>c;
s[a][b]=c;
s[b][a]=c;
}
/*for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
cout<<s[i][j]<<" ";
}
cout<<endl;
}*/
ll nn;
cin>>nn;
ll kk=0;
for(int i=0; i<nn; i++)
{

ll cnt[n+1]= {0};//标记出现过的地点
ll k;
cin>>k;
ll sum=0;//记录花费的钱
ll x[k+3];//存攻略路线
int f=1;//f判断是否符合条件
ll ff=0;
x[0]=0;//第0个和第k+1个下标的地点是0(家)
x[k+1]=0;
for(int j=1; j<=k; j++)
{
cin>>x[j];
if(s[x[j-1]][x[j]]==0)
{
f=0;//如果没有这条路线就不符合条件
}
else
{
ff++;//ff判断这个攻略是否不足n个地点
if(cnt[j]==0)
cnt[j]=1;//标记出现一次的地点
else//如果一个地点出现两次以上就不符合条件
f=0;
sum+=s[x[j-1]][x[j]];
}
}
if(s[x[k]][x[k+1]]==0)//这里要判断是否有最后一个地点和家这条路线
{
f=0;
}
else
{
sum+=s[x[k]][x[k+1]];
}
if(f&&ff>=6)
{
//cout<<i+1<<" "<<sum<<endl;
d[kk].id=i+1;
d[kk].summ=sum;
kk++;
}
for(int j=0; j<=n; j++)
{
cnt[j]=0;
}
}
sort(d,d+kk,cmp);
cout<<kk<<endl;
cout<<d[0].id<<" "<<d[0].summ<<endl;
}

2020团体程序设计天梯赛 补题

标签:结构体   题目   error:   data   nod   为什么   都对   error   order   

原文地址:https://www.cnblogs.com/SyrupWRLD999/p/14082078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!