COGS1464 NOI1996 三角形燈塔

2021-07-03 10:55:51 字數 2195 閱讀 6725

首先設最下面一排的燈為元x1

,x2,

x3,…

,xn

那麼任何乙個燈都會得到乙個由一些元異或得到結果的式子

eg:

01234

1@ 2@@

3@@@

4@@@@

設最下面的四個燈為x1

,x2,

x3,x

4 , 則 燈

(3,1

) 代表的式子為 x1

⨂x2=

w 燈(

2,1)

代表的式子為 x1

⨂x2⨂

x2⨂x

3=x1

⨂x3=

w 所以說對於給出的每乙個燈都會得到乙個式子,對這些式子解異或方程組即可.

無解情況:

出現式子形如 (0

∗x1)

⨂(0∗

x2)⨂

(0∗x

3)⨂(

0∗x4

)x1⨂

…⨂(0

∗xn)

=w 且

w>0

時無解自由元個數:

這個就是高斯消元的姿勢問題了…

設當前消元到了第k+

1 行

1. 找到乙個1,使其不再前

k 行中,且不再前

k列中

2. 經過列交換與行交換將其移到(k

+1,k

+1) 位置

3. 當不能找到這樣的1時,則前

k 個元不是自由元

設自由元個數為fr

ee答案即為2f

ree .

/****************************************\

* author : ztx

* title : [cogs] 1464. [noi1996]三角形燈塔

* alg : 高斯消元解異或方程組+無解判定+自由元個數判定qaq

* cmt :

* time :

\****************************************/

#include

#define rep(i,l,r) for(i=(l);i<=(r);i++)

#define rep(i,l,r) for(i=(l);i< (r);i++)

#define rev(i,r,l) for(i=(r);i>=(l);i--)

#define rev(i,r,l) for(i=(r);i> (l);i--)

typedef

long

long ll ;

int ch , neg ;

template

inline

void read(tp& ret)

template

inline

void readc(tp& ret)

template

inline

void reads(tp *ret)

#include

namespace gauss , col , row , know ;

inline

void work()

*/ rep (know,0,row)

}inline

bool nosolution()

return

false ;

}#undef maxn

#undef maxm

#undef eps

}using

namespace gauss ;

inline

void getmodulus(int r,int l,int r)

int main()

work() ;

if (nosolution())

ans = 1

<<(n-know) ;

printf("%lld\n", ans) ;

end:;

#ifdef read

fclose(stdin) ; fclose(stdout) ;

#else

getchar() ; getchar() ;

#endif

return

0 ;}

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

經典演算法 (三)帕斯卡三角形(楊輝三角形)

楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。簡介 楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在165...

三角形面積

算是自己第一道正式寫的演算法幾何吧,先從簡單的開始吧,加油!描述 給你三個點,表示乙個三角形的三個頂點,現你的任務是求出該三角形的面積 輸入 每行是一組測試資料,有6個整數x1,y1,x2,y2,x3,y3分別表示三個點的橫縱座標。座標值都在0到10000之間 輸入0 0 0 0 0 0表示輸入結束...