【2020团体程序设计天梯赛】L2部分(PTA,L2-033到L2-036)题解代码

简介: 【2020团体程序设计天梯赛】L2部分(PTA,L2-033到L2-036)题解代码

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

//开两个栈直接模拟
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
    int n;  cin>>n;
    stack<int>s1;
    stack<char>s2;
    for(int i = 1; i <= n; i++){
        int x;  cin>>x;  s1.push(x);
    }
    for(int i = 1; i < n; i++){
        char ch;  cin>>ch; s2.push(ch);
    }
    while(s1.size()>1){
        int n1 = s1.top();  s1.pop();
        int n2 = s1.top();  s1.pop();
        char op = s2.top();  s2.pop();
        if(op=='+')
            s1.push(n2+n1);
        else if(op=='-')
            s1.push(n2-n1);
        else if(op=='*')
            s1.push(n2*n1);
        else{
            if(n1==0){
                cout<<"ERROR: "<<n2<<"/0\n";
                return 0;
            }
            s1.push(n2/n1);
        }
    }
    cout<<s1.top();
    return 0;
}

L2-034 口罩发放 (25分)

//+ 在D天里发口罩,每个人获得要间隔P天。
//+ 给出每天的申请记录和口罩供应,包括string,id,siates,time;按照先后顺序判断每天发给谁。
//+ 并统计状态出问题的人,汇总输出。
//+ 直接模拟即可。能获得口罩的人,P天内没拿过,并且每天排名前几个。
#include<bits/stdc++.h>
using namespace std;

struct node{string name, id; int states; int t1, t2;};//申请,出现时间
bool cmp(node a, node b){return a.t1!=b.t1?a.t1<b.t1:a.t2<b.t2;}
int checkid(string s){
    if(s.size() != 18)return 0;
    for(int i = 0; i < 18; i++)//WA4,5,身份证必须是数字
        if(!isdigit(s[i]))return 0;
    return 1;
}

int main(){
    int d, p;  cin>>d>>p;
    map<string,int>mp;//相隔天数
    vector<node>ans; set<string>se;//生病的人
    for(int i = 1; i <= d; i++){
        int t, c;  cin>>t>>c;
        vector<node>tmp;
        for(int j = 1; j <= t; j++){
            string name, id;  int states, mm, hh; char ch;
            cin>>name>>id>>states>>hh>>ch>>mm;
            if(checkid(id)){
                tmp.push_back({name,id,states,hh*60+mm,j});
                if(states==1 && se.count(id)==0){
                    ans.push_back({name,id,states,hh*60+mm,j});
                    se.insert(id);
                }
            }
        }
        if(tmp.size()==0 || c==0)continue;
        sort(tmp.begin(),tmp.end(), cmp);
        for(int j = 0; j < tmp.size() && c; j++){
            if(mp.count(tmp[j].id)==0 || mp[tmp[j].id]+p+1<=i){
                mp[tmp[j].id] = i;
                c--;
                cout<<tmp[j].name<<" "<<tmp[j].id<<"\n";
            }
        }
    }
    for(int i = 0; i < ans.size(); i++){
        cout<<ans[i].name<<" "<<ans[i].id<<"\n";
    }
    return 0;
}

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

//满二叉树后序转先序,输出层次遍历
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 100010;

int n, a[maxn];
int Tree[maxn], r;
void build(int x){
    if(x>n)return ;
    build(x<<1);
    build(x<<1|1);
    Tree[x] = a[++r];
}

int main(){
    cin>>n;
    for(int i = 1; i <= n; i++)
        cin>>a[i];
    build(1);
    for(int i = 1; i <= n; i++){
        if(i!=1)cout<<" ";
        cout<<Tree[i];
    }
    return 0;
}

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

//+ n个点m条带权边。给出k条路径,判断能否从v1出发经过每个点一次并返回v1,输出最短的路径。
//+ n<200 所以邻接矩阵存个图,直接暴力枚举就行。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int inf = 1e9+10;
const int maxn = 220;
int e[maxn][maxn], vis[maxn];
int main(){
    int n, m;
    cin>>n>>m;
    for(int i = 0; i <= n; i++)
        for(int j = 0; j <= n; j++)
            e[i][j] = inf;
    for(int i = 1; i <= m; i++){
        int u, v, w;
        cin>>u>>v>>w;
        e[u][v] = e[v][u] = w;
    }
    int k;  cin>>k;
    int cnt = 0, po = 0, hf = inf;
    for(int i = 1; i <= k; i++){
        memset(vis,0,sizeof(vis));
        int kk;  cin>>kk;
        int la = 0, tmphf = 0, ok = 1;
        for(int j = 1; j <= kk; j++){
            int x;  cin>>x;
            if(e[la][x]!=inf && !vis[x]){
                //cout<<tmpfile<<" "<<e[la][x]<<"\n";
                tmphf += e[la][x];
                //cout<<tmpfile<<"\n";
                la = x;
                vis[x]++;
            }else{
                ok = 0;
            }
        }
        for(int i = 1; i <= n; i++){
            if(vis[i]!=1)ok = 0;
        }
        if(ok && e[la][0] != inf){
            tmphf += e[la][0];
            cnt++;
            //cout<<i<<": "<<tmphf<<"\n";
            if(tmphf < hf){
                hf = tmphf;
                po = i;
            }
        }
    }
    cout<<cnt<<"\n";
    cout<<po<<" "<<hf<<"\n";
    return 0;
}
目录
相关文章
|
人工智能 BI 知识图谱
2019年 团体程序设计天梯赛——题解集
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-057 PTA使我精神焕发 (5分) 本题题目链接 以上是湖北经济学院同学的大作。本题就请你用汉语拼音输出这句话。 输入格式: 本题没有输入。
138 0
 2019年 团体程序设计天梯赛——题解集
|
前端开发 JavaScript 开发者
2016年 团体程序设计天梯赛——题解集
⭐ L1-028 判断素数 (10分) 本题题目链接 本题的目标很简单,就是判断一个给定的正整数是否素数。 输入格式: 输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于2 31 的需要判断的正整数。 输出格式: 对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。
230 0
|
程序员
2017年 团体程序设计天梯赛——题解集
⭐L1-038 新世界 (5分) 本题题目链接👈 👈 👈 👈 👈 这道超级简单的题目没有任何输入。 你只需要在第一行中输出程序员钦定名言“Hello World”,并且在第二行中输出更新版的“Hello New World”就可以了。
297 0
|
芯片
2022年 团体程序设计天梯赛——题解集(1)
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-081 今天我要赢 (5分)——水题 本题题目链接!!!!! 2018 年我们曾经出过一题,是输出“2018 我们要赢”。今年是 2022 年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。
335 0
|
Linux 测试技术 容器
2020年 团体程序设计天梯赛——题解集(1)
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-065 嫑废话上代码 (5分) 本题题目链接!!!!! Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。
196 0
|
人工智能 算法 安全
2022年 团体程序设计天梯赛——题解集(2)
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-081 今天我要赢 (5分)——水题 本题题目链接!!!!! 2018 年我们曾经出过一题,是输出“2018 我们要赢”。今年是 2022 年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。
266 0
|
小程序 Linux
2020年 团体程序设计天梯赛——题解集(2)
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-065 嫑废话上代码 (5分) 本题题目链接!!!!! Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。
205 0
|
机器学习/深度学习
2018年 团体程序设计天梯赛——题解集
⭐L1-051 打折 (5分) 本题题目链接👈👈👈👈👈 去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情。例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60。本题就请你写个程序替客户计算折扣价。 输入格式: 输入在一行中给出商品的原价(不超过1万元的正整数)和折扣(为[1, 9]区间内的整数),其间以空格分隔。 输出格式: 在一行中输出商品的折扣价,保留小数点后 2 位。
504 0
|
C语言 C++
PTA团体程序设计天梯赛-练习集: L1-050 倒数第N个字符串 ( 15分 )
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。 输入格式: 输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。 输出格式: 在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。 输入样例:
147 0
|
测试技术 C语言 C++
PTA团体程序设计天梯赛-练习集:L1-003 个位数统计
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。 输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。 输出格式: 对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
166 0