当前位置: 首页 > news >正文

UVA1614 Hell on the Markets(结论+贪心)

题目链接


在这里插入图片描述
1.题目大意:给出一个全正数ai(1<=ai<=i)的序列,现在问能否通过变一部分数为负数使得正数和负数部分相加为0

2.题目实际上可以转化为,能否找到两部分使得它们的和都为sum/2,题目一看有点像动态规划,但是下一章才是dp,因此可能是贪心取,但是测试了几个样例感觉不太对劲,怎么排序都不行,双指针首尾取也不行。没办法了看了题解原来是一个重要结论:
在1<=a[i]<=i时, 前i个数一定可以凑出1~sum[i]的所有整数
证明:
在这里插入图片描述
3.有了以上结论,不难知道sum只有是偶数就能找到解,因为能取到sum,因此一定能找到一部分和为sum/2,剩下那一部分肯定也是sum/2,。但是应该如何取呢,有的地方说需要排序贪心取,有的地方说可以直接从后往前取,看了知乎dl的证明:
在这里插入图片描述
那么直接从后向前贪心即可

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <math.h>
#include <cstdio>
#include <string>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define lowbit(x) (x&(-x))
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const ll INF=1e18;
const int Mod=1e9+7;
const int maxn=2e5+10;

int a[maxn],sg[maxn];

int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n;
    while(cin>>n){
        ll sum=0;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            sum+=a[i];
        }
        if(sum&1){
            cout<<"No"<<endl;
            continue;
        }
        sum/=2;
        for(int i=n;i>=1;i--){
            if(a[i]<=sum){
                sum-=a[i];
                sg[i]=1;
            }else sg[i]=-1;
        }
        cout<<"Yes"<<endl;
        for(int i=1;i<=n;i++){
            cout<<sg[i]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

reference:知乎

相关文章:

  • OPhone开发环境设置备忘录
  • 尺有所长,寸有所短——谁是主人
  • Codeforces Round #636 (Div. 3) E. Weights Distributing(bfs求无向无权图最短路径)
  • 另一种MTK特效制作的方法,层复制
  • 字典树(Trie)——入门篇
  • 警惕:电信加紧发力为哪般?(下)
  • Codeforces Round #637 (Div. 2) C. Nastya and Strange Generator(阅读理解/思维)
  • Broken Space Bar(Trie)[待补]
  • 小白兔和小灰兔
  • VC图片显示特效
  • UVA1153 Keep the Customer Satisfied(贪心+优先队列)
  • UVA10570 Meeting with Aliens(枚举/优化)
  • flash小实验
  • 2019 ICPC Greater New York Region J - Unicycles (规律+递推+矩阵快速幂)
  • WebLogic 9.2中文帮助网站公测中,欢迎大家访问!
  • 【译】理解JavaScript:new 关键字
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • mysql常用命令汇总
  • Phpstorm怎样批量删除空行?
  • Promise面试题2实现异步串行执行
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 蓝海存储开关机注意事项总结
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 免费小说阅读小程序
  • 使用Gradle第一次构建Java程序
  • 算法系列——算法入门之递归分而治之思想的实现
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 微服务核心架构梳理
  • 微信开源mars源码分析1—上层samples分析
  • 小程序测试方案初探
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一起参Ember.js讨论、问答社区。
  • 自定义函数
  • 积累各种好的链接
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​水经微图Web1.5.0版即将上线
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #### go map 底层结构 ####
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (理论篇)httpmoudle和httphandler一览
  • (十三)Maven插件解析运行机制
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)UDP基本编程步骤
  • (一)WLAN定义和基本架构转
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)visual stdio 书签功能介绍