CodeForces 1242E Planar Perimeter
时间:2020-05-28
本文章向大家介绍CodeForces 1242E Planar Perimeter,主要包括CodeForces 1242E Planar Perimeter使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
CodeForces 1242E Planar Perimeter
https://codeforces.com/contest/1242/problem/E
求这样的一个平面图,满足
- 存在 \(f\) 个面,第 \(i\) 个面为 \(a_i\) 边形
- 直径最小
- 无重边,自环
输出方案,一个数 \(n\) 表示点数,然后对于对于每个面输出 \(u_1,u_2,\cdots,u_{a_i}\) 表示图中存在这样的一个环.
\(1 \le f \le 10^5, 3 \le a_i \le 3 \times 10^5, \sum a_i \le 3 \times 10^5\)
Tutorial
可以通过操作将一个直径为 \(n\) 的平面图和一个 \(a_i\) 边形glue,且可以选择glue \(r\) 条边,这样之后得到一个直径为 \(n+a_i-2r\) 的平面图.
void glue(int x,int r,int m)
{
for(int i=1;i<r;++i)
{
an[x].push_back(q[--tl]);
}
an[x].push_back(q[tl-1]);
for(int i=r+1;i<m;++i)
{
an[x].push_back(q[tl++]=++n);
}
an[x].push_back(q[tl++]=q[hd++]);
}
// an[x]表示第x个多边形的环
// q[hd...tl]表示平面图当前的直径
// 第12行的目的为保证无重边
现在考虑如何选择 \(r\) .
首先将所有面按照 \(a_i\) 降序排列,然后将 \(i=2,3,\cdots,f\) 依次和 \(a_1\) 合并,且要让 \(r\) 在保证最后直径至少为 \(3\) 的情况下尽量大.为方便设 \(a_{n+1}=3\) ,则每次的 \(r=\min\{a_i-1,\lfloor \dfrac {(tl-hd+a_i-a_{i+1})}2 \rfloor\}\) ,第一项的目的是最大化 \(r\) ,第二项的目的是保证最后的直径至少为 \(3\)
Code
https://codeforces.com/contest/1242/submission/65031118
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <vector>
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;
inline char nc()
{
// return getchar();
static char buf[100000],*l=buf,*r=buf;
return l==r&&(r=(l=buf)+fread(buf,1,100000,stdin),l==r)?EOF:*l++;
}
template<class T> void read(T &x)
{
x=0; int f=1,ch=nc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=nc();}
while(ch>='0'&&ch<='9'){x=x*10-'0'+ch;ch=nc();}
x*=f;
}
const int maxf=1e5+50;
const int maxn=3e5+50;
const int maxnode=maxn+maxf;
int f;
int n;
int hd;
int tl;
int q[maxnode];
vector<int> an[maxf];
struct node
{
int x,id;
inline bool operator <(const node &other) const
{
return x>other.x;
}
} a[maxf];
void glue(int x,int r,int m)
{
for(int i=1;i<r;++i)
{
an[x].push_back(q[--tl]);
}
an[x].push_back(q[tl-1]);
for(int i=r+1;i<m;++i)
{
an[x].push_back(q[tl++]=++n);
}
an[x].push_back(q[tl++]=q[hd++]);
}
int main()
{
read(f);
for(int i=1;i<=f;++i)
{
read(a[i].x),a[i].id=i;
}
sort(a+1,a+f+1);
for(int i=1;i<=a[1].x;++i)
{
q[tl++]=++n;
an[a[1].id].push_back(n);
}
a[f+1].x=3;
for(int i=2;i<=f;++i)
{
int m=a[i].x;
int r=min(m-1,(tl-hd+m-a[i+1].x)/2);
glue(a[i].id,r,m);
}
printf("%d\n",n);
for(int i=1;i<=f;++i)
{
for(int j=0;j<an[i].size();++j)
{
if(j) printf(" ");
printf("%d",an[i][j]);
}
printf("\n");
}
return 0;
}
原文地址:https://www.cnblogs.com/ljzalc1022/p/12968304.html
- 跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?
- 使用腾讯云 GPU 学习深度学习系列之六:物体的识别与定位
- npm5 新版功能特性解析及与 yarn 评测对比
- H5直播避坑指南
- 龙门阵之 DevOps 门外汉须知
- 全面进阶 H5 直播(上)
- 这年头,不会斗图都毕不了业?
- 龙妈也会死?《权力的游戏》 AI 算法预测丹妮女王危在旦夕
- 腾讯云 GAME-TECH 沙龙干货回顾:海外网络拓展及质量把控
- 通过扩展让ASP.NET Web API支持W3C的CORS规范
- 腾讯云GAME-TECH沙龙干货回顾:腾讯游戏云全球化实践
- 腾讯云GAME-TECH沙龙干货回顾:猎豹游戏出海经验分享
- 腾讯云GAME-TECH沙龙干货回顾:绿洲全球化案例分享
- 基于云计算的 CV 移动交互应用研究(1):CV交互+云计算
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 逐行分析鸿蒙系统的 JavaScript 框架
- 48张小图带你领略Flex 布局之美
- 怎样设计一个 JavaScript 插件系统
- 一道 React 面试题:在浏览器、组件和元素中都渲染了些什么?
- 「新手入门福利」一张脑图带你掌握Git命令
- LeetCode | 58.最后一个单词的长度
- 模拟面试,解锁大厂 ——从Android的事件分发说起
- scRepertoire||单细胞免疫组库分析:R语言应用(一)
- Docker体验(二) - 自建Image
- 小程序代码复用 - template
- 五. Spring Security 权限管理
- 文档驱动 —— 表单组件(五):基于Ant Design Vue 的表单控件的demo,再也不需要写代码了。 表单一 公司信息表单二 员工信息,简化版,只是为了演示表单的切换。以后会出
- 文档驱动 —— 查询组件:将查询功能做到极致!你说还有啥没包含进来?antdv + vue 3.0 全新体验 快捷查询个性化查询方案更换各种查询方式更多的查询条件meta 驱动封装基础
- ES6能干啥?
- JQuery中DOM对象