Flower(规律+逆向思维)

Flower:

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6486

 

题解:

逆向思维+规律


因为每次剪n-1,所以逆向就是控制n-1朵不变,每次增高1朵,直到所有等高,即所有的高度都等于最高的那一朵,记录增高的次数为sum,反过来就是最高的那个减少sum,
如果减少sum后小于1则不成立,大于等于1,则需要减少sum次。
sum=每朵花与最高的差的和。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int main()
 5 {
 6     int t;
 7     scanf("%d",&t);
 8     while(t--)
 9     {
10         ll n;
11         scanf("%lld",&n);
12         int i;
13         ll a[100010];
14         for(i=0;i<n;i++)
15         {
16             scanf("%lld",&a[i]);
17         }
18         sort(a,a+n);
19         ll sum=0;
20         for(i=0;i<n;i++)
21         {
22             sum+=(a[n-1]-a[i]);
23         }
24         if(a[n-1]-sum<1)
25             printf("-1\n");
26         else
27             printf("%lld\n",sum);
28     }
29     return 0;
30 }
View Code

 

posted @ 2019-05-20 16:54  swsyya  阅读(246)  评论(0编辑  收藏  举报

回到顶部