模拟+双指针——cf1244E】的更多相关文章

排一遍序然后用l,r指针进行移动,每次移动的是靠1,或靠n更近的那个指针 #include<bits/stdc++.h> using namespace std; typedef long long ll; ]; int main() { int n; ll k; scanf("%d%lld",&n,&k); ;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); ],maxx=a[n-]; ,r…
http://codeforces.com/contest/1154/problem/E 解题: 举例n=10,k=1 1,2,10,4,7,6,9,8,5,3 第一次,1队先挑2,10,4这三个人 1,2,10,4,7,6,9,8,5,3 第二次,2队挑6,9,8三个人 1,2,10,4,7,6,9,8,5,3 第三次,1队挑1,7,5三个人 1,2,10,4,7,6,9,8,5,3 第四次,2队挑3一个人 1,2,10,4,7,6,9,8,5, 显然需要实现的有两点 (1)挑完后的“连接”,…
https://codeforces.com/contest/1121/problem/D 题意 给你一个m(<=5e5)个数的序列,选择删除某些数,使得剩下的数按每组k个数以此分成n组(n*k<=m),存在只要一组满足和目标集合s(|s|<=k)匹配(即集合中存在的数,组内一定存在) 题解 重点:找出至少一组满足要求的数 假设[l,r]内满足要求,还需要满足:\((l-1)/k*k+(m-r)/k*k>=k*(n-1)\),可以用双指针,对于每个l可以处理出最小的r满足要求 这样…
Description 小Q同学在学习操作系统中内存管理的一种页面置换算法,LRU(LeastRecentlyUsed)算法. 为了帮助小Q同学理解这种算法,你需要在这道题中实现这种算法,接下来简要地介绍这种算法的原理: 1.初始化时,你有一个最大长度为n的空队列,用于暂时存储一些页面的地址. 2.当系统需要加载一个不在队列中的页面时,如果队列已满,则弹出队首元素,并将需要加载的页面加到队尾, 否则直接将需要加载的页面加到队尾. 3.当系统需要加载一个在队列中的页面时,将该页面移至队尾. 在这道…
D. Jury Meeting time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output Country of Metropolia is holding Olympiad of Metrpolises soon. It mean that all jury members of the olympiad should meet toge…
LINK:小B的棋盘 考试的时候没有认真的思考 导致没做出来. 容易发现 当k>=n的时候存在无限解 其余都存在有限解 对于30分 容易想到暴力枚举 对称中心 然后 n^2判断. 对于前者 容易发现 对称中心为某个点或某两个点的中点 对于后者 可以发现排序过后双指针可以做. 双指针做的时候还是存在一些小细节的(爆零警告 两种属性 不可以随便判断就跳指针 得根据自己排序的顺序来判断是否跳指针. 拿到30之后还是考虑 对称中心的问题. 对于 一些点对的中点或者一些点当对称中心 显然是不合法的 如 以…
这个很多基础算法,python已内部实现了. 所以,要想自己实现链表这些功能时, 反而需要自己来构造链表的数据结构. 当然,这是python灵活之处, 也是python性能表达不如意的来源. value_list = [1, 5, 6, 2, 4, 3] pointer_list = [3, 2, -1, 5, 1, 4] head = 0 print(value_list[head]) next_pointer = pointer_list[head] while next_pointer !…
Maxim wants to buy some games at the local game shop. There are n games in the shop, the i-th game costs ci. Maxim has a wallet which can be represented as an array of integers. His wallet contains m bills, the j-th bill has value aj. Games in the sh…
[链接]:CF/4892 [题意]: 一个人解决n个问题,这个问题的值比k小, 每次只能解决最左边的或者最右边的问题 解决了就消失了.问这个人能解决多少个问题. [代码]: #include<bits/stdc++.h> #define PI acos(-1.0) #define pb push_back #define F first #define S second #define debug puts #define setp cout << fixed << s…
题面 100 注意到ban的只会是一个子树,所以我们把原树转化为dfs序列. 然后题目就转化为,询问一段ban的区间,之后的背包问题. 比赛的时候,我想到这里,于是就开始想区间合并,于是搞了线段树合并,遂无果,爆零. 由于ban的是一段区间,所以肯定是将前缀和后缀合并. 我们预处理出前缀背包,和后缀背包. 然后合并两个背包就可以了. 具体的合并,Two pointers. 还要卡常. Code #include<iostream> #include<cstdio> #include…