您的位置:首页 > 其它

2017 ACM/ICPC Asia Regional Shenyang Online card card card

2017-09-19 11:03 465 查看




题意:看后面也应该知道是什么意思了

解法:

我们设置l,r,符合条件就是l=起始点,r=当前点,不符合l=i+1

学习了一下FASTIO

#include <iostream>
#include <algorithm>
#include <set>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <stack>
#include <list>
#include <iomanip>
#include <functional>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
//#define read read()
#define edl putchar('\n')
#define ll long long
#define clr(a,b) memset(a,b,sizeof a)
#define rep(i,m,n) for(int i=m ; i<=n ; i++)
#define fep(i,n) for(int i=0 ; i<n ; i++)
//inline int read{ int x=0;char c=getchar();while(c<'0' || c>'9')c=getchar();while(c>='0' && c<='9'){ x=x*10+c-'0';c=getchar(); }return x;}

namespace FastIO {
const int SIZE = 1 << 16;
char buf[SIZE], obuf[SIZE], str[60];
int bi = SIZE, bn = SIZE, opt;
int read(char *s) {
while (bn) {
for (; bi < bn && buf[bi] <= ' '; bi++);
if (bi < bn) break;
bn = fread(buf, 1, SIZE, stdin);
bi = 0;
}
int sn = 0;
while (bn) {
for (; bi < bn && buf[bi] > ' '; bi++) s[sn++] = buf[bi];
if (bi < bn) break;
bn = fread(buf, 1, SIZE, stdin);
bi = 0;
}
s[sn] = 0;
return sn;
}
bool read(int& x) {
int n = read(str), bf;

if (!n) return 0;
int i = 0; if (str[i] == '-') bf = -1, i++; else bf = 1;
for (x = 0; i < n; i++) x = x * 10 + str[i] - '0';
if (bf < 0) x = -x;
return 1;
}
};
#define read(x) FastIO::read(x)
using namespace std;
int X[1234567*2],Y[1234567*2];
const int maxn = 1007;
int n, m, mp[maxn][maxn], link[maxn];
bool vis[maxn];
int main() {

while(read(n)) {
for(int i=1;i<=n;i++){
read(X[i]);
X[n+i]=X[i];
}
for(int i=1;i<=n;i++){
read(Y[i]);
Y[i]=X[i]-Y[i];
Y[i+n]=Y[i];
}
int sum=0;
int ans=0;
int index=1;
int r=1;
int St;
int Max=-((1<<31)-1);
for(int i=1;i<=2*n;i++){
sum+=X[i];
ans+=Y[i];
if(sum>Max){
Max=sum;
St=index;
r=i;
}
if(ans<0){
index=i+1;
sum=0;
ans=0;
if(index>n+1){
break;
}
}
}
printf("%d\n",St-1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: