
模拟
文章平均质量分 79
cillyb
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #357 (Div. 2) C. Heap Operations(模拟,优先队列)
三个操作,简单模拟,让不合法的操作变成合法即可。insert x — put the element with value x in the heap;getMin x — the value of the minimum element contained in the heap was equal to x;removeMin — the minimum eleme原创 2016-11-04 12:24:45 · 470 阅读 · 0 评论 -
Codeforces Round #385 (Div. 2) B. Hongcow Solves A Puzzle
题意:给你两个相同的拼图,每个拼图里的X都只能整体水平竖直移动,不能旋转,问你通过整体移动能不能让这两块拼图的X组成一个矩形(中间不能为空)。思路:因为每个拼图内部的X不能移动,所以要想拼成矩形,只有一个拼图中的X组成的是一个矩形才可以。如何判断一个拼图里的X是不是一个矩形?找到一行有连续X的然后找下面几行相同的连续的X。数出数量,判断下是不是为X的数量和即可。代码:原创 2016-12-18 11:47:32 · 645 阅读 · 0 评论 -
poj 1019 Number Sequence && hdu 1597 find the nth digit(二分,模拟)
两个题很相似,都是问你第i位是几,但排列的顺序有点不太一样.hdu 1597的每个单位是前一个单位后加个1-9中的一个循环添加;poj 1019的每个单位是前一个单位后加(i+1)思路都一样,想办法记录截止到某个单位其前缀一个有几位,这样就可以二分快速找出第i位在哪个单位,剩下的就好办了。poj的比较难想,需要记录原创 2017-02-27 21:42:45 · 453 阅读 · 0 评论 -
CodeForces 360A - Levko and Array Recovery (模拟)
题目地址:点击打开链接思路:维护每个数的上下界,先按照操作倒着求一遍,可以得到每个数的上界,再按操作正着验证一遍是否能够满足。如果都能满足的话输出上界即可。代码:#include#include#includeusing namespace std;const int maxn = 5e3+5;const int INF = 0x3f3f3f3f/10;int原创 2017-02-21 22:55:57 · 553 阅读 · 0 评论 -
蓝桥杯 打印十字图 (模拟)
题目地址:点击打开链接恶心的打印图像。慢慢绘制,因为是对称的,画好四分之一再去填充就可以了。代码:#include#include#include#includeusing namespace std;const int maxn = 150;char str[maxn][maxn];int h;void init(){ memset(s原创 2017-02-26 21:34:01 · 456 阅读 · 0 评论 -
CodeForces 367B Sereja ans Anagrams (map)
题目地址:点击打开链接题意:给定n个元素的序列a[]和m个元素的序列b[],让你找到一个q使得a[q]、a[q+p]、…a[q+(m-1)*p]构成序列b。问你所有的q。思路:i、i+p、i+2*p肯定构成一条长链,枚举链的起点,用map维护并判断长度为m的链与b序列是否相同。map可以直接用==判断是否相等,涨姿势了代码:#incl原创 2017-03-09 22:44:44 · 451 阅读 · 0 评论 -
ZOJ 3780 Paint the Grid Again(逆推)
题目地址:点击打开链接题意:给一块n*n的格子,每次可以将任意行变成X,或任意列变成O,后操作的将覆盖原先的操作,每行每列只能操作一次。给出最终图形,要求按先后顺序输出操作方法。思路:某一个状态,他要么只有行同为X,要么只有列同为O,一个状态不可能同时某行都为X,某列都回O,因为一定有交点。所以我们倒着来,因为要字典序,所以我们要逆字典序找,找到原创 2017-03-20 16:50:40 · 356 阅读 · 0 评论 -
qduoj 79 翻转游戏(开关问题)
题目地址:点击打开链接思路:普通的方法从左到右枚举翻转n^2复杂度会超时。用白书上的维护记录区间的翻转次数,可以达到nlogn复杂度。代码:#include#include#includeusing namespace std;const int maxn = 1e5+5;char str[maxn];int k, m, a[maxn], f[max原创 2017-03-07 15:36:32 · 465 阅读 · 0 评论 -
蓝桥杯 幸运数(暴力?)
问题描述幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。首先从1开始写出自然数1,2,3,4,5,6,....1 就是第一个幸运数。我们从2这个数开始。把所有序号能被2整除的项删除,变为:1 _ 3 _ 5 _ 7 _ 9 ....把它们缩紧,重新记序,为:1 3 5 7 9 .... 。这时,3为第2个幸运数,然原创 2017-04-03 23:54:59 · 734 阅读 · 0 评论 -
Codeforces Round #423 (Div. 2) C. String Reconstruction(思维 模拟)
题意:给你一些字符串,并告诉你他出现在哪些位置(可多次,可重叠),让你输出字典序最小的可能的字符串。保证有解,总长度不超过1e6.思路:跟前几天做的一个题很像点击打开链接,因为区间长度就1e6,经常会重复去填充,浪费时间,可以用一个数组维护当前位置的下一个未填充的字符位置,这样就可以跳过很多重复操作降到O(n)复杂度了。代码:#includeusing nam原创 2017-07-12 12:30:32 · 313 阅读 · 0 评论 -
Codeforces Round #383 (Div. 2) B. Arpa’s obvious problem and Mehrdad’s terrible solution
思路:a[i] ^ a[j] = x -> a[j]^x = a[i], 读入的时候找到前面有多少个对应的a[j]^x加上即可。找的时候最大可能是2^17-1,所以数组要开的大一点。代码:#includeusing namespace std;const int maxn = 1e6+5;typedef long long ll;int book[maxn], n, x原创 2016-12-06 23:24:38 · 963 阅读 · 0 评论 -
2017 Multi-University Training Contest - Team 1 1002 Balala Power!(贪心)
题意:给你n个由小写字母组成的字符串,让你给26个字母分配0-25,每个字符串形成一个26进制的数字,问怎么分配权值这n个数的和最大。(不能有前导0,但是单个0可以)官方题解:每个字符对答案的贡献都可以看作一个 26 进制的数字,问题相当于要给这些贡献加一个 0 到 25 的权重使得答案最大。最大的数匹配 25,次大的数匹配 24,依次类推。排序后这样依次贪心即可,唯一注意的是不能原创 2017-07-25 18:01:43 · 1446 阅读 · 8 评论 -
hdoj 5805 NanoApe Loves Sequence(模拟)
官方题解:求出前ii个数里相邻差值的最大值f_ifi,ii到nn里相邻差值的最大值g_igi,那么ans=\sum_{i=1}^n \max(|A_{i-1}-A_{i+1}|,f_{i-1},g_{i+1})ans=∑i=1nmax(∣Ai−1−Ai+1∣,fi−1,gi+1)。时间复杂度O(n)O(n)。原创 2016-12-07 16:36:29 · 435 阅读 · 0 评论 -
hdoj 5935 Car (模拟, 精度)
题目地址:点击打开链接一开始以为速度也是整数...然后一直wa.....其实速度一开始就有说是个实数。参考题解:点击打开链接题意:有个老司机开车,速度是一组非递减的序列,然后交警只记录了他的位置,问你,这个老司机要经过这些所有的位置最少需要的时间思路:因为速度要么是不变,要么是递增的,所以经过最后一个位置的时候速度是最大的,又因为没有给出对速度的限制,所原创 2016-12-04 14:09:05 · 819 阅读 · 4 评论 -
hdoj 5918 Sequence I(kmp, 暴力?)
题目地址:点击打开链接题意:有两个序列,a1~an与b1~bm。 给出p,问在a1~an中有几个q能满足 b1==aq, b2==bq+p,b3==bq+2p . . . bm==aq+(m-1)p思路:用了最朴素的暴力。。。从后往前找,找到和bm相同的开始匹配,看看是不是匹配上。。。这样应该是n^2复杂度吧。我想应该会TLE,结果过了。。别人写原创 2016-12-02 22:41:29 · 626 阅读 · 0 评论 -
Codeforces Round #378 (Div. 2) C. Epidemic in Monstropolis(模拟)
题意:给你一串长度为n数列,数字大的可以吃掉比他小的数字(要严格大于)然后这两个数合并成一个数,更新队伍。再给你一串长度为k的数列。让你进行上述操作使原来序列变成现在这串数。如果不能输出“NO”,可以的话输出“YES”然后输出操作过程,比如x位上的数吃掉左边的则输出x L,右边的则是x R,不吃则不输出。当然结果可能有多个,输出任意一个。每个bi对应一个a数组的区间原创 2016-11-04 18:26:11 · 347 阅读 · 0 评论 -
hdoj 4791 Alice's Print Service(二分)
题意:现在你要打印一些东西,比如需要99张纸,打印100张以下时话费10元每张,100张及100张以上时需要5元每张,此时你可以选择打印100张,使得花费更小。现给一个数字n,表示n个区间段,然后有s1,p1,s2,p2......sn,pn,表示打印纸张大于等于s1而小于s2时,每张纸话费p1元,现有m个询问,问每次给你x张纸,所需的最小花费是多少。思路:可以从后往前做一个O原创 2016-11-29 17:08:18 · 473 阅读 · 0 评论 -
hdoj 5686 Problem B(Astar Round1)递推
f(n)表示n个1可以构成的方案数。则加一个1的时候,前面n种仍然成立 f(n+1)=f(n)+*; 第n+1个1和第n个1相加构成2,前面n-1个1可以组合的个数。 f(n+1)=f(n)+f(n-1);没说要取模,所以肯定要用到大数了。代码:import java.math.BigInteger;import java.util.Scanner;pub原创 2016-11-14 13:56:34 · 415 阅读 · 0 评论 -
hdoj 5933 ArcSoft‘s Office Rearrangement(贪心,模拟)
题目地址:点击打开链接一开始读错题,以为可以合并任意两个区间。。其实是只能合并相邻的。思路:分情况讨论,每次判断当前点是比avg大还是小,如果大的话就把多余的部分放到下一个点上,拆操作是商-1次。余数merge到下一个的操作是2次(一次拆,一次merge),如果小于平均的话就全merge到上一个去。 当然考虑当前和下一个的和能不能作为一次。代码:#inclu原创 2016-11-30 23:50:56 · 442 阅读 · 0 评论 -
Codeforces Round #304 (Div. 2) D. Soldier and Number Game(筛选素因子,前缀和)
题目链接:点击打开链接题意:两个整数a, b。求出a, a - 1, a - 2........b +1这些整数最多能被拆分成多少个数相乘。思路:数量最多,当然都要拆成素数。因为是要查1e6次区间,所以自然能想到前缀和。要计算每个数最多拆成几个素因子,可以筛出来,然后再计算前缀和。记得以前写过筛素因子...结果一时没能想起来...代码:#includeusing na原创 2016-11-18 20:21:19 · 458 阅读 · 0 评论 -
UVALive 7512 November 11th(模拟, 思维)
题目地址:点击打开链接题意:给出坏凳子的位置, 座位不能挨着坐, 问最多可以做多少人, 以及最少可以坐多少人使得不能再有可以坐的位置.思路:最多坐多少人:(每段连续区间的凳子数+1)/2即为最多可做的人数最少坐多少人:一段连续区间内,每三个位置坐一个人010 010,不足三个座位的再坐一个人这样一遍for循环复杂度是10^6, 再乘上测试组数10^2....按理说10^原创 2016-12-01 16:05:09 · 424 阅读 · 0 评论 -
UVALive 7500 Boxes and Balls(模拟,二分)
题目地址:点击打开链接题意:你手里有N个球,现在需要用你手里尽可能多的球使得这个游戏经过多次游戏后形成一种恒定状态思路:最后形成一种恒定状态的情况是每个盒子里放得球数一定是个连续的序列,1, 1 2, 1 2 3, 1 2 3 4....因为只有这样从任意一个框里取出一个球放到另一框后再排序,得到的还是原来的序列。所以知道这后只要求比n小的最大前n项和即可,可以用二分来原创 2016-12-01 15:57:15 · 578 阅读 · 0 评论 -
hdoj 5912 Fraction(模拟)
题目地址:点击打开链接因为数据量很小,直接倒着推模拟即可。代码:#includeusing namespace std;typedef long long ll;const int maxn = 15;ll a[maxn], b[maxn], n;int main(void){ int ca = 1, t; cin >> t; wh原创 2016-12-02 13:05:41 · 515 阅读 · 0 评论 -
hdoj 5914 Triangle(规律,斐波那契)
题目地址:点击打开链接思路:要减去最少的让它不能构成三角形,可知构成三角形的条件是a+b>c,不符合的极限条件a+b=c,所以可以想到留下斐波那契数,这样就能拿最小的让它不满足构成三角形的条件。代码:#includeusing namespace std;const int maxn = 25;int fib[maxn] = {0, 1}, sum[max原创 2016-12-02 13:36:07 · 481 阅读 · 0 评论 -
Codeforces Round #380 (Div. 2) B. Spotlights (模拟)
题意:剧场舞台是尺寸为n×m的矩形场。导演给你舞台的计划,谁的演员会遵循。对于每个单元格,在计划中说明在该单元格中是否有一个actor。你会在舞台上放置一个聚光灯在一个良好的位置。聚光灯将投射光在四个方向之一(如果你从上面看舞台) - 左,右,上或下。因此,聚光灯的位置是它被放置的单元格和它发光的方向。如果两个条件成立,则位置是好的:在单元格中没有放置聚光灯原创 2016-11-20 23:46:55 · 476 阅读 · 0 评论 -
hdoj 5916 Harmonic Value Description(数学, 构造)
题目地址:点击打开链接思路:连续的序列,两两之间的gcd一定是1,所以k=1,即最小的就可以直接为1-n直接升序。当k不为1时,有可能的情况是某两个数之间gcd变成了k,而其他任意的两两gcd任然为1。直接拿这一种情况去构造,简单起见,让第一组gcd变成k,又要让后面的gcd都还为1,我们可以这样构造2*k, k, k-1, k-2...1, k+1, k+2...2*k-1, 2原创 2016-12-02 22:23:42 · 542 阅读 · 0 评论 -
qutoj 1357 小E与计算器(模拟)
题目地址点击打开链接比赛的时候是蒙蔽的,怎么求循环体。。。过了这么久才来补,看了看题解才发现原来这么水。。。题解:解决这一题,我们稍微一分析,就能够简化问题。因为n除以m的余数只能是0,m-1,根据抽屉原则,当计算m+1次时,至少存在一个余数相同,即为循环节。故我们只需存储余数输出即可。注意:一开始做输出超限了,因为把小数位数定了5000,余原创 2017-02-20 22:50:48 · 720 阅读 · 0 评论