CodeForces 546C(队列)】的更多相关文章

CodeForces 546C Soldier and Cards Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u   Description Two bored soldiers are playing card war. Their card deck consists of exactly n cards, numbered from 1 to n, all values are d…
Soldier and Cards 老样子,直接上国语吧  Descriptions: 两个人打牌,从自己的手牌中抽出最上面的一张比较大小,大的一方可以拿对方的手牌以及自己打掉的手牌重新作为自己的牌,放在自己手牌的最下方,而且对方输掉的那张手牌需要放在上面,自己赢的手牌放在下面. Input 第一行的数n代表一共有几张牌 第二行第一个数x代表第一个人有x张牌 第三行第一个数y代表第二个人有y张牌 Output 第一个数代表进行了几轮,第二个数代表谁赢 Examples Input 42 1 32…
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Two bored soldiers are playing card war. Their card deck consists of exactly n cards, numbered from 1 to n, all values are different. They divid…
题目:这里 题意:n个app,q个操作,当操作数type为1的时候表示y这个app推送了你一条消息,当操作数type为2的时候表示将y这个app已推送的所有消息都读完,当操作数为3的时候 表示将已经推送的前(按推送的时间顺序)y条消息再读一遍(不管这前y条消息中有没有读过的,都再读一遍),问每次操作的时候的未读的消息数是多少? 用队列来模拟就好,记得每次要输出的是所有app的没有读过的消息的总数就行,不要想的太细,把读过的标记一下就行,总是觉得这个会超时,但是一想这才是2的第三题,1 的第一题,…
Description There are n children in Jzzhu's school. Jzzhu is going to give some candies to them. Let's number all the children from 1 to n. The i-th child wants to get at least ai candies. Jzzhu asks children to line up. Initially, the i-th child sta…
Soldier and Cards CodeForces - 546C Two bored soldiers are playing card war. Their card deck consists of exactly ncards, numbered from 1 to n, all values are different. They divide cards between them in some manner, it's possible that they have diffe…
题意 (Codeforces 546C) 按照指定的规则打牌,问谁胜或无穷尽. 分析 又是一条模拟,用set+queue(这里手写了)处理即可.注意到两种局势"1 234"和"123 4"的差别,所以用set处理的时候需要在两方手牌中间加上相关的分割符号以示区分. 代码 #include <bits/stdc++.h> #define MP make_pair #define PB push_back #define fi first #define s…
B. Ancient Berland Hieroglyphs 题目连接: http://codeforces.com/problemset/problem/164/B Descriptionww.co Polycarpus enjoys studying Berland hieroglyphs. Once Polycarp got hold of two ancient Berland pictures, on each of which was drawn a circle of hierog…
B. Psychos in a Line Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/problem/319/B Description There are n psychos standing in a line. Each psycho is assigned a unique integer from 1 to n. At each step every psycho who h…
题目链接: http://codeforces.com/contest/6/problem/E E. Exposition time limit per test 1.5 secondsmemory limit per test 64 megabytes 问题描述 There are several days left before the fiftieth birthday of a famous Berland's writer Berlbury. In this connection th…
题目链接:http://codeforces.com/problemset/problem/455/A 题目大意:有n个数,每次可以选择删除一个值为x的数,然后值为x-1,x+1的数也都会被删除,你可以获得分值x,求出能获得的最大分值为多少. 解题思路:从小到大排序,去重一下, 用cnt[i]记录一下数字i出现次数.那么可以得到状态转移方程:dp[i]=max(dp[i],dp[j]+cnt[i]*a[i])(j<i&&a[i]-a[j]>1),再用单调队列优化一下就行了O(∩…
题目链接:http://codeforces.com/problemset/problem/546/C 题解: 用两个队列模拟过程就可以了. 特殊的地方是:1.如果等大,那么两张牌都丢弃 : 2.如果操作了很多次仍不能分出胜负,则认为平手.(至于多少次,我也不知道,只能写大一点碰运气,但要防止超时) 代码如下: #include<iostream>//C - Soldier and Cards #include<cstdio> #include<cstring> #in…
题目链接:http://codeforces.com/problemset/problem/1029/B 题目大意:从数组a中选出一些数组成数组b,要求 b[i+1]<=b[i]*2 . 一开始想到的是O(n^2)的动态规划,但是超时了,下面是超时的代码. #include <iostream> using namespace std; const int maxn = 200020; int n, a[maxn], f[maxn], res = 0; int main() { cin…
Codeforces 940 E.Cashback 题意:一组数,要分为若干个区间,每个区间长度为ki(1<=ki<=n),并且对于每个区间删去前ki/c(向下取整)个小的数(即对区间升序排序后的前ki/c个数),要求找出最佳的划分方案使所有最终数组的和最小 思路:通过观察和分析 ①一个长度2*c的区间总是不会优于把它划分成两个长度为c的区间 ②在一个长度为c的区间后面添不超过c个数,都不会使删掉的数之和变大,还可能更小. 因此得到dp状态与转移方程: dp[i]:前i个数最大可删掉数之和 d…
题目:https://codeforces.com/contest/1216/problem/F 题意:一排有n个位置,我要让所有点都能联网,我有两种方式联网,第一种,我直接让当前点联网,花费为i,第二种,如果当前点的值为1,代表当前点可以放置一个路由器,范围 [i-k,i+k]都能连上网,花费为i,求最小花费是所有点都能连上网 思路:这个很容易看出是一个DP,我们设立dp[i],为前i个位置都能连上网的最小花费,因为设立一个路由器左右范围都可以联网,所以我们考虑设立路由器的右端点,如果i-k可…
Codeforces 题面传送门 & 洛谷题面传送门 首先先讲一发我的 \(n^2q\log n\) 的做法,虽然没有付诸实现并且我也深知它常数巨大过不去,但是我还是决定讲一讲(大雾 考虑设 \(f(i,j)\) 表示以 \(i,j\) 为左上角,满足其中不同颜色个数 \(\le q\) 的子正方形中大小最大的那个的边长,那么显然求出 \(f(i,j)\) 后一遍后缀和即可求出答案.于是问题转化为如何求 \(f(i,j)\).注意到一个显然的结论:\(f(i,j)\ge f(i,j-1)-1\)…
题意: 给你n个数,m次询问,每次询问给l和r代表l和r中间所有子区间中特征值的和. 特征值的定义是在这个区间中找i和j使得|tmp[i]-tmp[j]|/|j-i|最大. 思路: 首先是特征值的定义,这个东西其实是斜率~不知道从哪里看到的证明,这个只有相邻的点才可能最大.所以给定区间找到最大值其实是在相邻的中找.这是这题第一个关键点. 如果一个一个加寻找每一个区间那么复杂度应该是n^2,这里的n大小是1e5,还是不行.然后这个时候思路就是通过单调队列来解决啦~[个人认为更像是个DP]找到某个点…
Problem G. Persistent QueueTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88258#problem/G Description Persistent data structures are designed to allow access and modication of any version of data st…
Description Little Petya likes points a lot. Recently his mom has presented him n points lying on the line OX. Now Petya is wondering in how many ways he can choose three distinct points so that the distance between the two farthest of them doesn't e…
题目大意:托尔有一部手机可执行三种操作 1.x APP产生一个新消息 2.读取x App已产生的所有消息 3.读取前t个产生的消息 问每次操作后未读取的消息的数量 题目思路: 队列模拟,坑点在于竟然卡内存--详细看代码. #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<stdio.h> #include<stdlib.h&g…
目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连续的.每辆车上的贞鱼会产生互相怨恨的值,设a与b之间的怨恨值为G(a,b),一辆车上的贞鱼的编号从L到R,那么这辆车上的怨恨值为\(\sum_{L<=a,b<=R}G(a,b)\).注意G(a,b)=G(b,a),一对贞鱼之间的怨恨值只算一次,也就是G(a,b)和G(b,a)只算一次. 1<…
题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000,O(n^3)的DP不适用.需要加个单调队列优化. 注意每次是从$[i-k,i)$区间,选择加上ai.每次清空双向队列. #include <queue> #include <cstdio> #include <cstring> #include <iostream&g…
被队友催着上(xun)分(lian),div3挑战一场蓝,大号给基佬紫了,结果从D开始他开始疯狂教我做人??表演如何AKdiv3???? 比赛场上:A 2 分钟,B题蜜汁乱计数,结果想得绕进去了20多分钟,至此GG,C秒出,D...还在想怎么做就告诉我二分答案,好那继续秒出.他看F我看E,没思路互换,F题都读了半天,其实就是我YY的题意,然后发现还是没N^3dp的想法,发现并不是区间dp,其实之前我E想到了枚举等差数列的项数,只是发现找不了起点(那不是找终点就好了).基佬紫:枚举项数啊,我???…
原文链接https://www.cnblogs.com/zhouzhendong/p/CF980F.html 题目传送门 - CF980F 题意 给定一个 $n$ 个节点 $m$ 条长为 $1$ 的边的每个点最多只属于一个环的仙人掌. 现在请你通过删边把仙人掌转化成树. 对于每一个点,输出在所有不同的删边方案中,  距离该点最远的点与他之间的距离值 的最小值. $n\leq 5\times 10^5$ 题解 首先,我们跑一跑 Tarjan ,找出每一个双联通分量. 然后我们把每一个双联通分量里面…
题面: Alexandra has a paper strip with n numbers on it. Let's call them ai from left to right. Now Alexandra wants to split it into some pieces (possibly 1). For each piece of strip, it must satisfy: Each piece should contain at least l numbers. The di…
B - Strip 思路:简单dp,用st表+单调队列维护一下. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PII pair<int, int> #define y1 skldjfskldjg #define y2 skldfjsklejg using namespace std; ; ; const int…
有一个数列,对于每一个数,求比它小的在他右边距离他最远的那个数和他的距离 用单调队列做,维护单调队列时可采用如下方法,对于每一个数,如果队列中没有数,则加入队列,如果队列头的数比当前数大,则舍弃该数 对于此题,可用两个队列来维护,一个保存值,一个保持位置,每次查询对值进行二分,然后到对应保持位置的队列中求出结果 #include<map> #include<set> #include<cmath> #include<queue> #include<st…
题意:给你一个n个元素的数组,从中选取x个元素,并且要保证任意的m个位置中必须至少有一个元素被选中,问选中元素的和最大可以是多少? F1 n,m,x到200 F2 n,m,x到5000. 思路1:设dp[i][j]为选择i位置的元素,并且包括i位置已经选择了j个元素,所有选中元素的最大和. 那么为了保证方案的合法性,只能从i-m+1的地方状态转移,dp[i][j]=max(dp[k][j-1])+a[i] (i-m+1<=k<i);,意思是找从i-m+1位置到i-1位置找已经选区j-1个元素中…
双端队列BFS解决的就是路径权值可能为0的图最短路问题,权值为0插入队头,否则插入队尾. 对于这个题,可以看作上下移动的路径的权值为0,左右移动权值为1,而且不能超过规定的步数. 直接广搜求覆盖的点的数目即可. (场上我一般BFS被hack了) 代码: #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath> #include…
题目链接 Strip 题意   把一个数列分成连续的$k$段,要求满足每一段内的元素最大值和最小值的差值不超过$s$, 同时每一段内的元素个数要大于等于$l$, 求$k$的最小值. 考虑$DP$ 设$dp[i]$为前$i$个数字能划分成区间个数的最小值. 则$dp[i] = min(dp[j] + 1)$ 于是下一步就是求符合条件的j的范围. 构建$ST$表,支持区间查询最大值和最小值. 对于每一个位置$x$,我们知道$max(a[i]...a[x]) - min(a[i]...a[x])$肯定…