天仙配
Time Limit: 1000MS Memory limit: 65536K
題目描述
爲了活躍氣氛,司儀想出了一個很有意思的遊戲:會場有n(1≤n≤10000)對新人,司儀在地上畫出一排(共2n個)格子,每個格子裏都寫着一個隨機的整數Ai(1≤Ai≤10000)。
遊戲開始後,讓新人們任意地站成一排(可能會有兩個人站在了同一個格子裏)。等他們都站好以後,司儀開始計算他們每個人自己的得分,記分規則是:男方的分數等於把從自己所站的位置開始一直累加到開頭,女方的分數等於從自己所站位置開始一直累加到末尾。如果某一對新人的得分數是相同的,那你們就獲勝。可以得到一份司儀精心準備的禮物。^_^
比如,有3對新人,地上的那一排數字爲:3,6,2,4,5,2。
如果男方站在第三個位置(2),他的得分爲:3+6+2=11;女方站在第4個位置(4),她的得分爲4+5+2=11。兩人得分相同,可以獲勝。
或者男方站第6個位置(2),女方站第1個位置(3),他們的得分都等於22,也可以獲勝。
這麼高興的日子不能太掃興,所以我們發現,無論地上的數字填成什麼樣子,女方站在開頭和男方站在末尾就一定可以獲獎。我們不得不感嘆司儀的用心良苦。呵呵。
碰巧,redraiment的姐姐和姐夫也在那天結婚,爲了幫姐姐奪得獎品,redraiment來請你幫忙,計算一下他姐姐獲得獎品有多少種站法。
輸入
每組測試數據包括兩行。
第一行爲一個數據n,即新人的對數。
第二行有2n個數據,代表地上的數字。
輸入以0結束,這一行不做處理。
輸出
輸出共有幾種站法。
示例輸入
3 3 6 2 4 5 2 0
示例輸出
2
提示
來源
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int n,a[100000],i,j,s1,s2,count,b[500000];
while(scanf("%d",&n)!=EOF&&n!=0)
{
for(i=0;i<=2*n-1;i++)
scanf("%d",&a[i]);
count=0;
s1=0;
s2=0;
j=0;
for(i=2*n-1;i>=0;i--)
{
s2+=a[i];
b[j]=s2;
j++;
}
s1=0;
s2=0;
for(i=0;i<=2*n-1;i++)
{
s2+=a[i];
b[j]=s2;
j++;
}
qsort(b,j,sizeof(b[0]),cmp);
for(i=0;i<=j-2;i++)
if(b[i]==b[i+1]) count++;
printf("%d\n",count);
}
return 0;
}
示例程序
不知爲何總rt,最後直接把數組開的大大的,不是10000呢,代碼