锘??xml version="1.0" encoding="utf-8" standalone="yes"?>少妇高潮惨叫久久久久久,日韩精品无码久久久久久,www.久久热.comhttp://www.shnenglu.com/superlong/archive/2016/03/11/212977.htmlsuperlongsuperlongThu, 10 Mar 2016 17:20:00 GMThttp://www.shnenglu.com/superlong/archive/2016/03/11/212977.htmlhttp://www.shnenglu.com/superlong/comments/212977.htmlhttp://www.shnenglu.com/superlong/archive/2016/03/11/212977.html#Feedback0http://www.shnenglu.com/superlong/comments/commentRss/212977.htmlhttp://www.shnenglu.com/superlong/services/trackbacks/212977.html

Clang 瀹忓畾涔夊垵鎺紙浜岋級

鏈瘒鎬葷粨涓嬭繖鍑犲ぉ鐪嬬殑瀹忕殑涓浜涚湅鍒扮殑鐢ㄦ硶銆?br />

1銆佸弬鏁扮矘緇?/h2>榪欐槸涓涓被浼?shell 涔嬬被鐨勮剼鏈璦鐨勭壒鎬э紝鍙互鍒╃敤榪欎釜鐗規(guī)у畬鎴愪竴浜涢噸澶嶅害姣旇緝楂樼殑緙栫爜鐨勭畝鍖栥?br />渚嬪錛屽proc鏂囦歡緋葷粺榪涜緇戝畾鐨勬椂鍊欙紝闇瑕佸湪/proc/test/鐩綍涓嬶紝綆鍘?涓枃浠舵帴鍙o紝test1銆乼est2銆乼est3.
鍙互榪欐牱鍐?br />
#define BIND(x) test##x->read_proc=test##x##_read
鍦ㄤ嬌鐢ㄧ殑鏃跺欙紝灝卞彲浠?br />
BIND(1); //灞曞紑涓簍est1->read_proc=test1_read;
BIND(2); //灞曞紑涓簍est2->read_proc=test2_read;

涓嶇鏄粠璇箟榪樻槸緙栫爜澶嶆潅搴︼紝閮介檷浣庝簡銆?br />

2銆佸弬鏁板瓧絎﹀寲

鍦ㄤ嬌鐢ㄥ崟涓?# 鍙鳳紝浣滀負(fù)鍑芥暟寮忓畯鐨勫弬鏁板墠緙鏃訛紝鍙互璁╁畯鐨勫唴瀹瑰彉鎴愬瓧絎︿覆錛屾瘮濡傝錛?br />
#define print(x) do{\
printf(#x);\
printf("=%d\n",x);\
}while(0)
浣跨敤鐨勬椂鍊欙紝鐩存帴鍐欙細(xì)
int t = 1;
print(t);
緇撴灉浼?xì)鏄?t=1錛岃繖涓湪鍋氭棩蹇楃殑鏃跺欒繕鏄潪甯稿ソ鐢ㄧ殑銆?br />

3銆乨o{...}while(0) 鍜?({...})

鍙互璁や負(fù)鏄墠鑰呮槸 void 鍑芥暟錛屽悗鑰呮槸鏈?return 鍊肩殑鍑芥暟銆?br />鍏?涓墍紺猴紝do{...}while(0) 鏄負(fù)浜嗕駭鐢熶竴涓▼搴忓潡錛屽綋瀹忛噷鏈夊鏉¢渶瑕佽鍙ラ渶瑕佹墽琛屾椂錛屽鏋滀笉閫傜敤榪欑do{...}while(0)鐨勫艦寮忥紝鍙兘瀵艱嚧涓浜涢殣褰㈢殑閿欒,渚嬪錛?br />
#define print(x) {printf(#x);printf("=%d\n",x);
姝e父鐨勶細(xì)
print(t); 鏄病鏈夐棶棰樼殑錛屼絾鏄鏋滄斁鍦ㄧ▼搴忔閲岋細(xì)
if( flag )
  print(t);
else
  print(a);
灞曞紑涔嬪悗錛屼細(xì)鍙戠幇涓?br />
if( flag )
{printf("t");printf("=%d\n",t);};
else
榪欎釜璇硶灝遍敊浜嗐傚洜姝わ紝褰撲唬鐮佹姣旇緝澶氾紝涓斾笉闇瑕佽繑鍥炲兼椂灝辯敤 do{...}while(0)鍚с?br />鍙﹀涓縐嶆柟寮忓睘浜?GNU 鐨勬墿灞曪紝鍚庣畫鍦ㄧ湅銆?br />

4銆佸閲嶅睍寮

榪樻槸鍩轟簬鎵撳嵃鐨勪緥瀛愶紝鎴戦渶瑕佹墦鍗頒竴浜涘垪涓劇殑鍙傛暟鍊鹼細(xì)
#define P(x) arg##x
#define print(x) do{printf(#P(x));printf("=%d\n",P(x));}while(0)
榪欎釜緙栬瘧閫氫笉榪囷紝鎹㈡垚浠ヤ笅鏂瑰紡鍗沖彲錛?div>
#define P(x) arg##x
#define __print(x) do{printf(#x);printf("=%d\n",x);}while(0)
#define _print(x) __print(x)
#define print(x) _print(P(x))
淇敼鎴愯繖鏍鳳紝瑙e喅浜嗘兂瑕佺殑瑙e喅鐨勯棶棰橈細(xì)
int arg1 = 1;
print(1);
杈撳嚭緇撴灉涓猴細(xì)arg1=1
涓昏娑夊強鐨勯棶棰樺湪浜庡畯鐨勫嬈″睍寮錛屽畯姣忔灞曞紑鍙細(xì)瀵瑰綋鍓嶇殑杈撳叆鍙傛暟榪涜涓嬈″睍寮錛屽綋浣犵殑杈撳叆鍊間篃鏄釜瀹忕殑鏃跺欙紝灝遍渶瑕佷嬌鐢ㄨ繃搴﹀畯錛岃浣犵殑杈撳叆鎺ョ潃灞曞紑銆?br />瀵逛簬澶氭灞曞紑娌℃湁浠庢渶鏍規(guī)湰鐨勫師鐞嗚В閲婏紝鍙槸浠庡疄楠屾劅瀹樹笂瀵硅繖涓壒鎬у仛浜嗗垎鏋愶紝瀹為檯涓婏紝鑷繁涔熶笉浼?xì)鍐欏嚭閭d箞澶嶆潅鐨勫畯锛堟曚腑闂磋皟鐢ㄥ嚭婕忔礊錛夈?br />
瀹忕殑鍩烘湰甯歌鐢ㄦ硶錛岄兘宸笉澶氭灇涓句簡涓鐣紝寰鍚庡湪瑙佸埌鏇撮珮綰х殑鐜╂硶鍜屾瘮杈冪簿楂撶殑鍐欐硶寰鍚庡啀鎱㈡參琛ュ厖涓婃潵鍚э紝鍙﹀GNU鐨勬墿灞曚篃浼?xì)鍦ㄥ悗绡嚲lх畫瀛︿範(fàn)浜嗚В銆?/div>


superlong 2016-03-11 01:20 鍙戣〃璇勮
]]>
clang 瀹忓畾涔夊垵鎺紙涓錛?/title><link>http://www.shnenglu.com/superlong/archive/2016/03/08/212947.html</link><dc:creator>superlong</dc:creator><author>superlong</author><pubDate>Tue, 08 Mar 2016 00:44:00 GMT</pubDate><guid>http://www.shnenglu.com/superlong/archive/2016/03/08/212947.html</guid><wfw:comment>http://www.shnenglu.com/superlong/comments/212947.html</wfw:comment><comments>http://www.shnenglu.com/superlong/archive/2016/03/08/212947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/superlong/comments/commentRss/212947.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/superlong/services/trackbacks/212947.html</trackback:ping><description><![CDATA[<h1> Clang 瀹忓畾涔夊垵鎺紙涓錛?/h1> <span style="font-size: 24pt;">瀹?/span>鐨勫畾涔夋柟娉曟槸<span style="color: #0000ff; font-size: 13px; background-color: #eeeeee;">#define</span><br /> 閭d箞鍦ㄤ粈涔堝満鏅笅闇瑕佺敤鍒板畯鍛紵閬囧埌涓浜涢噸澶嶇殑涓滆タ錛岀畝鍗曠殑鏈?nbsp;<span style="font-size: 13px; color: #0000ff;">for</span><span style="font-size: 13px; background-color: #eeeeee;">(i </span><span style="font-size: 13px; background-color: #eeeeee;">=</span><span style="font-size: 13px; background-color: #eeeeee;"> </span><span style="font-size: 13px; background-color: #eeeeee;">0</span><span style="font-size: 13px; background-color: #eeeeee;">; i </span><span style="font-size: 13px; background-color: #eeeeee;"><</span><span style="font-size: 13px; background-color: #eeeeee;"> n; i </span><span style="font-size: 13px; background-color: #eeeeee;">++</span><span style="font-size: 13px; background-color: #eeeeee;">)</span> 涔嬬被鐨勶紝涓轟簡鍑忓皯綣佺悙鐨勭紪鐮侊紝鍙兘浣跨敤<br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">#define</span> FO(i,N) for(i=0;i<N;i++)</div> 涓轟簡澧炲己鍙鎬э紝姣斿璇磋緗竴涓暟緇勫父浜ぇ灝忥紝鍙互浣跨敤<br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">#define</span> N 1001</div> 瀹忕湅璧鋒潵鎰熻寰堝ソ鐢紝浣嗘槸娼滆棌浜嗗緢澶氶棶棰橈紝鍦ㄥ疄闄呬嬌鐢ㄤ腑闇瑕佸皬蹇冭皚鎱庯紙褰撶劧甯︽潵澶ч儴鍒嗛棶棰樼殑錛岃繕鏄紪鐮佽呰嚜宸辨垨鑰呭悎浣滄柟錛夈?br /> <span style="font-size: 10pt;">渚?/span>濡傦紝鐜板湪瑕佹眰涓や釜鏁扮殑鏈灝忓鹼紝鏈鍒濅細(xì)鍐欏嚭濡備笅瀹忥細(xì)<br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">#define</span> MIN(A,B) A<B?A:B</div> 姝e父鎯呭喌涓嬩篃鏄彲浠ヤ嬌鐢ㄦ棤璇殑錛?br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1 #include <stdio.h><br /> 2 <span style="color: #0000FF; ">#define</span> MIN(A,B) A<B?A:B<br /> 3 <span style="color: #0000FF; ">int</span> main()<br /> 4 {<br /> 5     <span style="color: #0000FF; ">int</span> a =5, b =6;<br /> 6     printf("%d", MIN(a, b));<br /> 7 }</div> 鐒惰岋紝褰撲綘鍙戝竷浣犵殑浠g爜鎴栬呭緢涔呬互鍚庤嚜宸卞啀鍘昏皟鐢ㄦ椂錛屽彲鑳藉啓鎴愶細(xì)<br /> <div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->MIN(a<4?a:5, b)</div> 鐪嬭搗鏉ヤ篃娌″暐闂錛屽疄闄呮墽琛屼竴涓嬪彂鐜幫紝緇撴灉鏄?錛屽亸紱婚鏈燂紒浜嬪疄涓婏紝瀹忓嵆浣垮崟綰殑浠g爜灞曞紑錛屽綋浣犲睍寮涓婇潰鐨勫紡瀛愪箣鍚庝細(xì)鍙戠幇錛屽疄闄呮墽琛岀殑浠g爜鏄?br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->a<4?a:5<b?a<4?a:5:b</div> 瀵逛簬涓鐩寸敤鎷彿鏉ヨВ鍐充紭鍏堢駭闂鐨勬垜鏉ヨ錛岃繖縐嶅睍寮瀹屽叏鏃犳硶鐞嗚В錛屼簬鏄弬鐪嬩簡鍐呮牳浠g爜錛屽彂鐜版洿瀹夊叏鐨勫啓娉曚負(fù)錛?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">#define</span> MIN(A,B) (A)<(B)?(A):(B)</div> 榪欑鍐欐硶瑙勯伩浜嗕護浜哄帉鎭剁殑浼樺厛綰ч棶棰橈紒鏈互涓鴻繖鏍峰氨瀹屾垚浜嗕竴涓畨鍏ㄧ殑瀹忓畾涔夛紝浣嗘槸浜嬪疄涓婅繕鏈夊叾浠栭棶棰橈紒<br /> <div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">float</span> a = 1.0f;<br /> <span style="color: #0000FF; ">float</span> b = MIN(a++, 1.5f);<br /> printf("a=%f, b=%f",a,b);</div> </div> <div>紲炵鐨刟++錛屽悓鏍鋒寜鐓у垰鎵嶇殑鎬濊礬灞曞紑錛屽洜涓哄畯閲岄潰浼?xì)鏈変袱娆鐨勫睍寮錛屾墍浠++灝嗚鎵ц涓ゆ錛屽啀嬈″亸紱婚鏈熴傚浜庤繖縐嶆儏鍐碉紝鎴戜滑闇瑕佺敤鍒頒竴涓狦NU C鐨勮祴鍊兼墿灞曪紝鍗充嬌鐢?{...})鐨勫艦寮忋傝繖縐嶅艦寮忕殑璇彞鍙互綾諱技shell錛屽湪欏烘鎵ц涔嬪悗錛屼細(xì)灝嗘渶鍚庝竴嬈$殑琛ㄨ揪寮忕殑璧嬪間綔涓鴻繑鍥炪備婦涓畝鍗曠殑渚嬪瓙錛屼笅闈㈢殑浠g爜鎵ц瀹屾瘯鍚巃鐨勫間負(fù)3錛岃屼笖b鍜宑鍙瓨鍦ㄤ簬澶ф嫭鍙烽檺瀹氱殑浠g爜鍩熶腑錛?br /> <div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">int</span> a = ({<br />     <span style="color: #0000FF; ">int</span> b = 1;<br />     <span style="color: #0000FF; ">int</span> c = 2;<br />     b + c;<br /> });</div> </div> <div>緇撴灉鏄?/ => a is 3<br /> 鍩轟簬榪欑鐗規(guī)э紝鎴戜滑鍙互鍦ㄥ畯閲岄潰涓烘瘡涓紶鍏ョ殑鍙傛暟榪涜涓涓嫹璐濓紝鐒跺悗鍐嶅鎷瘋礉鍚庣殑鍙傛暟榪涜瀹為檯鐨勬瘮杈冭繍綆楋紝閭d箞鏈緇堝疄鐜頒簡涓涓瘮杈冨畨鍏ㄧ殑鏈灝忓兼瘮杈冪殑瀹忓畾涔夛細(xì)<br /> <div> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">#define</span>  min(x,y)  ({                   \  <br />     <span style="color: #0000FF; ">typeof</span>(x)  __min1 = (x);        \  <br />     <span style="color: #0000FF; ">typeof</span>(y) __min2 = (y);             \  <br />     (<span style="color: #0000FF; ">void</span>)  (& __min1 == & __min2);     \  <br />     __min1 < __min2  ? __min1 :min2})  </div> </div> <div>鏈鍚庤繖涓姝ヨ煩璺冩湁鐐瑰ぇ浜嗭紝棣栧厛鏄?typeof 浣滅敤鏄緱鍒板弬鏁扮殑綾誨瀷錛屽叾嬈℃槸(void) (& __min1 == & __min2);  榪欎釜紲炵鐨勫啓娉曟槸涓轟簡楠岃瘉浜岃呯殑綾誨瀷鏄惁涓鑷達(dá)紝褰撶劧澶栦晶鎴戜滑紜疄鐢ㄤ簡GNU鐨勬墿灞?{...})銆?br /> <span style="font-size: 24pt;">鍐欏埌榪欓噷</span>錛屾秹鍙婂埌浜嗗彟澶栦袱涓棶棰橈紝GNU鎵╁睍鏄暐錛熷彟澶栨垜浠敤瀹忔槸涓轟簡鑺傜渷浠g爜錛屽悓鏃朵負(fù)浜嗙渷鍘諱竴浜涘皬鍑芥暟鐨勫嬈¢噸澶嶈皟鐢ㄧ殑鍙傛暟鍏ユ爤闄嶄綆鎬ц兘鐨勯棶棰橈紝閭d箞鍐呰仈鍑芥暟涔熸湁榪欐牱鐨勬晥鏋滐紝浠涔堟槸鍐呰仈鍑芥暟鍛紵</div> </div> </div> </div><img src ="http://www.shnenglu.com/superlong/aggbug/212947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/superlong/" target="_blank">superlong</a> 2016-03-08 08:44 <a href="http://www.shnenglu.com/superlong/archive/2016/03/08/212947.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>寮鍗?/title><link>http://www.shnenglu.com/superlong/archive/2016/03/06/212939.html</link><dc:creator>superlong</dc:creator><author>superlong</author><pubDate>Sun, 06 Mar 2016 14:34:00 GMT</pubDate><guid>http://www.shnenglu.com/superlong/archive/2016/03/06/212939.html</guid><wfw:comment>http://www.shnenglu.com/superlong/comments/212939.html</wfw:comment><comments>http://www.shnenglu.com/superlong/archive/2016/03/06/212939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/superlong/comments/commentRss/212939.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/superlong/services/trackbacks/212939.html</trackback:ping><description><![CDATA[寰鍚庤褰曞伐浣滀腑寮鍙慍鐨勭煡璇嗙偣銆?img src ="http://www.shnenglu.com/superlong/aggbug/212939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/superlong/" target="_blank">superlong</a> 2016-03-06 22:34 <a href="http://www.shnenglu.com/superlong/archive/2016/03/06/212939.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>HDU2295http://www.shnenglu.com/superlong/archive/2010/08/16/123574.htmlsuperlongsuperlongMon, 16 Aug 2010 03:07:00 GMThttp://www.shnenglu.com/superlong/archive/2010/08/16/123574.htmlhttp://www.shnenglu.com/superlong/comments/123574.htmlhttp://www.shnenglu.com/superlong/archive/2010/08/16/123574.html#Feedback2http://www.shnenglu.com/superlong/comments/commentRss/123574.htmlhttp://www.shnenglu.com/superlong/services/trackbacks/123574.html#include <stdio.h>
#include 
<stdlib.h>
#include 
<string.h>

const int N = 55;
const double eps = 1e-7;
const int SIZE = N*N;

int n, m , k;
int L[SIZE], R[SIZE], U[SIZE], D[SIZE], Sum[SIZE], Row[SIZE], Col[SIZE];
int lenx, id, deep, anslen;
bool OK;

inline 
int rd() {
    
char ch;
    
while( ch = getchar(), ch == ' ' || ch == '\n');
    
int d = ch - '0';
    
while( ch = getchar(), ch <= '9' && ch >= '0' ) d = d* 10 + ch - '0';
    
return d;
}

struct point {
    
int x, y;
    
void read() {
        x 
= rd(); y = rd();
    }
} city[N], radar[N];

struct circle {
    point o;
    
double r;
    circle(){}
    circle(point _o, 
double _r) {
        o 
= _o;
        r 
= _r;
    }
    
bool incircle(point q) {
        
return 1.0*(o.x-q.x)*(o.x-q.x) + 1.0*(o.y-q.y)*(o.y-q.y) - r * r < eps;
    }
} Radar[N];

void init() {
    n 
= rd(); m = rd(); k = rd();
    
for(int i = 1; i <= n; i ++) city[i].read();
    
for(int i = 1; i <= m; i ++) Radar[i].o.read();
}

inline 
void pre(int cntcol) {
    
for(int i = 0; i <= cntcol; i ++) {
        L[i] 
= i - 1;
        R[i] 
= i + 1;
        U[i] 
= D[i] = i;
        Sum[i] 
= 0;
    }
    L[
0= cntcol; R[cntcol] = 0;
    id 
= cntcol + 1;
}

inline 
void insert(int i, int *xx) {
    
for(int j = 0; j < lenx; j ++, id ++) {
        
int x = xx[j];
        Row[id] 
= i;
        Col[id] 
= x;
        Sum[x] 
++;
        U[id] 
= x;
        D[id] 
= D[x];
        U[D[x]] 
= id;
        D[x] 
= id;
        
if( j == 0 ) {
            L[id] 
= R[id] = id;
        } 
else {
            L[id] 
= id - 1;
            R[id] 
= id - j;
            R[id
-1= id;
            L[id
-j] = id;
        }
    }
}


inline 
void remove(int &c) {
    
for(int i = D[c]; i != c ; i = D[i]) {
        L[R[i]] 
= L[i];
        R[L[i]] 
= R[i];
    }
}
inline 
void resume(int &c) {
    
for(int i = U[c]; i != c ; i = U[i]) {
        L[R[i]] 
= i;
        R[L[i]] 
= i;
    }
}

inline 
int Astar() {
    
int res = 0;
    
bool vis[N*N] = {false};
    
for(int i = R[0]; i != 0; i =R[i]) {
        
if!vis[ i ] ) {
            vis[ i ] 
= true;
            res 
++;
            
for(int j = D[i]; j != i; j = D[j]) {
                
for(int k = R[j]; k != j; k = R[k]) {
                    vis[ Col[k] ] 
= true;
                }
            }
        }
    }
    
return res;
}

void dfs(int dep) {
    
if( Astar() + dep > deep )    return ;
    
if(R[0== 0)    {
        anslen 
= dep;     
        OK 
= true;
        
return;
    }
    
int idx = R[0];
    
for(int i = R[0] ; i != 0 ; i = R[i]) {
        
if(Sum[i] < Sum[idx]) {
            idx 
= i;
            
if( Sum[idx] <= 1 ) break;
        }
    }
    
for(int i = D[idx] ; i != idx; i = D[i]) {
        remove(i);
        
for(int j = R[i] ; j != i ; j = R[j]) remove(j);
        dfs( dep 
+ 1 );
        
for(int j = L[i] ; j != i ; j = L[j]) resume(j);
        resume(i);
        
if( OK ) return;
    }
}

inline 
void build() {
    
int x[N];
    
for(int i = 1; i <= m; i ++) {
        lenx 
= 0;
        
for(int j = 1; j <= n; j ++) {
            
if( Radar[i].incircle(city[j]) ) {
                x[lenx
++= j;
            }
        }
        insert(i, x);
    }
}

bool check(double R) {
    
for(int i = 1; i <= m; i ++) Radar[i].r = R;
    pre(n);
    build();
    deep 
= 0;
    anslen 
= 0;
    OK 
= false;
    
while!OK ) {
        
if( deep > k )  break;
        dfs(
0);
        deep 
++;
    }
    
return OK;
}

void solve() {
    
double left = 0, right = 1e29, mid;
    
while( right - left > eps) {
        mid 
= (left + right) / 2;
        
if( check(mid) ) {
            right 
= mid;
        } 
else {
            left 
= mid;
        }
    }
    printf(
"%lf\n", left);
    
}

int main() {
    
int t;
    scanf(
"%d"&t);
    
while( t -- ) {
        init();
        solve();
    }
}



superlong 2010-08-16 11:07 鍙戣〃璇勮
]]>
fzu1686http://www.shnenglu.com/superlong/archive/2010/08/16/123555.htmlsuperlongsuperlongMon, 16 Aug 2010 01:21:00 GMThttp://www.shnenglu.com/superlong/archive/2010/08/16/123555.htmlhttp://www.shnenglu.com/superlong/comments/123555.htmlhttp://www.shnenglu.com/superlong/archive/2010/08/16/123555.html#Feedback0http://www.shnenglu.com/superlong/comments/commentRss/123555.htmlhttp://www.shnenglu.com/superlong/services/trackbacks/123555.html#include <stdio.h>
#include 
<string.h>

const int N = 16;
const int SIZE = N*N*N*N;

int L[SIZE], R[SIZE], U[SIZE], D[SIZE], Sum[SIZE], Row[SIZE], Col[SIZE];
int lenx, id, deep, anslen;
bool OK;


int n, m, n1, m1;
int ini[N][N];

inline 
int read() {
    
char ch;
    
while( ch = getchar(), ch == ' ' || ch == '\n');
    
int d = ch - '0';
    
while( ch = getchar(), ch <= '9' && ch >= '0' ) d = d* 10 + ch - '0';
    
return d;
}

void pre(int cntcol) {
    
for(int i = 0; i <= cntcol; i ++) {
        L[i] 
= i - 1;
        R[i] 
= i + 1;
        U[i] 
= D[i] = i;
        Sum[i] 
= 0;
    }
    L[
0= cntcol; R[cntcol] = 0;
    id 
= cntcol + 1;
}

void init() {
    
int cnt = 1;
    
for(int i = 0; i < n; i ++) {
        
for(int j = 0; j < m; j ++) {
            ini[i][j] 
= read();
            
if( ini[i][j] == 1 ) ini[i][j] = cnt ++;
        }
    }
    n1 
= read(); m1 = read();
    pre(cnt
-1);
}

inline 
void insert(int i, int *xx) {
    
for(int j = 0; j < lenx; j ++, id ++) {
        
int x = xx[j];
        Row[id] 
= i;
        Col[id] 
= x;
        Sum[x] 
++;
        U[id] 
= x;
        D[id] 
= D[x];
        U[D[x]] 
= id;
        D[x] 
= id;
        
if( j == 0 ) {
            L[id] 
= R[id] = id;
        } 
else {
            L[id] 
= id - 1;
            R[id] 
= id - j;
            R[id
-1= id;
            L[id
-j] = id;
        }
    }
}

void build() {
    
int r = 0;
    
int x[N*N];
    
for(int i = 0; i <= n - n1; i ++ ) {
        
for(int j = 0; j <= m - m1; j ++) {
            r 
++;
            lenx 
= 0;
            
for(int p = 0; p < n1; p ++) {
                
for(int q = 0; q < m1; q ++ ) {
                    
if( ini[i+p][j+q] > 0 ) {
                        x[lenx
++= ini[i+p][j+q];
                    }
                }
            }
            insert(r, x);
        }
    }
}

void remove(int &c) {
    
for(int i = D[c]; i != c ; i = D[i]) {
        L[R[i]] 
= L[i];
        R[L[i]] 
= R[i];
    }
}
void resume(int &c) {
    
for(int i = U[c]; i != c ; i = U[i]) {
        L[R[i]] 
= i;
        R[L[i]] 
= i;
    }
}

inline 
int Astar() {
    
int res = 0;
    
bool vis[N*N] = {false};
    
for(int i = R[0]; i != 0; i =R[i]) {
        
if!vis[ i ] ) {
            vis[ i ] 
= true;
            res 
++;
            
for(int j = D[i]; j != i; j = D[j]) {
                
for(int k = R[j]; k != j; k = R[k]) {
                    vis[ Col[k] ] 
= true;
                }
            }
        }
    }
    
return res;
}

void dfs(int dep) {
    
if( Astar() + dep > deep )    return ;
    
if(R[0== 0)    {
        anslen 
= dep;     
        OK 
= true;
        
return;
    }
    
int idx = R[0];
    
for(int i = R[0] ; i != 0 ; i = R[i]) {
        
if(Sum[i] < Sum[idx]) {
            idx 
= i;
            
if( Sum[idx] <= 1 ) break;
        }
    }
    
for(int i = D[idx] ; i != idx; i = D[i]) {
        remove(i);
        
for(int j = R[i] ; j != i ; j = R[j]) remove(j);
        dfs( dep 
+ 1 );
        
for(int j = L[i] ; j != i ; j = L[j]) resume(j);
        resume(i);
        
if( OK ) return;
    }
}

int main() {
    
while( scanf("%d %d"&n, &m) != EOF ) {
        init();
        build();
        deep 
= 0;
        anslen 
= 0;
        OK 
= false;
        
while!OK ) {
            
//deep ++;
            dfs(0);
            deep 
++;
        }
        printf(
"%d\n", anslen);
    }
    
//while(1);
    return 0;
}


鍐欎簡涓彲浠ョ敤浣滄澘瀛愮殑DLX闈炵簿紜鐩?br>


superlong 2010-08-16 09:21 鍙戣〃璇勮
]]>
hdu3529http://www.shnenglu.com/superlong/archive/2010/08/12/123232.htmlsuperlongsuperlongThu, 12 Aug 2010 10:08:00 GMThttp://www.shnenglu.com/superlong/archive/2010/08/12/123232.htmlhttp://www.shnenglu.com/superlong/comments/123232.htmlhttp://www.shnenglu.com/superlong/archive/2010/08/12/123232.html#Feedback0http://www.shnenglu.com/superlong/comments/commentRss/123232.htmlhttp://www.shnenglu.com/superlong/services/trackbacks/123232.html#include <stdio.h>
#include 
<string.h>
#include 
<algorithm>
#include 
<stdlib.h>

const int N = 16;

int L[N*N*N], R[N*N*N], U[N*N*N], D[N*N*N], Sum[N*N*N], Row[N*N*N], Col[N*N*N];
char inimap[N][N];
int map[N][N];
int n, m, cntrow, cntcol;
int lenx, id, deep, anslen;
bool OK;
int move[4][2= {{01}, {0-1}, {10}, {-10}};
bool flag[50];

void init() {
    
for(int i = 0; i < n; i ++) {
        scanf(
"%s", inimap[i]);
    }
    memset(map, 
0sizeof(map));
    cntrow 
= 0;
    cntcol 
= 0;
    
for(int i = 0; i < n; i ++) {
        
for(int j = 0; j < m; j ++) {
            
if ( inimap[i][j] == '*') map[i][j] = -1;
            
if ( inimap[i][j] == '.') map[i][j] = 300 + (++cntrow);
            
if ( inimap[i][j] == '#') map[i][j] = (++cntcol);    
        }
    }
//    for(int i = 0; i < n; i ++) {
//        for(int j = 0; j < m; j ++) {
//            printf("%5d", map[i][j]);
//        }puts("");
//    }
}


void pre() {
    
for(int i = 0; i <= cntcol; i ++) {
        L[i] 
= i - 1;
        R[i] 
= i + 1;
        U[i] 
= D[i] = i;
        Sum[i] 
= 0;
    }
    L[
0= cntcol; R[cntcol] = 0;
    id 
= cntcol + 1;
}

inline 
void insert(int i, int *xx) {
    
for(int j = 0; j < lenx; j ++, id ++) {
        
int x = xx[j];
        Row[id] 
= i;
        Col[id] 
= x;
        Sum[x] 
++;
        U[id] 
= x;
        D[id] 
= D[x];
        U[D[x]] 
= id;
        D[x] 
= id;
        
if( j == 0 ) {
            L[id] 
= R[id] = id;
        } 
else {
            L[id] 
= id - 1;
            R[id] 
= id - j;
            R[id
-1= id;
            L[id
-j] = id;
        }
    }
}

inline 
int expend(int i, int j, int k) {
    
int t = 1;
    
while(true) {
        
int x = i + move[k][0* t;
        
int y = j + move[k][1* t;
        
if( x < 0 || x >= n || y < 0 || y >= m || map[x][y] == -1return -1;
        
if( map[x][y] > 0 && map[x][y] < 300 ) return map[x][y];
        t 
++;
    }
}

struct node {
    
int len;
    
int x[5];
    
bool operator < (const node a) const {
        len 
> a.len;
    }
};

void build() {
    
int x[5], r = 0;
    node tp[
15*15] ;
    
int cnt = 0;
    
for(int i = 0; i < n; i ++) {
        
for(int j = 0; j < m; j ++) {
            lenx 
= 0;
            
if( map[i][j] > 300 ) {
                
for(int k = 0; k < 4; k ++) {
                    
int t = expend(i, j, k);
                    
if( t == -1 ) continue;
                    x[lenx
++= t;
                }
                tp[cnt].len 
= lenx;
                
for(int k = 0; k < lenx; k ++) tp[cnt].x[k] = x[k];
                cnt 
++;
            }
        }
    }
    memset(flag, 
0sizeof( flag));
    std::sort(tp, tp 
+ cnt);
    
for(int i = 0; i < cnt; i ++) {
        
int j;
        
for(j = 0; j < tp[i].len; j ++) {
            
if( flag[tp[i].x[j]] ) break;
            flag[tp[i].x[j]] 
= 1;
        }
        
if( j == tp[i].len) {
            lenx 
= tp[i].len;
            insert(
++r, tp[i].x);
        }
    }
}


void remove(int &c) {
    
for(int i = D[c]; i != c ; i = D[i]) {
        L[R[i]] 
= L[i];
        R[L[i]] 
= R[i];
    }
}
void resume(int &c) {
    
for(int i = U[c]; i != c ; i = U[i]) {
        L[R[i]] 
= i;
        R[L[i]] 
= i;
    }
}

inline 
int Astar() {
    
int res = 0;
    
bool vis[16= {false};
    
for(int i = R[0]; i != 0; i =R[i]) {
        
if!vis[ i ] ) {
            vis[ i ] 
= true;
            res 
++;
            
for(int j = D[i]; j != i; j = D[j]) {
                
for(int k = R[j]; k != j; k = R[k]) {
                    vis[ Col[k] ] 
= true;
                }
            }
        }
    }
    
return res;
}

void dfs(int dep) {
    
//printf("%d %d %d\n", Astar(), dep, deep) ;
    
//system("pause");
    if( Astar() + dep > deep )    return ;
    
if(R[0== 0)    {
        anslen 
= dep;
        OK 
= true;
        
return;
    }
    
int idx = R[0];
//    printf("%d\n", idx);
    for(int i = R[0] ; i != 0 ; i = R[i]) {
        
if(Sum[i] < Sum[idx]) {
            idx 
= i;
            
//if( Sum[idx] <= 1 ) break;
        }
    }
    
for(int i = D[idx] ; i != idx; i = D[i]) {
        remove(i);
        
for(int j = R[i] ; j != i ; j = R[j]) remove(j);
        dfs( dep 
+ 1 );
        
for(int j = L[i] ; j != i ; j = L[j]) resume(j);
        resume(i);
        
if( OK ) return;
    }
}


int main() {
    
while( scanf("%d %d"&n, &m) != EOF ) {
        init();
        pre();
        build();
        deep 
= 1;
        OK 
= false;
        anslen 
= 257;
        
while!OK ) {
            dfs(
0);
            deep 
++;
        }
        printf(
"%d\n", anslen);
    }
    
//while(1);
    return 0;
}



superlong 2010-08-12 18:08 鍙戣〃璇勮
]]>
HDU3498http://www.shnenglu.com/superlong/archive/2010/08/10/122920.htmlsuperlongsuperlongTue, 10 Aug 2010 04:30:00 GMThttp://www.shnenglu.com/superlong/archive/2010/08/10/122920.htmlhttp://www.shnenglu.com/superlong/comments/122920.htmlhttp://www.shnenglu.com/superlong/archive/2010/08/10/122920.html#Feedback0http://www.shnenglu.com/superlong/comments/commentRss/122920.htmlhttp://www.shnenglu.com/superlong/services/trackbacks/122920.html#include <stdio.h>
#include 
<string.h>
#include 
<stdlib.h>

const int N = 60;
const int M = N * N;

int map[N][10];
int len[N];
int L[16*N*N], R[16*N*N], U[16*N*N], D[16*N*N], Sum[16*N*N], Row[16*N*N], Col[16*N*N];
int ans[16*N];
int id, anslen, r;
int H[16*N];
bool OK;

int n, m;
int lenx;
int deep;

void pre() {
    
for(int i = 0; i <= n; i ++) {
        L[i] 
= i - 1;
        R[i] 
= i + 1;
        U[i] 
= D[i] = i;
        Sum[i] 
= 0;
    }
    L[
0= n; R[n] = 0;
    id 
= n + 1;
}

inline 
void insert(int i, int *xx) {
    
for(int j = 0; j < lenx; j ++, id ++) {
        
int x = xx[j];
        Row[id] 
= i;
        Col[id] 
= x;
        Sum[x] 
++;
        U[id] 
= x;
        D[id] 
= D[x];
        U[D[x]] 
= id;
        D[x] 
= id;
        
if( j == 0 ) {
            L[id] 
= R[id] = id;
        } 
else {
            L[id] 
= id - 1;
            R[id] 
= id - j;
            R[id
-1= id;
            L[id
-j] = id;
        }
    }
}
//n*2^4 * n
//void build() {
//    int x[6];
//    r = 0;
//    for(int i = 1; i <= n; i ++) {
//        for(int j = 0; j < (1<<len[i]); j ++) {
//            lenx = 0;
//            r ++;
//            x[lenx++] = i; 
//            for(int k = 0; k < len[i]; k ++) {    
//                if( ((1<<k) & j) )x[lenx++] = map[i][k];
//            }
//            //for(int i = 0; i < lenx; i ++) printf("%d ", x[i]); puts("");
//            //system("pause");
//            //H[r] = i;
//            insert(r, x);
//        }
//    }
//    //pr/intf("%d\n", r);
//}

// n * n
void build() {
    
int x[6];
    
for(int i = 1; i <= n; i ++) {
        lenx 
= 0;
        x[lenx
++= i;
        
for(int j = 0; j < len[i];j ++) {
            x[lenx 
++= map[i][j];
        }
        insert(i, x);
    }
}

void remove(int &c) {
    
for(int i = D[c]; i != c ; i = D[i]) {
        L[R[i]] 
= L[i];
        R[L[i]] 
= R[i];
    }
}
void resume(int &c) {
    
for(int i = U[c]; i != c ; i = U[i]) {
        L[R[i]] 
= i;
        R[L[i]] 
= i;
    }
}

inline 
int Astar() {
    
int res = 0;
    
bool vis[60= {false};
    
for(int i = R[0]; i != 0; i =R[i]) {
        
if!vis[ i ] ) {
            vis[ i ] 
= true;
            res 
++;
            
for(int j = D[i]; j != i; j = D[j]) {
                
for(int k = R[j]; k != j; k = R[k]) {
                    vis[ Col[k] ] 
= true;
                }
            }
        }
    }
    
return res;
}

void dfs(int dep) {
    
if( Astar() + dep > deep )    return ;
    
if(R[0== 0)    {
        anslen 
= dep;
        OK 
= true;
        
return;
    }
    
int i,j,idx = R[0];
    
for(i = R[0] ; i != 0 ; i = R[i]) {
        
if(Sum[i] < Sum[idx]) {
            idx 
= i;
            
if( Sum[idx] <= 1 ) break;
        }
    }
    
for(i = D[idx] ; i != idx; i = D[i]) {
        remove(i);
        
for(j = R[i] ; j != i ; j = R[j]) remove(j);
        dfs( dep 
+ 1 );
        
for(j = L[i] ; j != i ; j = L[j]) resume(j);
        resume(i);
        
if( OK ) return;
    }
}

int main() {
    freopen(
"in.txt","r",stdin);
    
while( scanf("%d %d"&n, &m) != EOF ) {
        memset(len, 
0sizeof( len ));
        
for(int i = 0; i < m; i ++) {
            
int s, t;
            scanf(
"%d %d"&s, &t);
            map[s][len[s]
++= t;
            map[t][len[t]
++= s;
        }
        pre();
        build();
        deep 
= 1;
        OK 
= false;
        anslen 
= n;
        
while!OK ) {
            dfs(
0);
            deep 
++;
        }
        printf(
"%d\n", anslen);
    }
    
while(1);
    
return 0;
}

n*n鐨勫緩妯?鐒跺悗鎵炬渶灝戠殑琛屾暟浣垮緱姣忎竴鍒楄嚦灝戞湁涓涓?1'



superlong 2010-08-10 12:30 鍙戣〃璇勮
]]>
DLX_鏁扮嫭http://www.shnenglu.com/superlong/archive/2010/08/09/122820.htmlsuperlongsuperlongMon, 09 Aug 2010 10:39:00 GMThttp://www.shnenglu.com/superlong/archive/2010/08/09/122820.htmlhttp://www.shnenglu.com/superlong/comments/122820.htmlhttp://www.shnenglu.com/superlong/archive/2010/08/09/122820.html#Feedback0http://www.shnenglu.com/superlong/comments/commentRss/122820.htmlhttp://www.shnenglu.com/superlong/services/trackbacks/122820.html
#include <stdio.h>
#include 
<ctime>
#include 
<stdlib.h>
#include 
<string.h>

const int SIZE = 16;
const int N = SIZE*SIZE*SIZE;
const int M = SIZE*SIZE*4;
const char LET = 'A';

char map[SIZE+1][SIZE+1];
int L[N*M+1], R[N*M+1], U[N*M+1], D[N*M+1], Sum[N*M+1];
int x[5], lenx;
int Row[N*M+1], Col[N*M+1];
int ans[N+1], anslen;
int id;
bool OK;

void pre() {
    
for(int i = 0; i <= M; i ++) {
        L[i] 
= i - 1;
        R[i] 
= i + 1;
        U[i] 
= D[i] = i;
        Sum[i] 
= 0;
    }
    L[
0= M; R[M] = 0;
    id 
= M + 1;
}

inline 
void insert(int i, int *xx) {
    
for(int j = 0; j < lenx; j ++, id ++) {
        
int x = xx[j]+1;
        Row[id] 
= i;
        Col[id] 
= x;
        Sum[x] 
++;
        U[id] 
= x;
        D[id] 
= D[x];
        U[D[x]] 
= id;
        D[x] 
= id;
        
if( j == 0 ) {
            L[id] 
= R[id] = id;
        } 
else {
            L[id] 
= id - 1;
            R[id] 
= id - j;
            R[id
-1= id;
            L[id
-j] = id;
        }
    }
}

void build() {
    
for(int i = 0; i < SIZE; i ++) {
        
for(int j = 0; j < SIZE; j ++) {
            
for(int k = 0; k < SIZE; k ++) {
                
int row = k+SIZE*j+SIZE*SIZE*i+1;
                lenx 
= 0;
                
if( map[i][j] == '-' || map[i][j] == k + 'A' ) {
                    x[lenx
++= SIZE*+ k;
                    x[lenx
++= SIZE*SIZE + SIZE*+ k;
                    
int temp = (i / 4* 4 + j / 4;
                    x[lenx
++= 2*SIZE*SIZE + temp * SIZE + k;
                    x[lenx
++= 3*SIZE*SIZE + i*SIZE + j;
                    insert(row, x);
                }
            }
        }
    }
}

inline 
void remove(int c) {
    R[L[c]] 
= R[c];
    L[R[c]] 
= L[c];
    
for(int id = D[c]; id != c; id = D[id]) {
        
for(int i = R[id]; i != id; i = R[i] ) {
            D[U[i]] 
= D[i];
            U[D[i]] 
= U[i];
            Sum[Col[i]] 
--;
        }
    }
}

inline 
void resume(int c) {
    L[R[c]] 
= c;
    R[L[c]] 
= c;
    
for(int id = D[c]; id != c; id = D[id]) {
        
for(int i = R[id]; i != id; i = R[i] ) {
            U[D[i]] 
= i;
            D[U[i]] 
= i;
            Sum[Col[i]] 
++;
        }
    }
}

bool dfs(int deep) {
    
if( R[0== 0 ) return true;
    
int column = R[0];
    
for(int i = R[0]; i != 0; i = R[i]) {
        
if( Sum[i] < Sum[column] ) {
            column 
= i;
            
if( Sum[column] < 2 ) break;
        }
    }
    remove(column);
    
for(int id = D[column]; id != column; id = D[id]) {
        ans[deep] 
= Row[id];
        
for(int i = R[id]; i != id; i = R[i]) remove(Col[i]);
        
if( dfs( deep + 1) ) return true;
        
for(int i = L[id]; i != id; i = L[i]) resume(Col[i]);
    }
    resume(column);
    
return false;
}


int main() {
    freopen(
"in.txt","r",stdin);
    
while( scanf("%s", map[0]) != EOF ) {
        
for(int i = 1; i < SIZE; i ++) scanf("%s", map[i]);
        pre();
        build();
        dfs(
0);
        
for(int i = 0; i < 256; i ++) {
            
int r = (ans[i] - 1/ SIZE / SIZE % SIZE;
            
int c = (ans[i] - 1/ SIZE % SIZE;
            
int val = (ans[i] - 1% SIZE;
            map[r][c] 
= val + 'A';
        }
        
for(int i = 0; i < SIZE; i ++){ 
            
for(int j = 0; j < SIZE; j ++) printf("%c",map[i][j]);
            printf(
"\n");
        }
        printf(
"\n");
    }
    
while(1);
}


http://acm.pku.edu.cn/JudgeOnline/problem?id=3076



superlong 2010-08-09 18:39 鍙戣〃璇勮
]]>
DLXhttp://www.shnenglu.com/superlong/archive/2010/08/09/122743.htmlsuperlongsuperlongMon, 09 Aug 2010 02:51:00 GMThttp://www.shnenglu.com/superlong/archive/2010/08/09/122743.htmlhttp://www.shnenglu.com/superlong/comments/122743.htmlhttp://www.shnenglu.com/superlong/archive/2010/08/09/122743.html#Feedback0http://www.shnenglu.com/superlong/comments/commentRss/122743.htmlhttp://www.shnenglu.com/superlong/services/trackbacks/122743.html#include <stdio.h>
#include 
<string.h>

const int N = 1005*1005;

int L[N], R[N], U[N], D[N], C[N], Sum[N];
int Row[N], Col[N];
int ans[N], anslen;
int n, m, id;
bool OK;

void pre() {
    
for(int i = 0; i <= m; i ++) {
        L[i] 
= i - 1;
        R[i] 
= i + 1;
        U[i] 
= D[i] = C[i] = i;
        Sum[i] 
= 0;
    }
    L[
0= m; R[m] = 0;
    id 
= m + 1;
}

void build() {
    
int num, x;
    
for(int i = 1; i <= n; i ++) {
        scanf(
"%d"&num);
        
for(int j = 0; j < num; j ++, id ++) {
            scanf(
"%d"&x);
            Row[id] 
= i;
            Col[id] 
= x;
            Sum[x] 
++;
            U[id] 
= x;
            D[id] 
= D[x];
            U[D[x]] 
= id;
            D[x] 
= id;
            
if( j == 0 ) {
                L[id] 
= R[id] = id;
            } 
else {
                L[id] 
= id - 1;
                R[id] 
= id - j;
                R[id
-1= id;
                L[id
-j] = id;
            }
        }
    }
}

inline 
void remove(int c) {
    R[L[c]] 
= R[c];
    L[R[c]] 
= L[c];
    
for(int id = D[c]; id != c; id = D[id]) {
        
for(int i = R[id]; i != id; i = R[i] ) {
            D[U[i]] 
= D[i];
            U[D[i]] 
= U[i];
            Sum[Col[i]] 
--;
        }
    }
}

inline 
void resume(int c) {
    L[R[c]] 
= c;
    R[L[c]] 
= c;
    
for(int id = D[c]; id != c; id = D[id]) {
        
for(int i = R[id]; i != id; i = R[i] ) {
            U[D[i]] 
= i;
            D[U[i]] 
= i;
            Sum[Col[i]] 
++;
        }
    }
}

void dfs(int deep) {
    
if( R[0== 0 ) {
        OK 
= true;
        anslen 
= deep;
        
return ;
    }
    
int column = R[0];
    
for(int i = D[0]; i != 0; i = D[i]) {
        
if( Sum[i] <= Sum[column] ) column = i;
    }
    remove(column);
    
for(int id = D[column]; id != column; id = D[id]) {
        ans[deep] 
= Row[id];
        
for(int i = R[id]; i != id; i = R[i]) remove(Col[i]);
        dfs( deep 
+ 1);
        
if(OK) return;
        
for(int i = R[id]; i != id; i = R[i]) resume(Col[i]);
    }
    resume(column);
}

int main() {
    
while~scanf("%d %d"&n, &m) ) {
        pre();
        build();
        OK 
= false;
        dfs(
0);
        
if( OK ) {
            printf(
"%d", anslen);
            
for(int i = 0; i < anslen; i ++) printf(" %d", ans[i]);
            puts(
"");
        } 
else {
            puts(
"NO");
        }
    }
}


http://acm.hust.edu.cn/thanks/problem.php?id=1017



superlong 2010-08-09 10:51 鍙戣〃璇勮
]]>
HOJ11648http://www.shnenglu.com/superlong/archive/2010/08/06/122453.htmlsuperlongsuperlongFri, 06 Aug 2010 07:57:00 GMThttp://www.shnenglu.com/superlong/archive/2010/08/06/122453.htmlhttp://www.shnenglu.com/superlong/comments/122453.htmlhttp://www.shnenglu.com/superlong/archive/2010/08/06/122453.html#Feedback0http://www.shnenglu.com/superlong/comments/commentRss/122453.htmlhttp://www.shnenglu.com/superlong/services/trackbacks/122453.html#include <stdio.h>
#define LOOP(a,b,c,d) for(a=b;a<c;a+=d)
#define L(a) LOOP(a,0,8,1)
#define ENEMY(a,b) ((a-'a')*(b-'a')<0&&a!='.'&&b!='.')
#define FRIEND(a,b) ((a-'a')*(b-'a')>0&&a!='.'&&b!='.')
int mdir[16][2]={0,1,-1,1,-1,0,-1,-10,-1,1,-1,1,0,1,1,//鐩擱偦縐誨姩8涓柟鍚?nbsp;
                 -1,2,-2,1,-2,-1,-1,-2,1,-2,2,-1,2,1,1,2};//椹縐誨姩8涓柟鍚?nbsp;
int md[5][4]={0,8,1,2//king               md[0]-md[1]:褰撳墠媯嬪瓙鐨勭Щ鍔ㄦ暟緇勭殑涓嬫爣鑼冨洿 
              0,8,1,8//queen              md[2]      :縐誨姩鏁扮粍鐨勯夊彇闂撮殧錛?->鍏釜鏂瑰悜錛?nbsp;2->鍥涗釜鏂瑰悜錛?nbsp;
              0,8,2,8//rook               md[3]      :閬嶅巻褰撳墠媯嬪瓙涓嬈℃搷浣滃彲浠ユ敾鍑葷殑鑼冨洿闇瑕佽繘琛岀Щ鍔ㄧ殑嬈℃暟 
              1,8,2,8//bishop
              8,16,1,2 //knight
            };
int KX,KY,KADD,KAT[8][2],KAL,MBLE,ATTACK[8][8],MOVE[8][8],ESC,BLE;
char map[8][10];
char BW[2]; // 褰撳墠閫夋墜 
int trs(char c){
    
if(c<'a')c+='a'-'A';//澶у啓杞皬鍐?nbsp;
    if(c=='k')return 0;
    
if(c=='q')return 1;
    
if(c=='r')return 2;
    
if(c=='b')return 3;
    
if(c=='n')return 4;
    
return -1;
    
/*
    Rook    杞?nbsp;2 
    Bishop    璞?nbsp;3
    Queen    鍚?nbsp;1
    Knight    椹?nbsp;4
    King    鐜?nbsp;0
    
*/
}
void InitMap(){
    
int i,j;
    L(i)L(j)ATTACK[i][j]
=MOVE[i][j]=0;MBLE=KADD=ESC=BLE=0;
    scanf(
"%s",BW);
    L(i)scanf(
"%s",map[i]);
    L(i)L(j)
if(trs(map[i][j])==0&&FRIEND(map[i][j],BW[0])){
        KX
=i;KY=j;i=j=8;
    }
}
int StepMove(int x,int y,int d,int l,int *m,int *n){
    
*m=x+mdir[d][0]*l;*n=y+mdir[d][1]*l;
    
if(*m<0||*m>7||*n<0||*n>7)return -1;
    
if(map[*m][*n]=='.')return 0;
    
return 1;
}
void ATT(char c,int x,int y){
    
int d,l,r,s,m,n,i,sx,sy;
    r
=trs(c); //褰撳墠鏁屼漢鐨勭被鍨?nbsp;
    LOOP(d,md[r][0],md[r][1],md[r][2]){ 
        LOOP(l,
1,md[r][3],1){
            s
=StepMove(x,y,d,l,&m,&n);
            
if(s>=0)ATTACK[m][n]++;
            
if(s)break;             //閬囧埌涓涓潪絀虹殑浣嶇疆鎴栬呭嚭鐣屽氨鍋滄 
        }
        
if(s<=0||FRIEND(map[m][n],c))continue;//褰撳墠媯嬪瓙鏈ㄦ湁閬囧埌鍏朵粬媯嬪瓙鎴栬呴亣鍒扮殑媯嬪瓙鏄弸鏂瑰崟浣?nbsp;
        if(KX==m&&KY==n){                     //濡傛灉鏄亣鍒頒簡鎴戞柟鐨勭帇 
            KADD++;KAL=l;                     //鎴戞柟鐜嬭鏀誨嚮嬈℃暟+1 
            if(KADD==1)                       //濡傛灉闂柟鐜嬪彧鏄鏀誨嚮涓嬈?nbsp;
                LOOP(i,0,KAL,1){              //璁板綍鏀誨嚮鐜嬬殑榪欐潯綰胯礬 KAT 
                    KAT[i][0]=x+i*mdir[d][0];
                    KAT[i][
1]=y+i*mdir[d][0];
                }
            
continue;
        }
        
if(r==0||r==4)continue//濡傛灉鐜嬪拰椹蛋鍒?m,n)閭d箞縐誨紑鑷繁鍦?m,n)涓婄殑媯嬪瓙涓嶄細(xì)瀵圭帇閫犳垚濞佽儊 
        LOOP(i,1,8,1)           //鍋囪縐誨紑鍦?m,n)鐨勬湰鏂規(guī)瀛愪嬌寰楃帇琚敾鍑誨垯鏍囪璇ヤ綅緗負(fù)涓嶅彲鍔?-1) 
            if(s=StepMove(m,n,d,i,&sx,&sy))break;
            
if(KX==sx&&KY==sy)MOVE[m][n]=-1;
    }
}
void BLOCK(char c,int x,int y){
    
int d,l,r,s,m,n;
    r
=trs(c);if(r==0)return;//鏋氫婦涓嶆槸鐜嬩笖鑳界Щ鍔ㄧ殑鐨勫弸鏂瑰崟浣?nbsp;
    LOOP(d,md[r][0],md[r][1],md[r][2]){
        LOOP(l,
1,md[r][3],1){
            s
=StepMove(x,y,d,l,&m,&n);
            
if(s)break;
            
else {MOVE[m][n]++;MBLE++;}
        }
        
if(s==1&&ENEMY(map[m][n],c)){
            MBLE
++;MOVE[m][n]++;
        }
    }
}
int main(){
    
int i,j,t,x,y;
    scanf(
"%d",&t);
    
while(t--){
        InitMap();
//璇誨叆鍥?nbsp;浠ュ強鍒濆鍖栧悇涓暟緇?nbsp;
        L(i)L(j)if(ENEMY(map[i][j],BW[0]))ATT(map[i][j],i,j);
        
/*
            鍋氫簡涓ゅ紶琛ˋTT鍜孧OVE
            ATT琛ㄧず鏁屾柟鑳芥敾鍑葷殑鎵鏈夌偣
            MOVE[x][y] = -1 琛ㄧず鏈柟鍦?x,y)澶勭殑媯嬪瓙鏃犳硶縐誨姩
            KADD璁板綍鐜嬭澶氬皯涓晫鏂瑰崟浣嶆敾鍑誨埌 
        
*/ 
        L(i)L(j)
if(FRIEND(map[i][j],BW[0])&&MOVE[i][j]!=-1)BLOCK(map[i][j],i,j);
        
        L(i){
            x
=KX+mdir[i][0];y=KY+mdir[i][1];if(x<0||x>7||y<0||y>7)continue;
            
if(ATTACK[x][y]==0&&(map[x][y]=='.'||ENEMY(map[x][y],BW[0]))){ESC++;break;}
        }
//濡傛灉鐜嬭蛋涓姝ュ彲浠ョЩ鍔ㄤ笖涓嶅彈鏀誨嚮鍒橢SC++ 
        
        
if(KADD==1)LOOP(i,0,KAL,1)if(MOVE[KAT[i][0]][KAT[i][1]]){BLE=1;break;}
        printf(
"%s IS ",BW[0]=='B'?"BLACK":"WHITE");
        
if(KADD==0&&(ESC||MBLE))printf("SAFE\n");
        
else if(KADD&&(ESC||BLE))printf("CHECKED\n");
        
else printf("CHECKMATED\n");
    }
    
return 0;
}


棰樻剰鏄粰瀹氫竴涓鐩樺拰璋佺幇鍦ㄥ嚭鎵嬶紝闂粬鏄惁瀹夊叏鎴栬呰灝嗘鎴栬呰灝嗗啗



superlong 2010-08-06 15:57 鍙戣〃璇勮
]]>
亚洲国产天堂久久综合网站| 欧美亚洲另类久久综合| 久久亚洲AV成人无码软件| 国产免费久久精品99re丫y| 久久久亚洲欧洲日产国码是AV| 午夜人妻久久久久久久久| 国产午夜精品久久久久免费视| 91视频国产91久久久| 亚洲国产精品热久久| 亚洲一区精品伊人久久伊人 | 国内精品欧美久久精品| 久久久久久亚洲精品不卡 | 久久播电影网| 久久影视国产亚洲| 亚洲精品乱码久久久久久久久久久久 | 久久AV无码精品人妻糸列| 成人综合伊人五月婷久久| 国产精品综合久久第一页| 模特私拍国产精品久久| 久久亚洲私人国产精品vA| 伊人久久精品线影院| 手机看片久久高清国产日韩| 日产精品久久久久久久| 久久99亚洲综合精品首页| 中文字幕日本人妻久久久免费 | 欧美日韩精品久久久免费观看| 精品永久久福利一区二区| 久久国产视频99电影| 无码AV波多野结衣久久| 久久精品成人免费观看97| 日产精品久久久久久久| 久久久久女教师免费一区| 久久国产亚洲精品无码| 伊人精品久久久久7777| 人人狠狠综合久久亚洲88| 久久久久se色偷偷亚洲精品av| 99久久国产亚洲高清观看2024| 亚洲va久久久噜噜噜久久天堂| 国产巨作麻豆欧美亚洲综合久久| 久久综合九色综合网站| 欧美久久综合九色综合|