UESTC oj- 1515 保护果实 (几何

保护果实

Edit
Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

A有一棵果树,但是树上的果子总是还没有成熟就被B偷偷摘走了。于是,A想买一些栅栏想把果树围起来,让B再也偷不了果子。卖栅栏的人有N块栅栏,每块栅栏长度为ai。但是,卖栅栏的人与B关系很好,他不想随便卖给A。于是,他规定,如果要买第i块栅栏,那么必须要先买第i-1块栅栏(第一块栅栏除外)。同时,A是一个不想浪费的人,他想把他买的所有栅栏都用上,并且,让栅栏围成的图形是个多边形。那么,A最少需要买多少块栅栏呢。

Input

一共有两行。

第一行一个数,表示总共的栅栏数N(N≤1,000,000)” role=”presentation” style=”position: relative;”>N(N1,000,000)N(N≤1,000,000)

第二行有N个数,第i个数表示第i块栅栏的长度ai” role=”presentation” style=”position: relative;”>aiai

Output

输出一个数,表示最少需要的栅栏数,如果无解输出-1.

Sample input and output

Sample InputSample Output
3
3 4 5
3

Hint

Source

第八届ACM趣味程序设计竞赛第三场(正式赛)



越打越菜,和聚聚们的差距越来越大,这次2个半小时过了1题,队友当时都在怀疑自己是不是学这个,还是自己心态爆炸,开得题也不好,人菜就要多努力啊,正好因为某些事情换了队友鱼王聚聚希望可以抱抱大腿23333

三角形的判定是最长边大于其他两边之和,那么多边形就是最长边大于其他边之和,本质就是一枚水题

 #include <cstdio>
#define N 1000000+10
int arr[N];
int main()
{
    int n;
    while(~scanf("%d",&n)) {
        bool flag = false;
        int k;
        for(int i = 0;i < n; i++) {
            scanf("%d",&arr[i]);
        }
        if(n<3) {
            puts("-1");
            continue;
        }
        int sum = 0;
        int max = 0;
        for(int i = 0;i < n; i++) {
            if(arr[i] > max) 
                max = arr[i];
            sum += arr[i];
            if(sum>2*max) {
                flag = true;
                k = i;
                break;
            }
        }
        if(flag) printf("%d\n",k+1);
        else puts("-1");
    }
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值