題解 CF94B 【Friends】
阿新 • • 發佈:2021-10-25
\[\texttt{題目大意}
\]
\(\quad\)題目的意思是如果 \(5\) 人有 \(3\) 個人都認識或都不認識則證明這個定理就是一個渣渣,伊戈爾·凱贏("WIN"),不存在即證明他輸了("FAIL")
\[\texttt{思路} \]\(\quad\)一開始以為是並查集,結果發現 \(m<=10\),\(a_i<=5\),\(b_i<=5\),暴力列舉即可,那麼這題也估計就紅題的難度,時間複雜度 \(O(5^3)\)。
\(\quad\)用 \(a_{i,j}=1\) 表示 \(i\) 和 \(j\) 互相認識,從這五個人中列舉三個人 \((i,j,k)\) 判斷這三人都認識或都不認識即可。
if((a[i][j]&&a[i][k]&&a[j][k])||(!a[i][j]&&!a[i][k]&&!a[j][k]))flag=1;//核心程式碼
\(\quad\)用 \(flag\) 來判斷,為 \(1\) 表示存在即輸出 "WIN",否則為 \(0\) 輸出 "FAIL"。
\(\quad\)Code
#include<iostream> #include<cstdio> #include<cstring> #define re register int using namespace std; int read() { int x=0,f=1;char ch=getchar(); while(!isdigit(ch)&&ch!='-')ch=getchar(); if(ch=='-')f=-1,ch=getchar(); while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); return x*f; } int n,a[6][6],flag; signed main() { n=read(); for(re i=1,x,y;i<=n;i++)x=read(),y=read(),a[x][y]=a[y][x]=1; for(re i=1;i<=3;i++) //注意i,j,k不重複 { for(re j=i+1;j<=4;j++) { for(re k=j+1;k<=5;k++) if((a[i][j]&&a[i][k]&&a[j][k])||(!a[i][j]&&!a[i][k]&&!a[j][k])) flag=1;//核心程式碼,標記 } } if(flag)puts("WIN");else puts("FAIL"); return 0; }
希望能過