本文共 1402 字,大约阅读时间需要 4 分钟。
链接:
第一行为两个整数n,q,分别表示序列长度和询问个数。 第二行有n个数,表示序列中的每个数。 接下来的q行,每行包含一个数k,含义如题所示。
输出q行,每行对应一个数Yes或者No,分别表示可行/不可行
5 32 1 3 -1 4321
YesNoYes
#include #include #include #include #include #include #include #include #include #include #include #include #include #define ls (r<<1)#define rs (r<<1|1)#define debug(a) cout << #a << " " << a << endlusing namespace std;typedef long long ll;const ll maxn = 1e5 + 10;const double eps = 1e-8;const ll mod = 1e9 + 7;const ll inf = 1e9;const double pi = acos(-1.0);ll a[maxn];int main() { std::ios::sync_with_stdio(false); ll n, q, sum = 0; scanf("%lld%lld",&n,&q); for( ll i = 0; i < n; i ++ ) { scanf("%lld",&a[i]); sum += a[i]; } while( q -- ) { ll k; scanf("%lld",&k); if( sum%k || k > n ) { printf("No\n"); continue; } ll ans = 0, avg = sum/k, cnt = 0; bool flag = false; for( ll i = 0; i < n; i ++ ) { ans += a[i]; //最后可能加上0,而0可以合并到前面区间,所以用ans=0来判断 //开始用flag判断最后一位是否刚好可以让ans=avg,判断错了 if( ans == avg ) { ans = 0; cnt ++; } } if( ans == 0 && cnt == k ) { printf("Yes\n"); } else { printf("No\n"); } } return 0;}
转载于:https://www.cnblogs.com/l609929321/p/9558931.html