CSP-S模拟 环球巡演(hash表+贪心)
传送门
把所有关键点提出来处理,然后分成相邻两个数分别贪心计算答案最后加起来。
现在把问题转化成了如下模型:
给你一个010101序列,你可以进行如下几种操作(四种操作代价不同):
- 删去一个1
- 删去一个0
- 删去一个1,并允许在其后面删去一个0
- 删去一个0,并允许在其后面删去一个1
然后比比四种操作的代价讨论一下即可。
代码:
#include<bits/stdc++.h>
#define ri register int
#define fi first
#define se second
using namespace std;
const int rlen=1<<18|1;
inline char gc(){static char buf[rlen],*ib,*ob;(ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin));return *ib++;
}
inline int read(){int ans=0;char ch=gc();while(!isdigit(ch))ch=gc();while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();return ans;
}
inline char readch(){char ch=gc();while(!isalpha(ch))ch=gc();return ch;
}
typedef long long ll;
typedef pair<int,int> pii;
const int N=600005;
int n,d,m,a[N],id[N];
const int mogic=1e6+7;
pii seg[N];
vector<bool>seq[N];
ll va[N],vb[N],vc[N],vd[N];
const ll inf=1e18;
struct Hash_table{vector<pii>ori[mogic];vector<int>idx[mogic];int tot;Hash_table(){tot=0;}inline int query(pii x){int t=((ll)x.fi*n%mogic+x.se)%mogic;for(ri i=ori[t].size()-1;~i;--i)if(ori[t][i]==x)return idx[t][i];return ori[t].push_back(x),idx[t].push_back(++tot),seg[tot]=pii(0,0),tot;}inline int check(pii x){int t=((ll)x.fi*n%mogic+x.se)%mogic;for(ri i=ori[t].size()-1;~i;--i)if(ori[t][i]==x)return idx[t][i];return 0;}
}S;
inline void update(ll&a,ll b){a=min(a,b);}
inline ll min(const ll&a,const ll&b,const ll&c){return a<b?(a<c?a:c):(b<c?b:c);}
inline ll query(vector<bool>f,ll a,ll b,ll c,ll d){if(!f.size())return 0;int ca=0,cb=0,cc=0,cd=0;for(ri i=0,p1=0,p2=0;i<f.size();++i){ca+=f[i];cb+=!f[i];if(f[i]){++p1;if(p2)--p2,++cd;}else{++p2;if(p1)--p1,++cc;}}if(a+b<=c&&a+b<=d)return a*ca+b*cb;if(a+b<=c)return d*cd+a*(ca-cd)+b*(cb-cd);if(a+b<=d)return c*cc+a*(ca-cc)+b*(cb-cc);vector<bool>ff;if(c==inf&&d==inf)return a*ca+b*cb;if(c<=d){int cnt=0,pre=0;for(ri i=1;i<=cb-cc;++i)ff.push_back(0);for(ri i=1;i<=ca-cc;++i)ff.push_back(1);return c*cc+query(ff,a,b,inf,d);}int cnt=0,pre=0;for(ri i=1;i<=ca-cd;++i)ff.push_back(1);for(ri i=1;i<=cb-cd;++i)ff.push_back(0);return d*cd+query(ff,a,b,c,inf);
}
int main(){n=read(),d=read();for(ri i=1;i<=d;++i)a[i]=read();for(ri t,i=1;i<d;++i){id[i]=S.query(pii(a[i],a[i+1]));t=S.query(pii(min(a[i+1],a[i]),max(a[i],a[i+1])));if(!seg[t].fi)seg[t]=pii(a[i],a[i+1]);seq[t].push_back(seg[t]==pii(a[i],a[i+1]));}for(ri i=1,up=S.tot;i<=up;++i)va[i]=vb[i]=vc[i]=vd[i]=inf;m=read();char op;for(ri t,f,i=1,u,v,w;i<=m;++i){u=read(),v=read(),op=readch(),w=read();if(!S.check(pii(u,v)))continue;t=S.query(pii(min(u,v),max(u,v)));f=seg[t]==pii(u,v);if(op=='O'){if(f)update(va[t],w);else update(vb[t],w);}else{if(f)update(va[t],w),update(vc[t],w);else update(vb[t],w),update(vd[t],w);}}ll ans=0;for(ri i=1,up=S.tot;i<=up;++i)ans+=query(seq[i],va[i],vb[i],vc[i],vd[i]);cout<<ans;return 0;
}
CSP-S模拟 环球巡演(hash表+贪心)相关推荐
- SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)
Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...
- Hash表_拉链法_开放寻址法_模拟散列表
文章目录 Hash表 作用 ① 拉链法 ② 开放寻址法 例 - 模拟散列表 > 拉链法 > 开放寻址法 Hash表 一般只有添加.查找 (注意:离散化为特殊的哈希方式,因为离散化需要提前保 ...
- Map和Set,简单模拟实现哈希表以及哈希表部分底层源码的分析
目录 Map和Set的简单介绍 降低哈希冲突发生的概率以及当冲突发生时如何解决哈希冲突 简单模拟实现哈希表--1.key为整形:2.key为引用类型 哈希表部分底层源码的分析 1.Map和Set的简单 ...
- 暑假集训总结——区间DP,堆的概念及应用,STL(vector、set、pair、map、priority_queue),hash表,树状数组,图论
序言: 经过长达十几天的集训,确实学了不少知识点.我想如果再不总结的话,6天之后又要忘完了. 所以发一篇具有总结回忆性的博客,供大家回忆. 目录会本人自己排列的时间的先后顺序来排列,可直接食用. 目录 ...
- hash表--c语言 字符串键值配对——(key, value)
c语言键值配对--(key, value) 看一个C++项目时,其中解析配置文的部分引发了我的思考. 配置文件问普通字符文件,内容都是类似 如下: ipaddr=127.0.0.1 port=888 ...
- 从头到尾彻底解析Hash表算法
从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26 阅读: 25156 次 推荐: 14 原文链接 [收藏] 作者:July.wuliming.pkuoliv ...
- 0x14.基础数据结构 — hash表与字符串hash
目录 一.Hash表 1.AcWing 137. 雪花雪花雪花 0.hash表+链表 1.字符串的最小表示法 二.字符串hashhashhash 0.AcWing 138. 兔子与兔子 1.luogu ...
- 关于表单的java的程序_JAVA BOT程序模拟人类用户填写表单 并 发送
仿真表单:BOT程序模拟人类用户填写表单 并 发送 抓取表单: HTTPSocket http = new HTTPSocket(); SocketFactory.setProxyHost(" ...
- 一步一步写算法(之hash表)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...
最新文章
- 从头学起androidlt;AutoCompleteTextView文章提示文本框.十九.gt;
- Unicode 和 UTF-8关系
- 谈中型项目下的编码技巧二
- oracle选择语言设置,oracle本地语言变量设置
- 基于 Jenkins 快速搭建持续集成环境
- Drools 在告警关联分析中的应用
- 分组中查询不符合条件的组
- Entropay(欧贝通)
- python中get属性_python3中__get__,__getattr__,__getattribute__的区别
- 【基础】网络常见的9大命令,非常实用!
- 众专家推荐《移动微技(Mobile Widget)应用开发权威指南》
- 隐马尔科夫模型 和动态贝叶斯网络
- 关系抽取之PCNN(Piece-Wise-CNN)
- 分享餐饮管理组织结构流程图模板
- 百度搜索正式升级冰桶算法5.0!
- Window 重置所有网络驱动器的命令
- 虎牙在全球 DNS 秒级生效上的实践
- python标准库不需要导入即可使用其中的所有对象和方法_Python编程及应用-中国大学mooc-题库零氪...
- 微信小程序富文本插件mp-html
- 我的文章让老婆看到了……
热门文章
- 小程序referer
- 集成电路+太阳能发电+芯片制造+平板显示+锂电烘干+制药爱德华Edwards干式真空泵应用
- 【ReID】AlignedReID ++ : Dynamically matching local information for person re-identification
- JAVA利用Jacob将EXCEL转成PDF
- 【DIY创意】自制3D折纸装饰
- NumPy 布尔索引
- Gen2-UHF-RFID-Reader学习(一)概览
- 暑期实践课题 开题报告
- ajax 调用sqlserver,js连接sqlserver进行查询
- 计算机英语四级证书编号查询,英语四级99宿舍网查准考证号