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

 

转载于:https://www.cnblogs.com/wsy107316/p/10895070.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值