]]>SPOJ 2154 Kruskalhttp://www.shnenglu.com/sdfond/archive/2010/02/06/107365.htmlsdfondsdfondSat, 06 Feb 2010 01:04:00 GMThttp://www.shnenglu.com/sdfond/archive/2010/02/06/107365.htmlhttp://www.shnenglu.com/sdfond/comments/107365.htmlhttp://www.shnenglu.com/sdfond/archive/2010/02/06/107365.html#Feedback0http://www.shnenglu.com/sdfond/comments/commentRss/107365.htmlhttp://www.shnenglu.com/sdfond/services/trackbacks/107365.html銆銆鐚村瓙鍜孠ruskal鐜╀竴涓彇鐭沖瓙娓告垙錛岀粰瀹歯鍫嗙煶瀛愶紝n涓嶅ぇ浜?00錛屾瘡鍫嗙煶瀛愮殑涓暟澶т簬2灝忎簬2 ^
32錛屽弻鏂硅疆?huà)箒鍙栧瓙锛屾瘡娆″彲浠ヤ粠涓鍫嗕腑鍙栨渶澶歬涓紝褰撲竴鏂瑰彇瀹岀煶瀛愬悗鏌愬爢鐭沖瓙鐨勪釜鏁版槸绱犳暟鐨勮瘽閭d箞褰撳墠鐜╁鑾瘋儨銆傞棶鐚村瓙鏄惁鏈夊繀鑳滅瓥鐣ャ?br> 銆愰鐩垎鏋愩?br>銆銆榪欐槸涓閬揃T棰橈紝涓棿璁劇疆浜?jiǎn)璁稿trick銆傚紑濮嬪棰樻剰娌℃湁瀹屽叏鐞嗚В錛岄敊浜?jiǎn)寰堝娆″Q屽悗鏉ユ壘鏉ヤ簡(jiǎn)鏁版嵁錛屾墠鍙戠幇浜?jiǎn)闂銆?br>銆銆棰樼洰涓弿榪扮殑鑾瘋儨絳栫暐鏄細(xì)"A
player wins if after his move the size of some heap is a prime
number."榪欏彞璇濅箥涓鐪嬩互涓烘槸鍙栧畬鐭沖瓙鍚庡墿涓嬬殑鐭沖瓙涓暟鏄礌鏁扮殑鏃跺欏氨鑾瘋儨錛屽叾瀹炶繕闅愯棌鐫鍙︿竴縐嶅彲鑳斤細(xì)濡傛灉澶氬爢鐭沖瓙涓暟鏄礌鏁幫紝褰撳墠鐜╁鏃犺鎬庢牱鍙栭兘鑳借幏鑳滐紝鍥犱負(fù)鍦ㄤ粬鍙栧畬涔嬪悗錛屽叾浠栧爢鐨勭煶瀛愪釜鏁版槸绱犳暟錛屼篃婊¤凍鑾瘋儨鏉′歡銆?br>銆銆鎺ヤ笅鏉ヨ冭檻涓鑸儏鍐點(diǎn)傝繖涓鐩槸闄愬埗涓棿鐘舵佺殑Nim娓告垙錛屼篃灝辨槸璇達(dá)紝瀵逛簬涓鍫嗕釜鏁頒負(fù)n鐨勭煶瀛愯岃█錛屽畠鐨凷G鍊煎彇鍐充簬灝忎簬n鐨勬渶澶х礌鏁般傛敞鎰忚繖閲岄璁懼張鏈変簡(jiǎn)涓涓皬trick錛岄鐩鏄庝簡(jiǎn)闇瑕佸彇1鍒発涓紝濡傛灉褰撳墠鐭沖瓙涓暟鏈韓鏄礌鏁幫紝褰撶劧鏄病鐢ㄧ殑錛屽洜姝ゆ槸灝忎簬n鐨勬渶澶х礌鏁般傝灝忎簬n鐨勬渶澶х礌鏁版槸p(棰樼洰涓鏄庝簡(jiǎn)鐭沖瓙涓暟澶т簬2錛屽洜姝涓瀹氬瓨鍦?錛岄偅涔堝彲浠ュ湪k姝ヤ互鍐呭埌杈緋鐨勪竴瀹氭槸蹇呰儨鎬侊紝鑰屼笖鏄洿鎺ヨ幏鑳滐紝闇瑕佸湪杈撳叆鐨勬椂鍊欑壒鍒?榪欎竴鐐歸渶瑕佹敞鎰忥紝鍦ㄨВ鍐抽檺鍒朵腑闂寸姸鎬佺殑Nim娓告垙鏃朵竴鑸兘闇瑕佺壒鍒?銆傜劧鍚庡氨鏄痯
+ k + 1榪欎釜鐘舵侊紝鍥犱負(fù)瀹冨彲杈劇殑鐘舵佸叏鏄繀鑳滄侊紝鍥犳瀹冩槸蹇呰觸鎬侊紝SG鍊間負(fù)0銆傜幇鍦ㄨ冭檻澶т簬p + k + 1鐨勭姸鎬侊紝闂鍑烘潵浜?jiǎn)銆備互p + k +
2榪欎釜鐘舵佷負(fù)渚嬶紝鍥犱負(fù)瀹冨彲浠ュ埌杈緋 + 2 ... p + k + 1榪欎簺鐘舵侊紝鍥犱負(fù)p + 2 ... p +
k閮芥槸鐩存帴鑾瘋儨鐘舵侊紝濡備綍鍒ゅ畾浠栦滑鐨凷G鍊煎憿錛熷鏋滃亣璁懼畠浠殑SG鍊兼槸1錛岄偅涔坧 + k +
2榪欎釜鐘舵佺殑SG鍊煎簲璇ユ槸2銆備絾鏄濊冧竴涓婼G鍊肩殑瀹氫箟錛屽畠鏄畾涔夊湪涓涓狣AG涓婄殑錛屾墍鏈夌殑鐘舵佹渶鍚庨兘鏄彲浠ュ湪鏈夐檺姝ュ唴杞Щ鍒扮粓姝㈡?蹇呰觸鎬?銆備絾鏄痯 + 1 ...
p + k榪欎簺鐘舵侀兘杞Щ鍒頒簡(jiǎn)p榪欎釜鐘舵佷笂錛屾垜浠偗瀹氫笉鑳借瀹歱鐘舵佹槸緇堟鎬侊紝鍥犳浠呬粎鍑焢 + 1 ... p +
k榪欎簺鐘舵佹槸蹇呰儨鎬佸氨綆鍗曠殑鎶婂畠浠殑SG鍊艱涓?鏄笉鎭板綋鐨勶紱榪欎簺闄愬埗鐘舵佸拰浠ュ墠鐨勯鐩繕?shù)笉鍚屽Q岃繖浜涢檺鍒剁姸鎬侀兘涓嶈兘杞Щ鍒扮粓姝㈡佷笂錛屼絾鏄敱浜庨鐩殑瑕佹眰錛屽畠浠張閮芥槸蹇呰儨鎬侊紝鍥犳鎶婂畠浠殑SG鍊艱涓烘棤絀峰ぇ鏇村悎閫備簺銆?br>銆銆浠旂粏鎬濊冧竴涓嬪甫闄愬埗鐘舵佺殑SG娓告垙錛屽彲浠ュ彂鐜幫紝瀹冧滑鍜屼竴鑸殑SG娓告垙鐨勫尯鍒湪浜庯紝鍦ㄥ垎鏋愪竴鑸殑SG娓告垙鐨勬椂鍊欙紝瀵逛簬涓涓姸鎬佸浘鑰岃█錛岃漿縐誨埌緇堟鎬佺殑鏃跺欏茍涓嶆剰鍛崇潃娓告垙緇撴潫錛屽洜涓虹帺瀹跺彲浠ラ氳繃璧板叾浠栫殑鐘舵佸浘鏉ヤ繚璇佹槸鍚﹁揪鍒板繀鑳滄侊紱浣嗘槸甯﹂檺鍒剁姸鎬佺殑SG娓告垙錛岄檺鍒剁殑鐘舵佸弻鏂歸兘鏄笉鏁㈣蛋鐨勶紝鍥犱負(fù)涓鏃︿竴鏂硅蛋鍏ラ檺鍒剁姸鎬侊紝鍙︿竴鏂圭珛鍒昏幏鑳滐紝娓告垙灝辯粓姝簡(jiǎn)銆傚彲浠ヨ涓猴紝鍙璧板叆闄愬埗鎬佸氨鐩稿綋浜庤杈擄紝瀵逛簬鍙屾柟鐜╁鑰岃█鑲畾閮戒笉浼?xì)杩欐牱鍋氬Q屽洜姝よ繖浜涢檺鍒剁姸鎬佸氨鎴愪簡(jiǎn)“姝葷姸鎬?#8221;錛屽畬鍏ㄥ彲浠ュ拷瑙嗚繖浜涚姸鎬侊紙涔熷氨鏄涓嶅瓨鍦ㄥ埌榪欎簺鐘舵佺殑杞Щ錛夈傞氳繃涓婅堪鍒嗘瀽錛屾垜浠彲浠ヨ瀹歱
+ k +
2榪欎釜鐘舵佺殑SG鍊煎簲璇ユ槸1鑰屼笉鏄?銆?br>銆銆鐜板湪榪欎釜闂鐨勫仛娉曞氨姣旇緝鏄庢湕浜?jiǎn)锛屽浜庢瘡鍫嗙煕_瓙錛屽幓鎺夐檺鍒舵佺殑璁ㄨ鍚庯紝灝卞彉鎴愪簡(jiǎn)鍦ㄩ泦鍚坽1...k}涓夋嫨鍏冪礌鐨勪竴涓猄ubtraction
Game錛屽畠鐨凷G鍊兼槸妯?k +
1)寰幆鐨勩?br>銆銆鐒跺悗灝辨槸姹傛渶榪戠礌鏁扮殑闂?shù)簡(jiǎn)锛寴q欎釜娌℃湁濂藉姙娉曪紝鍙兘鏆村姏鏋氫婦銆傚浜庝竴涓暟n錛屽湪sqrt(n)鍒皀涔嬮棿瀛樺湪绱犳暟錛堟劅瑙夊簲璇ユ槸錛屼絾鏄笉浼?xì)璇佸Q夛紝鍥犳鏈澶氭灇涓緎qrt(n)嬈″氨鑳芥壘鍒拌В銆備絾鏄瘡嬈℃灇涓懼垽绱犵殑澶嶆潅搴﹁繕鏄痵qrt(n)錛屾誨鏉傚害榪樻槸姣旇緝楂橈紝鎴戝湪鏈湴璺戞暟鎹窇浜?縐掞紝浜や笂鍘昏秴鏃朵簡(jiǎn)錛圫POJ鐨勬椂闄?0縐掞紝榪欏眳鐒朵篃瓚呮椂錛屾暟鎹鍙樻侊級(jí)銆傛兂浜?jiǎn)寰堜箙涔熸病鏈変粈涔堟柊鐨勭畻娉曪紝鏃犲鍙兘鍦ㄥ垽绱犱笂涓嬬偣鍔熷か錛岀洿鎺ユ妸Miller-Rabin鎼炲嚭鏉ヤ簡(jiǎn)錛岄熷害鎻愰珮鍒頒簡(jiǎn)2縐掞紝浠嶇劧瓚呮椂銆傚悗鏉ュ張鍔犱簡(jiǎn)涓浜涘父鏁頒笂鐨勪紭鍖栵紝緇堜簬榪囦簡(jiǎn)銆?br> 銆愭葷粨銆?br>銆銆榪欎釜棰樼洰鍋氫簡(jiǎn)寰堥暱鏃墮棿錛屼竴鏂歸潰鏄棰樹(shù)笉娓咃紝閿欎簡(jiǎn)鍑犳錛涘彟涓鏂歸潰鏄浜嶴G鐨勭悊璁虹悊瑙g殑涓嶅閫忓交錛屾兂浜?jiǎn)寰堜箙缁堜簬鎯虫槑鐧戒簡(jiǎn)锛涘啀鏈墳鏄紭鍖柦帡娉曚篃鑺变簡(jiǎn)寰堥暱鏃堕棿銆備笉榪囬氳繃榪欎釜棰樼洰瀵逛簬SG鐞嗚鐨勭悊瑙e張榪涗簡(jiǎn)涓姝ワ紝鎰熻涓嶉敊錛屽懙鍛點(diǎn)?
#include <cstdio> #include <cmath> #include <algorithm> usingnamespace std; constint MOD =11, N =100001; int d[N], m[N]; int power_mod(int a, int b) { int ret =1, f = a; while (b) { if (b &1) ret = ret * f % MOD; f = f * f % MOD; b >>=1; } return ret; } void init() { int tmp; for (int i =2; i < N; i++) { tmp = (int)(ceil(i * log(i) / log(10.0) + 1e-2) + 1e-1); d[i] = tmp; m[i] = power_mod(i % MOD, i); } } int main() { char str[N*5]; int T, p, len, tmp; init(); scanf("%d", &T); while (T--) { scanf("%s", str); len = strlen(str); if (len ==1&& str[0] =='1') { puts("1"); continue; } p = lower_bound(d, d + N, len) - d; tmp =0; for (int i =0; i < len; i++) { tmp = tmp *10+ (str[i] -'0'); tmp = tmp % MOD; } printf("%d\n", tmp == m[p] ? p : -1); } return0; }
]]>TJU 3027 妯$嚎鎬ф柟紼嬬粍http://www.shnenglu.com/sdfond/archive/2009/03/22/77459.htmlsdfondsdfondSun, 22 Mar 2009 01:51:00 GMThttp://www.shnenglu.com/sdfond/archive/2009/03/22/77459.htmlhttp://www.shnenglu.com/sdfond/comments/77459.htmlhttp://www.shnenglu.com/sdfond/archive/2009/03/22/77459.html#Feedback0http://www.shnenglu.com/sdfond/comments/commentRss/77459.htmlhttp://www.shnenglu.com/sdfond/services/trackbacks/77459.html
TJU 3027 #include <cstdio> constint N =8; void extended_gcd(int a, int b, int&x, int&y) { if (!b) { x =1; y =0; return; } extended_gcd(b, a % b, x, y); int tmp = x; x = y; y = tmp - a / b * y; } int modular_linear_equation_system(int b[N], int m[N], int n) { int M =1, x, y, ret =0; for (int i =0; i < n; i++) M *= m[i]; for (int i =0; i < n; i++) { extended_gcd(M / m[i], m[i], x, y); ret += M / m[i] * x * b[i]; } while (ret <=0) ret += M; while (ret > M) ret -= M; return ret; } int main() { int m[N], b[N], T, n, tmp, ans; constint num =4, numc =3; char str[N], hash[30] =" ABCDEFGHIJKLMNOPQRSTUVWXYZ "; scanf("%d", &T); while (T--) { scanf("%d", &n); for (int i =0; i < num; i++) scanf("%d", &m[i]); for (int j =0; j < n; j++) { scanf("%d", &tmp); for (int i =1; i <= num; i++) { b[num-i] = tmp %100; tmp /=100; } ans = modular_linear_equation_system(b, m, num); for (int i =1; i <= numc; i++) { str[numc-i] = hash[ans%100]; ans /=100; } str[numc] ='\0'; if (j == n -1) { int k = numc -1; for (; k >=0; k--) if (str[k] !='') break; str[k+1] ='\0'; } printf("%s", str); } putchar('\n'); } return0; }
]]>HOJ 1356 鈥斺?Miller Rabin嫻嬭瘯http://www.shnenglu.com/sdfond/archive/2009/03/18/77069.htmlsdfondsdfondWed, 18 Mar 2009 13:15:00 GMThttp://www.shnenglu.com/sdfond/archive/2009/03/18/77069.htmlhttp://www.shnenglu.com/sdfond/comments/77069.htmlhttp://www.shnenglu.com/sdfond/archive/2009/03/18/77069.html#Feedback0http://www.shnenglu.com/sdfond/comments/commentRss/77069.htmlhttp://www.shnenglu.com/sdfond/services/trackbacks/77069.htmlMiller-Rabin鍩轟簬璐歸┈灝忓畾鐞嗭細(xì)濡傛灉(a, p) = 1錛岄偅涔坅 ^ (p - 1) = 1 mod p銆傛弧瓚寵繖涓ц川鐨刾鍙吉绱犳暟錛屽鏋滀竴涓暟鏄吉绱犳暟錛岄偅涔堝畠鏈夊緢澶у彲鑳芥槸绱犳暟銆傞氳繃澶氭鐨勬灇涓綼錛屽埄鐢ㄥ揩閫熷箓鍙栨ā鍒ゆ柇錛屽氨鍙互鐭ラ亾p鏄笉鏄礌鏁幫紝Miller-Rabin嫻嬭瘯鐨勬垚鍔熺巼鍦?/4銆?br>璐歸┈灝忓畾鐞嗘槸璇ュ畾鐞嗙殑鐗規(guī)畩褰㈠紡錛氬鏋減鏄礌鏁幫紝閭d箞瀵逛簬浠繪剰鏁存暟a錛歛 ^ p = a mod p銆傝繖涓畾鐞嗗彲浠ョ敤褰掔撼娉曡瘉鏄庯紝璇佹槑渚濇嵁榪欐牱涓涓簨瀹烇細(xì)緇勫悎鏁癈(n, k)鏄竴涓暣鏁幫紝濡傛灉n鏄礌鏁幫紝閭d箞n鍜宬!銆?n - k)!鐨勬瘡涓欏歸兘浜掔礌錛屽彲浠ユ彁鍑簄錛屼篃灝辨槸C(n, k) / n涔熸槸鏁存暟錛屾墍浠 | C(n, k)銆?br>榪欎釜棰樼洰鐨勪唬鐮佸涓嬶細(xì)
#include <cstdio> #include <stdlib.h> constint MAX =4, N =1000000; longlong PowerMod(longlong a, longlong b, longlong k) { longlong ret =1, f = a; while (b) { if (b &1) ret = ret * f % k; f = f * f % k; b >>=1; } return ret; } bool MillerRabin(longlong n) { int i; longlong tmp; srand(100); for (i =0; i < MAX; i++) { tmp = rand() % (n -1) +1; if (PowerMod(tmp, n -1, n) !=1) break; } return (i == MAX); } int main() { longlong n, i, j; bool tag[N] ={1, 1, 0}; for (i =2; i * i < N; i++) { if (tag[i]) continue; for (j = i; j * i < N; j++) tag[j*i] =1; } while (scanf("%lld", &n) ==1) { if (n < N) printf("%s\n", tag[n] ?"NO" : "YES"); else printf("%s\n", ((n &1) ==0) ||!MillerRabin(n) ?"NO" : "YES"); } return0; }
#include <cstdio> //ax + by = gcd(a, b) longlong extended_gcd(longlong a, longlong b, longlong&x, longlong&y) { longlong ret, tmp; if (!b) { x =1, y =0; return a; } ret = extended_gcd(b, a % b, x, y); tmp = x; x = y; y = tmp - a / b * y; return ret; } //ax = b mod n longlong modular_linear_equation(longlong a, longlong b, longlong n) { longlong x, y, e; longlong d = extended_gcd(a, n, x, y); if (b % d) return-1; e = b / d * x % n + n; return e % (n / d); } int main() { longlong a, b, c, ans; int k; while (scanf("%lld %lld %lld %d", &a, &b, &c, &k) ==4) { if (a ==0&& b ==0&& c ==0&& k ==0) break; ans = modular_linear_equation(c, b - a, 1LL << k); if (ans ==-1) puts("FOREVER"); else printf("%lld\n", ans); } return0; }
]]>絳涙硶姹傜礌鏁?/title>http://www.shnenglu.com/sdfond/archive/2009/03/16/76775.htmlsdfondsdfondMon, 16 Mar 2009 13:29:00 GMThttp://www.shnenglu.com/sdfond/archive/2009/03/16/76775.htmlhttp://www.shnenglu.com/sdfond/comments/76775.htmlhttp://www.shnenglu.com/sdfond/archive/2009/03/16/76775.html#Feedback5http://www.shnenglu.com/sdfond/comments/commentRss/76775.htmlhttp://www.shnenglu.com/sdfond/services/trackbacks/76775.html
for (int i =2; i * i < N; i++) { if (tag[i]) continue; for (int j = i; i * j < N; j++) tag[i*j] =1; } for (int i =2; i < N; i++) if (!tag[i]) prime[tol++] = i;
]]>鏁存暟蹇熷箓鍙栨āhttp://www.shnenglu.com/sdfond/archive/2009/03/15/76625.htmlsdfondsdfondSun, 15 Mar 2009 02:58:00 GMThttp://www.shnenglu.com/sdfond/archive/2009/03/15/76625.htmlhttp://www.shnenglu.com/sdfond/comments/76625.htmlhttp://www.shnenglu.com/sdfond/archive/2009/03/15/76625.html#Feedback4http://www.shnenglu.com/sdfond/comments/commentRss/76625.htmlhttp://www.shnenglu.com/sdfond/services/trackbacks/76625.htmluva 374 Big Mod
璧よ8瑁哥殑鏁存暟蹇熷箓鍙栨ā
#include <cstdio>
longlong PowerMod(longlong a, int b, int k) { longlong tmp = a, ret =1; while (b) { if (b &1) ret = ret * tmp % k; tmp = tmp * tmp % k; b >>=1; } return ret; }