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--,不然运行时间会超时。