starletkiss 2019-12-20
https://vjudge.net/problem/CodeForces-1278B
题意:给两个数a和b,有一种操作:第i次操作任选其中一个数加或减i;如第1次操作可以任选其中一个数加1或减1,第2次操作可以任选其中一个数加2或减2。问至少几次操作后使得a和b相等。
思路:
刚看到这道题一时半会没想出来,但难度只是B,理论上应该能做出来,手写列举两数之差cha
0=0
1=1
2=1+3-2
3=1+2
4=2+3-1
5=1+2+3+4-5
6=1+2+3
7=1+2+3+5-4
...
猜测:如果需要减只需要减一个数
初始化一个前缀和数组sum[i],前缀和不超过109;如果(sum[i]-cha)%2==0则可以得到最小次数i。结果真的AC了。。。记录一下这道简单数学题。
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Scanner;
public class Main{
public static void main(String []args) {
Scanner scan=new Scanner(System.in);
int t=scan.nextInt();
int [] sum=new int[50000];
for(int i=1;i<50000;i++)
sum[i]=sum[i-1]+i;
while(t!=0) {
t--;
int a=scan.nextInt();
int b=scan.nextInt();
int cha=0;
if(a>b)
cha=a-b;
else
cha=b-a;
for(int i=0;i<=sum[i];i++)
{
if((sum[i]-cha)%2==0 && (sum[i]-cha)>=0 ) {
System.out.println(i);
break;
}
}
}
}
}