文章目录

  • 个人题解:这里我只写我个人认为应该写的题解,太简单的就不写了
  • L2-2 口罩发放 (25分)
    • 思路:正解
  • L2-3 完全二叉树的层序遍历 (25分)
    • 思路:正解
  • L2-4 网红点打卡攻略 (25分)
    • 思路:正解
  • L3-1 那就别担心了 (30分)
    • 思路1:骗分
    • 思路2:正解

这次天梯赛拖后腿了,好几道应该作对的题目都没搞出来

个人题解:这里我只写我个人认为应该写的题解,太简单的就不写了

L2-2 口罩发放 (25分)

思路:正解

  • 这个题的难点不在于题目,而在于你的读题水平,记住这个题的几个约束条件。1、身份证号必须是18位。2、同一个人在第i天申请成功,则需要等到i + P + 1天才能再次申请。3、每天有S个名额,直到发完为止。4、排序首先按照提交的时间排序,如果时间相同的话,那么按照次序,也就是当天提交时候的顺序。5、答案1记录每天发放的口罩的人的姓名和身份号,答案2记录所有的身体状况位1的人,按照顺序记录,而且只记录一次。所以这个要在排序之前就记录下来每天的身体状况为1的人
#include <bits/stdc++.h>
using namespace std;
const int N = 1100;
struct edge{string name;string id;int heal;int times;int ci;
};
int D,P,S,T;
bool check(string id)
{if(id.size() != 18){return false;}for(int i = 0;i < 18;i ++){if(id[i] < '0' || id[i] > '9'){return false;}}return true;
}bool cmp(edge e1,edge e2)
{if(e1.times == e2.times){return e1.ci < e2.ci;}return e1.times < e2.times;
}
map<string,int>mp;
set<string>st;
vector<pair<string,string>>res;
int main()
{cin >> D >> P;for(int i = 1;i <= D;i ++){cin >> T >> S;vector<edge>v;for(int j = 0;j < T;j ++){edge e;int a,b;cin >> e.name >> e.id >> e.heal;scanf("%d:%d",&a,&b);e.times = a*60 + b;e.ci = j;if(check(e.id)){if(e.heal == 1){if(!st.count(e.id)){st.insert(e.id);res.push_back({e.name,e.id});}}v.push_back(e);}}sort(v.begin(),v.end(),cmp);vector<pair<string,string>>ans;for(auto &x : v){string id = x.id;if(S == 0) break;if(mp[id] <= i){mp[id] = i + P + 1;ans.push_back({x.name,x.id});S --;}}for(auto &x : ans){cout << x.first << ' ' << x.second << endl;}}for(auto &x : res){cout << x.first << ' ' << x.second << endl;}return 0;
}

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

思路:正解

  • 这个题开始没做出来,今天补题的时候发现这个很简单,应该是这个4道题目里最简单的一道题目了,淦;给你一个完美二叉树的后序遍历,然后写出其层序遍历,还是见图说话吧
#include <bits/stdc++.h>
using namespace std;
const int N = 1000;struct edge{int data;int left;int right;
}t[N];
vector<int>ans;void dfs(int u)
{if(u == 0){return;}dfs(t[u].left);dfs(t[u].right);ans.push_back(u);
}
int a[N];
int b[N];int main()
{int n;cin >> n;for(int i = 1;i <= 30;i ++){t[i].data = i;if(i * 2 > n){break;}t[i].left = i * 2;if(i * 2 + 1 > n){break;}t[i].right = i * 2 + 1;}dfs(1);for(int i = 1;i <= n;i ++){cin >> a[i];}bool is_k = false;for(int i = 0;i < ans.size();i ++){int t = ans[i];b[t] = a[i + 1];}for(int i = 1;i <= n;i ++){if(is_k) cout << ' ';is_k = true;cout << b[i];}return 0;
}

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

思路:正解

  • 给你一个路径,判断这条路径是否是一个NP完全问题的解,如果是找出路径最短的那个解,而且还得记录有多少个正确的解
  • 这个题要判断给的点是否是n个不同的点就好了。1、p等于n。2、这p个点没有重复的点
#include <bits/stdc++.h>
using namespace std;const int N = 210;int g[N][N];
int n,m;
int k,p;int road[N];
long long id,ans = 1e9;
long long sum;
bool check()
{sum = 0;sum += g[0][road[1]];for(int i = 1;i < p;i ++){int x = road[i],y = road[i + 1];sum += g[x][y];   }sum += g[road[p]][0];if(sum >= 1e9){return false;}return true;
}
int main()
{cin >> n >> m;memset(g,0x3f,sizeof g);for(int i = 0;i < m;i ++){int a,b,c;cin >> a >> b >> c;g[a][b] = g[b][a] = min(g[a][b],c);}cin >> k;int cnt = 0;for(int i = 1;i <= k;i ++){cin >> p;set<int>ss; for(int j = 1;j <= p;j ++){cin >> road[j];ss.insert(road[j]);}if(p == n && ss.size() == n && check()){if(ans > sum){ans = sum;id = i;}cnt ++;}}cout << cnt << endl;cout << id << ' ' << ans << endl;return 0;
}

L3-1 那就别担心了 (30分)

思路1:骗分

  • 暴力搜索,据说bfs爆内存,我用的dfs,卡时间,只需要从起点搜索道终点,看看有多少条路就好了,这样,再搜索的过程中判断时候有一个点,不能到达任何一个点(也就是判断融洽关系)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;int h[N],e[N],ne[N],idx;int n,m;
int S,E;void add(int a,int b)
{e[idx] = b,ne[idx] = h[a],h[a] = idx ++;
}int ans;
bool st[N];
bool flag = true;
void dfs(int u)
{if(u == E){ans ++;return;}if(u != E){if(h[u] == -1){flag = false;}}for(int i = h[u];~i;i = ne[i]){int j = e[i];dfs(j);}
}int main()
{memset(h,-1,sizeof h);cin >> n >> m;for(int i = 0;i < m;i ++){int a,b;cin >> a >> b;add(a,b);}cin >> S >> E;dfs(S);if(flag){cout << ans << ' ' << "Yes" << endl;}else{cout << ans << ' ' << "No" << endl;}return 0;
}

思路2:正解

  • 记忆化搜索
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;int h[N],e[N],ne[N],idx;int n,m;
int S,E;void add(int a,int b)
{e[idx] = b,ne[idx] = h[a],h[a] = idx ++;
}int ans[N];
bool st[N];
bool flag = true;
int dfs(int u)
{if(h[u] == -1 && u != E){flag = false;}st[u] = true;if(ans[u]) return ans[u];for(int i = h[u];~i;i = ne[i]){int j = e[i];ans[u] += dfs(j);}return ans[u];
}int main()
{memset(h,-1,sizeof h);ios::sync_with_stdio(false);cin >> n >> m;for(int i = 0;i < m;i ++){int a,b;cin >> a >> b;add(a,b);}cin >> S >> E;ans[E] = 1;dfs(S);if(flag){cout << ans[S] << ' ' << "Yes" << endl;}else{cout << ans[S] << ' ' << "No" << endl;}return 0;
}

总结:主要问题还是自己本身菜,读题太慢了,打代码的速度也太慢了

2020团体程序设计天梯赛题解(部分)相关推荐

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

    先贴成绩 今年L1的题偏基础,比赛用了一个小时切完了,(算上PTA系统网络错误崩了20分钟和BW傻等-QAQ)L2顺着做的,L2-1模拟过了去看L2-2,并查集写完数据跑错了,调了一个小时发现题目说明 ...

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

    概况(复盘) 打完最后的分数是170,三等还差5分 除了模板25分是我的锅之外(明明考前还看了的),, 还有L1最后一题列标号567没减3扣了2分,L2第二题身份证号码是数字扣了4分. 以及改了一个多 ...

  3. 【2020团体程序设计天梯赛】L1部分(PTA,L1-065到L1-072)题解代码

    概要 L1一共8题,5分,10分,15分,20分各两题. 5分题一般会输入输出就行,10分题就是一个循环或者选择结构 15分题有简单的模拟和查找,20分题是稍微繁琐的简单模拟这样. L1-065 嫑废 ...

  4. 【2020团体程序设计天梯赛】L2-3 完全二叉树的层序遍历(后序遍历转层次遍历)

    problem 7-11 完全二叉树的层序遍历 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的 ...

  5. 2022团体程序设计天梯赛题解 L2

    题目 感觉今年L2有点难,难在题目描述,题目描述的云里雾里的比题目本身难得多.2-3我确实没想出来,确实菜,不过想出来也拿不了国二,太菜啦,抓紧remake叭. L2-1 题意: 题意很烦.给定一个栈 ...

  6. GPLT团体程序设计天梯赛题解L1部分

    文章目录 00x L1-001 Hello World (5 分) L1-002 打印沙漏 (20 分) L1-003 个位数统计 (15 分) L1-004 计算摄氏温度 (5 分) L1-005 ...

  7. 2020年团体程序设计天梯赛L1题目集(题目+代码)

    2020年11月团体程序设计天梯赛 第一次参加天梯赛,除了在门口冻得瑟瑟发抖,还有按不动的shift之外一切都还好- tip:不知道啥原因代码上基本没有注释,希望dalao们不要介意~ L1-1 嫑废 ...

  8. ptaa乘以b_PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)...

    C++ CPP C++语言开发 PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中--) PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:     ...

  9. 【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码

    [CCCC]PAT : 团体程序设计天梯赛-练习集 L2 答案 鉴定完毕,全部水题 ヾ(•ω•`)o 知识点分类(32): 1.树锯结构(9):二叉树的存储,编号,遍历顺序转换,求深度,底层节点,从底 ...

最新文章

  1. python wxpy_wxpy
  2. 《谷歌和亚马逊如何做产品》
  3. dao模式和前端控制器结合使用_前端技术及开发模式的演进,带你了解前端技术的前世今生...
  4. 开源的数据库,PostgreSQL 基础入门实战
  5. GIS实战应用案例100篇(三)-基于NDVI指数的绿地信息提取
  6. 彩扩机项目--死区,另辟蹊径使用即将导通的一路的电压得能量对需要关闭的一路的电容进行放电...
  7. IE11浏览器:请不要再叫我IE,谢谢
  8. 从事人工智能要学计算机什么专业,人工智能专业需要什么学历
  9. 剑指offer面试题53 - II. 0~n-1中缺失的数字(二分查找)
  10. 信息学竞赛报名指南(NOI)
  11. 四级网络工程师笔记-计算机网络(中)
  12. 怎样设置公众号自动回复
  13. 2021最新PHP短网址生成系统/短链接生成系统/URL缩短器系统源码
  14. Springboot测试类之@RunWith注解
  15. 狮子,狼,羊群的故事
  16. Windows 11可使AMD芯片性能下降15%
  17. PL/SQL连接时-Error while trying to retrieve text for error ORA-12154
  18. 思科交换机基础--11三层交换机ACL配置
  19. QA实习第三周个人感受
  20. 今日踩坑Maven:omitted for duplicate

热门文章

  1. 黑马的python---09-django-04django入门
  2. react native FlatList
  3. 关于Opencv 分水岭算法种子点(注水口)的选取问题
  4. 麦克斯韦方程组,史上最牛逼公式之一
  5. 开车是一场修行 安全驾驶的智慧 作者梦飞 柳实
  6. 绝地大逃杀官方指定迅游加速
  7. python中,@和- 代表什么?
  8. 蓝桥杯 ADV-287 算法提高 Monday-Saturday质因子
  9. P00605:数字的分解
  10. 配置coredns解析公网域名