Codeforces Round #508 (Div. 2) D. Slime
D. Slime
题目链接:https://codeforces.com/contest/1038/problem/D
题意:
给出两个数,然后每次可以对相邻的两个数合并,比如x,y,那么合并过后就是x-y或者y-x,这里怎么去减是自己决定的。问怎么合并,最后得到的那个数最大。
题解:
这题主要关键就是发现,最后的式子呈现出来的状态,+、-这两个符号一定是两者都有的,至少存在一个(只有一个数时除外),并且状态覆盖了+、-所有的排列。
发现这个性质过后,贪心解一下就行了。我的做法就是模拟的方法,首先将所有正数取完,然后减去所有负数,当然注意对一些边界条件的判断。
但还有更为机智的做法,就是首先将所有数的绝对值加在一起,然后根据式子中最大值、最小值来确定答案。
如果最大值小于0,就应该把答案减去最大值的两倍;如果最小值大于0,就应该把答案加上最小值的两倍;另外的情况不用管了。
我给出我的代码吧:
#include <bits/stdc++.h>
#define mp make_pair
using namespace std;
typedef long long ll;
const int N = ;
int n;
ll a[N];
priority_queue <pair<ll,int> > q;
int main(){
ios::sync_with_stdio(false);cin.tie();
cin>>n;
for(int i=;i<=n;i++){
cin>>a[i];
q.push(mp(a[i],i));
}
if(n==){
cout<<a[];
return ;
}
int cnt = ;
ll ans = ;
while(!q.empty()){
pair<ll,int> now=q.top();
//cout<<now.first<<" "<<now.second<<endl;
if(now.first>=){
cnt++;q.pop();
if(q.empty()) ans-=now.first;
else ans+=now.first;
}else{
if(cnt==) ans+=now.first,q.pop();
break ;
}
}
while(!q.empty()){
pair<ll,int> now=q.top();q.pop();
ans-=now.first;
}
cout<<ans;
return ;
}
Codeforces Round #508 (Div. 2) D. Slime的更多相关文章
- Codeforces Round #508 (Div. 2)
Codeforces Round #508 (Div. 2) http://codeforces.com/contest/1038 A #include<bits/stdc++.h> us ...
- Codeforces Round #508 (Div. 2) C D
C: C - Gambling 给你两个数列 每一回合A可以选择从第一个序列里面选一个数或者清除第二个序列里面选一个数 同理B能从第二序列里面选数或者清除第一个序列里面一个数 然后 求A所选的数之和 ...
- Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)
E. Maximum Matching 题目链接:https://codeforces.com/contest/1038/problem/E 题意: 给出n个项链,每条项链左边和右边都有一种颜色(范 ...
- [Codeforces Round #508 (Div. 2)][Codeforces 1038E. Maximum Matching]
前几天给舍友讲这题的时候感觉挺有意思的,就贴上来吧... 题目链接:1038E - Maximum Matching 题目大意:有\(n\)个棒子,每个条两端有颜色\(c1,c2\)以及他的价值\(v ...
- 题解——Codeforces Round #508 (Div. 2) T3 (贪心)
贪心的选取最优解 然后相减好 记得要开long long #include <cstdio> #include <algorithm> #include <cstring ...
- 题解——Codeforces Round #508 (Div. 2) T2 (构造)
按照题意构造集合即可 注意无解情况的判断 #include <cstdio> #include <algorithm> #include <cstring> #in ...
- 题解——Codeforces Round #508 (Div. 2) T1 (模拟)
依照题意暴力模拟即可A掉 #include <cstdio> #include <algorithm> #include <cstring> #include &l ...
- Codeforces 1038F Wrap Around (Codeforces Round #508 (Div. 2) F) 题解
写在前面 此题数据量居然才出到\(n=40\)???(黑人问号)以下给出一个串长\(|S|=100,n=10^9\)的题解. 题目描述 给一个长度不超过\(m\)的01串S,问有多少个长度不超过\(n ...
- Codeforces Round #508 (Div. 2)【A,B,C,D】【实验室日常周赛训练】
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f3f3f #define int long long ...
随机推荐
- 用Python实现一个端口扫描,只需简单几步就好
一.常见端口扫描的原理 0.秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术. 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己. 秘密扫描能躲避IDS.防火墙.包过滤器 ...
- Python3 下安装python-votesmart
在python2下安装python-smart还比较容易,而python3中由于很多函数库的变化直接使用python setup.py install 命令来安装的话会导致错误,而导致错误的原因就是p ...
- CDH/Hadoop 5.15 installation steps
I will talk the main steps to install CDH 5.15 on Linux(CENT OS 6.10). The installation method is M ...
- idea clion编译器
RNMV64P0LA-eyJsaWNlbnNlSWQiOiJSTk1WNjRQMExBIiwibGljZW5zZWVOYW1lIjoiY24gdHUiLCJhc3NpZ25lZU5hbWUiOiIiL ...
- 十一:Centralized Cache Management in HDFS 集中缓存管理
集中的HDFS缓存管理,该机制可以让用户缓存特定的hdfs路径,这些块缓存在堆外内存中.namenode指导datanode完成这个工作. Centralized cache management i ...
- 11.24Daily Scrum(2)
人员 任务分配完成情况 明天任务分配 王皓南 实现网页上视频浏览的功能.研究相关的代码和功能.996 数据库测试 申开亮 实现网页上视频浏览的功能.研究相关的代码和功能.997 实现视频浏览的功能 王 ...
- Hadoop之block研究
本文翻译原链接:https://hadoopabcd.wordpress.com/2015/03/17/hdfs-file-blocks-distribution-in-datanodes/ ...
- android入门 — ListView点击事件
listView中提供了两种点击事件的处理方法,分别是OnItemClick和OnItemLongClick. OnItemClick提供的是点击操作的处理,OnItemLongClick提供的是长按 ...
- nuget程序包还原失败:未能解析此远程名称
一个简便的方法就是取消下载缺少的程序包. 步骤如下: 1,工具--NuGet程序包管理器--程序包管理器设置 2,NuGet Package Manager--常规,取消勾选.
- Android基础------Intent组件
1.什么是intent 同Activity一样,也是Android应用组件在Android中承担着一种指令输出的作用Intent负责对应用中一次操作的动作及动作相关的数据进行描述.Android则根据 ...