真的是我遇到過的最坑的判題系統,要等兩個小時才能等到結果.(這道題阻擋了我們去電科?。。。?a target="_blank" rel="nofollow">題目在此
其實下來問了大佬,說是維護一個前綴和就可以了,當時不是太懂,后來仔細想想,就想通了,關鍵是當時比賽時我還想到了這一特點,就是沒有的深入想下去,好氣啊!!!
思路 : 就是就是維護一個前綴和,因為有一個特點,就是從1連著的數字剛好可以構成從1到這些數字相加這么多數字,所以只要維護前綴和保持規律了就可以了,否則就直接跳出來就行了!!!
//就是前綴和,后面的數字如果大于前綴和+1 說明他和區間沒有交集 前綴和+1這個數字達不到,就不連續了唄.!!!
AC代碼:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int main()
{
int t;
scanf("%d",&t); //人笨啊!!!
while(t--){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
ll ans=0; //要用long long 才行,否則要WA.
for(int i=0;i<n;i++){
if(a[i]<=ans+1) //維護前綴和保持為小于和+1就可以,否則就直接跳出來!!!
ans+=a[i];
else
break;
//printf("%d\n",ans);
}
printf("%lld\n",ans);
}
}
記住這些水題的做法啊!!!