📄 zp1909_p_wf.cpp
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 20int n;int Stick[MAX], locate[MAX];int left[4];int ave, maxstick;void Input(){ scanf("%d", &n); ave = 0; maxstick = 0; int i; for (i = 0; i < n; ++i) { scanf("%d", &Stick[i]); ave += Stick[i]; if ( maxstick < Stick[i] ) maxstick = Stick[i]; }}int compare(const void * p1, const void * p2 ){ if ((*(int *)p1) < (*(int *)p2)) return 1; else return -1;}bool CanFormSquare(int st){ if (st >= n) return true; int i; for (i = locate[st] + 1; i < 4; ++i) { if ( Stick[st] <= left[i] ) { left[i] -= Stick[st]; locate[st] = i; if ( CanFormSquare(st+1) ) return true; left[i] += Stick[st]; if (left[i] == ave) break; } } locate[st] = -1; return false;}int main(int argc, char *argv[]){ int Test; scanf("%d", &Test); while(Test --) { Input(); qsort(Stick, n, sizeof(int), compare); memset(locate, -1, sizeof(locate)); if (ave % 4 > 0 || maxstick > ave / 4) { printf("no\n"); continue; } ave /= 4; left[0] = ave - Stick[0]; locate[0] = 0; left[1] = left[2] = left[3] = ave; if (CanFormSquare(1)) printf("yes\n"); else printf("no\n"); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -