using System;
class Program
{
static void Main()
{
int T=int.Parse(Console.ReadLine());
for(int i=0;i<T;i++)
{
string[] input=Console.ReadLine().Split();
int n=int.Parse(input[0]);
int m=int.Parse(input[1]);
while(m-->0)
{
if(n>=5)n=(int)Math.Ceiling(Math.Sqrt(n));
else if(n>=0)
{
int n1=(int)Math.Ceiling(Math.Sqrt(n));
int n2=n-1;
int n3=n/2+1;
n=Math.Min(n3,Math.Min(n1,n2));
}
else
{
n-=m+1;
break;
}
}
Console.WriteLine(n);
}
}
}
有一点算法在里面,大于等于3的时候,第一种方法值最小。小于0时,第三种方法值最小。其余则三种方法都试一遍取最小值。
注意小于0时不要n--,不然运行时间会超时。



京公网安备 11010502036488号