由于两种线段要交替出现,有解的必要条件即为$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的更多相关文章

  1. CF1444D Rectangular Polyline[题解]

    Rectangular Polyline 题目大意 给定 \(h\) 条长度分别为 \(l_1,l_2,--,l_h\) 的水平线段以及 \(v\) 条长度分别为 \(p_1,p_2,--.p_v\) ...

  2. [svg 翻译教程]Polyline(折线)polygon(多边形)

    原文: http://tutorials.jenkov.com/svg/polygon-element.html Polyline 虽然说这个 元素我没用过,但是还是蛮强大的,也翻译下 示例 < ...

  3. [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 ...

  4. [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 ...

  5. svg学习(八)polyline

    <polyline> 标签用来创建仅包含直线的形状. <?xml version="1.0" standalone="no"?> < ...

  6. point\polyline\polygon的转化(转)

    首先你要明白Polyline是由path对象构成,Polygon是由ring对象构成,因此实现polyline向polygon的转换,思路如下:1.提取polyline中的所有path对象2.将pat ...

  7. ACdream 1429 Rectangular Polygon

    Rectangular Polygon Time Limit: 1000MS   Memory Limit: 256000KB   64bit IO Format: %lld & %llu D ...

  8. UVALive 3959 Rectangular Polygons (排序贪心)

    Rectangular Polygons 题目链接: http://acm.hust.edu.cn/vjudge/contest/129733#problem/G Description In thi ...

  9. 一种将Region转为Polyline的方法

    在AutoCAD.NET二次开发中,如果要将面域转为Polyline主要有以下几种方式: 1.使用Explode将面域炸成Line和Arc,然后再串起来,此方法可用于AutoCAD2007开始的所有版 ...

随机推荐

  1. yum源安装nginx

    nginx使用yum源安装 安装步骤 使用yum源安装依赖 yum install yum-utils 配置nginx.repo的yum文件 vim /etc/yum.repos.d/nginx.re ...

  2. Java(23)常用API二

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228415.html 博客主页:https://www.cnblogs.com/testero ...

  3. Javascript深入之作用域与闭包

    相信绝大多数同学都听过闭包这个概念,但闭包具体是什么估计很少有人能够说的很详细.说实话闭包在我们平时开发中应该是很常见的,并且在前端面试中闭包也是常见的重要考点,在学习闭包之前我们先来看看作用域与作用 ...

  4. 【数据结构与算法Python版学习笔记】树——二叉树的应用:解析树

    解析树(语法树) 将树用于表示语言中句子, 可以分析句子的各种语法成分, 对句子的各种成分进行处理 语法分析树 程序设计语言的编译 词法.语法检查 从语法树生成目标代码 自然语言处理 机器翻译 语义理 ...

  5. [no_code][Beta]测试报告

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 测试报告 我们在这个课程的目标是 设计出一个OCR表单处理软件 这个作业在哪个具体方面 ...

  6. time_formatter攻防世界学习

    time_formatter 前言:这题说实话分析量蛮大的,首先是程序内壁比较绕,而且调用了之前许多没有见到的函数---如snprintf_che,以及strsup(好像打错了),getegid(), ...

  7. 2021.9.9考试总结[NOIP模拟50]

    T1 第零题 神秘结论:从一个点满体力到另一个点的复活次数与倒过来相同. 于是预处理出每个点向上走第$2^i$个死亡点的位置,具体实现可以倍增或二分. 每次询问先从两个点同时向上倍增,都转到离$LCA ...

  8. 计算机网络之流量控制(停止-等待协议、滑动窗口、后退N帧协议GBN、选择重传协议SR)、滑动窗口、可靠传输机制

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/104908762 学习课程:<2019王道考研计算机网络> 学习目的 ...

  9. 21.6.25 test

    \(NOI\) 模拟赛 \(T1\) 是树+位运算+dp+优化 打了 \(O(n^2)\) 的暴力dp,只拿到了35分,算了一下参赛的,人均65,中位数60.也能看出一些问题,对于一些模糊的猜测应该尝 ...

  10. OKhttp3的使用教程

    首先在build.gradle下的dependencies下添加引用. implementation "com.squareup.okhttp3:okhttp:4.9.0" 然后编 ...