珍珠(信息学奥赛一本通-T1384)
生活随笔
收集整理的這篇文章主要介紹了
珍珠(信息学奥赛一本通-T1384)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
有n顆形狀和大小都一致的珍珠,它們的重量都不相同。n為整數,所有的珍珠從1到n編號。你的任務是發現哪顆珍珠的重量剛好處于正中間,即在所有珍珠的重量中,該珍珠的重量列(n+1)/2位。下面給出將一對珍珠進行比較的辦法:
給你一架天平用來比較珍珠的重量,我們可以比出兩個珍珠哪個更重一些,在作出一系列的比較后,我們可以將某些肯定不具備中間重量的珍珠拿走。
例如,下列給出對5顆珍珠進行四次比較的情況:
1、珍珠2比珍珠1重
2、珍珠4比珍珠3重
3、珍珠5比珍珠1重
4、珍珠4比珍珠2重
根據以上結果,雖然我們不能精確地找出哪個珍珠具有中間重量,但我們可以肯定珍珠1和珍珠4不可能具有中間重量,因為珍珠2、4、5比珍珠1重,而珍珠1、2、3比珍珠4輕,所以我們可以移走這兩顆珍珠。
寫一個程序統計出共有多少顆珍珠肯定不會是中間重量。
【輸入】
第一行包含兩個用空格隔開的整數N和M,其中1≤N≤99,且N為奇數,M表示對珍珠進行的比較次數,接下來的M行每行包含兩個用空格隔開的整數x和y,表示珍珠x比珍珠y重。
【輸出】
一行包含一個整數,表示不可能是中間重量的珍珠的總數。
【輸入樣例】
5 4
2 1
4 3
5 1
4 2
【輸出樣例】
2
【源程序】
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #include<set> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 501 #define MOD 123 #define E 1e-6 using namespace std; int g[N][N]; int main() {int n,m;cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;g[x][y]=1;}for(int i=1;i<=n;i++)for(int k=1;k<=n;k++)for(int j=1;j<=n;j++)if(g[k][i]&&g[i][j])g[k][j]=1;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){g[0][j]+=g[i][j];g[i][0]+=g[i][j];}int cnt=0;for(int i=1;i<=n;i++)if( g[0][i]>n/2 || g[i][0]>n/2 )cnt++;cout<<cnt<<endl;return 0; }?
總結
以上是生活随笔為你收集整理的珍珠(信息学奥赛一本通-T1384)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Find the safest road
- 下一篇: Catch That Cow(POJ-3