題目連線:
簡單說一下思路吧:首先是n個數,我們可以用乙個陣列s[n]來儲存從a[1]到a[n]的和
然後我們可以對每乙個s[n]進行如下操作:s[i]=s[i]%n
那麼如果我們掃瞄到某乙個s[i]==0於是就可以得到了乙個解,即從1到i
接下來,如果s[i]的值沒有乙個==0那麼根據mod的原則可以知道s[i]的值必然在1——n-1之間
而且s[i]的個數為n,那麼可以想象成把n個數放進n-1個盒子,那麼至少有乙個數會重複
那麼這個這兩個數相差就一定可以得到乙個n的倍數
上**:
#includeint a[10005];
int s[10005]=;
struct node
;node x[10005];
void node::initi()
void init()
int main()
for(i=1;i<=n;i++) }
if(flag)
else
}printf("%d/n",e-x[s[e]].index);
for(i=x[s[e]].index+1;i<=e;i++)
printf("%d/n",a[i]);
} return 0;
}
poj2356(抽屜原理)
題意 從輸入的n個元素中找出是n的倍數的元素並且輸出 因為這個要求的是連續的數之和,先用sum陣列求和 sum 1 sum 1 sum 2 sum 1 sum 2 sum n 因為sum i n的餘數一定在1 n之間,所以根據抽屜原理,可以用vis陣列記錄出現的餘數 因為1 n之間一定存在有兩個餘數...
練練思維之poj 2356
題意 給你n個數,選取任意個數使得和為n的倍數,如果有多組解,輸出其中一組滿足條件的解就可以了。思路 簡單抽屜原理 字首和處理。顯然假設字首和陣列為sum i 則sum i n一定會分布在 0,n 1 這個含有n個整點的區間上,然後顯然sum 0 0,因此對於sum i n 0 i n 這n 1個數...
經典 抽屜原理
抽屜原理 任意367個人中,必有生日相同的人。從任意5雙手套中任取6只,其中至少有2只恰為一雙手套。從數1,2,10中任取6個數,其中至少有2個數為奇偶性不同。大家都會認為上面所述結論是正確的。這些結論是依據什麼原理得出的呢?這個原理叫做抽屜原理。它的內容可以用形象的語言表述為 把m個東西任意分放進...