
ACM_模拟
文章平均质量分 77
逍遥丶綦
这个作者很懒,什么都没留下…
展开
-
贪心 csust1250 绮礼的阴谋
地址:acmore.net/web/showProblem?id=1250第四次圣杯战争开始了,为了收集敌人的情报,言峰绮礼命令他的使魔Assassin 将自己的灵体分成n 份,分别监视教堂外的长直走道。Assassin 每份灵体的能力不同,第i 份灵体可以监视到的区域是[ai, bi],绮礼想知道,监控范围内的区域的总长度是多少。比如,第一份灵体的视野范围是[-1, 1],第二份灵体原创 2015-06-17 00:36:56 · 1137 阅读 · 0 评论 -
尺取法 Codeforces580B Kefa and Company
传送门:点击打开链接题意:n个人,告诉你n个人的工资,每个人还有一个权值,现在从这n个人中选出m个人,使得他们的权值之和最大思路:先按照工资从小到大排序,那么每次最优的必然是一个子区间中的值。所以我们能确定,所有的答案此时都是子区间,。所以利用尺取法O(n)求出答案#include#include#include#include#include#include#includ原创 2015-10-17 19:02:19 · 976 阅读 · 0 评论 -
贪心 Codeforces584C Marina and Vasya
传送门:点击打开链接题意:给两个串s1和s2,现在要构造一个串s3,使得s3与s1和s2比较,恰好都有t个对应位置的字符不一样思路:因为长度都为n,t个对应位置的字符不一样,那么就会有n-t个位置的字符是一样的。那么既然要有n-t个位置字符是一样的,那么如果以前两个字符在某个位置是一样的,那么这个位置肯定要选上,因为这样绝对是最优的那么先统计出s1和s2两个字符串有多少个位原创 2015-11-06 12:57:16 · 1174 阅读 · 0 评论 -
构造+贪心 Codeforces584E Anton and Ira
传送门:点击打开链接题意:给你一个1~n的排列s1,和另一个排列s2,要把s1变成s2,只能交换数字,交换数字的代价是两个数字位置之差,求最小代价思路:首先把题目变换一下,,变成已知原串s3,要变成1,2,3,...,n-1,n的排列的最小代价,,可以通过s1和s2得到s3之后的操作,就变得十分技巧。首先,我们能发现,如果交换的两个数字,都是朝着各自的位置前进,那么就一定是最优的。那么原创 2015-11-06 17:18:23 · 1081 阅读 · 0 评论 -
贪心+dp hdu5501 The Highest Mark
传送门:点击打开链接题意:类似cf的赛制,每道题目有A,B,C三个值,A表示初始分数,B表示每分钟题的分数会减少B,C表示做这道题需要C分钟,数据保证分数不会变为负数。现在给出比赛时长,问安排做题的顺序,求最大得分。思路:这道题是一道非常经典的题。首先很容易想到一件事,给出的题哪个先做没有先后顺序,那么在动态规划的时候,必然有前后顺序,所以要么就是状态压缩,要么就是之前就把这些题目排序了,原创 2015-10-10 23:27:37 · 1114 阅读 · 0 评论 -
循环节 hdu5495 LCS
传送门:点击打开链接题意:告诉你两个序列An和Bn,都是{1,2,,...n}的排列,然后现在可以任意交换每一列,问之后能构成最长公共子序列是多长思路:首先想特殊点,想到A中1的位置,假如我们把A中1的那一列移动到最前面去,如果对应的B也是1,那么刚好就是相等的,那么肯定能使公共子序列长度+1,如果不相等,假如A是1,B是3,那么我要让3能立即构成公共子序列,就要让下一次的A为3,再看此时原创 2015-10-12 00:55:06 · 1052 阅读 · 0 评论 -
尺取法 Codeforces591C Median Smoothing
传送门:点击打开链接题意:给你一个n,和一个长度为n的01序列,定义一种操作,其中序列的最左端和最右端不变,现A[i]等于原A[i-1],A[i],A[i+1]中的众数。问经行多少次操作,序列达到稳定,即再次执行这种操作后序列和执行前还是一样的。如果不能达到稳定,则输出-1思路:如果不能达到稳定则输出-1简直就是个坑啊!仔细分析一下,根本就不可能不稳定,换句话说无论怎样最后都是能达到稳定的原创 2015-11-02 23:09:25 · 1088 阅读 · 0 评论 -
倒推 hdu5596 GTW likes gt
传送门:点击打开链接题意:n个GT排列在一起,他们有两组,有可能是第0组的,也有可能是第1组的。每个人都有一个能力值。每次第i秒第i个人都会对他前面的另一组的人发起攻击,如果能力值比他低,就会退出游戏。另外还有m个数字Ci,在第Ci秒末尾的时候,前Ci个存活的人的能力都会+1,问最后剩余的人数思路:很明显可以逆推。用isc[i]表示有多少个Ci等于i,s[i]表示isc在前i个的前缀和。那原创 2015-12-12 23:28:34 · 856 阅读 · 0 评论 -
找规律 51Nod1350 斐波那契表示
传送门:点击打开链接题意:每一个正整数都可以表示为若干个斐波那契数的和,一个整数可能存在多种不同的表示方法,例如:14 = 13 + 1 = 8 + 5 + 1,其中13 + 1是最短的表示(只用了2个斐波那契数)。定义F(n) = n的最短表示中的数字个数,F(14) = 2,F(100) = 3(100 = 3 + 8 + 89),F(16) = 2(16 = 8 + 8 = 13 + 3原创 2015-12-29 14:01:28 · 1693 阅读 · 1 评论 -
AC自动机+dp+大数 poj1625
传送门:点击打开链接题意:告诉你有哪些字符可以用,然后再告诉你哪些单词不能出现,要你求长度为m的字符串只由给你的字符组成,但是不能出现那些单词的种类数。思路:..一分析就发现,,貌似爆long long了,,醉了。。总的思路和那个DNA的思路是一样的,用AC自动机完成了矩阵的转移,很逆天的压缩了状态。。除了大数其他和那题基本一样的可以去看看那题..#include#include#原创 2015-10-23 11:56:02 · 849 阅读 · 0 评论 -
贪心+map Codeforces583C GCD Table
传送门:点击打开链接题意:参照那个表格,,最后给出的n*n个那表格中的数字,是打乱的,求还原出是哪n个数字思路:可以发现,G表格中,正斜对角线恰好是ai,因为对自己的gcd就等于自己。那么也就是说所有的ai最后都会存在于n*n个数字中,进一步一想我们就能发现,最大的那个数字一定是A数组中的,因为gcd不可能比原数大。那么第二次我再选出最大的,此时这个最大的会与之前已确定的A数组中的会有gc原创 2015-10-17 20:18:33 · 1065 阅读 · 0 评论 -
模拟 Codeforces620F Xors on Segments
传送门:点击打开链接题意:n个数,m次查询。n每次查询为一个区间l,r,要在n的数的[l,r]区间内选出2个数a,b(a思路:标准答案好像是莫队算法+trie不过好多人复杂度都是O(n(n+m))的,,Tourist也是。。只要你敢写就能过。大概就是i枚举第一个数a,然后j枚举第二个数b,mx记录另一个数所在的数组范围在[i,j]的对应的函数的最大值。遍历所有的查询,看i是原创 2016-01-26 16:15:15 · 1501 阅读 · 0 评论 -
枚举 51Nod1487 占领资源
传送门:点击打开链接题意:有一个矩形区域被划分为N行M列的网格,每个格子里有一定数量的资源并记录在矩阵val中,坐标(x,y)位置上资源量为val[x][y],其val中每个元素的值为0~9的整数。如果你在某个网格(a,b)上造一座保护塔,那么你可以占领K个网格中的资源,这K个格子分别是(a+dx[1],b+dy[1]),(a+dx[2],b+dy[2]),...,(a+dx[K],b+dy[原创 2016-04-07 20:18:30 · 611 阅读 · 0 评论 -
模拟 csu1711 Kinfolk
传送门:点击打开链接题意:一颗完全二叉树,表示辈分关系,节点从0开始。随便告诉你两个节点,问v节点是u节点的什么关系。思路:顶级模拟题!感谢这道题目,我终于搞懂了各种头衔的含义。。思路大概是先求出u和v到lca的距离,然后就利用这个距离去讨论。刚开始可以写一部分出来,发现规律后就可以直接按规律来写了。#include #include #include #include原创 2016-03-27 20:14:27 · 703 阅读 · 0 评论 -
优先对列模拟 hdu5437 Alisha’s Party
传送门:点击打开链接题意:有许多人带有权值的礼物来拜访公主,公主会在第ti个人到的时候把门打开瞬间,放ki个人进来,其中进来的顺序是权值最大的先进,如果权值一样大就先来的先进。当人全部到齐后会再次开门让所有人都进来。思路:先将开门的时间读入然后排序,然后模拟将n个人都插入到优先对列中,然后离线维护答案,最后输出即可#include#include#include#include原创 2015-09-13 23:28:48 · 733 阅读 · 0 评论 -
模拟 nbut1225 NEW RDSP MODE I
传送门:点击打开链接题意:输入n,m,x,刚开始有一个1~n的排列,然后定义了一种操作,是将数组中的偶数位数字选出来,按照顺序放到数组最前面,奇数位按照顺序放到偶数位的后面,进行m次这样的操作,输出之后前x个数字思路:找到循环节T,利用T去约m,然后再将很小的m拿去模拟,输出前x个一开始就想到找循环节,,刚开始只想到去用找规律的方法去找到通项公式,但是找了好久就是没找到,虽然感觉理论上原创 2015-08-21 23:20:40 · 1101 阅读 · 1 评论 -
模拟 hdu5268 ZYB loves Score
噗,水题没什么好说的#include#include#include#include#include#include#includeusing namespace std;int score[]={0,1000,1500,2000,2500};int main(){ int T,A,B,ansk=0; scanf("%d",&T); while(T原创 2015-06-13 21:54:34 · 881 阅读 · 0 评论 -
枚举 hdu5311 Hidden String
比赛不知道哪个细节写搓了,fuck思路是这样的,把anniversary分成三段长度均不为0的部分,可以用i,j枚举分成[0,i],[i+1,j],[j+1,L-1] L是anniversary的长度然后在S中找anniversary中的[0,i]这一段是否出现过,如果出现过,记录下出现的位置p然后把p加上[0,i]这段的长度,这样就能把位置移动到刚刚查找的ann原创 2015-07-26 09:54:12 · 1058 阅读 · 1 评论 -
贪心 hdu1050 Moving Tables
题意:从一个房间把桌子搬运到另一个房间,需要10分钟,且中间的走廊在这10分钟内不能被别人使用现在有许多条桌子要搬送,问最少需要多少时间很容易想到贪心,某个点,被区间覆盖的次数最多的,就是最长需要的时间但是这题有陷阱,因为并没有说明每次给的两个数字,前一个会小于后一个所以可能后前一个会大于后一个,所以在读入的时候可能要交换左右的大小#include#inclu原创 2015-07-28 10:00:25 · 846 阅读 · 0 评论 -
模拟 codeforces567B Berland National Library
题意:一个图书馆,有个程序,记录了进来和出去的人,,但是开这个程序之前可能房间内还有一些人,问这个房间至少能容纳多少人才行思路:维护ans和now,now表示当前程序记录下的房间人数。ans表示答案遇到+,表示进来了一个人,那么标记一下,然后now++,再更新一下ans取最大如果遇到-,如果之前被标记了,表示是程序开始后才进来的,所以直接now--就行如果之前没有被标记,表原创 2015-08-08 15:11:46 · 1033 阅读 · 0 评论 -
模拟 hdu5414 CRB and String
传送门:点击打开链接题意:定义一次操作,可以在任意一个字符a后面插入一个不等于a字符的任意字符。问是否能将s串变成t串思路:感觉这种构造和模拟的题目做少了Orz首先我们可以发现,如果是开头,第一个字符必须要一样,设第一个字符为f那么前面连续的如果两个都等于f,就把指针都后移,直到两个中的某一个指针到末了,或者两者不再相等,才跳出循环然后判断是否是指针到末端了,对于i和j到末端的原创 2015-08-22 17:25:32 · 1029 阅读 · 0 评论 -
枚举 poj1338 Ugly Numbers
唉,这题实在不会用动态规划的方法,,我比较无脑首先,在A数组中只放1然后,枚举在2e9以内的2的所有倍数,比如2^1,2^2,2^3,,........拿这些数去分别乘以A数组中以前有的数字,并加入到A数组的末尾然后,枚举在2e9以内的3的所有倍数,比如3^1,3^2,3^3,,........拿这些数去分别乘以A数组中上一次操作后有的数字,并加入到A数组的末尾5也原创 2015-07-29 00:54:54 · 786 阅读 · 0 评论 -
贪心 hdu4864 Task
这题很容易能想到是贪心,却一下子很难想清楚如何贪心首先可以很容易想出这样的贪心:对于一个机器,肯定是按照x大的先考虑,x相等时y大的先考虑。因为x的权值很大,这样钱是最多的考虑任务的选择次序,很容易想到肯定是先考虑钱多的,再考虑钱少的想到这里,我们就知道了,肯定要对任务按照x,y的次序从大到小排序,然后从大到小去枚举然后好像就不知道怎么处理机器了,,这时候又可以原创 2015-07-17 22:04:43 · 953 阅读 · 0 评论 -
大数+找规律 ACdream1210 Chinese Girls' Amusement
传送门:点击打开链接题意:对于n个点围成的圈。从一个点出发,顺时针数K个位置,一直进行这个操作直到回到最初的那个点时,恰好把所有的点都访问了一遍,问最大的K(K思路:很容易就想到了一种方法,找到K后来发现其实是有规律的,从n=3一直算下去,会得到一个这样的序列1 1 2 1 3 3 4 3 5 5 6 5 7 7 8 7 9 9 10 9.....很明显以4个为一组,一下子就能找到原创 2015-08-25 19:29:27 · 1399 阅读 · 0 评论 -
找规律 hdu4861 Couple doubi
对于这种数据非常大的,如果一下子推不出公式,基本上都是找规律我们可以按照题意,将k个球的权值全部算出来,然后排序,然后分奇偶性累加在一起进行比较然后大量的测试输出我们就很容易的可以找到规律了#include#include#include#include#include#include#includeusing namespace std;typede原创 2015-07-17 21:46:27 · 918 阅读 · 0 评论 -
构造 ACdream1408 "Money, Money, Money"
传送门:点击打开链接题意:输入一个x,要求找到一对a和b,使得a和b能组成所有>x的数字,却不能组成等于x的数字思路:一道非常让人无语的构造题,如果想到了就会觉得特别蠢。。如果a等于2,那么b就一定要是奇数才行。然后想到不能等于x,如果bx的奇数,来当作b此时因为a是2,所以和b组合在一起,就能表示出所有>=b的数字了,,没错,,做完了 T^T#include#include原创 2015-08-25 19:35:29 · 854 阅读 · 0 评论 -
开关翻转 Gym100712I Bahosain and Digits
经典的区间翻转问题。和挑战程序设计那本书的那个题几乎一样,就把那个代码敲上去改了几句话就可以过了思路:从大到小枚举区间大小,再枚举最后翻转成的那个数字然后从第一个开始判断,应该翻多少下,并维护前K个翻转总次数sum那么第二个又应该翻多少下,是确定的,可以求出来,依次求第三个,第四个。。直到最后小于K个的时候,判断剩下的是否都等于我们枚举最后成的那个数字。所以翻转原创 2015-07-20 18:41:16 · 834 阅读 · 0 评论 -
找规律 hdu1163 Eddy's digital Roots
一看到题,刚开始会感觉很难想,但是可以先从10以内的数开始找规律比如我们先看到7,设pre(n)表示把n里面的数字累加起来直到npre(7^7)=pre(823543)=pre(25)=7因为太大,我们会想,能不能结合快速幂的思想呢7^7=7^3 * 7^3 * 7然后这时,我们会发现pre(7^7)=pre(pre(7^3)*pre(7^3)*7)再找原创 2015-07-23 09:35:02 · 777 阅读 · 0 评论 -
枚举 hdu1172 猜数字
因为时间给的非常多,然后测试组数又很小,所以是一个很粗暴的模拟只要从1000到9999枚举答案,然后再判断符合答案的个数,看个数的数量差不多就做完了然后就在于如何判断有几个数字同时存在,我的思路是用vis1和vis2分别记录进行比较的两个数字中,每个数字出现的次数那么如果对于某个数字,vis1[i]和vis2[i]都不等于0,就说明有min(vis1[i],vis2[i])个数原创 2015-07-25 00:05:46 · 1438 阅读 · 0 评论 -
表达式树+多项式模拟 fzu2215 Simple Polynomial Problem
传送门:点击打开链接题意:化简多项式。思路:先写个结构体,把多项式的乘法和加法重载好。然后直接套后缀表达式啊,或者表达式树啊,或者用栈写表达式解析啊,都是随意的下面这个是表达式树的写法。有一个要注意的地方是,在函数里面开数组,也是属于栈的空间,所以用G++提交的时候,要注意一下扩栈。#include #include #include #include #inclu原创 2016-04-14 18:09:59 · 734 阅读 · 0 评论