ZOJ 3897(模拟题)

Fiddlesticks

Time Limit: 2 Seconds       Memory Limit: 65536 KB



Fiddlesticks is a popular hero in LOL. When he uses third skill, he can summon a crow to attack one enemy while causing damage to the enemy. And then, the crow will attack another enemy. Now there are n enemies. Their HP respectively are a1,a2,a3,...,an. The crow can attack enemies for n+5 times in total. If all enemies are killed, the crow will also disappear.

Being attacked means the enemy's HP minus crow's damage. If a enemy's HP is not larger than 0, the enemy will be removed from the game. In other word, the enemy is killed.

Fiddlesticks always let the crow attack the first enemy firstly. And the crow will attack the second enemy secondly. One by one,1st to nth enemy will be attacked. After attacking the nth enemy, the crow will return to the first enemy(if the enemy isn't killed). But if the crow kills one enemy, it will reverse the attacking direction. For example, if crow kills the 5th enemy, it won't attack 6th enemy and it will attack 4th enemy(if the enemy isn't killed). What you have to get is the serial number of the enemy who was attack finally.

Fiddlesticks

Input

The first line of the input contains a single integer T, the number of test cases, followed by the input data for each test case. In each test case, you should input n(2<=n<=20) andc(50<=c<=100) in one line. n is the number of enemies, and c is the damage of the crow. Then you should input the n enemies' HP(50<=an<=200) in one line.

Output

The output contains exactly T lines, each corresponding to a test case. Each line should contain a single number that is the serial number of the enemy who was attacked finally.

Sample Input
2
3 100
200 150 200
8 80
200 100 100 100 100 80 160 200
Sample Output
2
3
#include <stdio.h>
using namespace std;
int arr[200];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,c;
        scanf("%d%d",&n,&c);
        for(int i=1;i<=n;i++)
            scanf("%d",arr+i);
        int flag,num,res,cnt,i=1;//flag 方向 num 杀人数 res 结果 cnt 攻击次数
        flag=num=res=cnt=0;
        while(1)
        {
            if(num==n||cnt==n+5)break;
            if(i==0)i=n;
            else if(i==n+1)i=1;
            if(flag==0) //向右
            {
                if(arr[i]<=0)
                {
                    i++;
                    continue;
                }
                else
                {
                    arr[i]-=c;
                    cnt++;
                    res=i;
                    if(arr[i]<=0)
                    {
                        num++;
                        flag=1;
                        i--;
                    }
                    else i++;
                }
            }
            else if(flag==1) //向左
            {
                if(arr[i]<=0)
                {
                    i--;
                    continue;
                }
                else
                {
                    arr[i]-=c;
                    cnt++;
                    res=i;
                    if(arr[i]<=0)
                    {
                        num++;
                        flag=0;
                        i++;
                    }
                    else i--;
                }
            }
        }
        printf("%d\n",res);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值