[Agc036D]Do Not Duplicate_链表_贪心_数论
Do Not Duplicate
题目链接:https://atcoder.jp/contests/agc036/tasks/agc036_b
题解:
首先最后肯定至多只有$n$个数。
我们想处理出来每个点下一个一样的数的下一个数。
有点绕口....
处理出来了之后,暴力找环然后暴力跳就好。
代码:
#include <bits/stdc++.h> #define N 200010 using namespace std; typedef long long ll; int a[N], pre[N], nxt[N], val[N]; char *p1, *p2, buf[100000]; #define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ ) int rd() {
int x = 0;
char c = nc();
while (c < 48) {
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x;
} ll rd2() {
ll x = 0;
char c = nc();
while (c < 48) {
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x;
} int First[N]; int main() {
int n = rd();
ll k = rd2();
for (int i = 1; i <= n; i ++ ) {
a[i] = rd();
}
if (n == 1) {
if (k & 1) {
printf("%d\n", a[1]);
}
return 0;
}
for (int i = n; i; i -- ) {
First[a[i]] = i;
}
for (int i = 1; i <= n; i ++ ) {
if (pre[a[i]]) {
nxt[pre[a[i]]] = (i + 1) % n;
if (!nxt[pre[a[i]]]) {
nxt[pre[a[i]]] = n;
}
}
pre[a[i]] = i;
}
for (int i = 1; i <= n; i ++ ) {
if (!nxt[i]) {
if (First[a[i]] != i) {
nxt[i] = First[a[i]] + 1;
}
else {
if (i == n) {
nxt[i] = 1;
}
else {
nxt[i] = i + 1;
}
}
}
}
for (int i = 1; i <= n; i ++ ) {
if (nxt[i] >= i + 2) {
val[i] = nxt[i] - i;
}
else {
val[i] = nxt[i] + n - i;
}
}
if (nxt[n] == 1) {
val[n] = n + 1;
}
ll mdl = 0;
int now = 1;
while (1) {
mdl += val[now];
now = nxt[now];
if (now == 1) {
break;
}
}
ll pre = mdl / n;
// cout << pre << endl ;
k %= pre;
if (!k) {
return 0;
}
// puts("Fuck");
int id = 1;
now = 1;
while (1) {
if (nxt[now] >= now + 2) {
now = nxt[now];
continue;
}
if (id == k) {
if (nxt[now] == 1 && now != n) {
return 0;
}
printf("%d ", a[now]);
if (now == n) {
return 0;
}
now ++ ;
}
else {
id ++ ;
now = nxt[now];
}
}
return 0;
}
小结:想题的时候,多想一些特殊情况。比如边界值啊,极值啊这种。

[Agc036D]Do Not Duplicate_链表_贪心_数论的更多相关文章
- [bzoj2097][Usaco2010 Dec]Exercise 奶牛健美操_贪心_树形dp_二分
Exercise bzoj-2097 Usaco-2010 Dec 题目大意:题目链接 注释:略. 想法:题目描述生怕你不知道这题在考二分. 关键是怎么验证?我们想到贪心的删边. 这样的策略是显然正确 ...
- [bzoj4027][HEOI2015]兔子与樱花_贪心_树形dp
兔子与樱花 bzoj-4027 HEOI-2015 题目大意:每个点有c[i]朵樱花,有一个称重m, son[i]+c[i]<=m.如果删除一个节点,这个节点的樱花或移动到它的祖先中深度最大的, ...
- [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
菜肴制作 bzoj-4010 HNOI-2015 题目大意:给定一张n个点m条边的有向图,求一个toposort,使得:(1)满足编号为1的点尽量在前:(2)满足(1)的情况下编号为2的点尽量在前,以 ...
- [bzoj4345][POI2016]Korale_堆_贪心_线段树_dfs
bzoj4345 POI2016 Korale 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4345 数据范围:略. 题解: 由于$k$的范围问 ...
- [Cometoj#4 E]公共子序列_贪心_树状数组_动态规划
公共子序列 题目链接:https://cometoj.com/contest/39/problem/E?problem_id=1585 数据范围:略. 题解: 首先可以考虑知道了$1$的个数和$3$的 ...
- [bzoj2288]【POJ Challenge】生日礼物_贪心_堆
[POJ Challenge]生日礼物 题目大意:给定一个长度为$n$的序列,允许选择不超过$m$个连续的部分,求元素之和的最大值. 数据范围:$1\le n, m\le 10^5$. 题解: 显然的 ...
- BZOJ_2151_种树_贪心+堆+链表
BZOJ_2151_种树_贪心+堆 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编 ...
- BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...
- BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心
BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心 题意: 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返 ...
随机推荐
- codeforces316E3
Summer Homework CodeForces - 316E3 By the age of three Smart Beaver mastered all arithmetic operatio ...
- bzoj4152
The Captain HYSBZ - 4152 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. Input ...
- c 判断一个字符是否为字母数字
#include <stdio.h> #include <wctype.h> int main () { int i; wchar_t str[] = L"c3po. ...
- Codeforces 1205C Palindromic Paths (交互题、DP)
题目链接 http://codeforces.com/contest/1205/problem/C 题解 菜鸡永远做着变巨的梦 然而依然连div1BC题都不会做 要是那天去打cf怕是又要1题滚粗了.. ...
- python并发——进程间同步和通信
一.进程间同步 对于一些临界资源,不能使用并发无限消耗,就需要设置专门的临界标示,比如锁或者信号量等 from multiprocessing import Process, Lock import ...
- SSM整合(自己收藏)
https://github.com/crossoverJie/SSM/blob/master/README-ZH.md
- docker-compose部署微服务
1.安装docker-compose curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose ...
- react 实现数据双向绑定
好久没有更新了 只是都写在有道笔记中 今天整理下 一些基础的 大神勿喷 一个基础的不能再基础的数据双向绑定 因为react不同于vue 没有v-model指令 所以怎么实现呢? import Reac ...
- C++ STL——stack和queue
目录 一 stack容器 二 queue容器 注:原创不易,转载请务必注明原作者和出处,感谢支持! 注:内容来自某培训课程,不一定完全正确! 栈和队列作为经典的数据结构,我们再熟悉不过了.C++ ST ...
- 014-数据结构-树形结构-基数树、Patricia树、默克尔树、梅克尔帕特里夏树( Merkle Patricia Tree, MPT)
一.基数树 Radix树,即基数树,也称压缩前缀树,是一种提供key-value存储查找的数据结构.与Trie不同的是,它对Trie树进行了空间优化,只有一个子节点的中间节点将被压缩.同样的,Radi ...