19山东省赛-M-Sekiro

这道题蛮水的,但当时做的时候还是错了两次,注意时间和n等于0的情况…

题目

Sekiro: Shadows Die Twice is an action-adventure video game developed by FromSoftware and published by Activision. In the game, the players act as a Sengoku period shinobi known as Wolf as he attempts to take revenge on a samurai clan who attacked him and kidnapped his lord.在这里插入图片描述
As a game directed by Hidetaka Miyazaki, Sekiro (unsurprisingly) features a very harsh death punishment. If the player dies when carrying g amount of money, the amount of money will be reduced to g/2, where g/2 indicates the smallest integer g’ that 2g’>=g .
As a noobie of the game, BaoBao has died k times in the game continuously. Given that BaoBao carried n amount of money before his first death, and that BaoBao didn’t collect or spend any money during these k deaths, what’s the amount of money left after his k deaths?

Input

here are multiple test cases. The first line of the input contains an integer T (about 1000),indicating the number of test cases. For each test case:
The first and only line contains two integers n and k0<=n<=1e9,1<=k<=1e9), indicating the initial amount of money BaoBao carries and the number of times BaoBao dies in the game.

Output

For each test case output one line containing one integer, indicating the amount of money left after k deaths.

Sample Input

4
10 1
7 1
10 2
7 2

Sample Output

5
4
3
2

Hint

For the third sample test case, when BaoBao dies for the first time, the money he carries will be reduced from 10 to 5; When he dies for the second time, the money he carries will be reduced from 5 to 3.

题意读懂了就觉得蛮简单的了
直接看代码吧

代码

#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
int main()
{
    int t;
    long long n,k,c,d,e;
    scanf("%d",&t);
    while( t-- )
    {
        //int a,b;
        scanf("%lld%lld",&n,&k);
        c=sqrt(n);
        c=c+1;
        if(n==0)
        {printf("0\n");
            continue;}
        if(k>=c)
        {printf("1\n");}
        else
        {
            while( k-- )
            {
            if(n==1)
            {break;}
            if(n%2==0)
            {n=n/2;
            continue;}
            if(n%2!=0)
            {n=n/2+1;
            continue;}
            }
            printf("%lld\n",n);
        }
    }
    return 0;
}

浮生一梦
翩然惊鸿

发布了36 篇原创文章 · 获赞 4 · 访问量 1405

猜你喜欢

转载自blog.csdn.net/qq_43781431/article/details/90230933