[cf1444D]Rectangular Polyline
由于两种线段要交替出现,有解的必要条件即为$h=v$(以下均记为$n$)
进一步的,再假设两种线段依次对应于向量$(a_{i},0)$和$(0,b_{i})$,根据题意要求向量长度为给定值且和为0,那么也即有$|a_{i}|=l_{i},|b_{i}|=p_{i}$且$\sum_{i=1}^{n}a_{i}=\sum_{i=1}^{n}b_{i}=0$
使用背包判定是否存在这样的$a_{i}$和$b_{i}$,若不存在即无解,若存在则再求出任意一组
(可以证明此时一定有解,以下即为构造)
若$a_{i}$中的负数少于$b_{i}$则将两者全部取相反数,再将两者分别从大到小排序(其实只需要保证正数在负数前),最后将$(a_{i},b_{i})$作为一个整体极角排序,并依次选择$(a_{1},0),(0,b_{1}),(a_{2},0),...,(b_{n},0)$即可
(代码实现上通过将两边分别合理排序使得其已经极角排序)
不难发现,以此法最终方案一定是形如下图的形式,即合法
时间复杂度为$o(\frac{nC^{2}}{\omega})$,可以通过

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1005
4 bitset<N*N>f[N];
5 int t,n,m,a[N],b[N];
6 int calc(int *a){
7 int m=0;
8 for(int i=1;i<=n;i++)m+=a[i];
9 if (m&1)return 0;
10 m>>=1;
11 for(int i=1;i<=n;i++)f[i]=((f[i-1])|(f[i-1]<<a[i]));
12 if (!f[n][m])return 0;
13 for(int i=n;i;i--)
14 if (!f[i-1][m]){
15 m-=a[i];
16 a[i]=-a[i];
17 }
18 return 1;
19 }
20 int main(){
21 f[0][0]=1;
22 scanf("%d",&t);
23 while (t--){
24 scanf("%d",&n);
25 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
26 scanf("%d",&m);
27 for(int i=1;i<=m;i++)scanf("%d",&b[i]);
28 if ((n!=m)||(!calc(a))||(!calc(b))){
29 printf("No\n");
30 continue;
31 }
32 int cnt=0;
33 for(int i=1;i<=n;i++)cnt+=(a[i]<0)-(b[i]<0);
34 if (cnt<0){
35 for(int i=1;i<=n;i++)a[i]=-a[i],b[i]=-b[i];
36 }
37 sort(a+1,a+n+1),reverse(a+1,a+n+1);
38 sort(b+1,b+n+1),reverse(b+1,b+n+1);
39 for(int i=1;i<=n+1;i++)
40 if ((i>n)||(a[i]<0)){
41 reverse(b+1,b+i);
42 break;
43 }
44 for(int i=n;i>=0;i--)
45 if ((!i)||(b[i]>0)){
46 reverse(a+i+1,a+n+1);
47 break;
48 }
49 printf("Yes\n");
50 for(int i=1,x=0,y=0;i<=n;i++){
51 x+=a[i],printf("%d %d\n",x,y);
52 y+=b[i],printf("%d %d\n",x,y);
53 }
54 }
55 return 0;
56 }
[cf1444D]Rectangular Polyline的更多相关文章
- CF1444D Rectangular Polyline[题解]
Rectangular Polyline 题目大意 给定 \(h\) 条长度分别为 \(l_1,l_2,--,l_h\) 的水平线段以及 \(v\) 条长度分别为 \(p_1,p_2,--.p_v\) ...
- [svg 翻译教程]Polyline(折线)polygon(多边形)
原文: http://tutorials.jenkov.com/svg/polygon-element.html Polyline 虽然说这个 元素我没用过,但是还是蛮强大的,也翻译下 示例 < ...
- [javascript svg fill stroke stroke-width points polygon属性讲解] svg fill stroke stroke-width points polygon绘制多边形属性并且演示polyline和polygon区别讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- [javascript svg fill stroke stroke-width points polyline 属性讲解] svg fill stroke stroke-width points polyline 绘制折线属性讲解
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- svg学习(八)polyline
<polyline> 标签用来创建仅包含直线的形状. <?xml version="1.0" standalone="no"?> < ...
- point\polyline\polygon的转化(转)
首先你要明白Polyline是由path对象构成,Polygon是由ring对象构成,因此实现polyline向polygon的转换,思路如下:1.提取polyline中的所有path对象2.将pat ...
- ACdream 1429 Rectangular Polygon
Rectangular Polygon Time Limit: 1000MS Memory Limit: 256000KB 64bit IO Format: %lld & %llu D ...
- UVALive 3959 Rectangular Polygons (排序贪心)
Rectangular Polygons 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/G Description In thi ...
- 一种将Region转为Polyline的方法
在AutoCAD.NET二次开发中,如果要将面域转为Polyline主要有以下几种方式: 1.使用Explode将面域炸成Line和Arc,然后再串起来,此方法可用于AutoCAD2007开始的所有版 ...
随机推荐
- NOIP模拟74
前言 我就想说一句,T3 给了一个什么牛马大样例!!!!!!!!,气\(^{TM}\)死我!!!!!!! 我的 \(\mathcal{O}(n)\) 算法始终过不掉大样例我 TM ,要不然我就直接上矩 ...
- 从零入门 Serverless | 企业级 CI/CD 工具部署 Serverless 应用的落地实践
背景知识 通过以往几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解.SAE 为客户免除了很多复杂的运维工作,开箱即用.按用量付费:与此同时 SAE 提供了丰富的 Open API,可以很容 ...
- 题解 P6454 麻将 加强版
题目传送门 题目大意 不想写了,直接看题面吧. 思路 被这个题搞自闭了,因为读错题目想一个非常恶心的东西想了一场考试,然后就删代码,然后就被骂了.哎. 需要注意的是:我们只能选一次雀头 于是,不难看出 ...
- 好奇!仅 13kB 大小的游戏,源码长啥样?
这个马赛克风格的表情正好 13Kb,有人竟然能用一个表情大小的空间,制作个游戏出来.我就不信这么点的地儿,能写出个花来?游戏能好玩吗?因为这些游戏点开就能玩,我抱着试一试的心态把玩了一会. 事实证明是 ...
- 6. 站在巨人的肩膀学习Java Filter型内存马
本文站在巨人的肩膀学习Java Filter型内存马,文章里面的链接以及图片引用于下面文章,参考文章: <Tomcat 内存马学习(一):Filter型> <tomcat无文件内存w ...
- MySQL:基础语法-2
MySQL:基础语法-2 记录一下 MySQL 基础的一些语法,便于查询,该部分内容主要是参考:bilibili 上 黑马程序员 的课程而做的笔记,由于时间有点久了,课程地址忘记了 上文MySQL:基 ...
- BUAA-软件工程-个人总结与心得
提问回顾以及个人总结 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 学习软件开发的过程,团队之间的写作 ...
- OO课第三单元总结
一.梳理JML语言的理论基础 (1)理论基础 JMl的出现很大程度上一为了行为接口的规范化,用这种语言来指定特定模块的特定功能.JML的核心部分分为三个部分:前置条件(requires).后置条件(e ...
- Spring Cloud Alibaba 的服务注册与发现
Spring Cloud Alibaba 服务发现例子 一.需求 1.提供者完成的功能 2.消费者完成的功能 3.可以附加的额外配置 二.实现步骤 1.总的依赖引入 2.服务提供者和发现者,引入服务发 ...
- Linux基础入门级命令文档
Linux系统上命令的使用格式,及常用命令示例 1.命令提示符 登录系统后,第一眼看到的内容是: [root@node01 ~]# 上图就是 Linux 系统的命令提示符.那么,这个提示符的含义是什么 ...