http://acm.hdu.edu.cn/showproblem.php?pid=5143
Problem Description NPY is learning arithmetic progression in his math class. In mathematics, an arithmetic progression (AP) is a sequence of numbers such that the difference between the consecutive terms is constant.(from wikipedia)3 1 2 2 1 1 0 0 0 3 0 0 0
Yes No Yes HintIn the first case,the numbers can be divided into {1,2,3} and {2,3,4}. In the second case,the numbers can't be divided properly. In the third case,the numbers can be divided into {1,1,1}.
/* hdu 5143 暴力枚舉 題目大意: 給定數字1,2,3,4.的個數每個數字能且僅能使用一次,組成多個或一個等差數列(長度大於等於3)問能否成功 解題思路:(杭電官方題解) 可以發現等差數列只有(123,234,1234和長度>=3的常數列),如果選擇非常數列(123,234,1234)數量大於等於3, 可以變為三個或4個常數列,例如(123,123,123)變為(111,222,333)。所以從0-2枚舉選擇非常數列的數量,再判斷能 否用常數列覆蓋剩下的(如果數字長度正好為0或≤3就可以)。 */ #include#include #include using namespace std; bool ok(int a[5]) { if((a[0]>=3||a[0]==0)&&(a[1]>=3||a[1]==0)&&(a[2]>=3||a[2]==0)&&(a[3]>=3||a[3]==0)) return true; return false; } int a[10],b[10]; int main() { int T; scanf("%d",&T); while(T--) { for(int i=0;i<4;i++) { scanf("%d",&a[i]); } int flag=0; if(ok(a)) { flag=1; } else { for(int i=0;i<=2;i++) { for(int j=0;j<=2;j++) { for(int k=0;k<=2;k++) { b[0]=a[0]-i-j; b[1]=a[1]-i-j-k; b[2]=a[2]-i-j-k; b[3]=a[3]-i-k; if(ok(b)) flag=true; } } } } if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }