您的位置:首页 > 其它

Wannafly模拟赛3 反蝴蝶效应

2017-10-10 10:09 351 查看
题目链接:点击打开链接

思路:水题,答案为max{ ai + i },i从0开始,时间复杂度O(n)。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n, t, re;
while (scanf("%d", &n) != EOF) {
re = -1;
for (int i = 0; i < n; i++) {
scanf("%d", &t);
re = max(re, t + i);
}
printf("%d\n", re);
}
return 0;
}


此题的另一个思路为二分,答案上界为max{ ai } + n,每次二分后模拟验证,时间复杂度O(nlog(m + n))。

// 反蝴蝶效应2
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,a[100005];
bool judge(int sum) {
for (int i = 0; i < n; i++,sum--) {
if (sum < a[i]) {
return false;
}
}
return true;
}
int main(){
int m;
int left, right;
while (scanf("%d", &n) != EOF) {
m = -1;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
m = max(m, a[i]);
}
left = 1, right = m + n;
while (left <= right) {
int middle = (left + right) / 2;
if (judge(middle)) {
right = middle - 1;
}
else {
left = middle + 1;
}
}
printf("%d\n", left);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: