注意精度。因为大于int范围,应该用LL。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 10000 + 20;
long long r[maxn];
long long n,m,k;
long long ans;
int main(){
int T,c=0;
cin >> T;
while(T--){
cin >> n>>m>>k;long long l = m;
for(int i=0;i<n;i++) scanf("%I64d", r + i);
ans = m;
long long cnt = 0;
bool f = true;
sort(r,r+n);
for(int i=0;i<n;i++){
if(k==cnt || m<r[0]) break;
if(r[i]<=l) continue;
if(r[i]>l){
long long cab = r[i-1] + k - cnt;cnt++;
if(cab < r[i]) {f=false;break;}
if(cab > ans) ans = cab;
l = cab;
}
}
printf("Case #%d:\n",++c);
if(ans<r[n-1] || !f) printf("madan!\n");
else printf("why am I so diao?\n");
}
return 0;
}