
模拟
WerKeyTom_FTD
这个作者很懒,什么都没留下…
展开
-
复制&粘贴2
题目描述文本编辑器的一个最重要的机能就是复制&粘贴。JOI社现在正在开发一款能够非常高速地进行复制&粘贴的文本编辑器,作为JOI社一名优秀的程序猿,你担负起了复制&粘贴功能的测试这一核心工作。整个JOI社的命运都系在你的身上,因此你无论如何都想写出一个正确且高速的程序来完成这项工作。 具体的做法如下所示。文件的内容是一个字符串S,对其进行N次复制&粘贴的操作,第i次操作复制位置Ai和位置Bi之间的原创 2016-04-06 19:02:59 · 682 阅读 · 0 评论 -
[51nod1786]数据流中的算法 - 众数
题目描述数据流统计功能上线后,为51nod提升用户体验做出了很大的贡献。但是新问题随之而来,夹克老爷还想知道在一个窗口内,访问次数最多用户(即窗口内的众数)。如果有多个众数,取用户ID最小的一个。(窗口的意思是一个固定长度的区间!)(因为数据流是实时的、在线的,所以不允许使用离线算法^_^)做法一个map+一个set#include<cstdio>#include<algorithm>#incl原创 2017-06-18 22:26:39 · 751 阅读 · 0 评论 -
字符串游戏
题目大意题解瞎猜想和画图得到一个不好说的结论。 用诡异的单调栈做。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=1000000+10;char a[max原创 2017-06-22 20:16:12 · 652 阅读 · 0 评论 -
[CF480A]Exams
题目描述懒得写贪心排序,a第一关键字b第二关键字。 然后优先选b,不行选a。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=5000+10;struct dong{ int a,b;} a[maxn];int i,j原创 2017-06-11 16:06:28 · 307 阅读 · 0 评论 -
[CF480B]Long Jumps
题目描述懒得写模拟答案肯定小于等于2。 用个map,然后xjb讨论。#include<cstdio>#include<algorithm>#include<map>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=100000+10;map<int,int> ha,yl;int a[maxn];原创 2017-06-11 16:07:44 · 397 阅读 · 0 评论 -
[agc012d]Colorful Balls
前言做这题时感觉肯定是有一堆球允许重排的,要求找到每种颜色这些球的个数,其余球大概都是固定的,应该不复杂。 大概思路也确实就是这样。不过需要仔细讨论。 有一个很重要的性质当然是a和b如果都能和c对换,a和b也是可以对换的。题意n个球,每个都有颜色和重量。 对于两个同颜色的球,如果重量和在x以内可以交换位置。 对于两个不同颜色的球,如果重量和在y以内可以交换位置。 问颜色序列的方案数。做法一原创 2017-09-22 22:04:03 · 780 阅读 · 1 评论 -
健美猫
题目大意旋转序列s使得∑ni=1|si−i|\sum_{i=1}^n|s_i-i|最小做法大致思路是可以拆绝对值记录个数即贡献,顺着扫,对于一个位置有两个位置很关键。 (我都不知道我在说什么#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace原创 2017-09-11 22:29:35 · 744 阅读 · 0 评论 -
[agc013c]Ants on a Circle
题目大意数轴蚂蚁问题升级成环。做法如果是数轴是经典问题: 两只蚂蚁相遇后掉头可以看做代替对方继续前行。 相对位置永远不变。 初始坐标刚好递增。 但是现在是环,注意到每当有蚂蚁跨过L-1或0就会使排名进行右/左移。 因此也很方便了。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using na原创 2017-09-21 20:56:44 · 1005 阅读 · 0 评论 -
[agc011d]Half Reflector
前言推了一会儿发现很有趣哦。 没有看题解,可能做复杂了。题意一个长度为n的AB串。 每个位置实际是一个机器,机器有两种状态A和B。 每当一个球从左右某一端进入一个机器时,如果是A状态,就从同一端扔出去,否则从另一端扔出去。每次这样后机器会更改状态。 从最左端的机器左端扔一个球,最后一定会从最左或最右弹出。 问从最左端依次扔k个球,最后AB串长啥样。做法不妨先表示成01串,A是1。 从左端原创 2017-10-12 21:12:42 · 774 阅读 · 0 评论 -
[arc082f]Sandglass
题目大意有一个沙漏,初始A面在B面上方,A面有a克沙,B面有X-a克沙,每个时刻如果上面的那一面有沙就会掉一克下来。 有n个时刻我们会翻转沙漏,现在若干个询问给出a和t,问A面如果初始有a克沙,时刻t时A面有多少沙。画一下根据初始a的图像任意时刻都是一段平板或一段平板+一个斜率为1的直线+一段平板。#include<cstdio>#include<algorithm>#define fo(i,原创 2017-11-03 11:10:10 · 660 阅读 · 0 评论 -
[arc077e]guruguru
题目大意有一个台灯,等级为1~m的一个整数。 有一个喜爱等级x,你每次操作可以让台灯等级+1(m+1会变成1)或变成x。 现在你要完成台灯等级从ai变成ai+1这n-1个操作。 如何选择x能使操作次数最小。做法每次可以讨论出某些区间需要变成x然后到达ai+1比较优还是直接加到ai+1比较优。 然后打上对应前缀tag,最后顺序扫一遍找一个最小的。#include<cstdio>#includ原创 2017-11-04 09:29:17 · 749 阅读 · 0 评论 -
[CodeM初赛A轮]A
题解看懂题意题。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;typedef double db;const int maxn=1000+10;db c原创 2017-06-18 22:12:38 · 695 阅读 · 0 评论 -
最长不下降子序列
题目大意a1=t0 an=(A*an-1^2+B*an+C)%D(n>1) 求该序列最长不下降子序列长度暴力n不是很大显然可以暴力。 n很大呢? 那就不断减循环节长度直至减到一个阈值内,再暴力。 正确性显然,只要阈值不要设太小。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=原创 2016-12-23 22:32:52 · 505 阅读 · 0 评论 -
愉快的logo设计
题目描述K理事长正在思考日本信息学奥林匹克竞赛选手的应援道具的logo问题。某天,K理事长突发奇想,想要设计一个用’J’,’O’,’I’三种文字环形排列的logo,意为希望选手能从JOI中收获快乐的意思。 (注:“环形地”在日文中的表述为“円状に”,“円”读作“en”,再加上“JOI”三个字即为“enjoy”……) 如下所示,对于任意非负整数k,我们定义标号为k的JOI序列Sk为: ·S0为’原创 2016-04-06 19:04:32 · 668 阅读 · 0 评论 -
归途与征程
题目描述简单的思路把B串倍长,那么新的串任意一个长度为M的子串都是B的循环同构串。 按照*号把A串分成了若干段,然后每一段都与B串做一次KMP匹配。 具体的,设一个bz[i,j]表示B串第i个位置为开头是否能与第j段匹配。 那么统计答案就是枚举循环同构串的头部,不断往后跑。 当然,如果A串的头部或尾部不是∗*,那么要把它弄成∗*号。 跑的速度很慢达到m^2,所以预处理suc数组表示每个位置原创 2016-05-28 14:57:47 · 885 阅读 · 0 评论 -
成绩调研
题目大意求有多少个区间满足权值为i的数量在[li,ri]内。扫一扫我们枚举区间右端点,左端点的可取范围是一段区间。 尝试用两个堆维护左端点的最大值和最小值。 对于第i种权值,我们可以通过指针跳跳跳获得在位置i时左端点的左界和右界,所以一个堆保存所有权值的左界另一个保存右界。 注意l=0以及r=0的情况。#include<cstdio>#include<algorithm>#include<原创 2016-10-06 07:34:57 · 398 阅读 · 0 评论 -
跟踪
题目描述模拟我们可以枚举在那个点被抓到,然后让石神马不停蹄的跑到那个点,接着乖乖等死。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=200000+10;int f[maxn][25],d[maxn原创 2016-10-06 07:37:26 · 352 阅读 · 0 评论 -
排队
题目描述做法我们先处理出fix表示在全空情况下不断进人,i这个房间被第几个人最终停留。 用一个堆保留空房间当前fix的最小值,每次进一个人就是选择堆中最小值的房间。 拿走人的话观察一下就是从这个房间往上有人房间的数量-1,这个可以倍增来求,因为这个房间到根路径上有人和没人一定是分离开的。 分析一下势能这样做是n log n的。#include<cstdio>#include<algorith原创 2016-10-06 07:46:37 · 452 阅读 · 0 评论 -
string
题目描述给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位。由于答案可能很大,模10^9 + 7 输出。瞎做你尝试枚举比T串小的合法字符串最早在第几位和T不同,然后组合数+幂数算一波以这个为前缀的合法字符串数量。#include<cstdio>#include<algorithm>#de原创 2016-10-06 07:48:44 · 571 阅读 · 0 评论 -
小W学物理
题目描述为了测试小W的物理水平,Mr.X在二维坐标系中放了N面镜子(镜子坐标绝对值不超过M),镜子均与坐标轴成45°角,所以一共有两种类型“/”和“\”。原点不会有镜子,任意一点最多只有一面镜子。 镜子两个面都能反光,而中间不透光,例如,对于一个“/”型镜子,下方向射入的光线会被反射到右方向,左方向射入的光线会被反射到上方向。 现在有一条光线从原点沿X轴正方向射出,求走过T路程后所在位置模拟就模原创 2016-10-29 15:13:47 · 508 阅读 · 0 评论 -
图书列表
题目描述模拟这种题瞎模拟 我是建了个trie,对于图书和目录分开来存储。一个字符串用它在哈希表的位置作为数值。 然后输出的时候,把一个节点的儿子按字典序排序#include<cstdio>#include<cstring>#include<algorithm>#include<map>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace原创 2016-10-31 15:39:32 · 478 阅读 · 0 评论 -
[51nod月赛19D]石头剪刀布威力加强版
题目大意小A和小B在玩石头剪刀布,他们每个人写出一个序列。 小A写出了n个数。 小B写出了m个数。 其中0代表石头,1代表剪刀,2代表布 0>1,1>2,2>0。 他们总共进行k轮,第一轮选择第一个数字,后面每一轮两个人都选择序列的下一个数进行比赛(序列结尾的下一个位置在序列开头)。 问小A和小B每人赢了几局。瞎做例如我们现在统计A赢了几局。 假如Ai和Bj打,那么下一次轮到Ai时,B原创 2016-10-31 17:04:12 · 1013 阅读 · 0 评论 -
幻想
题目描述做容易归纳出Si就是i在k进制数下各数位上的数的和再模k。 证明很简单。 我们只需要维护k进制分解即可。 用一个数组维护,每次把最低位+1,然后考虑进位。 均摊分析这是线性的: 设势函数为k-1的数量。 每次若进位了s个,那么势函数减少了s,并可能增加1,实际消耗时间为s+1,因此Ai<=s+1-s+1=2 均摊复杂度为O(1) 优化常数使用模优化即可#include<cst原创 2016-12-06 16:54:55 · 335 阅读 · 0 评论 -
小Y增员操直播群
题目大意有nnn个人,初始一个人一个联通块,编号都是000。 每次两个联通块合并,假设较小联通块大小是xxx,较大联通块编号为yyy的会与较小联通块大小是y mod xy mod xy\ mod\ x的连边,然后编号变成y+xy+xy+x,接下来合并两个联通块。 最终所有人都在一个联通块内。 现在给你最终联通块中所有连边情况,已知一天里联通块合并可...原创 2018-05-30 08:26:25 · 1028 阅读 · 0 评论