一场比较简单的题 比较脑洞

C 如果坐车比较快的话 先走不如等车 所以最后的ans是min(纯走路,纯坐车) 讨论一下坐车时间

D 因为k一定是>=1的 所以当a=b的时候 GBGBGB这样间隔放一定可以 想到a>b和b>a都是不太和谐的 应该尽力趋向于a=b 所以一开始使a>b 然后采取放x*a + 1*b的方式 蛮忙放下去 直到a=b

E 可以想到 多出来的数一定要被换掉 所以不需要计入一开始的奇数和偶数总量 先处理出来可以被换的m个数 因为m可能很大 所以取一个min(500050,m) 5*10^5是一定够用的

所以一开始多出来的数 要向促进奇偶平衡的方向去换 如果违逆了这种平衡(当奇数大于偶数的时候 把多余的数去换奇数) 未来可能会出现多换几次的可能 因为除去这些多余的数 有效的奇数和偶数的个数都已经确定 如果无效数的交换不能使平衡出现 就要继续换原本有效的数字来平衡 所以无效数的交换必须致力于平衡

如果无效数字没有可以换的数字(奇数>偶数的时候没有偶数来换了) 这时候其实是一定-1的

处理完无效数字 处理有效数字的时候也要这样来换 如果也出现了没有数字可以换的情况 就是-1

G 把这棵树以1为根转化为有根树 每一层的个数就是a[i] 并且最终有t层 有k个孤独城市 即有k个叶子节点

我们先在每一层拿一个点 连出一条主链来 接下来我们可以算出 在这个图中 叶子节点最多和最少有多少个

最多 即 现在没有连到树中的点的个数之和 还有当前在主链底端的点

最少 即 没有办法分配给一个下一层的儿子节点的点的个数 如果要尽量分配的话 仍然会有a[i]-a[i+1]个点不会被分到下一个点 而它只能连a[i-1]的点 所以孤独

如果k处于最多最少之间 问题有解

可以看到 如果要达到maxx 所有的点都连到上一层的主链上去即可 如果一个点不想做叶子节点 需要把 位于这个点正下方的点 使其不连主链 而是直接接上面的点

能满足条件的点 一共有maxx-minn个 而我们只需要选择maxx-k个进行这种操作就可以了 其余的点连接主链

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<vector>
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<queue>
using namespace std;
#define L long long
int n , t , m ;
int a[200050] ;
vector<int >r[200050] ;
vector<int >q[200050] ;
int main(){
scanf("%d%d%d",&n,&t,&m) ;
for(int i=1;i<=t;i++)scanf("%d",&a[i]);
int tot=1;
r[0].push_back(1);
for(int i=1;i<=t;i++){
for(int j=0;j<a[i];j++){
tot++;
r[i].push_back(tot);
}
}
q[1].push_back(2);
for(int i=1;i<t;i++){
q[r[i][0]].push_back(r[i+1][0]);
}
int minn=1;
int maxx=1;
a[t+1]=1;
for(int i=1;i<=t;i++){
maxx+=(a[i]-1);
minn+=(max(a[i]-a[i+1],0));
}
if(m<minn||m>maxx){
printf("-1\n");
return 0;
}
m=maxx-m;
for(int i=1;i<=t;i++){
for(int j=1;j<r[i].size();j++){
int k=j+1;
if(k>a[i-1]){
q[r[i-1][0]].push_back(r[i][j]);
}
else {
if(m>0){
m--;
q[r[i-1][j]].push_back(r[i][j]);
}
else {
q[r[i-1][0]].push_back(r[i][j]);
}
}
}
}
printf("%d\n",n);
for(int i=1;i<=n;i++){
for(int j=0;j<q[i].size();j++){
printf("%d %d\n",i,q[i][j]);
}
}
}

一场没有算法的比赛...

Codeforces Round #386 (Div. 2) C D E G的更多相关文章

  1. Codeforces Round #386 (Div. 2)

    迟到的一次比赛 最近状态很崩溃 网速很慢 然后前面五题看了都有打 但是 只有A B E 是过了的 是时候要反省一下 A.随便判断一下就好 最少的份数嘛 B.画出来之后是一下子左边一下子右边 打一个递归 ...

  2. Codeforces Round #386 (Div. 2) C. Tram

    C. Tram time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  3. Codeforces Round #386 (Div. 2) 746F(set的运用)

    题目大意 给出一个歌单(有n首歌),每个歌都有愉悦值和时间,你可以选择从第x首歌开始听(也就是选择连续的一段),并且你可以选择w首歌让它的时间减半,限制时间为k,求最大的愉悦值 首先我们需要贪心一下, ...

  4. Codeforces Round #386 (Div. 2) 746G(树的构造)

    大体题意 一棵树有n个结点,告诉你每层深度上有a[i]个结点,以及有多少叶子结点 让你生成这棵树 题解:考虑一颗树,如果满足每层深度上有a[i]结点,最多能有多少叶子结点 那么答案很简单,就是对(a[ ...

  5. Codeforces Round #386 (Div. 2) A+B+C+D!

    A. Compote 水题(数据范围小都是水题),按照比例找最小的就行了,3min水过. int main() { int a,b,c; while(~scanf("%d%d%d" ...

  6. Codeforces Round #386 (Div. 2)G. New Roads [构造][树]

    题目链接:G. New Roads 题意:给出n个结点,t层深度,每层有a[i]个结点,总共有k个叶子结点,构造一棵树. 分析: 考虑一颗树,如果满足每层深度上有a[i]结点,最多能有多少叶子结点 那 ...

  7. 模拟 Codeforces Round #249 (Div. 2) C. Cardiogram

    题目地址:http://codeforces.com/contest/435/problem/C /* 题意:给一组公式,一组数据,计算得到一系列的坐标点,画出折线图:) 模拟题:蛮恶心的,不过也简单 ...

  8. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  9. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

随机推荐

  1. Invalid bound statement (not found) 问题处理

    最近开发过程中遇到一个BUG:Invalid bound statement (not found): com.mapper.ResourceIdMappingsBatchMapper.deleteR ...

  2. M²的经典语录

    1. If you failed, stop and think! You should work in the correct way. 2. If I can do all of it, why ...

  3. 机器重启 查看crontab执行历史记录crontab没有执行

    Sep 17 19:01:01 d run-parts(/etc/cron.hourly)[8452]: finished 0anacronSep 17 19:10:01 d CROND[9059]: ...

  4. Distance matrix

    w https://en.wikipedia.org/wiki/Distance_matrix For example, suppose these data are to be analyzed, ...

  5. iOS 多线程之 GCD 的基本使用

    什么是GCD 全称Grand Central Dispatch 中暑调度器 纯C语言 提供了很多强大的函数 GCD 的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU ...

  6. vue禁止复制的方式

    普通网页禁止复制的功能这里不再叙述,自行学习 https://blog.csdn.net/qq_32963841/article/details/84656752 这里简单写一下vue中怎么禁止使用复 ...

  7. 我的Android进阶之旅------>Android中通过adb shell input来模拟滑动、按键、点击事件

    今天在维护公司的一个小项目的时候,发现按公司手机的某个物理按键,激活相应的Service后,会在屏幕上模拟的点击了屏幕的某个坐标点.好家伙,原来是之前该项目的版本是按这个物理按键后,会弹出一个对话框, ...

  8. Android-实现切换Fragment页功能

    场景:使用Fragment实现切页. 类结构: 一:Activity Activity中使用getSupportFragmentManager().beginTransaction()来填充一个Fra ...

  9. source $0 & bash $0

    bash file.sh这种形式启动时,$0才被设置成文件名. source是bash的内建命令,把文件读取到当前bash中执行,相当于在当前bash手动输入命令,所以$0是bash. 示例代码如下: ...

  10. Python之迭代器和生成器(Day17)

    一.可迭代对象(iterable) 刚才说过,很多容器都是可迭代对象,此外还有更多的对象同样也是可迭代对象,比如处于打开状态的files,sockets等等.但凡是可以返回一个迭代器的对象都可称之为可 ...