[尺取法]2017 ACM/ICPC Asia Regional Shenyang Online 1012
2017-09-10 17:42
483 查看
更正一下,原来的代码用的结构体,比赛时内存卡过去了,现在改成数组,时间内存都减少了。谢谢!@小白c
比赛时的提交:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201709/01a6013e5cc7c48c20bb79d27d6f8dc0)
修正后:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201709/b7fc167eb8d5792ab154933610043ff9)
题目:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201709/dcb62d852ee62541fa16b8700049895e)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201709/c4bcc8e713ea18143a91ed1df0c705b3)
题意&分析:
题目的意思大概就是对于 n 堆卡牌,每堆 ai 张,对应的取了这堆的所有牌到手上之后要翻牌子(臣妾做不到),翻 bi 张,当手上的牌不够翻的时候,游戏结束,拿走在手上的所有牌(不管翻没翻),游戏开始前可以将最前面一堆移到最后面(次数不限),求可以拿走牌的最大值。
设已经那的牌的个数是maxa,要翻的牌总数是maxb,
等价转换成
1. maxa>=maxb,那么就可以继续取;
2. maxa < maxb,游戏结束;
用尺取法,对于要移动堆这件事,可以输入数据的时候就在后面复制一边(e.g. 1234512345)。
尺取法介绍: 一号传送门 二号传送门
代码如下:
比赛时的提交:
修正后:
题目:
题意&分析:
题目的意思大概就是对于 n 堆卡牌,每堆 ai 张,对应的取了这堆的所有牌到手上之后要翻牌子(臣妾做不到),翻 bi 张,当手上的牌不够翻的时候,游戏结束,拿走在手上的所有牌(不管翻没翻),游戏开始前可以将最前面一堆移到最后面(次数不限),求可以拿走牌的最大值。
设已经那的牌的个数是maxa,要翻的牌总数是maxb,
等价转换成
1. maxa>=maxb,那么就可以继续取;
2. maxa < maxb,游戏结束;
用尺取法,对于要移动堆这件事,可以输入数据的时候就在后面复制一边(e.g. 1234512345)。
尺取法介绍: 一号传送门 二号传送门
代码如下:
#pragma comment(linker, "/STACK:1024000000,1024000000") #include <algorithm> #include <bitset> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <map> #include <queue> #include <set> #include <stack> #include <string> #include <cctype> #include <fstream> #define INF 0x3f3f3f3f #define TEST cout<<"stop here"<<endl using namespace std; typedef long long ll; const ll mod = 1e9 + 7; const ll maxn = 2e6 + 7; /* struct node { ll a,b; }m[maxn]; */ int a[maxn],b[maxn]; int main(){ std::ios::sync_with_stdio(false); std::cin.tie(0); ll n; while(cin>>n){ ll i, j; for(i=1;i<=n;i++){ cin>>a[i]; a[i+n] = a[i]; } for(i=1;i<=n;i++){ cin>>b[i]; b[i+n]= b[i]; } ll mov = 0,cnt = 0,maxa = 0,maxb = 0,temp = 0; i = 1,j = 1; while(true){ while(maxa>=maxb && j-i+1<=n){ maxa += a[j]; maxb += b[j]; j++; } if(temp<maxa){ temp = maxa; mov = i; } if(maxa==maxb || (i>n && j>2*n-1))break; maxa -= a[i]; maxb -= b[i]; i++; } cout<< mov - 1 <<endl; } return 0; }
相关文章推荐
- HDU-2017 ACM/ICPC Asia Regional Shenyang Online-1012-card card card
- 2017 ACM/ICPC Asia Regional Shenyang Online 1012 card
- 2017 ACM/ICPC Asia Regional Shenyang Online 1002 cable cable cable
- 2017 ACM/ICPC Asia Regional Shenyang Online 1004 & hdu6197:array array array
- HDU 6201 transaction transaction transaction (Dijstra, 2017 ACM/ICPC Asia Regional Shenyang Online)
- 2017 ACM/ICPC Asia Regional Shenyang Online 1005 number number number (HDU6198)
- 2017 ACM/ICPC Asia Regional Shenyang Online 1004 array array array
- Problem 1004-2017 ACM/ICPC Asia Regional Shenyang Online
- 2017 ACM/ICPC Asia Regional Shenyang Online 1005 number number number(矩阵快速幂)
- 2017 ACM/ICPC Asia Regional Shenyang Online
- 2017 ACM/ICPC Asia Regional Shenyang Online 1005 number number number
- Problem 1002 cable cable cable-2017 ACM/ICPC Asia Regional Shenyang Online
- 【2017 ACM/ICPC Asia Regional Shenyang Online 1002】hdu 6195 cable cable cable
- HDU 6199 gems gems gems (DP, 2017 ACM/ICPC Asia Regional Shenyang Online)
- 2017 ACM/ICPC Asia Regional Shenyang Online 1008 transaction transaction transaction
- 2015 ACM/ICPC Asia Regional Shenyang Online-1012 Largest Point
- 2017 ACM/ICPC Asia Regional Shenyang Online - card card card
- 2017 ACM/ICPC Asia Regional Shenyang Online【solved:7 / 12】
- 2017 ACM/ICPC Asia Regional Shenyang Online//number number number
- 2017 ACM/ICPC Asia Regional Shenyang Online:number number number