bzoj 3704 昊昊的机油之GRST - 贪心
首先求$b - a$,再差分,令这个数组为$c$。
那么操作的次数是这个数组$c$中正数的和。
现在可以做的是选择一个地方+4,它后面的某个地方-4。
考虑什么时候可以使得当前的答案减少。
- 在$-3$处$+4$,在$3$处$-4$,答案减少2
- 在$-3$处$+4$,在$2$处$-4$,答案减少1
- 在$-2$处$+4$,在$3$处$-4$,答案减少1
首先我们将尽量靠后的$-3$和$3$匹配,然后将对它操作。
这个用一个栈就能做。
剩下就贪心一下就好了。注意当$-3$和$2$操作时会多出$-2$。
Code
- /**
- * bzoj
- * Problem#3704
- * Accepted
- * Time: 1400ms
- * Memory: 128316k
- */
- #include <iostream>
- #include <cstdlib>
- #include <cstdio>
- #include <queue>
- #include <stack>
- using namespace std;
- typedef bool boolean;
- typedef class Input {
- protected:
- const static int limit = ;
- FILE* file;
- int ss, st;
- char buf[limit];
- public:
- Input():file(NULL) { };
- Input(FILE* file):file(file) { }
- void open(FILE *file) {
- this->file = file;
- }
- void open(const char* filename) {
- file = fopen(filename, "r");
- }
- char pick() {
- if (ss == st)
- st = fread(buf, , limit, file), ss = ;//, cerr << "str: " << buf << "ed " << st << endl;
- return buf[ss++];
- }
- }Input;
- #define digit(_x) ((_x) >= '0' && (_x) <= '9')
- Input& operator >> (Input& in, unsigned& u) {
- char x;
- while (~(x = in.pick()) && !digit(x));
- for (u = x - ''; ~(x = in.pick()) && digit(x); u = u * + x - '');
- return in;
- }
- Input& operator >> (Input& in, unsigned long long& u) {
- char x;
- while (~(x = in.pick()) && !digit(x));
- for (u = x - ''; ~(x = in.pick()) && digit(x); u = u * + x - '');
- return in;
- }
- Input& operator >> (Input& in, int& u) {
- char x;
- while (~(x = in.pick()) && !digit(x) && x != '-');
- int aflag = ((x == '-') ? (x = in.pick(), -) : ());
- for (u = x - ''; ~(x = in.pick()) && digit(x); u = u * + x - '');
- u *= aflag;
- return in;
- }
- Input& operator >> (Input& in, long long& u) {
- char x;
- while (~(x = in.pick()) && !digit(x) && x != '-');
- int aflag = ((x == '-') ? (x = in.pick(), -) : ());
- for (u = x - ''; ~(x = in.pick()) && digit(x); u = u * + x - '');
- u *= aflag;
- return in;
- }
- Input& operator >> (Input& in, char* str) {
- for (char x; ~(x = in.pick()) && x != '\n' && x != ' '; *(str++) = x);
- return in;
- }
- Input in (stdin);
- template <typename T>
- void pfill(T* pst, const T* ped, T val) {
- for ( ; pst != ped; *(pst++) = val);
- }
- int n;
- int *a, *b, *c;
- boolean *used;
- inline void init() {
- in >> n;
- a = new int[(n + )];
- b = new int[(n + )];
- c = new int[(n + )];
- for (int i = ; i <= n; i++) {
- in >> a[i];
- }
- for (int i = ; i <= n; i++) {
- in >> b[i];
- c[i] = (b[i] - a[i] + ) % ;
- }
- }
- stack<int> sta;
- inline void solve() {
- int ans = ;
- for (int i = n; i > ; i--)
- c[i] = c[i] - c[i - ];
- used = new boolean[(n + )];
- pfill(used, used + n + , false);
- for (int i = ; i <= n; i++)
- if (c[i] > )
- ans += c[i];
- for (int i = , y; i <= n; i++)
- if (c[i] == -)
- sta.push(i);
- else if (c[i] == && !sta.empty()) {
- y = sta.top();
- sta.pop();
- used[y] = used[i] = true;
- ans -= ;
- }
- int have_2 = , have_3 = ;
- for (int i = ; i <= n; i++) {
- if (used[i])
- continue;
- switch (c[i]) {
- case :
- if (have_3)
- have_3--, ans--;
- else if (have_2)
- have_2--, ans--;
- break;
- case :
- if (have_3)
- have_3--, have_2++, ans--;
- break;
- case -:
- have_2++;
- break;
- case -:
- have_3++;
- break;
- }
- }
- printf("%d\n", ans);
- }
- int main() {
- init();
- solve();
- return ;
- }
bzoj 3704 昊昊的机油之GRST - 贪心的更多相关文章
- bzoj 3704 昊昊的机油之GRST 贪心dp,思维
昊昊的机油之GRST Time Limit: 10 Sec Memory Limit: 1024 MBSubmit: 80 Solved: 33[Submit][Status][Discuss] ...
- UESTC 1256 昊昊爱运动 Map
昊昊爱运动 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他N天 ...
- CDOJ 1259 昊昊爱运动 II 线段树+bitset
昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r ...
- cdoj 1256 昊昊爱运动 预处理/前缀和
昊昊爱运动 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1256 Descr ...
- CDOJ 1259 昊昊爱运动 II bitset+线段树
题目链接 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了 ...
- cdojQ - 昊昊爱运动 II
地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) ...
- UESTC-1259 昊昊爱运动 II
昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜 ...
- cdoj 1256 昊昊爱运动 预处理
昊昊爱运动 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他NN ...
- bzoj 3704: 昊昊的机油之GRST【贪心+脑洞】
脑洞题大概 首先处理出每个位置需要操作的次数c,假设第一次达到目标就不能再走,这样的操作次数是c差分后值的正数和,就想成分治每一段然后同减最小值然后从0处断开 然后考虑能一圈一圈走的情况,连续一段多走 ...
随机推荐
- 搭建ionic3-angular5 开发环境并打包成安卓apk包教程
安装node.js 搭建ionic3-angular5 开发环境,首先查看本地电脑是否安装node环境,打开终端,输入 命令: node -v 没有去安装nodejs 网址:http://nodej ...
- 微信小程序--地图组件与api-模拟器上返回的scale 与真机上不同--bindregionchange触发图标一直闪现问题
场景:根据地理定位获取不同地区的充电桩位置,要求 1.平移的时候,跟随坐标变化展示不同区域的坐标点信息 2.不同的缩放等级,14以下,展示聚合点数据,14以上,展示真正的站点信息: 3.点击聚合点的时 ...
- 我喜欢的几款不错的vim插件
插件安装组件 https://github.com/tpope/vim-pathogen supertab自动补齐 https://www.vim.org/scripts/script.php?scr ...
- C# Asp.net中简单操作MongoDB数据库(二)
C# Asp.net中简单操作MongoDB数据库(一) , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...
- HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】
最开始学最短路的时候只会用map二维数组存图,那个时候还不知道这就是矩阵存图,也不懂得效率怎么样 经过几个月的历练再回头看最短路的题, 发现图可以用链式前向星来存, 链式前向星的效率是比较高的.对于查 ...
- python处理Excel - xlrd xlwr openpyxl
python处理Excel - xlrd xlwr openpyxl 1 xlrd和xlwt Todo: 使用xlrd和xlwt读写Excel文件的方法和示例代码,待续... 参考链接: Creati ...
- JavaScript监控页面input输入整数且只能输入2位小数
<input type="text" id="money" /> <script> $(function () { $('#money' ...
- Xamarin.Forms 开发资源集合
收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 Snppts: Xamarin Forms UI Snippets. Prebuilt Templat ...
- 编年史:OI测试
2019.4.18 t1:给出不定方程ax+by+c=0,求x在x1~x2并且y在y1~y2时的解个数.考场上想的是一个扩欧板子敲下去,然后构造出x>=x1的最小解,同时得出y,然后通过通项来枚 ...
- C++ 自定义订单号
自定义订单号 #include<iostream> #include<stack> #include <time.h> #include <sys/timeb ...