POJ 2356 抽屜原理

2021-05-25 07:15:58 字數 671 閱讀 1643

題目連線:

簡單說一下思路吧:首先是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個東西任意分放進...