![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
思维
文章平均质量分 67
getupdown
这个作者很懒,什么都没留下…
展开
-
2016ICPC青岛赛区网络赛 1004
思维题。 一定要特判L=0的情况。 详见代码。 #include #include #include #include #include using namespace std; int main(){ long long L,R,ct; while(scanf("%lld%lld",&L,&R)==2){ if(L==0){原创 2016-09-17 18:19:18 · 765 阅读 · 0 评论 -
51nod 1337 翻转游戏
这个题的关键在于那些?的要求,因为是?所以不用一下子满足,这就是这个题的玄机了。 于是我们可以“顺便”把这些 “对于当前关是?,但是对于以后的关不是?” 的灯给进行操作。 这样就可以减少次数了。 #include #include #include #include #include #define LL long long int using namespace std; char m原创 2017-05-05 23:43:50 · 276 阅读 · 0 评论 -
51nod 1674 区间的价值 V2
题目链接:点击打开链接 这个题很明显是要从位运算的角度去考虑的。 考虑“与运算“ 和 ”或运算“ 的性质。 与运算,是只要有一个0,那么就都是0 或运算,是只要有一个1,那么就都是1 考虑样例: 3: 011 4: 100 5: 101 假如现在扫描到了第三个数5,那么就是要求 (3 & 4& 5) * (3|4|5) 按位扫描,最高位有2个连续的1,意味着最高位可以对答案贡原创 2017-04-20 14:51:18 · 234 阅读 · 0 评论 -
51nod 1524 可除图的最大团
题目链接:点击打开链接 这个题如果往图论上不行,因为边太多了,所以我往数的角度想。 如果能组成一个集合,那么这些数从小到大排,两两之间肯定有倍数关系。 所以用dp[x]表示,到x为止,能组成的最大集合。 用一个arr数组表示,这个数有没有在集合中出现。 不会超时,因为每个状态只需要走一次,而且转移的同时会覆盖掉没覆盖的状态。 用一下读入优化好一些。 #include #include原创 2017-04-20 00:46:19 · 237 阅读 · 0 评论 -
51nod 1503 猪和回文 (dp + 优化好题)
题目链接:点击打开链接 这道题是个dp计数问题,朴素的dp方程其实并不是很难 dp[x1][y1][x2][y2]表示当从左上角走到x1,y1 从右下角走到x2,y2时的状态总数,然后根据上下左右,字符是否相等转移即可。 但是这里的4维都是高达500的,首先这么大的DP数组肯定是开不下的,所以一定要优化。 思考转移过程,因为这里要求是回文,所以我们肯定是从 两个相同字符长度 转移到 下一个原创 2017-04-20 00:16:09 · 411 阅读 · 0 评论 -
51nod 1478 括号序列的最长合法子段
题目:点击打开链接 用一个栈,每次弹栈之后,读取弹栈之后,最高的那个下标,那个与当前坐标的差就是最长的序列。 如果说是判断合法括号串,那么扫描一遍之后如果栈空就说明合法,对于括号子串也是如此,只不过是“部分空”,所以读取“弹栈之后,最高的那个下标”,当前下标与其做个差就是当前长度。 一开始可以存一个"-1"修正一下。#include #include #include #include #i原创 2017-04-04 17:13:46 · 388 阅读 · 0 评论 -
51nod 1460 连接小岛 (贪心)
对于每两个相邻岛屿,通过简单的计算,可以得出可以连接这两座岛之间的 所需要的桥的 长度范围,有n-1个这样的范围 然后就相当于用m个点,其中抽出n-1个点去对应n-1个区间。 我的做法是把所有的区间按照右端点从小到大排序,,右端点相同按照左端点从小到大排序, 然后用multiset去存桥的长度,每次lower_bound一下,判断一下 时间复杂度O(nlogn)。#incl原创 2017-04-13 00:49:38 · 431 阅读 · 0 评论 -
51nod 1103 N的倍数 (抽屉原理)
这题乍一看是普通的背包做法,但是发现时间复杂度无法承受。 发现mod的是n,余数有0~n-1这些情况, 一共有n个数,如果有余数为0的,那么就直接出答案了。 如果没有,即1~n-1中,但是有n个数,说明至少有2个是余数相同的(抽屉原理)。 对于普通的数,这个性质看上去没什么用。 但是,对于前缀和就有用了。 有n个前缀和,至少有2个前缀和是相同的。 那么这两个下标中间的部分就是我们要的原创 2017-04-13 00:46:02 · 310 阅读 · 0 评论 -
51nod 1712 区间求和
题目链接:点击打开链接 解法: 这个题首先考虑一个简单情况:对于区间[x,y],权值为多少。 容易写出公式:F[x , y] = S[y] - S[x-1] - (sum[y]-sum[x-1])*(x-1)+sum[x-1]*(y-x+1) 其中S[x]表示 从第一个元素到第x个元素的 所有有序二元组的和(题目中定义的),sum表示前缀和 整理一下就是:F[x , y] = S原创 2017-04-02 15:23:37 · 249 阅读 · 0 评论 -
2016 ICPC 青岛网络赛 1005
把每个手势看做点。 只有入度和出度相等时,并且和其他每个点产生关系的时候,才可以做到50%。 所以(n-1)/2得是整数,即n是奇数的时候可以成立,否则就是不成立的。 #include #include #include #include #include using namespace std; int main(){ int n,k; scanf("%原创 2016-09-17 18:25:16 · 480 阅读 · 0 评论 -
51nod 1461 稳定桌
这个题直接考虑:每种长度的桌脚,分别作为最长的桌脚的情况。根据这个枚举。 对于最长桌脚x,所以大于x的长度肯定必须要砍掉。 对于小于x的桌脚,尽量多地保留x(尽量少地砍x),其实就是不砍。 然后看 CF上的原题比这个简单,主要是因为CF上那个,桌角的长度只有200以内,所以可以开桶。 但是51nod这个题长度有100000,所以不能扫描桶了。 所以这里我使用一个Treap 每次算出前k原创 2017-04-26 15:23:01 · 325 阅读 · 0 评论