全部评论
试着输出3,通过率0.36,输出4,通过率0.55,输出5,通过率0.09,加一起正好1,然后分别判断能否构成三角形,四边形,五边形,然后就AC了…………
n = int(input()) nums = [int(i) for i in input().split()] if n < 3: print(-1) else: i = 3 while i <= n and max(nums[:i]) >= sum(nums[:i]) - max(nums[:i]): i += 1 res = -1 if i > n else i print(res)
n-1条最短边之和大于第n条边,那么这n条边就能组成n边形。然后遍历,记录最长边max和所有边长之和sum,若sum-max>max则返回当前边数。PS:n>2时打印3否则打印-1能通过27%。
找出前n个中最大的,求其他的和,若和>最大值,则符合要求 #include<bits/stdc++.h> using namespace std; int main(){ int n; while(cin>>n){ priority_queue<int> que; vector<int> vec; for(int i = 0;i<n;i++){ int x; cin>>x; vec.push_back(x); } bool flg = false; que.push(vec[0]); que.push(vec[1]); int sum = vec[0]+vec[1]; int maxx = que.top(); for(int i = 2;i<vec.size();i++){ que.push(vec[i]); sum+=vec[i]; maxx = que.top(); if(sum-maxx>maxx){ cout<<i+1<<endl; flg = true; break; } } if(!flg) cout<<-1<<endl; } system("pause"); return 0; }
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享