题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5246
题 意:给n个人的战力数据给你,判断百小度是否能全部战胜他们
思 路:先排序,在找到比百小度的战力小中的最大的,再从这里开始比较:
根据每一步要比较的人的战力,来调整m要加的k的值,k的上限每比较一次就减一。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
using namespace std;
typedef long long LL;
LL vis[10003];
int main()
{
int T;
scanf ( "%d", &T );
int ans = 1;
while ( T-- )
{
LL n, m, k;
scanf ( "%lld %lld %lld", &n, &m, &k );
for ( int i = 0; i < n; i ++ )
scanf ( "%lld", &vis[i] );
sort(vis,vis+n);
printf("Case #%d:\n",ans++);
int t = upper_bound( vis, vis+n, m ) - vis;
//cout<<vis[t-1]<<endl;
if( t == 0 ) printf("madan!\n");
else
if( t == n ) printf("why am I so diao?\n");
else
{
int i;
i = t-1;
m = vis[i];
for( int j = i+1; j < n; j ++ )
{
if( m + k >= vis[j] && k > 0 ) {
m=vis[j];
k--;
}
if( m >= vis[n-1] || !k ) {
break;
}
}
if( m < vis[n-1] ) printf("madan!\n");
else printf("why am I so diao?\n");
}
}
return 0;
}
代码如下: