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