[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开始的所有版 ...
随机推荐
- 服务注册中心之Eureka使用
一.Eureka基础 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCl ...
- 解决Vite-React项目中js使用jsx语法报错的问题
背景 在做存量项目接入Vite测试时发现,存量(老)项目中很多是直接在js中书写jsx语法,使用Vite启动时就会抛出一堆问题Failed to parse source. 不嫌麻烦可以跑个脚本批量修 ...
- Bert文本分类实践(三):处理样本不均衡和提升模型鲁棒性trick
目录 写在前面 缓解样本不均衡 模型层面解决样本不均衡 Focal Loss pytorch代码实现 数据层面解决样本不均衡 提升模型鲁棒性 对抗训练 对抗训练pytorch代码实现 知识蒸馏 防止模 ...
- Python&Selenium 数据驱动测试【unittest+ddt+xml】
一.摘要 本博文将介绍Python和Selenium做自动化测试时,基于unittest框架,借助ddt模块,使用xml文件作为测试输入. 二.xml文件 保存路径:D:\\Programs\\Pyt ...
- Redis大集群扩容性能优化实践
一.背景 在现网环境,一些使用Redis集群的业务随着业务量的上涨,往往需要进行节点扩容操作. 之前有了解到运维同学对一些节点数比较大的Redis集群进行扩容操作后,业务侧反映集群性能下降,具体表现在 ...
- redis分片集群安装部署
redis分片集群安装与部署 分片集群的优势 高可用.且方便扩展. 数据分片,多节点提供服务,提高性能,数据提供冗余备份. 分片集群部署 只需更改配置文件 部署架构:6个节点,3主3从.数据集分为3片 ...
- 款阿里开源的 Java 诊断工具Arthas
Arthas是什么鬼? Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题. Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux. ...
- Django开发个人博客入门学习经验贴
[写在前面] 入门学习搭建个人博客系统首先还是参考大佬们的经验,记得刚入手Django的时候,一篇博客大佬说过一句话,做技术的不要一开始就扎头于细节中,先把握整体框架,了解这个对象之后再去了解细节,进 ...
- 全连接层dense作用
参考来源
- seata整合nacos完成分布式的部署
seata整合nacos完成分布式的部署 一.背景 二.部署机器 三.部署步骤 1.在seata上创建命名空间 2.下载对应版本的seata 3.单机启动 1.修改seata配置文件 1.修改注册中心 ...