您的位置:首页 > 其它

HDU - 6205 card card card (贪心)2017 ACM/ICPC Asia Regional Shenyang Online

2017-09-11 22:14 447 查看
昨天2017 ACM/ICPC沈阳网络赛的 1012 

当时3分钟出思路,写完交上不对,,看不到什么错误,赛后知道 TLE,

但是 一样的代码,赛后交上就过了

简单说一下思路, d 数组记录花费,贪心从左往右 num += d [ i ] ,保证num 非
4000
负,sum 记录卡片数目(a [ i ] ),更新最大卡片数 ans

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <ctype.h>
#include <vector>
#include <algorithm>
#include <sstream>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
using namespace std;
typedef long long ll;
const int maxn = 2000000 + 7;
ll INF = 0x3f3f3f3f3f3f3f3f;
int n;
int a[maxn];
int d[maxn];

int main() {
ios::sync_with_stdio(false);
while(cin >> n) {
for(int i = 0; i < n; ++i) {
cin >> a[i];
a[i+n] = a[i];
}
for(int i = 0; i < n; ++i) {
cin >> d[i];
d[i+n] = d[i] = a[i] - d[i];
}
int l_ = 0, id = 0;
int sum = 0, num = 0, ans= 0;
for(int i = 0; i < 2*n; ++i) {
num += d[i];
sum += a[i];
if(sum > ans) {
id = l_;
}
if(num < 0) {
l_ = i+1;
num = 0;
sum = 0;
}
if(i - l_ + 1 >= n) {
break;
}
if(l_ >= n) break;
}
cout << id << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: