CEOI 2021

\(pts\):64 + 0 + 4

\(T1 : 64pts\)

首先我们肯定知道对于相同的数,一定是放在一起才是最优的,随意我们对于每段查询的区间要保证有序,然后我们发现,每个数出现的位置不同,他对答案的贡献也就不同,我们的想法是让答案最小,那么我们对于每个位置对答案的贡献一定要均摊,所以我们考虑错位排开,其实也可以打表找规律(到 \(6\) 就行了)。然后对于所有 \(q = 1\) 的就可以做出来了

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int M = 3e5 + 7;
int a[M] , vis[M] , b[M] , t , size;
struct Query{int l , r , id;} Q[M];
bool cmp(Query a , Query b) {
return belong[a.l] == belong[b.l] ? a.r < b.r : belong[a.l] < belong[b.l];
}
signed main () {
// freopen("data.in","r",stdin);
// freopen("data.ans","w",stdout);
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n , q; cin >> n >> q;
for(int i = 1; i <= n; ++ i) cin >> a[i];
if(q == 1) {
int l , r; cin >> l >> r;
sort(a + l , a + r + 1);
int ans = 0 , cnt = 0 , sum = 0;
for(int i = l; i <= r; ++ i) {if(!vis[a[i]]) cnt ++ ;vis[a[i]] ++; sum += cnt;}
sort(vis + 1 , vis + 300000 + 1 , greater<int>());
int L = l , R = r , tot = 0;
for(int i = cnt; i >= 1; -- i) {
tot ++;
if(tot & 1)while(vis[i]) a[L] = i , vis[i] -- , L ++;
else while(vis[i]) a[R] = i , vis[i] -- , R --;
}
memset(vis , 0 , sizeof vis);
cnt = 0 , sum = 0;
for(int i = l; i <= r; ++ i) {if(!vis[a[i]]) cnt ++ ;vis[a[i]] ++; sum += cnt;}
for(int i = l; i <= r; ++ i) {
ans += sum;
vis[a[i]] --;
if(! vis[a[i]]) sum -= r - i + 1;
else sum --;
}
return cout << ans << '\n' , 0;
} }

\(T2 : 0pts\)

\(T2\) 直接爆零了,一点思路都没有

\(T3\) : \(4pts\)

我们首先对于链的情况进行分析,我们可以知道在一条链上的话,一定是有解的,那么考虑如何让答案最优,我们发现如果我们遍历两边这条链的话,那么一定是能找到 \(Branko\) 的,但是这样是最优的嘛,我们发现,链两端的对答案没有影响,所以可以直接排除掉,故为链的答案为 \((n - 2) * 2\)。那么在考虑一般情况,那么也就是在链上多几条支链,和环。我们先来考虑环的情况,如果说这个图中有环的话,那么是一定不能找到 \(Branko\) 的。那么最后再来考虑支链的情况,因为我们知道一个长度为 \(2\) 的链是一定能找到的,那么对于长度为 \(3\) 及以上的呢。那么我们发现如果说一条支链大于 \(2\) 了,那么 \(Ankica\) 就没办法继续往下猜了, 因为这样\(Branko\) 可能就会跑到别的支链,就造成了无解,所以只要找到树的直径,再找支链即可。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define pb push_back
using namespace std;
const int M = 1e3 + 7;
int f[M] , id[M] , vis[M] , dep[M] , Max , pos;
vector<int> e[M] , a[M];
void dfs(int x , int fa , int sum) {
if(Max < sum) Max = sum , pos = x;
f[x] = fa;
for(auto i : e[x]) {
if(i == fa) continue;
dfs(i , x , sum + 1);
}
}
void dfs_1(int x , int fa) {
dep[x] = 1;
for(auto i : e[x]) {
if(i == fa) continue;
dfs_1(i , x);
dep[x] = dep[i] + 1;
}
}
signed main () {
ios::sync_with_stdio(0),cin.tie(0);
int n , m; cin >> n >> m;
if(n == 1) return cout << "YES" << '\n' << 1 << '\n' << 1 << '\n' , 0;
if(n == 2) return cout << "YES" << '\n' << 2 << '\n' << "1 1" << '\n' , 0;
for(int i = 1; i <= m; ++ i) {
int u ,v; cin >> u >> v;
e[u].pb(v) , e[v].pb(u);
} if(m >= n) return cout << "NO" << '\n' , 0;
int pos1;
dfs(1 , 0 , 0) , memset(f , 0 , sizeof f) , Max = 0 , pos1 = pos, dfs(pos , 0 , 0);
int cnt = 0;
for(int i = pos; i ; i = f[i]) {
id[++ cnt] = i; vis[i] = 1;
}
for(int i = 1; i <= n; ++ i) {
if(! vis[i] && vis[f[i]]) {
dfs_1(i , f[i]);
if(dep[i] >= 3) return cout << "NO" << '\n' , 0;
if(dep[i] > 1) a[f[i]].pb(i);
}
}
cout << "YES" << '\n';
vector<int> ans;
for(int i = 2; i < cnt; ++ i) {
ans.pb(id[i]);
for(auto j : a[id[i]]) {
ans.pb(j); ans.pb(id[i]);
}
}
for(int i = cnt - 1; i > 1; -- i) {
ans.pb(id[i]);
for(auto j : a[id[i]]) {
ans.pb(j);ans.pb(id[i]);
}
}
cout << ans.size() << '\n';
for(auto i : ans) cout << i << ' ';
return 0;
}

CEOI 2021的更多相关文章

  1. codevs 2021 中庸之道

    2021 中庸之道  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 给定一个长度为N的序列,有Q次询问,每次 ...

  2. Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论

    1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 130  Solved: 88[Submi ...

  3. poj 2021 Relative Relatives(暴力)

    题目链接:http://poj.org/problem?id=2021 思路分析:由于数据较小,采用O(N^2)的暴力算法,算出所有后代的年龄,再排序输出. 代码分析: #include <io ...

  4. iPhone屏蔽IOS更新、iPhone系统更新的提示(免越狱,有效期更新至2021年)

    iPhone屏蔽IOS更新.iPhone系统更新的提示(免越狱,有效期更新至2021年) 1.在Safari浏览器中粘贴如下链接,按提示打开链接. 输入http://apt.dataage.pub 2 ...

  5. HDU 2021 发工资咯:)

    http://acm.hdu.edu.cn/showproblem.php?pid=2021 Problem Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的 ...

  6. Math.abs(~2020) 按位取反后的绝对值是多少 2021, 按位取反后,比正数多1

    Math.abs(~2020)  按位取反后的绝对值是多少 2021, 按位取反后,比正数多1 int 值的取值 范围:   -128 ---  127   之间, 0000 0000     按位取 ...

  7. 部分PR回写的数量带有小数,分别是2023工厂的纸箱104007000389,2021工厂的纸盒404002005930;

    描述:部分PR回写的数量带有小数,分别是2023工厂的纸箱104007000389,2021工厂的纸盒404002005930: 原因:所有物料规划PR时对舍入值的先后考虑逻辑影响到回写出来的temp ...

  8. codves 2021中庸之道

    2021 中庸之道 http://codevs.cn/problem/2021/ 题目描述 Description 给定一个长度为N的序列,有Q次询问,每次询问区间[L,R]的中位数. 数据保证序列中 ...

  9. HDU 2021 发工资咯:)(最水贪心)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2021 发工资咯:) Time Limit: 2000/1000 MS (Java/Others)    ...

  10. 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2021 噗,自己太弱想不到. 原来是2次背包. 由于只要有一个大于k的高度的,而且这个必须放在最顶,那 ...

随机推荐

  1. 【服务器数据恢复】VSAN节点容量盘故障离线的数据恢复案例

    VSAN简介:VSAN是以vSphere内核为基础开发,可以扩展使用的分布式存储架构.该架构在vSphere集群主机中安硬盘及闪存构建VSAN存储层,通过存储进行管理与控制,最终形成一个共享存储层.V ...

  2. 从main_phase跳回reset_phase的方式

    在main_phase中调用: phase.jump(uvm_reset_phase::get()); 注意需要防止进入死循环.

  3. jenkin创建任务

    第一步新建项目 第二步创建任务名称

  4. 【NPDP专项练习】第七章 产品生命周期管理

    第七章 产品生命周期管理 1.以下哪一项是产品生命周期缩短的原因之一? A 技术停滞不前 B 减少竞争 C 顾客要求更高 D 沟通障碍正在增加 答案:C 解析 A技术持续进步:B竞争加剧:D沟通增加 ...

  5. 什么是cache

    什么是cacheTo minimize the quantity of control information stored, the spatial locality property is use ...

  6. 使用CSS 绘制各种形状

      如何使用CSS 绘制各种形状? 很多小伙伴在做开发的时候,遇到一些要画很多形状的时候,就很纠结了,知道怎么用CSS去布局,就是不知道怎么画图案. 其实使用CSS可以绘制出很形状的,比如三角形,梯形 ...

  7. 升级TLS1.3

    初衷:简简单单在网站上挂个单点登录,先在本地跑起来,然后再放到服务器上.然而问题来了: 请求被中止: 未能创建 SSL/TLS 安全通道 简简单单的百度一下,只需要加上这行就可以了~Easy Serv ...

  8. 【翻译】了解Flink-概览 -- Learn Flink-Overview

    了解Flink: 上手手册 目录 手册目标和范围 流处理 并行数据流 及时的流处理 有状态流处理 通过状态快照进行容错 翻译来源 Learn Flink:Overview , Learn Flink: ...

  9. vscode 开发Vue项目

    写在开头 Vue作为前端项目,本身不依赖IDE,完全可以使用任何文本编辑器进行开发.我使用vscode仅是因为比较习惯,vscode几乎可以作为任何项目的开发IDE. 环境安装 安装nodejs,去官 ...

  10. 对于小白如何才能学好Java

    我们学习任何一种编程语言,不是去无目的的网上找太多的教程,而是首先从宏观了解它的基本思想方法定义概念,从宏观感受它的逻辑与抽象,然后是实践,不断的实践.今天我们看看网上给我们小白的一些学习建议. 一. ...