【POJ 1148】Utopia Divided
Utopia Divided
题目链接:POJ 1148
题目大意
在一个坐标系中,一个点一开始在原点,然后被要求每次走到一个规定的象限内。
你有一些互不相同的数,每次你可以选每选过的两个,正负性可以自己改,使得点的坐标加上这两个数。
所有数会刚好用完。
要你输出任意一种合法方案,如果没有方案就输出 0。
思路
这道题我们可以用贪心的思想来做。
我们考虑让 \(x,y\) 轴分开。
我们先以 \(x\) 轴为例子,\(y\) 轴同理。
按假设现在是正的,你要改成负的(或者负的改成正的),那你就要加或减一个比当前坐标绝对值大的数。
那选数就是选比上一次选还要大的数。
那如果跟原来一样,那你可能有两个选择。要么继续离远点更远,要么靠近远点,但是不会大于当前距离。
那你为了到时还可以改正负,你肯定是让离原点近一点好。
那我们就一定是选比上一次选还要小的数。
那我们还可以看出 \(x,y\) 轴之间没有影响,那我们可以随便吧数分成两部分,数量都是 \(n\)。然后分别处理。
那我们还是只看 \(x\) 轴的那 \(n\) 个数。
那我们就通过看象限的变化,以及当时的位置,就可以贪心出选大的还是小的,正的还是负的了。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
int n, a[20001], u[20001], x[20001], y[20001];
int l1, r1, zff[20001], l2, r2;
int xsum, ysum;
bool cmp(int x, int y) {
return x < y;
}
void zf(int x) {
if (x == 1) printf("+");
else printf("-");
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= 2 * n; i++) scanf("%d", &a[i]);
sort(a + 1, a + 2 * n + 1, cmp);
for (int i = 1; i <= n; i++) {
scanf("%d", &u[i]);
if (u[i] & 1) {//记录xy坐标正负性
if (u[i] / 2) x[i] = y[i] = -1;
else x[i] = y[i] = 1;
}
else if (u[i] / 2 == 1) {
x[i] = -1;
y[i] = 1;
}
else {
x[i] = 1;
y[i] = -1;
}
if (i > 1) {//统计要多少个小的
if (x[i] == x[i - 1]) l1++;
if (y[i] == y[i - 1]) l2++;
}
}
r1 = l1 + 1;
r2 = l2 + 1;
zff[n] = x[n];//得出数的正负
zff[n + n] = y[n];
for (int i = n - 1; i >= 1; i--) {
zff[i] = zff[i + 1] * -1;
zff[n + i] = zff[n + i + 1] * -1;
}
zf(zff[r1]);//先处理第一个数
printf("%d ", a[r1]);
r1++;
zf(zff[n + r2]);
printf("%d\n", a[n + r2]);
r2++;
for (int i = 2; i <= n; i++) {
if (zff[r1 - 1] * x[i] < 0) {//选大的
zf(zff[r1]);
printf("%d ", a[r1]);
r1++;
}
else {//选小的
zf(zff[l1]);
printf("%d ", a[l1]);
l1--;
}
if (zff[n + r2 - 1] * y[i] < 0) {//同理
zf(zff[n + r2]);
printf("%d\n", a[n + r2]);
r2++;
}
else {
zf(zff[n + l2]);
printf("%d\n", a[n + l2]);
l2--;
}
}
return 0;
}
【POJ 1148】Utopia Divided的更多相关文章
- 【POJ 3140】 Contestants Division(树型dp)
id=3140">[POJ 3140] Contestants Division(树型dp) Time Limit: 2000MS Memory Limit: 65536K Tot ...
- bzoj 2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 382 Solved: 111[Submit][S ...
- BZOJ2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 284 Solved: 82[Submit][St ...
- BZOJ2293: 【POJ Challenge】吉他英雄
2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 80 Solved: 59[Submit][Stat ...
- BZOJ2287: 【POJ Challenge】消失之物
2287: [POJ Challenge]消失之物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 254 Solved: 140[Submit][S ...
- BZOJ2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 126 Solved: 90[Submit][Sta ...
- BZOJ2296: 【POJ Challenge】随机种子
2296: [POJ Challenge]随机种子 Time Limit: 1 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 114 Solv ...
- BZOJ2292: 【POJ Challenge 】永远挑战
2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 513 Solved: 201[Submit][ ...
随机推荐
- zabbix自动发现主机并注册
- 利用容器逃逸实现远程登录k8s集群节点
某天, 某鱼说要吃瞄, 于是...... 李国宝:边缘计算k8s集群SuperEdge初体验 zhuanlan.zhihu.com 图标 照着上一篇文章来说,我这边边缘计算集群有一堆节点. 每个节 ...
- 09--Docker 安装tomcat9
1.在hub.docker.com中获取tomcat拉取地址 docker pull tomcat:9.0.41-jdk8-corretto 2.查看Dockerfile 中WORKDIR 为/use ...
- MySQL 中的临时表
在使用 explain 解析一个 sql 时,有时我们会发现在 extra 列上显示 using temporary ,这表示这条语句用到了临时表,那么临时表究竟是什么?它又会对 sql 的性能产生什 ...
- Flutter--Flutter开发环境搭建
一.前言 Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台.高保真.高性能.开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台. Fl ...
- Bitter.Core系列六:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例 DataTable 模型转换
当我们查询之前,我们先构造一个查询对象的输出DTO.如下图代码: public class TScoreSearchDto { /// <summary> /// 分数 /// </ ...
- day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- 第一个 IDEA 应用程序
新建 Java Web 项目 打开 IDEA -> Create New Project 选择 Java -> Java EE -> Web Application 选择工作空间 项 ...
- https://channels.readthedocs.io/en/latest/tutorial/part_2.htmlhttps://channels.readthedocs.io/en/latest/tutorial/part_2.html
https://channels.readthedocs.io/en/latest/tutorial/part_2.html
- maven project builder fails when running on jdk>9
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.plexus.archiver.jar.JarArchi ...