模拟
四维2000
SW2000
展开
-
Codeforces 1452F Divide Powers (模拟)
题意:有cnt_i个大小为2^i的数,你可以把一个数拆成两个大小一半的数,问最少拆几次可以拆成k个小于等于2^x的数 分析:就是贪心模拟,发现如果只拆小于等于x^2的数时,说每拆一次多一个,而如果时把大于2^x的数全都拆成2^x时,是可以节省一次的,因此我们只需要在保证小于等于2^x的数大小足够的情况下,尽可能地把大于2^x的数完整地拆成2^x就是最少的拆法 细节真的挺多的,硬撕出来一大坨乱七八糟的代码,这种大模拟题也懒得优化简洁代码了 代码: #include<bits/stdc++.h&原创 2020-11-20 10:53:39 · 237 阅读 · 0 评论 -
Codeforces 1452E Two Editorials (预处理优化)
题意:在长度为n的范围内有m个区间,现要求另选两个长度为k的区间染色,现求每个区间被最大染色和的最大值。 分析:对于每个位置i往后染k个颜色预处理对最终答案的贡献ans[i],以及染完这k个之后如果下一个区间从j开始染,由于j处染色部分大,i处的染色无法计算而丢失的贡献sub[i][j]。 维护好ans[N],sub[N][N]这两个数组后就只需要O(n^2)找出哪选哪两个最大就好了。 大体思路就是这样,具体细节还需要注意很多,比如预处理sub[N][N]数组时需要用到差分,区间内染色大小相同时都要减原创 2020-11-20 10:45:22 · 491 阅读 · 0 评论 -
Codeforces Round #671 E Decryption (模拟构造)
题意:给出一个合数,让你讲这个数的所有因子构造成一个环,使得环上相邻两个数不互素 分析:简单可以证明只有当这个数是仅有两个素因子时无法构造出满足条件的环,如6=2*3只能构造成2 6 3,因此需要特判一下。除去这种特殊状况其余都可以满足条件,我们只需要找到一种合适的就可以,我所想到的一种构造方法是以递归的思想,每次加上的序列是以原有序列为基础的,把原来的序列反过来就可以保证加上后首位都是非互素相连的,再在中间加上一个1就可以把所有含有新的质因子的序列找出来。比如150=2*3*5*5,最初ans为空,我们原创 2020-09-20 08:51:01 · 479 阅读 · 2 评论 -
Codeforces Round #671 D Sage‘s Birthday (模拟构造)
题意:给n个数,要求将这n个数重新排列使得凹进去的数(就是比两边都小的数)最多 分析:思考后可以发现,无论是奇数还是偶数,无论中间有多少相同的数,只要把前(n-1)/2个数全部按顺序紧紧塞到后面(如果是偶数第一个后不塞,就可以保证凹进去的数最多,比较好证明,所以只需要用这种方式构造出来目标数组,然后算下有几个满足条件的数就好了 代码: #include <cmath> //定义数学函数 #include <cstdio> //定义输入/输出函数 #include <cs原创 2020-09-20 08:14:58 · 193 阅读 · 0 评论 -
PTA 整除光棍 (模拟)
L1-046 整除光棍 (20 分) 分析: 这道题输出的第一个数是爆long long的,但有趣的是,由于每次由于光棍的特性,只会变大为原来的10倍,即“结果1”每一次循环固定地*10+取模数,所以就可以模拟一次输出一位数,执行起来极大简化,代码可以做到非常简洁。 代码: #include &lt;bits/stdc++.h&gt; using namespace std; int main()...原创 2019-03-13 22:01:11 · 423 阅读 · 0 评论 -
PTA 古风排版 (模拟)
L1-039 古风排版 (20 分) 分析: 本题只是一道简单的模拟,如果把一维字符串模拟进二维字符串后输出会比较稳,但当直接将一维字符串模拟输出时就出现问题了,因为数据只保证小于1000,但为了符合格式输出时补上空格,就会超过1000,所以一维数组的大小必须大于1100才行。 代码: #include &lt;bits/stdc++.h&gt; using namespace std; int...原创 2019-03-12 18:26:36 · 1142 阅读 · 0 评论