codeforces712C

题意简述:

给你一个边长为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\n",rnd);
11     return 0;
12 }

 

posted @ 2016-10-16 15:33  awipppp  阅读(192)  评论(0)    收藏  举报