NC214860. 排列算式
描述
输入描述
首行给出一个正整数代表测试数据组数
每组测试数据第一行一个正整数
第二行包含n个以空格分隔的数字
输入保证每一个数字都是 −3, −2, −1, +0, +1, +2, +3 的其中一个。
输出描述
每组测试数据输出一行,“Yes” or “No”
示例1
输入:
2 4 +3 +2 -1 -2 5 +3 +2 +1 +0 +2
输出:
Yes No
说明:
第一组依照 +3,−2,+2,−1 的顺序由左至右计算总和,过程会依序算得 3, 1, 3, 2,满足题目要求C++(clang++11) 解法, 执行用时: 5ms, 内存消耗: 376K, 提交时间: 2021-01-11 22:21:36
#include<bits/stdc++.h> using namespace std; unordered_map<int,int>V; int main() { int i,s,n,T; scanf("%d",&T); while(T--) { scanf("%d",&n); V.clear(),s=0; while(n--)scanf("%d",&i),V[i]++; for(i=-3;i<=3;i++)s+=V[i]*i; if(s>3||s<0){printf("No\n");continue;} s=min(V[-3],V[3]); V[3]-=s,V[-3]-=s; s=min(V[2],V[-1]); V[2]-=s,V[-1]-=s,V[1]+=s; s=min(V[-3],V[1]); V[-2]+=s,V[-3]-=s,V[1]-=s; if(V[-3]){printf("No\n");continue;} s=min(V[-2],V[1]); V[-2]-=s,V[1]-=s,V[-1]+=s; s=min(V[3],V[-1]); V[3]-=s,V[-1]-=s,V[2]+=s; if(V[3]>1){printf("No\n");continue;} printf("Yes\n"); } return 0; }