P1104 生日 题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行, 第1行为OI组总人数n: 第2行至第n+1行分别是每人的姓名s.出生年y.月m.日d. 输出格式: 有n行, 即n个生日从大到小同学的姓名.(如果有两个同学生日相同,输入靠后的同学先输出) 输入输出样例 输入样例#1: 复制 3 Yangchu 1992 4 23 Qiujingya 1993 10 13 Luow…
P1104 生日 题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行, 第1行为OI组总人数n: 第2行至第n+1行分别是每人的姓名s.出生年y.月m.日d. 输出格式: 有n行, 即n个生日从大到小同学的姓名.(如果有两个同学生日相同,输入靠后的同学先输出) 输入输出样例 输入样例#1: 复制 3 Yangchu 1992 4 23 Qiujingya 1993 10 13 Luow…
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 那么讲题了 很好的一道图论模型转化的题目 考虑什么情况下两个元素一定要放在不同的栈内 经过一番仔细思考+草稿模拟你会得出 当且仅当存在三元组\((i,j,k)\),其中\(i<j<k\)且\(v[k]<v[i]<v[j]\)时,\(i\)和\(j\)一定要放在两个不同的栈内 抽象理解…
题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,不过我是来讲选择排序的. 选择排序\((Selection sort)\)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法. 然后我们重载一下运算符,直接排序就可以了. 时间复杂度:\(O(n^2)\) 空间复杂度:\(O(n)\) 代码如下: #includ…
题目来源:洛谷P1311 思路 纯暴力明显过不了这道题 所以我们要考虑如何优化到至多只能到nlogn 但是我们发现可以更优到O(n) 我们假设我们当前寻找的是第二个人住的客栈i 那么第一个人住的客栈肯定在i之前 如果在枚举的时候发现一家客栈满足小于可承受价格 那么这家客栈左边与i客栈颜色相同的都可以视为一种方案 所以我们需要一个数组sum[k]记录到i之前第k种颜色一共有几家客栈 last[k]数组存下第k种颜色在i之前的最后一家客栈(判断满足价格的客栈颜色是否在此这种颜色最后一家位置的后面)…
题目描述 cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序.但cjf君最近作业很多,没有时间,所以请你帮她排序. 输入输出格式 输入格式: 有2行,第1行为OI组总人数n:第2行至第n+1行分别是每人的姓名s.出生年y.月m.日d. 输出格式: 有n行,即n个生日从大到小同学的姓名.(如果有两个同学生日相同,输入靠后的同学先输出) 输入输出样例 输入样例#1: 3 Yangchu 1992 4 23 Qiujingya 1993 10 13 Luowen 1991 8 1 输出样…
https://www.luogu.org/problemnew/show/P1073 C国有 n n个大城市和 mm 条道路,每条道路连接这 nn个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 mm 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1条. C C国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同.但是,同一种商品在同一个城市的买入价和卖出价始终是相同的. 商人阿龙来到 CC 国旅…
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1不为空,将S1栈顶元素弹出至输出序列 操作c 如果输入序列不为空,将第一个元素压入栈S2 操作d 如果栈S2不为空,将S2栈顶元素弹出至输出序列 如果一个1~n的排列P可以通过一系列操作使得输出序列为1,2,…,(n-1),n,Tom就称P是一个“可双栈排序排列”.例如(1,3,2,4)就是一个“可…
题目链接 //输出ht见UOJ.35 #include<cstdio> #include<cstring> #include<algorithm> const int N=1e6+5; int n,tm[N],t1[N],t2[N],SA[N],rk[N],ht[N]; //SA[i]=j:排名为i的后缀开头的下标为j //rk[i]=j:以下标i开头的后缀排名为j //ht[i]:排名为i的后缀与排名为i-1的后缀的LCP长度 char s[N]; void Get_…
这题什么毒瘤......之前看一直没思路,然后心说写个暴搜看能有多少分,然后就A了??! 题意:给你一个n排列,求它们能不能通过双栈来完成排序.如果能输出最小字典序方案. [update]这里面加了一个错误的剪枝.这是个假算法. 解:首先我们发现有一个策略,就是可以出栈的时候出栈,否则就在两个栈中选栈顶大于它且栈顶尽量小的那个入栈.如果这样还GG就无解. 但是这样不能保证字典序最小.因为入栈栈顶较小的可以保证决策包容性,但是可能你入另一个栈不会引起冲突. 于是想到搜索,T飞. 加上剪枝:如果先入…