秀恩愛分得快 25分

2021-10-10 06:12:06 字數 4417 閱讀 5288

古人云:秀恩愛,分得快。

網際網路上每天都有大量人發布大量**,我們通過分析這些**,可以分析人與人之間的親密度。如果一張**上出現了 k 個人,這些人兩兩間的親密度就被定義為 1/k。任意兩個人如果同時出現在若干張**裡,他們之間的親密度就是所有這些同框**對應的親密度之和。下面給定一批**,請你分析一對給定的情侶,看看他們分別有沒有親密度更高的異性朋友?

輸入格式:

輸入在第一行給出 2 個正整數:n(不超過1000,為總人數——簡單起見,我們把所有人從 0 到 n-1 編號。為了區分性別,我們用編號前的負號表示女性)和 m(不超過1000,為**總數)。隨後 m 行,每行給出一張**的資訊,格式如下:

k p[1] … p[k]

其中 k(≤ 500)是該****現的人數,p[1] ~ p[k] 就是這些人的編號。最後一行給出一對異性情侶的編號 a 和 b。同行數字以空格分隔。題目保證每個人只有乙個性別,並且不會在同一張**裡出現多次。

輸出格式:

首先輸出 a pa,其中 pa 是與 a 最親密的異性。如果 pa 不唯一,則按他們編號的絕對值遞增輸出;然後類似地輸出 b pb。但如果 a 和 b 正是彼此親密度最高的一對,則只輸出他們的編號,無論是否還有其他人並列。

輸入樣例 1:

1044

-12-

3442

-3-5

-632

4-53

-602

-32

輸出樣例 1:

-32

2-52

-6

輸入樣例 2:

444

-12-

3020

-322

-32-

12-3

2

輸出樣例 2:

-

32

先說乙個超時的演算法,這個是我開始再訓練賽中自己原創的**。給弄超時了,

原因很簡單,首先它的判斷方法比較笨重,其次它的迴圈過於暴力,但是處於某些原因,還是想把這個超時的演算法拿出來…

#include

#include

using

namespace std;

double e[

1010][

1010];

int book[

1010];

char s[10]

;int

bian()

}else

}return n;

}int

main()

a[i]

=x;for

(int j=

1; j}}

int a,b;

scanf

("%s"

,s);

a=bian()

;if(book[a]==0

)scanf

("%s"

,s);

b=bian()

;if(book[b]==0

)int y1[

1010

],y2[

1010];

int tail1=

0,tail2=

0,f1=

0,f2=0;

double ma=0;

for(

int i=

0; i(e[a]

[i]>ma)

ma=e[a]

[i];

for(

int i=

0; ima=0;

for(

int i=

0; i(e[b]

[i]>ma)

ma=e[b]

[i];

for(

int i=

0; i(e[b]

[i]==ma)

if(f1==

1&&f2==1)

else

for(

int i=

0; i(flag)

printf

("\n");

}else

for(

int i=

0; i(flag)

printf

("\n");

}}return0;

}

再貼乙個ac的**,這個是我根據某些大佬的**微改自己超時**後的結果,它的判斷方法真的優秀,訓練賽的時候我也沒想出來

不過我這個**也是勉強不超時,439/500;

#include

#include

using

namespace std;

double e[

1010][

1010];

int book[

1010];

char s[10]

;/*用二維陣列e來儲存兩個人(i,j)之間的親密值,

book陣列來儲存性別,0表示男性,1表示女性,

s來輸入原始編號,並通過"int bian()"函式做進一處理。

其實這裡是我的鍋,我居然不知道"abs(atoi())"這樣的好東西,學到了學到了

*/int

bian()

}else

}return n;

}int

main()

}}}int a,b;

scanf

("%s"

,s);

a=bian()

;if(s[0]==

'-')

book[a]=1

;scanf

("%s"

,s);

b=bian()

;if(s[0]==

'-')

book[b]=1

;double ma=

0,mb=0;

for(

int i=

0; i(e[a]

[i]>ma)

ma=e[a]

[i];

for(

int i=

0; i(e[b]

[i]>mb)

mb=e[b]

[i];

if(e[a]

[b]==ma&&e[b]

[a]==mb)

else

}for

(int i=

0;i}return0;

}

然後就是學習大佬的**了,真的香啊

這個**…(174/500),比我的強多了

當然好東西要跟大家一起分享…

原部落格位址

#include

using

namespace std;

const

int maxn =

1001

;int ***[maxn]=;

double relatea[maxn]=;

double relateb[maxn]=;

vector<

int> v[maxn]

;int a, b;

void

print

(int a,

int b)

intmain()

} cin >> s;

a =abs(

atoi

(s));if

(s[0]==

'-') ***[a]=1

; cin >> s;

b =abs(

atoi

(s));if

(s[0]==

'-') ***[b]=1

;/*abs(x): 返回x的絕對值。

atoi:把字串nptr轉換為int。

atol:把字串nptr轉換為long int。

*/double maxa =

0, maxb =0;

for(

int i =

0; i < m; i++)if

(foundb && ***[b]

!= ***[c])}

}}if(relatea[b]

== maxa && relateb[a]

== maxb)

else

for(

int i =

0; i < n; i++)}

/* 感覺這個輸出函式寫的真的好使,

我寫的話,肯定在這裡寫三遍輸出了,

學到了!!!學到了!!!

*/return0;

}

秀恩愛分得快 25分

古人云 秀恩愛,分得快。網際網路上每天都有大量人發布大量 我們通過分析這些 可以分析人與人之間的親密度。如果一張 上出現了 k 個人,這些人兩兩間的親密度就被定義為 1 k。任意兩個人如果同時出現在若干張 裡,他們之間的親密度就是所有這些同框 對應的親密度之和。下面給定一批 請你分析一對給定的情侶,...

PTA秀恩愛分得快 25分

古人云 秀恩愛,分得快。網際網路上每天都有大量人發布大量 我們通過分析這些 可以分析人與人之間的親密度。如果一張 上出現了 k 個人,這些人兩兩間的親密度就被定義為 1 k。任意兩個人如果同時出現在若干張 裡,他們之間的親密度就是所有這些同框 對應的親密度之和。下面給定一批 請你分析一對給定的情侶,...

7 12 秀恩愛分得快 25 分

古人云 秀恩愛,分得快。網際網路上每天都有大量人發布大量 我們通過分析這些 可以分析人與人之間的親密度。如果一張 上出現了 k 個人,這些人兩兩間的親密度就被定義為 1 k。任意兩個人如果同時出現在若干張 裡,他們之間的親密度就是所有這些同框 對應的親密度之和。下面給定一批 請你分析一對給定的情侶,...