D. Nastya Is Buying Lunch】的更多相关文章

At the big break Nastya came to the school dining room. There are nn pupils in the school, numbered from 11 to nn. Unfortunately, Nastya came pretty late, so that all pupils had already stood in the queue, i.e. Nastya took the last place in the queue…
思路: 1. 最终答案不超过能与Nastya“直接交换”的人数. 2. 对于排在j前面的i,如果i和i-j之间(包括j)的每个人都能“直接交换”,j才能前进一步. 实现: #include <bits/stdc++.h> using namespace std; ; int a[N], p[N], cnt[N]; vector<int> v[N]; int main() { int n, m; while (cin >> n >> m) { ; i <…
这道题,神仙贪心题... 题意就是我给出数的顺序,并给出多个交换,每个只能用于相邻交换,问最后一个元素,最多能往前交换多少步. 我们考虑这样一个问题,如果一个这数和a[n]发生交换,那么这个数作为后面的数能和前交换的数已经没有任何效果了. 但是这个数如果没有往后,他将在想要被交换那个数的前面,就算,前面的数找到满足了,也必须要把这个数往前放,并把这个数往后放,才行. 我们交换只能考虑这种情况. 4 3 2 1 我们有 4 3 4 2 4 1 那么整体往前移动,4移动到最后. 而且我们这样考虑,为…
题意 题目链接 给出一个排列,以及\(m\)个形如\((x, y)\)的限制,表示若\(x\)在\(y\)之前则可以交换\(x, y\). 问\(n\)位置上的数最多能前进几步 \(n \leqslant 3* 10^5, m \leqslant 5 * 10^5\) Sol 每次遇到这种动来动去的题基本都做不出来qwq 我最开始想到的是图论模型,然后发现不管怎么建都有反例.结果标算是个神仙贪心?.. 考虑这样一种贪心:从前往后处理每一个数,记一个\(num\)数组表示该位置的数最多能往后移动几…
链接 [https://codeforces.com/contest/1136/problem/D] 题意 有N个人,a[i]表示第i个人的编号,m个二元组. 当前一个在后一个的前面一个位置时二者可以交换. 问最后一个人最多可以往前移多少? 分析 很好的一个贪心 必须明确一个东西 如果一个人目前的位置在pos处,那么如果后面有n-pos个人可以和他交换,那么他就肯定能和最后一个人交换. 当然这里的n-pos是除开某些已经和最后一个人交换了的人的. 如果可以交换,那就最后一个人往前移.否则就把该位…
题目链接:https://codeforces.com/problemset/problem/1136/D 题意: 给出 $1 \sim n$ 的某个排列 $p$,再给出若干 $(x,y)$ 表示当序列中出现 $x,y$ 时,两者可以交换位置.问序列中最末尾的数可以前进多少步. 题解: 如果 $p[n-1]$ 可以与 $p[n]$ 交换位置,那么肯定是立刻交换,因为首先 $p[n-1]$ 只能最多只能产生 $1$ 步的贡献,同时就算把 $p[n-1]$ 往前换,等到在未来某个时刻再跟 $p[n]…
大意: 给定n排列, m个pair, 每个pair(u,v), 若u,v相邻, 且u在v左侧, 则可以交换u和v, 求a[n]最多向左移动多少 经过观察可以发现, 尽量先用右侧的人与a[n]交换, 这样一定最优, 然后从右往左遍历, 假设a[n]当前在$pos$, 再观察可以发现, 若$a[x]$产生贡献, 当且仅当$[x+1,pos]$都与$x$连边, 然后统计一下边数就可以$O(n+m)$了 #include <iostream> #include <algorithm> #i…
题意: 给一个序列和一组交换序列(a,b),当且仅当a在b的前面(不允许有间隔),这两个数才能交换,问最后一个数最多能移动多少个位置. 分析: 这题是思路是十分的巧妙呀 , 用一个数组num[x]  表示在x的后面有什么是可以于他交换的数 , 注意核心来了: 如果这个数目等于x的位置到目标位置id , 则目标可以向前进行移动 ,秒呀 #include<bits/stdc++.h> using namespace std ; ]; vector<]; ]; int main() { int…
链接:https://codeforces.com/contest/1136/ A - Nastya Is Reading a Book - [二分] #include<bits/stdc++.h> using namespace std; ; int n,l[maxn],r[maxn],k; int srch(int x) { , R=n; while(L<R) { ; if(l[M]<=x && x<=r[M]) return M; ; ; } retur…
Codeforces Round #546 (Div. 2) 题目链接:https://codeforces.com/contest/1136 A. Nastya Is Reading a Book 题意: 一本书有n个章节,之后给出每个章节所在页数范围,然后有一个人来看书看了k页,问还有多少章节没看. 题解: 水题.模拟一下就好了. #include <bits/stdc++.h> using namespace std; typedef long long ll; ; int n; int…