1 条题解
-
3
不难,一点都不难! 思路:
- 求出所有数的和sum,若不是3的倍数,直接cout<<"NO\n";
- 依次遍历地找两个点,使由他们分割的三部分都等于sum/3;
- 若都能找到输出YES,若出现加上太多,不加太少的情况,输出NO。 上代码!!😕
#include<bits/stdc++.h> #define int long long using namespace std; int a[200005]; signed main(){ freopen("fair.in","r",stdin); freopen("fair.out","w",stdout); int t; cin>>t; while(t--){ int n; cin>>n; int sum=0; for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; } if(sum%3!=0){ cout<<"NO\n"; continue; } sum/=3; int ans=0; bool fail=0; for(int i=1;i<=n;i++){ if(ans+a[i]>sum){ fail=1; cout<<"NO\n"; break; }else{ ans+=a[i]; ans%=sum; } } if(!fail)cout<<"YES\n"; } }
点个赞再走!不然扔出去!
- 1
信息
- ID
- 773
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 145
- 已通过
- 27
- 上传者