题意简述:
给你一个边长为n的正三角形,问你最少通过多少次操作,能使它变成边长为m的正三角形。一次操作是指,任意改变三角形的一条边的长度为任意数,但改变后的三角形必须满足两边之和大于第三边,两边之差小于第三边。3<=m<n<100000
完全没想到。
n<m。
倒着做,把边长为m的三角形变大,那么明显每次将最小的边变成另外两边之和减1即可,若超出n,将其视作n即可,不会对其他边带来限制(因为是正三角形)。将一条边变成n一定不比变成n以上的数耗费操作次数更多。综上,当三条边都大于等于n时,回合数即为最小回合数。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,s[4],rnd; 4 int main(){ 5 scanf("%d%d",&n,&m);int i=1;s[1]=s[2]=s[3]=m; 6 while(s[1]<n||s[2]<n||s[3]<n){ 7 s[i]=s[1]+s[2]+s[3]-s[i]-1; 8 i++;if(i==4) i=1; 9 rnd++; 10 }printf("%d ",rnd); 11 return 0; 12 }