作者: sa072686 at 06/06/25
段考期間開的版…XD
社團參與的第一步XD~
希望這裡會熱鬧起來^^~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: Macaca at 06/06/25
黑嘿,
就是有我這種準備爆的XD,
爆到文一篇~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Macaca from 61.59.236.104 (種子電信)
→ sa072686 推:歡迎^^ 0626 17:53
作者: web at 06/06/25
我是害羞的學弟
你好
>////<
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by web from 140.109.229.182 (國家中央研究所)
→ sa072686 推:你好~ 呃,我的台詞被搶了XD 0626 17:54
作者: PG at 06/06/25
嘖嘖~
我的段考又要爆炸了
冏興
--
╭──────╮ 享受解題的快感
靠腰,上課了啦 放開我 │ PG state │ 體會程式設計的奧妙
○︿_ 我還要寫ACM │A B C D E F │ 請至: http://acm.uva.es/p/
/友 ○/ 再一題 │ACACACACWAAC│ http://www2.dmhs.kh.edu.tw/
√\ 〈PG_ 再AC一題就好╰──────╯ 台南一中資訊社
╩ 7th廢渣 PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.131.95 (福爾摩沙固網)
→ sa072686 推:我也差不多吧…段考前兩個禮拜AC了約20題 0626 17:55
→ sa072686 推:看書看煩了不想看了就寫 這樣XD 0626 17:55
→ Macaca 推:樓上是強者... 0626 17:55
作者: sa072686 at 06/06/27
經過最後的考前衝刺(?) //事實上現在是段考第一天…
(謎之聲:我看是不能玩了才拿ACM逃避唸書XD)
第200 AC終於達成嚕^^
雖然在CODE剛寫完時整個英文網頁掛掉不能傳>"<
好,接著就邁向三百囉~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Macaca 推:我一個多月沒寫了...囧 0628 15:46
→ Macaca 推:現在題數好少||| 0628 15:46
→ sa072686 推:我一碰上段考 不想唸書時就寫XD 0628 19:17
→ sa072686 推:段考後…天堂二在等著我XD 0628 19:18
作者: sa072686 at 06/06/28
有同在五服的嗎?
有的話留一下ID吧~
能供吃供穿最好XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:原來學弟有在玩OLGame 0630 22:40
→ sa072686 推:有種越玩越多種的感覺 0701 00:51
→ sa072686 推:朋友們這邊拉 那邊拉的 XD 0701 00:51
作者: sa072686 at 06/07/02
小複雜,記一下…
令 j[a][b]=c 表示第b個a字元出現在字串中第c個
以此做LIS
例:acaab caba
則k依序為{2}、{1,3}、{1,3,5}、{1,3,4}
其中{2}到{1,3}的部份實際上是…
{2}=>{2,4}=>{2,3}=>{1,3}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/03
誰知道怎麼讓它不會再跑出來?
關掉下次還是又出現啊啊啊~
有點想把它移除掉…
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:趁這個機會改用Firefox... 不對不對= = 0704 12:43
→ ducksteven 說:IE 6 以上,有個功能可以把它關掉 0704 12:44
→ sa072686 推:什麼功能呀? 0704 22:02
→ hugojay 說:選單 工具/管理附加元件 0705 05:46
→ hugojay 說:然後把不要的停用掉 sp2功能 0705 05:47
→ sa072686 推:知道了 謝嚕 0705 09:49
作者: sa072686 at 06/07/04
好像忘了把垃圾拿去丟了,還放在桌上(汗)
今天在社部AC了三題…是太混嗎?
後面網頁好像隨便做一做就跑去寫ACM了XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:(瞪) 0704 22:03
→ hugojay 推:我有看到= =|| 0705 05:49
→ sa072686 推:||| 下次不敢了…會盡量記得@@ 0705 09:50
作者: sa072686 at 06/07/05
體育被當哩
死因:游泳沒過…
我知道了,一定吃了什麼惡魔果實 一一"
游泳…恨啊~
--
TFCis 97th 不懂C的小教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ming1053 推:你再嗆人 大家都要帶墨鏡了= = 0705 19:42
→ sa072686 推:真的被當啊…||| 而且「不會游泳」能嗆人嗎?囧TZ 0705 19:55
→ sa072686 推:如果你是指果實的話…||| 0705 20:40
作者: sa072686 at 06/07/05
9.6秒…
非常好的成績 |||
--
TFCis 97th 不懂C的小教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ming1053 呸:你簽名檔小心一點 想嗆別人也不是這樣= =... 0705 20:44
→ sa072686 推:原來是簽名檔…||| 0705 20:47
→ sa072686 說:不過我懂的和暑修教材其實差不多 題數是暴力來的 0705 20:48
→ Macaca 推:x^2+y^2、x^2-y^2、2xy,我記得這樣很快阿@@ 0705 22:49
→ chensc 推:欸欸欸…簽名檔是怎樣 0706 09:08
→ sa072686 推:我是這樣做的沒錯啊||| 0706 13:03
→ Macaca 推:奇怪,我跟我同學都跑幾秒而已@@" 0706 13:23
→ sa072686 推:我嫩咩… 0706 17:08
作者: sa072686 at 06/07/05
已修正
別懷疑,這是事實
//其實多個++也行…真的連cin和cout也不會|||
--
TFCis 97th 只懂到迴圈和陣列的小教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:這…這是要阿魯巴的啊! 0706 09:08
→ sa072686 推:因為小教學懂太少了嗎?… 0706 13:03
→ Macaca 推:我被嗆爆了... 0706 13:23
→ sa072686 推:怎麼都沒人相信我||| 可以看一下11557 0706 17:09
→ Macaca 推:所以我被嗆爆了阿... 0706 17:09
→ sa072686 推:看想找哪一題的code 最多就strcmp、strlen和sqrt 0706 17:09
→ Macaca 推:其實我也只會這些東西阿... 0706 17:10
→ sa072686 推:所以我們一樣啊XD… 0706 17:11
→ ming1053 呸:懂越多的人越被閃= =+ 0706 20:09
→ sa072686 推:||| 好吧再改 0707 07:42
作者: sa072686 at 06/07/07
二版
事前沒考慮到看的人怎麼想的
(可是懂的東西是事實,昨天Macaca說到MAP我也不會|||)
醬應該沒問題了吧XD 推給時間|||
不過我暑假會盡量多搞懂些東西喔XD
開始玩英文題目(雖然學長一行字解說完畢我得看上半小時)
不過真的好多秒殺題啊~(那是練英文還是練程設…|||)
算了,那不是重點…
麻煩之前被閃到的再來看一下吧…囧TZ
--
TFCis 97th 時間多沒事就寫ACM的小教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/08
C語言課程中
while語法似乎是不用加分號的
今天翻書翻到
要加分號的是do...while
//為什麼會翻書呢?明年不想再死計概那些根本用不到的語法了|||
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: ducksteven at 06/07/08
※ 引述《sa072686 (あ、これ..體育慘當)》之銘言:
> C語言課程中
> while語法似乎是不用加分號的
> 今天翻書翻到
> 要加分號的是do...while
> //為什麼會翻書呢?明年不想再死計概那些根本用不到的語法了|||
while (條件)
{
//statements;
}
然後是
do
{
//statements;
} while (條件);
--
黃沙起兮風雲湧天蒼蒼 小小鴨 兮我心戚志未酬 TFcis 7 兮英雄恨地森森兮天書展意紛
紛兮轍分馳 部落閣 http://chitsaou.wordpress.com/ 路迢迢兮之罘巔功烈烈兮一簣毀
莫憂悲兮偕君行魎魍魍兮天地異霧茫茫兮似夢幻高翱翔兮蹈西海心似駒 ★ 很多日記 兮
歸故鄉白峰遙兮故人遠暮靄沈兮神農澗悠乎逝兮九周鼎鼓鉦鉦兮烽煙寒 每週必波 ☆ 幽
緲緲兮太古跡雲霓揚兮虹彩橋氤氳騰兮紫雲塔巍峨偉兮咸陽都迷離幻兮壺中界!威靈赫兮
金人變黑龍舞兮泗水濤.天悠悠兮夢桃源取自《軒轅劍肆》 http://yorkxin.org/cs/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ducksteven from 220.142.34.119 (中滑一番)
→ sa072686 推:對 就是指這個XD 0708 21:08
作者: sa072686 at 06/07/09
剛進入千名內XD
目前是998名
//為了這個熬夜硬解六題…
結果指標還是沒看懂|||
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/09
※ 本文轉錄自 [TFcis8] 看板
作者: PG (空の向こうに) 站內: TFcis8
標題: [考題] 程設組
時間: 2006/05/24 Wed 13:19:17
1.給一個數N,請輸出N是否是奇數
Note.N是小於一萬的自然數
範例輸入
1 2 3 4 5
範例輸出
Y
N
Y
N
Y
2.請輸出一張九九乘法表(格式不限,看的懂就好)
這題沒有輸入
3.給定兩個數a,b,請輸出a,b的最小公倍數, a,b都是小於十萬的自然數,
Note.答案不會超過2147483647
範例輸入
10 15
1024 243
123 123
1 1
2147483647 2147483647
範例輸出
30
248832
123
1
2147483647
4.PG最近在練習魔術方塊,因此常常轉方塊測時間,魔術方塊成績計算方法是
先轉12次,紀錄這12次所耗費的時間,然後把最好的一次與最差的一次成績去掉之後
求出剩下10次的時間平均值,這就是該次測時的平均時間
給12筆時間紀錄,請你按照上述的方法計算成績
範例輸入
1 2 3 4 5 6 7 8 9 10 11 12
98 97 90 80 60 78 80 99 100 87 68 91
範例輸出
6.5
86.8
5.承第4題,請你對這12筆成績排序後輸出(輸入12筆成績後再排序)
範例輸入
1 2 3 4 5 6 7 8 9 10 11 12
98 97 90 80 60 78 80 99 100 87 68 91
範例輸出
1 2 3 4 5 6 7 8 9 10 11 12
60 68 78 80 80 87 90 91 97 98 99 100
6.給N根火柴棒(火柴棒不需要全部用完),請問總共可以排出幾種等腰三角形(包括正三角
形)
每筆答案請用一個空白行間隔
Note.n介於3到10000之間
範例輸入
3
4
5
6
10
100
範例輸出
1
1
2
3
10
1225
7.玩魔獸的時候,你控制的狩魔獵人突然遭到幾隻蠻兵的突擊,
在這題,你必須判斷出狩魔獵人是否有辦法抵擋這波攻勢,
為了簡化問題,我們"不採計"狩魔獵人&蠻兵的防禦力
並且假設任一隻蠻兵都可以攻擊到狩魔獵人,狩魔獵人也可以任意攻擊任何一隻蠻兵
狩魔獵人攻擊蠻兵可以造成蠻兵30HP的傷害,蠻兵攻擊狩魔列人可以造成10HP的傷害
請你決定出一個攻擊的策略,並且判斷狩魔獵人是否有辦法存活
題目中會給H,N, H是狩魔獵人HP,N是敵人隻數
接下來的N行是一串的數字,分別是這N個敵人的HP
如果狩魔獵人不幸陣亡,請輸出"You lost. Orz"
如果狩魔獵人存活下來,請書出狩魔獵人可能的最大HP值
附註.狩魔獵人先進行攻擊
範例輸入
100
1
300
100
5
1
1
1
1
1
9
1
29
範例輸出
10
You lost. Orz
9
8.(加分題,防無聊用..)
Q10959:The Party, Part I
Don Giovanni 喜歡跳舞,有天他開了一場舞會,邀請很多人一起來跳舞,大家都覺得能
和主人(Don Giovanni)一起跳舞是一見榮幸的事,所以他們創造了一個名詞叫Don
Giovanni number, Don Giovanni number 的計算方法如下
(1)沒有人的 Don Giovanni number 是負的
(2)Don Giovanni 自己的 Don Giovanni number 是 0
(3)和 Don Giovanni 跳過舞的人他們的 Don Giovanni number 是 1 ,和 Don
Giovanni number 是 n 的人跳過舞且沒有和 Don Giovanni number 比 n 小的人跳過舞
的人,他們的 Don Giovanni number 是 n+1
(4)如果有人一直沒有和有 Don Giovanni number 的人跳舞,則他的 Don Giovanni
number 是無限大,但是題目保證不會產生這種情形
你的工作是要確定每一個人的 Don Giovanni number
Input:
Input 的第一行會有一個正整數,他代表有幾個Case。
每一個Case的第一行會有兩個數,P和D,P是這場舞會中有幾個人(每人人有一個編號從0
到P-1,Don Giovanni 的編號是0),D是有幾對跳舞的人(P<=1000,D<P(P-1)/2),然後以
下D行每行會有兩個數,代表跳舞的兩人的編號
Output:
輸出1號到P-1號的 Don Giovanni number,每個數字一行(你不需要輸出 Don Giovanni
的 Don Giovanni number)
每兩個Case之間也請空一行
Sample Input
2
5 6
0 1
0 2
3 2
2 4
4 3
1 2
5 5
1 2
0 1
2 3
3 4
0 4
Sample Output
1
1
2
2
1
2
2
1
--
╭──────╮ 享受解題的快感
靠腰,上課了啦 放開我 │ PG state │ 體會程式設計的奧妙
○︿_ 我還要寫ACM │A B C D E F │ 請至: http://acm.uva.es/p/
/友 ○/ 再一題 │ACACACACWAAC│ http://www2.dmhs.kh.edu.tw/
√\ 〈PG_ 再AC一題就好╰──────╯ 台南一中資訊社
╩ 7th廢渣 PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 192.168.4.53 (台狼一中桑靈餓)
▲ PG 改→2006/05/24 Wed 14:19:24
▲ PG 改→2006/05/24 Wed 14:31:26
▲ PG 改→2006/05/24 Wed 14:47:22
φ brucehsu 轉→到 [brucehsu] 看板 ,于 2006/05/24 Wed 15:16:18
φ sa072686 轉:從 [TFcis8] 看板,于 2006/07/09 Sun 12:26:41
作者: sa072686 at 06/07/09
原來BBS這麼好玩…
有踩地雷和孔明棋耶~XD
雖然踩地雷一到五級十分鐘全破(難度沒WINDOWS內建的高)
不過孔明棋真是超好玩的XD
現在沒什麼時間,以後再來玩…
棋譜:9/124
有人也喜歡玩這個嗎?XD
感覺喜歡玩這個有點像怪人…XD
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
和一星的476、477蠻像的,注意圖示會被蓋掉就好
…
看星星完全不準啊一一"
三星的142比二星的478簡單多了…
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
小麻煩,不過善用字串的話其實還可以
先弄一個完全空白(都是ASCII 32)的字串做複製用
分屍觀察後填上-、|
善用STRCPY幫忙填有|的那幾行
其它重點就在後面不能有多餘空白
每行倒回找第一個不是ASCII 32的字元
補上'\0'就行了
這樣寫的話
PRINT 用%S就OK了
不用管,完全不會有多餘空白
字串好用啊~ 比字元一個個處理好多了
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
騙人的一題…
輾轉相除解決
第三行…
//別像我把分號看成冒號都好|||
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
又是騙人的一題…
N可以小於0,但是依題目給的公式,
根本就不會停止,只會陷入無窮迴圈
所以只要還是負的就UNDERFLOW,正的就OVERFLOW…
其它嘛,計算機按一按就知道只有哪些正數能正常顯示了
用陣列存吧,反正才六個左右
陣列存東西當作輸出時用,很方便的呀
字串、數字等等都行
還不用用到IF,INPUT 直接套就行了
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
很暴力的一題
基本上開兩張地圖,才不會在變動後出錯
看是要交互玩,還是用STRCPY玩都行
我用STRCPY排名還在15名…
就是假設有X、Y兩個陣列當作地圖
依照X把Y一格格排成隔天的樣子後
用STRCPY把Y的內容搬回X
隔天再玩X就行
不然要算天數,交互玩有點小麻煩
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:%125 0326 19:35
作者: sa072686 at 06/07/10
一樣很簡單,不過要用大數,一般變數型態存不下10^101
即使DOUBLE能存,存了也沒用,不能用MOD,比大數還不方便…
…
用SCANF 配合%S讀入可以在中間的空格斷句,GETS不行
基本上 X^Y的話
注意Y=0的情況
有些不管Y多少都不變,其它不是2循環就4循環
基本上把大數需要看的地方換回整數型態算就行了,不用拿整個大數做MOD
(事實上我也不會XD)
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
奇怪的一題,WA了好久四處抓不到蟲,
居然把INPUT 的部份從讀%C改成用GETS就AC了
基本上可以設個大點的陣列
把指標設在中間,上下移並記下上下限就可以了
一樣善用字串手法,做一個全為ASCII 32的陣列,
配合紀錄最後出現非ASCII 32位置的方式,
就可以輕鬆解決多餘空白的問題,還可以用%S輕鬆輸出
善用'\0',把它放在陣列中,
%S輸出只會輸出到'\0',多利用它很方便,
解決多餘空白、或是一長串完全相同的陣列卻得指定輸出長度時好用
%S也比迴圈輸出%C要方便簡潔多了
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
蠻好寫的一題,不過沒中文|||
簡單地翻譯一下
每組測試資料給你一個整數N代表以下有幾個字串
接下來N列每列包含一個只含A到Z、a到z、0到9的字串
將它們排序後由上而下分成數行輸出
每個字串輸出的長度依最長字串之長度而定
每列需最接近60個字元,但不得超過
每個字串中間需間隔一個空白(ASCII 32)
例:最長字串長度為10,則一列輸出(60-10)/11 +1 = 5 個字串
老方法,定位後用'\0'做字串處理
並且注意即使是一列的最後一個字串也需用空白(ASCII 32)補齊
並非是去掉多餘空白
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
又是討厭的英文題,雖然不難|||
基本上就是判斷迴文(倒過來唸也完全一樣的)
和鏡射(根據表格判斷左右兩邊是否為對稱,
即使是迴文,形狀上也未必對稱)
至於零和英文字母O我看不懂那行附註的意思,誰幫忙翻譯一下|||
我的AC CODE 是讓零除了和自身對稱外也和O對稱
記得之前也有寫過一題是判斷迴文但不用管鏡射的,有人知道嗎?
知道的話麻煩告知一下…
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
秒殺題啊~~
看懂題目的時間比寫出AC CODE 還久
大意就是取亂數
抓兩數X、Y,在X乘上自然數N倍後除以Y取餘數,
所有可能取出來的餘數必須包含小於Y的所有自然數
例:X=3、Y=5,則可得到3、1、4、2、0,因此3、5滿足這條件
若X=5、Y=15則只能得到5、10、0,因此5、15並無法滿足此條件
這題看兩數的最小公倍數,最小公倍數=XY時才有可能滿足,
因為X*N=X、Y的最小公倍數時餘數會得到0,之後就循環了
所以這時的N就是可能出現的數字的數目
看懂了就秒吧,五分鐘應該夠
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2009/10/03 Sat 00:11:44
作者: sa072686 at 06/07/10
秒殺題又來了
三個字秒它
BFS
沒了,只是騎士走路的方式
寫BFS判定是否還在棋盤內時稍煩而已
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
又是一題秒殺題,不過沒中文的…
大致翻譯一下
讀入一個字串,並將它做不同的處理(加解密?看不太懂名詞…)
但都是從尾巴讀回來。若讀入為一串數字,
將其倒著讀入並轉成ASCII碼輸出
若為一字串(字串包含字元見題目表格)則倒著輸出其ASCII碼
且輸出ASCII碼時要倒著輸出(像A為65,輸出要變56)
詳見SAMPLE INPUT/ OUTPUT
注意:讀入的陣列請開大點,剛一直WRONG ANSWER就是信了它
「最長80字元」這行…討論版寫開到800多才夠,我是開900
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/10
破了45關了,棋譜都有保留
玩到後面會發現一看到題目,該先動哪隻都知道了|||
主要就是防落單跑不出來
其它慢慢體會就會玩出技巧,玩出技巧後解題很快
最高紀錄連五題走一次就過
約15題後題目沒難太多,該先怎麼動卻都了解了
後面該動的像邊緣的或是擋路的、幾乎唯一動法的動完後
觀察一下就知道怎麼跑了
基本上就是經驗…加上屬性相剋,有的一眼就看出怎麼動,有的…
也有一開始根本沒幾種起步法的,那種也很好過XD
解得順的話還蠻好玩的XD
距離收集完整棋譜:還有124-45=79張(好多…|||)
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:哪來的屬性相克阿? 冏rz 0711 00:38
→ sa072686 推:要想很久還看不出來怎麼走的 和 即使很複雜也一眼看穿的 0711 08:03
→ iling 推:呵 不錯不錯 很好很好 0712 12:35
作者: sa072686 at 06/07/11
小類似10443(雖然要做的事幾乎完全不一樣|||)
不過做法大致類似…
英文題照慣例翻譯一下
首先感謝gloompisces學長的翻譯
INPUT 會先給一個整數代表以下有幾組測資
接下來的每組測資間分別有一空白行隔開
每組測資會先給一整數代表要輸出到第幾天的情形
地圖大小固定是20*20
每天需用20個*隔開,每組測資中間加一空白行
詳見SAMPLE OUTPUT
OOO
OXO <==看週圍有幾個"活"的東西
OOO
若該格為活的,且其週圍有一格或更少的"活"的東西
則會因孤單而死
若週圍有四格或更多的"活"的東西
則會因營養不良而死
若週圍恰有三格"活"的東西
則該格會復活
//別管原因,管死活就好|||
蠻暴力的,不過建議可以多用我慣用的手法
像是OUTPUT常用到的連二十個*
開個字串陣列先存起來,需要時直接%S輸出就行
習慣性的我也會先開一個全為ASCII 32的字串陣列
這在歸零啦、需要前置許多空白(像這題"O"的前面)等等的處理很好用
//字串題越寫越熟,一些怪手法也越來越多了…
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:這題的INPUT有點小麻煩,若不想用字串讀又想不到方法 0711 17:47
→ sa072686 說:可以問我XD 目前有發現一招還能用%D讀的方式 不用字串 0711 17:48
作者: sa072686 at 06/07/12
新翻的二星題
雖然蠻接近秒殺題的,
不過有點小麻煩就是了…好寫但花時間
我的方法有點暴力,不知道有沒有人有更好的想法?
就是記年份被疊過的次數…基本上注意前面都有重疊到的年份就好
如果發現已經沒重疊就SCANF完後CONTINUE吧…|||
基本上不難寫,注意是<10000而不是<=10000就好(因為它我WA一次…)
不過大家應該會比我細心吧XD
--
TFCis 97th 教學
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/12
※ 本文轉錄自 [masnec] 看板
作者: masnec (小賢賢) 站內: masnec
標題: 一些不錯的網站
時間: 2006/07/04 Tue 01:41:45
這些是我曾經用過的
提供給學弟參考
大家加油^^~
-----------------------------------------------------------------
Lucky Cat
http://www2.dmhs.kh.edu.tw/
C++學習筆記
http://caterpillar.onlyfun.net/Gossip/CppGossip/CppGossip.html
演算法和資料結構
http://algorithm.diy.myrice.com/
大榕樹(演算法技巧)
http://www.mydrs.org/program/
演算法
http://www.cyut.edu.tw/~ckhung/b/al/
離散數學
http://www.cis.nctu.edu.tw/~is83039/discret/discrete6.html
查函式用法
http://www.cplusplus.com/ref/
http://www.cppreference.com/
Math World
http://mathworld.wolfram.com/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by masnec from 61.64.165.137 (所以內特)
φ sa072686 轉:從 [masnec] 看板,于 2006/07/12 Wed 08:20:37
→ ben196888 推:借轉 0131 19:11
φ ben196888 轉:到 [ben196888] 看板,于 2007/01/31 Wed 19:11:57
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/03/16 Fri 13:23:11
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:27:11
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:00:41
φ hkhs7821 轉:到 [hkhs7821] 看板,于 2011/11/20 Sun 09:42:54
作者: sa072686 at 06/07/12
接近秒殺題囉…有中譯
我一開始是被XOR之類的東西嚇到…|||
其實和那根本沒關係(應該說解題用不到XD)
排列組合就解掉了
遞迴排吧,記得先看長度加上'\0',
%S輸出很方便的,反正它固定長度
下一組測資長度如果比較長,則舊的'\0'會被蓋掉
比較短則舊的'\0'會被忽略(%S輸出到第一個'\0')
排列組合的題目我記得還蠻多的耶…
不過題號都忘光光了,如果有人記得可以提醒一下嗎?
可以的話想來整理一張類似題的表…
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/12
小麻煩的一題…
基本上只要會質因數分解和把一個數的各個位數相加
這題就OK了
兩種方法(我是用第一種)第二種只是猜測…
法一:暴力吧XD
記得,等於時不算,質數時也不算,因為質數一定符合
重點!!二也是質數,所以不算
剛就因為這個WA了幾次…
法二:建表吧,先把所有符合的數弄出來,然後二分搜尋…
沒試過,也不確定有幾組符合,臨時想到的小方法…
如果可行,就有法三了XD
禁忌的法三:
for(a=0;a<b;a++)
{
printf("c[%d]=%d;\n",a,c[a]);
}
設b為最後符合的有幾組,c陣列為符合的數…
接著怎麼做懂了吧?XD
嗯,不過我的暴力解法有點小慢,跑了0.553
有更快的做法麻煩指導一下吧XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:暴搜的定義不是這樣喔....|| 0712 14:10
→ sa072686 推:不然是@@? 解釋一下吧XD 0712 18:31
▲ sa072686 改@2006/07/12 Wed 20:41:29
作者: PG at 06/07/12
暴力指的是直接做
暴搜的話,通常是指用DFS搜尋過所有的可能..
--
╭──────╮ 享受解題的快感
靠腰,上課了啦 放開我 │ PG state │ 體會程式設計的奧妙
○︿_ 我還要寫ACM │A B C D E F │ 請至: http://acm.uva.es/p/
/友 ○/ 再一題 │ACACACACWAAC│ http://www2.dmhs.kh.edu.tw/
√\ 〈PG_ 再AC一題就好╰──────╯ 台南一中資訊社
╩ 7th廢渣 PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.129.206 (福爾摩沙固網)
→ sa072686 推:了解了,謝嚕 0712 20:40
→ sa072686 推:那用迴圈一個個算算看的話應該不是暴搜囉? 0712 20:41
→ PG 推:應該不是.. 0712 21:28
→ sa072686 推:了解…修正好嚕 0712 22:15
作者: sa072686 at 06/07/13
基本上也算是秒殺題
不過要看懂它排列的方式
這題是以插入的方式,所以不太一樣
而且輸入的順序會影響結果
插入的話我不會寫
不過從題目可以知道
用類似BUBBLE SORT的方法就可以順利做「插入」的工作了
很簡單的「交換」的動作就可以做完所有插入的可能
仔細觀察題目就可以知道為什麼要做「交換」的動作了
如果有更好的方法歡迎彼此交流
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: PG at 06/07/13
把之前發過的題號整理一下吧
然後貼在同一篇文章上
順便註明大致上的方法 XD"
--
╭──────╮ 享受解題的快感
靠腰,上課了啦 放開我 │ PG state │ 體會程式設計的奧妙
○︿_ 我還要寫ACM │A B C D E F │ 請至: http://acm.uva.es/p/
/友 ○/ 再一題 │ACACACACWAAC│ http://www2.dmhs.kh.edu.tw/
√\ 〈PG_ 再AC一題就好╰──────╯ 台南一中資訊社
╩ 7th廢渣 PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.130.168 (福爾摩沙固網)
▲ PG 改@2006/07/13 Thu 18:56:29
→ sa072686 推:會洗掉吧XD…嗯,我有空再整理一下 0713 19:00
作者: sa072686 at 06/07/13
題號 中譯 難度 解法 備註
101 有 中 暴力/建表 %C讀到可辨識即可換%D跳過
102 有 中 DFS 小麻煩的DFS
103 有 高 LIS/SORT 無
105 有 低 建表 三星是騙人滴
106 有 高 數學 無
108 有 極高 建表 無
111 有 高 很純的LIS 注意讀入格式
112 有 高 樹狀圖 事實上讀入才是真正難的地方
113 有 低 次方POW(); 注意浮點數誤差
116 有 高 建表 無
118 有 低 建地圖/座標判定 無
119 無 低 暴力 無
120 有 中 陣列的反轉 無
122 有 高 樹/字串 無
123 無 高 字串/排序 無
124 有 中 字串/排列組合 無
127 有 低 撲克牌/建表 小心PILE有沒有加S
128 有 高 十六進位 善用取餘避免OVERFLOW
130 有 中 圍圈圈殺人 小心順時針和左邊的意思
133 有 低 圍圈圈殺人 可能取到同一人/BOOL加總找第N人
136 有 高 找質因數僅2、3、5的 無
138 有 高 數學 無
142 有 低 迴圈硬解 注意點在視窗下時
145 有 中 暴力複雜麻煩題 耐心必備
146 有 中 字串排列組合 無
147 有 高 錢幣組合問題 小心浮點數誤差(我用0.5)
151 無 中 圍圈圈殺人 暴力即可
153 有 高 排列組合 無
155 有 低 平面座標 觀察
160 有 低 階層/質因數分解 無
161 有 中 暴力建表 無
167 有 高 DFS 類似於750
170 有 低 撲克牌/建表 注意讀入與發牌順序不合
191 有 高 平面座標 無
195 有 低 字串排列組合 防重複
200 有 高 字母排序 無
216 有 中 dfs 無
227 無 低 字串/建圖 注意指令可能跨多列
231 無 高 lis 無
245 有 中 字串/排序 陣列開9000足夠
253 有 中 方塊的翻轉 用平面翻
256 有 低 暴力 無
257 有 低 迴文 只需找長度為3、4之迴文
264 有 秒殺 數學 找規律,善用正負一
271 有 中 字串/遞迴 無
291 有 低 DFS 無
294 有 中 質因數分解/因數個數 無
299 無 低 BUBBLE SORT 無
305 有 高 圍圈圈殺人 易TLE
306 有 高 字串/找循環 易TLE
311 有 中 數學 無
324 無 低 大數/階層 無
332 有 高 數學 無
333 有 低 字串/建表 無
340 有 低 猜數字遊戲 無
343 有 低 進位制的換算 注意lucky貓最後一組測資
344 無 低 羅馬數字/建表 無
350 有 中 建表 無
352 無 中 bfs 無
355 有 中 進位制的換算 注意OVERFLOW、輸出的陣列要夠長
356 有 極高 數學 看討論版|||
357 有 高 錢幣組合問題 類似於147
369 有 中 數學/排列組合 注意OVERFLOW,善用約分
371 無 高 暴力 類似於100
374 有 極高 數學 見HINT
378 有 高 兩線交點/數學 注意浮點數誤差0.00001
382 有 低 因數分解 無
389 有 中 進位制的換算 無
392 有 低 多項式 無
400 無 中 字串長度計算/排序 需計算字串間的間隔/反白觀察空白的處理
401 無 中 字串迴文/鏡射 鏡射建表就好判斷了
402 有 低 圍圈圈殺人 無
406 有 低 質數表 無
408 無 秒殺 互質判定 無
417 有 中 暴力建表 無
422 無 低 二維圖找連績字元 無
429 有 高 字串/BFS 見鬼的第二名
435 有 中 遞迴 無
439 有 低 BFS 無
442 有 高 矩陣/遞迴 無
444 無 中 字串硬解 觀察可能出現的ASCII碼
447 無 中 二維陣列建地圖 兩張地圖互玩/只看週圍有O的列
450 無 高 字串/排序 bubble sort會tle
457 無 秒殺 建表 無
460 無 秒殺 平面座標 注意只卡到邊不算重疊
468 無 高 字串加解密/SORT 無
469 無 中 BFS 無
475 無 高 字串 無
478 有 極高 平面座標 注意浮點數誤差、落在邊上不算
487 無 極高 字串QSORT/二維圖 主要是字串的QSORT…其它DFS就行
493 無 中 分數約分/找規律 陣列請開超過500000
499 無 秒殺 計算字母出現次數 秒它吧XD根本就是一星題
534 有 高 最小花費路徑 無
536 有 極高 二元樹/前中序求後序 相同於10701
537 有 秒殺 字元/字串讀入 那兩顆星是多畫的吧
541 有 低 暴力 無
544 有 高 最小花費路徑 無
548 有 高 二元樹/中後序 無
562 有 高 可能的加總 無
575 無 秒殺 進位制處理 無
598 有 高 字串/排列組合 讀入麻煩
615 有 中 二元樹 無
624 有 極高 可能的加總與其組合 類似於562,需列出可能組合
628 無 低 字串/遞迴 注意超過1個零時
639 有 中 dfs 無
676 無 高 dfs/暴力 無
699 有 中 dfs 無
700 有 低 建表記錄/迴圈硬解 小心<10000
706 有 低 字串硬解 善用\0解決多餘空白問題
710 無 高 bfs 無
729 有 秒殺 排列組合 無
739 無 低 字串/暴力 無
748 有 高 大數 無
750 有 高 DFS 無
762 有 高 最短路徑 無
763 有 高 費氏數列 無
776 無 高 BFS 無
784 無 中 bfs 無
785 無 中 bfs 無
793 有 極高 DFS 類似於10583
834 有 秒殺 輾轉相除取商 小心除以零,分號不要看成冒號
836 有 高 最大矩形 類似於10074、10667
839 無 中 DFS 無
847 有 高 玩遊戲 沒想法請見gloompisces版
861 有 極高 dp 無
880 無 中 數學 用long long
892 無 秒殺 字串 無
10000 有 高 最長路徑 無
10007 有 極高 大數/樹 無
10009 無 高 路徑 只需一維陣列記錄唯一路徑
10010 有 中 建圖/字串 找字母的遊戲
10019 無 秒殺 進位制換算 無
10025 有 中 規律 注意k=0
10026 有 低 排序 以比例排序
10032 有 高 所有可能加總 注意人數限制
10034 有 高 最小花費擴張樹 無
10042 有 中 質因數分解/位數相加 小心2亦為質數
10049 有 中 建表 2000000000=673365
10063 有 低 字串排列組合 交換即可
10070 無 低 大數 無
10074 有 高 最大矩形 類似於836、10667
10099 有 高 最短路徑 無
10101 無 秒殺 單位 無
10112 有 低 暴力 無
10116 無 秒殺 地圖 無
10126 有 高 字串出現次數 無
10131 有 高 LCS OR SORT+LIS求解 無
10137 有 極高 數學 無
10147 有 極高 最小花費擴張樹 無
10154 有 高 lis/sort 無
10162 有 低 數學 無
10165 有 極高 二進位制/玩遊戲 無
10170 有 低 數學 暴力也不會tle(4sec)
10176 有 秒殺 二進位制/除法直式 無
10190 無 低 數學 無
10191 有 低 最長連續區塊 讀入小技巧請見該文
10213 有 極高 數學/大數 見gloompisces板
10220 有 低 大數乘整數 直接乘,進位就行
10223 有 高 暴力建表/樹 無
10226 有 極高 二元搜尋樹 無
10233 無 低 數學 無
10252 無 秒殺 最大相同字母數 無
10260 無 秒殺 字元 無
10279 無 低 踩地雷 無
10281 無 秒殺 物理 注意速度為時速
10282 有 極高 字串 易TLE,可以QSORT+二分搜尋避免
10293 無 低 字串長度 無
10303 有 極高 大數/樹 無
10305 有 高 拓撲排序 無
10323 有 秒殺 階層運算(?) 注意N<0時遞迴無法結束(無窮大)
10334 有 中 費氏數列/大數 費氏數列第N+1項
10338 有 中 排列組合/階層/約分 小心overflow
10368 有 中 玩遊戲 把自己當玩家思考怎麼贏就行了
10397 有 極高 最小花費擴張樹 無
10443 有 中 二維陣列建地圖 類似447
10452 無 低 DFS 無
10465 有 低 數學 小心測資3 4 5
10469 無 秒殺 XOR 要硬解也行||| 十行解決也行
10474 有 高 counting sort 會QSORT也可以解
10484 有 中 數學 小心n=0,d!=0
10491 有 秒殺 機率 小心1 1 0這組測資
10493 有 中 數學 無
10494 有 低 大數/除法直式運算 小心空白
10515 有 秒殺 大數(?) 大數讀法,取出必要部份存為整數
10533 有 極高 質數 易TLE
10573 有 中 數學 無
10579 無 低 費氏數列/大數 開1010夠用
10583 有 極高 DFS 以源頭為準,小心特殊情況
10608 有 極高 DFS 類似於793、10583
10622 有 中 數學 無
10642 無 低 規律 無
10667 無 高 最大相同矩形 類似於836、10074
10700 無 低 規律 無
10701 有 極高 二元樹/前中序求後序 相同於536
10703 無 低 建地圖 注意座標未必是左上右下
10714 有 高 規律 無
10719 無 低 多項式/綜合除法 無
10738 無 高 因數分解 無
10776 無 低 排列組合 無
10780 有 高 數學 無
10800 有 秒殺 字串硬解 善用\0解決多餘空白問題/GETS()讀入
10815 有 低 字串 qsort+防重複在0.2秒內跑得完
10820 無 高 數學 無
10852 無 中 質因數分解/數學 無
10854 無 中 dfs 小心並列的if
10856 有 極高 質因數分解/階層 0的答案是0!
10892 有 極高 數學 詳見gloompisces板
10894 無 秒殺 字串 無
10896 無 低 字串 無
10921 無 秒殺 字串 無
10925 無 高 大數加/除法 注意商<1
10930 無 中 所有可能加總 無
10931 無 秒殺 二進位制換算 無
10940 無 高 joseph/找規律 暴力易tle
10943 無 高 dp 無
10946 無 中 bfs 無
10949 有 極高 LIS LCS會TLE
10970 無 秒殺 數學 無
10992 無 高 大數 無
10994 有 中 規律 use long long
11015 無 高 多端最短路徑(kij) 無
11053 無 極高 joseph 易tle
11054 無 高 ? 暴搜易TLE
11056 無 中 排序 注意時間相等時名字排序不分大小寫
11057 無 中 兩兩相加 可以買同樣的兩本書
11058 無 低 加密 無
11059 有 中 最大連續相乘 以0為分界
11060 無 高 拓撲排序 其它依INPUT順序
11062 無 中 字串/qsort 注意'-'
11063 無 低 兩兩相加 注意需為自然數
11064 無 高 因數個數/互質數個數 注意1會同時出現於因數和互質數中
11067 無 中 建地圖 同825
11068 無 中 兩線交點 類似於378,無浮點數誤差
11069 無 高 遞迴 難推但不難做
11070 無 中 先乘除後加減 無
11074 無 秒殺 字串 善用strcat
11076 無 高 數學 無
11077 無 高 dp 無
11078 無 秒殺 暴力 無
難度看看就好,個人主觀感覺
//秒殺題有時「包裝」得很好…看穿了才能秒殺
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:推一個 0713 19:37
▲ sa072686 改@2006/07/13 Thu 22:28:45
▲ sa072686 改@2006/07/14 Fri 14:55:14
▲ sa072686 改@2006/07/14 Fri 17:20:09
▲ sa072686 改@2006/07/14 Fri 18:09:00
▲ sa072686 改@2006/07/14 Fri 20:20:09
▲ sa072686 改@2006/07/14 Fri 21:13:38
▲ sa072686 改@2006/07/15 Sat 16:03:15
▲ sa072686 改@2006/07/15 Sat 18:12:46
→ sa072686 推:因編輯而變長沒錢賺…||| 0715 18:15
▲ sa072686 改@2006/07/15 Sat 22:51:35
▲ sa072686 改@2006/07/15 Sat 22:52:47
▲ sa072686 改@2006/07/15 Sat 22:53:38
▲ sa072686 改@2006/07/15 Sat 22:55:35
▲ sa072686 改@2006/07/15 Sat 22:57:26
▲ sa072686 改@2006/07/16 Sun 16:12:31
▲ sa072686 改@2006/07/16 Sun 16:44:45
▲ sa072686 改@2006/07/16 Sun 17:04:46
▲ sa072686 改@2006/07/16 Sun 18:16:38
▲ sa072686 改@2006/07/17 Mon 21:23:15
▲ sa072686 改@2006/07/17 Mon 23:35:19
▲ sa072686 改@2006/07/18 Tue 18:26:47
▲ sa072686 改@2006/07/19 Wed 17:12:56
▲ sa072686 改@2006/07/19 Wed 19:02:40
▲ sa072686 改@2006/07/19 Wed 20:49:55
▲ sa072686 改@2006/07/19 Wed 23:04:15
▲ sa072686 改@2006/07/20 Thu 13:04:08
▲ sa072686 改@2006/07/20 Thu 14:25:47
▲ sa072686 改@2006/07/21 Fri 20:18:54
▲ sa072686 改@2006/07/22 Sat 08:40:08
▲ sa072686 改@2006/07/22 Sat 09:43:20
▲ sa072686 改@2006/07/22 Sat 10:18:15
▲ sa072686 改@2006/07/22 Sat 11:57:41
▲ sa072686 改@2006/07/22 Sat 12:38:47
▲ sa072686 改@2006/07/22 Sat 13:35:04
▲ sa072686 改@2006/07/22 Sat 19:11:19
▲ sa072686 改@2006/07/23 Sun 23:00:49
▲ sa072686 改@2006/07/25 Tue 16:38:23
▲ sa072686 改@2006/07/25 Tue 16:43:12
▲ sa072686 改@2006/07/25 Tue 22:36:33
▲ sa072686 改@2006/07/26 Wed 18:17:44
▲ sa072686 改@2006/07/30 Sun 08:37:53
▲ sa072686 改@2006/07/30 Sun 08:39:26
▲ sa072686 改@2006/07/30 Sun 08:41:20
▲ sa072686 改@2006/07/30 Sun 08:43:35
▲ sa072686 改@2006/07/30 Sun 08:44:48
▲ sa072686 改@2006/07/30 Sun 14:59:54
▲ sa072686 改@2006/07/31 Mon 15:46:39
▲ sa072686 改@2006/07/31 Mon 16:01:50
▲ sa072686 改@2006/07/31 Mon 18:43:20
▲ sa072686 改@2006/07/31 Mon 18:44:48
▲ sa072686 改@2006/07/31 Mon 19:07:15
▲ sa072686 改@2006/07/31 Mon 19:18:54
▲ sa072686 改@2006/07/31 Mon 23:33:42
▲ sa072686 改@2006/08/01 Tue 00:26:02
▲ sa072686 改@2006/08/02 Wed 18:14:52
▲ sa072686 改@2006/08/02 Wed 18:15:19
▲ sa072686 改@2006/08/02 Wed 18:42:29
▲ sa072686 改@2006/08/04 Fri 21:17:13
▲ sa072686 改@2006/08/05 Sat 11:54:57
▲ sa072686 改@2006/08/05 Sat 15:51:16
▲ sa072686 改@2006/08/05 Sat 18:05:09
▲ sa072686 改@2006/08/05 Sat 18:56:54
▲ sa072686 改@2006/08/05 Sat 21:02:25
▲ sa072686 改@2006/08/05 Sat 23:13:21
▲ sa072686 改@2006/08/06 Sun 19:10:21
▲ sa072686 改@2006/08/06 Sun 19:11:47
▲ sa072686 改@2006/08/06 Sun 19:39:50
▲ sa072686 改@2006/08/06 Sun 20:49:42
▲ sa072686 改@2006/08/06 Sun 21:28:23
▲ sa072686 改@2006/08/08 Tue 15:58:24
▲ sa072686 改@2006/08/08 Tue 20:48:10
▲ sa072686 改@2006/08/10 Thu 18:33:37
▲ sa072686 改@2006/08/10 Thu 19:40:46
▲ sa072686 改@2006/08/10 Thu 23:19:40
▲ sa072686 改@2006/08/11 Fri 17:11:10
▲ sa072686 改@2006/08/12 Sat 00:05:45
▲ sa072686 改@2006/08/12 Sat 20:46:29
▲ sa072686 改@2006/08/14 Mon 22:19:03
▲ sa072686 改@2006/08/15 Tue 00:39:14
▲ sa072686 改@2006/08/15 Tue 12:41:11
▲ sa072686 改@2006/08/16 Wed 00:24:33
▲ sa072686 改@2006/08/16 Wed 09:34:20
▲ sa072686 改@2006/08/18 Fri 20:18:26
▲ sa072686 改@2006/08/20 Sun 00:19:22
▲ sa072686 改@2006/08/24 Thu 22:15:11
▲ sa072686 改@2006/08/25 Fri 00:43:28
▲ sa072686 改@2006/09/07 Thu 18:34:55
▲ sa072686 改@2006/09/07 Thu 18:53:59
→ chensc 推:推推推 XD" 0306 10:43
作者: sa072686 at 06/07/13
題號 難度 解法 必備能力 備註
100 低 迴圈硬解 基本語法 無
272 秒殺 字元判定 字元的相等 以SCANF讀入%C時除"外都直接輸出
458 秒殺 ASCII碼運算 對ASCII碼的基本了解 CHAR亦為整數型態,直接運算可
476 中 座標運算 浮點數/平面座標 看座標就能判定是否落在正方形中
477 難 座標運算 同上 同上+用距離公式計算
488 秒殺 迴圈硬解 基本語法 無
494 秒殺 字元判定 ASCII碼 依題意解,換行便輸出
579 低 浮點數運算 浮點數/角度 以%.3F輸出
591 秒殺 陣列計算平均 陣列的加總 算出平均後一個個處理再加總
10018 難 整數反轉/迴文 整數反轉/迴文 迴文以字串看,相加以整數加
10035 中 取各位數相加 進位判斷 注意像是1+999這類數字
10038 中 陣列的相減 絕對值 無
10055 秒殺 取絕對值 絕對值 用DOUBLE
10062 低 字元計數 ASCII碼/陣列計數 歸零
10071 秒殺 國中物理 國中物理/基本語法 事實上就是輸出2VT
10082 低 字元陣列 建表/循線搜尋 可另撰一程式協助建表
10107 難 排序 任一排序法 讀入一次排序一次
10141 極難 排序 字串讀入/任一排序法 仔細看就會發現需讀入字串數都有給
10209 極難 數學公式題 數學公式 見262篇
10222 低 同10082 同10082 同10082
10300 低 同10071 同10071 10071麻煩版,試著化簡
10340 中 字元比對 字元比對 以CHAR讀入並計字串長度即可
10370 中 取平均/比對 陣列加總/浮點數運算 以%%來輸出%符號,%C指定ASCII也行
10473 難 十/十六進位 取餘數/判定幾進位數 以%X可輸出十六進位數
10499 秒殺 公式 公式(N*25 %) 1例外,用LONG LONG,%的輸出同上
10550 中 角度運算 角度運算 小心轉的方向
10589 中 類似477 判定是否在圓內 無
10673 難 數學 數學 詳見該文
10696 難 自定函式 函式 照題目定函式即可
10783 秒殺 迴圈硬解 基本語法 無
10789 極難 質因數分解 陣列計數/質因數分解 善用SQRT()開根號(需MATH.H)
10812 秒殺 奇偶判斷 奇偶判斷/和差公式 無
10878 難 二進位運算 二進位運算/字元讀入 做二進位運算,再以此為ASCII輸出
10903 難 字元判定 浮點數/字元判定 %S讀入,基本上看首字便夠判斷
10924 極難 質因數分解 質因數分解/ASCII 先對ASCII處理後再加總
10929 中 大數 字元讀入/11倍數判斷 一加一減可以消掉ASCII多出之48
11059 極難 暴力 暴力 不像一星,請參考198篇
難度…參考就好,考慮了複雜、使用的語法難度(有用函式會較高)
以及必要能力(質因數分解等較高)、題目好不好看出解法等等
而且那是題目相對而言,如果是高手的話,大概沒幾題不是秒殺了
參考用,很多東西都不是唯一解法
習慣上一星題我都用%C讀入,大部份反而方便
一星題也沒什麼好講的,就直接建表就好…
二星以上或英文題才有一題一篇文章XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/22 Sat 10:20:37
▲ sa072686 改@2006/07/31 Mon 20:27:29
▲ sa072686 改@2006/08/05 Sat 20:58:20
▲ sa072686 改@2006/08/16 Wed 09:35:49
▲ sa072686 改@2006/08/16 Wed 09:36:13
▲ sa072686 改@2006/08/17 Thu 00:24:20
φ ben196888 轉:到 [ben196888] 看板,于 2007/06/08 Fri 03:23:42
→ newmoon 推:以前不是這樣嗎? 1106 20:12
φ r51303 轉:到 [r51303] 看板,于 2007/11/09 Fri 23:13:57
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:26:39
φ brucehsu 轉:到 [brucehsu] 看板,于 2008/09/19 Fri 09:20:03
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:00:30
φ blackjack 轉:到 [blackjack] 看板,于 2009/09/28 Mon 16:06:01
φ blackjack 轉:到 [blackjack] 看板,于 2009/11/05 Thu 00:50:23
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:28:47
→ aszx87410 推:借轉謝謝~ 0115 20:08
φ aszx87410 轉:到 [aszx87410] 看板,于 2010/01/15 Fri 20:08:21
φ txs 轉:到 [txs] 看板,于 2010/04/24 Sat 22:27:36
→ sb283 推:借轉~ 1007 12:57
φ sb283 轉:到 [sb283] 看板,于 2010/10/07 Thu 12:57:45
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:37:01
作者: sa072686 at 06/07/13
題目…
嗯,我很想說I HATE BIG NUMBERS…
基本上就是算N階層後各個位數數字的總和
用大數吧…我是用大數去乘上整數,這題還算仁慈,
不用大數相乘…
而且大數在各個位數數字相加上還蠻方便的
硬解就行了
我是把結果先算好並存起來,不過如果測資少的話
直接讀入再算或許會比較快||| 沒試過不確定…
不過,跑0.1好像有點慢?前面一堆0.000的耶…
如果有更好的解法麻煩指導一下 ^^"
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/14
終於AC了(其實是PE)
因為沒有中譯…小翻一下
感謝gloompisces學長的翻譯及masnec學長的指導
給定一個數字代表以下有幾組測試資料
每組測試資料包含一個整數N,之後的N列每列有N個字元
對這N^2個字元找出所有可能的字串
方法:從任一字元出發尋找相鄰的八個字元
找出所有長度介於3和N^2之間的字串
其中ASCII碼必須是遞增的,相等也不行
之後將所有符合條件之字串依長度小到大、ASCII碼小到大排序並輸出
如果沒有任何符合條件之字串,則不輸出任何東西
由於要用QSORT對字串做排序,很難的題目
取字串用DFS就OK了
QSORT和字串排序等等PO
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/15 Sat 16:44:19
作者: sa072686 at 06/07/14
#include<stdlib.h>
int abc(const void *x,const void *y)
{
if(*(型態*)x<*(型態*)y)
{
return -1;
}
}
qsort(ary,size,sizeof(型態),abc);
return -1時會將前面的擺在前面
return 1時會將後面的擺在前面
所以現在是由小到大排序
把大於小於換掉就變成由大到小了
x和y互調也可以…
簡單地說,令*(int*)x=a,*(int*)y=b
回傳-1表示a要擺在b前面
回傳1表示a要擺在b後面
因此若a<b時return -1
表示a<b時a放b後面(a比較小,所以由小排到大)
若是a>b時return -1
表示a>b時a放b後面(a比較大,所以由大排到小)
回傳0則表示維持原狀
交換的式子可以自定
所以連字串都可以拿來交換…
用結構則可以一次交換很多個
例如字串加上整數的排序
typedef struct abc
{
int a;
char b[10];
}abc;
abc k[100];
int abcc(const void *x,const void *y)
{
if((*(abc*)x).a<(*(abc*)y).a)
{
return -1;
}
else if((*(abc*)x).a==(*(abc*)y).a)
{
int p;
for(p=0;p<strlen((*(abc*)x).z)&&p<strlen(*(abc*)y).z;p++)
{
if((*(abc*)x).z[p]<(*(abc*)y).z[p])
{
return -1;
}
else if((*(abc*)x).z[p]>(*(abc*)y).z[p])
{
return 1;
}
}
return 0;
}
else
{
return 1;
}
}
qsort(k,100,sizeof(abc),abcc);
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/17 Mon 20:18:09
▲ sa072686 改@2006/08/07 Mon 17:09:58
作者: sa072686 at 06/07/14
還不算太難寫…
沒有中文,小翻一下
感謝gloompisces學長的翻譯
基本看圖應該就可以了解
注意分數必須約分,且分母不得為零(需跳過)
分數不得重複(像4/2和2/1算重複需跳過)
並且分母不得為負(像是1/-2必須輸出-1/2)
輸入有可能大到500000(我試過400000,RE…)
所以大方地開吧XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/14
一樣是英文的
不過根本就是一星題程度…
感謝gloompisces學長的翻譯
對每一個字串
輸出出現最多次的字母及其出現次數
輸出順序按照ASCII碼大小
就這樣…|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/14
還不難寫,就圖中找指定的字串而已
沒有中譯,小翻一下…
只有一組測試資料
給你一個整數N,1<=N<=100,代表以下有N列,每列N個字元
接下來有少於一百組的字串,每個字串長度小於一百
對每個字串輸出該字串在圖表中出現的位置
必須能找到水平、垂直或斜向連成直線才算
不會直的接橫的,或是環繞等等
輸出格式為起點座標及終點座標
每字不會在圖表中出現超過一次
若讀到一列只有單獨一個"0"代表輸入結束
很好找的,不難,可以試試
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/14
小類似10220,不難
沒中譯題,小翻一下
給你一個小於等於366、大於等於1的數,
輸出N!共有幾個0~9的數字
366!共有781位數字
格式請見SAMPLE OUTPUT
事實上這題我只看SAMPLE INPUT/OUTPUT猜題意…
不知道有沒有更快的方法,用大數跑0.016結果破千名…
有的話麻煩指導一下囉
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/14
蠻暴力的…|||
只要分別記下每個積木所在位置
配合整張表就很好做了
如果在建表時記下每堆的高度
會比較方便,其它…
建議可以用字元讀就好,讀到可以辨識的部份後
換%D讀吧,會跳過字元的部份
好像沒什麼好講的耶,就複雜加麻煩而已|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/14
這題老實說…
我在挖出滿佈蜘蛛網的CODE後已經認不得它了|||
大致的想法就是DFS吧
因為是字母順序,就按字母順序遞迴吧
遞迴存到最後也可以用字串輸出
感覺上即使用DFS還是會有點小暴力
可以先把第一組(BCG)的搬移數存起來
比對搬移數,比較少時用新的疊掉
應該還不太難,好久前寫的了,這次看是重新思考
太久了,認不得它了,反正也不是個太好的方法
很久前寫的CODE現在都會看不下去
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
雖是三星但好寫
開一串陣列存高度就行了,再在產生變化的地方輸出
所以對INPUT基本上就是畫一畫就行了
被蓋掉的地方不要畫就好
單純…感覺像二星題
甚至覺得有些一星題比它難些|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
跑了9.X秒的東西,不知道為什麼一樣的方法我的慢那麼多|||
用A^2-B^2、2*A*B、A^2+B^2可以找到所有互質數對
其它像是9、12、15湊不出來,會湊出A=12^0.5、B=3^0.5
不過它們不會是互質數對
找出互質數對再用倍數方式求出來就行了
開BOOL陣列存用過的數字吧
建議初始值設1,用過的設0
這樣把BOOL陣列從頭加到尾答案就出來了
注意:題目寫最大到1000000,實際上卻是5000000
怎麼好多題都這樣|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
如果會LIS其實很簡單
不過要小心讀入的格式
其它就沒什麼要注意的了
主要是LIS會不會用
…感覺沒什麼內容的一篇
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
讀入非常煩的一題…
解之前先細心研究一下該怎麼解決讀入的問題
如果讀入會了,基本上以它INPUT的格式要求總合很簡單
這題我是用遞迴寫
觀察吧
此外,數字也要使用字元來讀入
因為用%D會跳過太多東西
再來注意幾乎INPUT的任何地方都可能有空白和斷行
注意要忽略它們
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
如果會寫的話這題可以算秒殺題
POW(A,B);
這語法是把A做B次方
用DOUBLE輸入,%.0F輸出就可以只輸出整數部份
不過記得要把結果加上0.001防止小數點的誤差
至於誤差怎麼算?為什麼有誤差?
我也不知道|||
//提示:開根號=做1/2次方
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
很簡單的一題,只是有點暴力
就開一張地圖,把機器人放上去
放好後照指示讓它走
反正地圖不用特別標記什麼
就拿來標掉下去的機器人吧
多利用取餘判斷方向
像如果拿1、2、3、4分別代表面向東、南、西、北
那麼除以二取餘數後,0代表南北向,1代表東西向
這樣要做前進判斷就方便得多
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
翻面,看起來很複雜,事實上不難…
直覺性地翻就行了
注意右邊是在下面的
方法很簡單
想辦法把大的一個個翻到最下面
讀入的部份很好解決,小技巧:
使用%D%C,之後看%C是否為'\0'(或是ASCII碼10)
就知道是否為讀入結束了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
暴力題,不過規則簡單
照規則來就行
主要是建表比較麻煩一點
因為碰上空的要略過
既然空了就不可能再有牌放上去了
看是要用迴圈,找到非空堆才算
還是乾脆點把空行遞補掉
反正這規則還算簡單,照敘述解就可以了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
蠻難的一題
而且並非是單純的ASCII碼相加
這看SAMPLE INPUT的說明就知道了
事實上這題完全不用用到二進位制
直接拿十進位算就行了,最後輸出轉十六進位
我是用了一個小方法
開一個長度15的字元陣列代入字元'0'、'1'、…、'E'、'F'
輸出時就方便得多
避免OVERFLOW的方法就是善用取餘數,取完餘數後再乘,
和乘完後再取餘數是一樣的結果
當然不可免的還是要用上LONG LONG
不過如果餘數用得多,可以試試UNSIGNED LONG,執行上會快不少
好好計算怎麼利用最少的餘數來寫吧
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
這題因為是圍圓圈
所以只要把I=1的結果算出來後
看存活者的編號就可以推出答案了
其它只要注意一下「左邊」和「順時鐘方向」的關係就行了
看例子研究一下就可以了解了
不過編號會錯亂,所以只能硬找囉
感謝Masnec學長的指導
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/15 Sat 16:43:29
作者: sa072686 at 06/07/15
和130有點類似的一題
事實上也不難,不過要注意他們有可能選中同一人
基本上和130很像,不過因為編號不會錯亂掉
所以有一招可以用
開BOOL就行了
初始值全設為1,然後開始加總
要找N個人就加到N為止,那人就是第N人
之後把它設成0,這樣就不會重複了
算是我常用的小技巧
(雖然我寫這題時還開INT陣列…)
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
可以偷吃步的題型
就是如果事先算出這值,再輸出的話…
不過其實效率夠的方法還是可以跑0.000
然後…應該不會有人笨到像我一像WA的吧?
就是真的把算出來的數字夾在<和>中間…
解法:開一長串陣列,起頭K[0]設為1
之後以2、3和5下去乘,看哪個乘起來比較大且和陣列末不重複
就代哪個,之後把指標移向陣列下一個元素
例:2*1<3*1<5*1,則K[1]=2,再來3*1<2*2<5*1,所以K[2]=3
再來2*2<5*1<3*2,所以K[3]=4,再來…
小心重複就行
感謝Masnec學長的指導
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/15 Sat 16:42:50
▲ sa072686 改@2008/03/03 Mon 23:03:01
作者: sa072686 at 06/07/15
基本上也是可以作弊的題型,先算出答案再輸出…
至於長度N且靠右對齊的方法嘛…
COUT請去問其它高手|||
SCANF的話只要把%D換成%10D就行了
解法:從SAMPLE開始
6、8,兩邊是1+2+3+4+5=7+8
接著看9時是1+2+3+4+5<7+8+9
改成1+2+3+4+5+6>8+9,再來1+2+3+4+5+6<8+9+10
往下,依此類推
感謝Gloompisces學長的指導
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
這是個極端暴力的題目
基本上…是不難啦,但有點小(?)複雜加小(?)麻煩
有到隔天的建議分屍算
先算第一天到結束的部份
再算隔天的部份
先把小時換成分可能比較方便
花費建表就行了,用陣列直接代數字取值
會比IF要好得多
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
有點看不出來陣年的老CODE到底在寫什麼了|||
看完之後的想法應該是
找找看從哪個字元開始後面ASCII碼完全為「非遞增」的情況
將它重新排序吧
當全為「非遞增」時,表示已經無法再更動,
必須更動這字元之前的那個字元了
當然若從第一個字元開始就是「非遞增」的話…
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
錢幣的問題
不太好想
基本上,可以先把可能的面額開成一個陣列
取值比較方便
解法:舉個例,有一、五、十三種面額
那麼10=1*10=1*5+5*1=5*2=10*1 四種組成方法
在一元時當然不用說,大家都只有一種方法:1*N
在五元時,我們知道10=5+5,因此10可以用「一個5元」加上「5元」組成
然而5元有兩種組成方法:1*5和5*1
所以10元多出了兩種組合方法
在10元時,我們知道10=10,因此再多一種方法,共四種
再以9元為例
9=1*9=1*4+5,共兩種
1元時只有1*9,一種
5元時,9元等於「一個5元」加上「4元」,而4元只有一種方法
因此9元又多了一種方法,10元太大,因此9元只有兩種方法
此外,小心浮點數的誤差
感謝masnec學長的指導
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/15 Sat 18:13:34
作者: sa072686 at 06/07/15
沒中譯題,小翻譯一下
給你一個N,你必須找出M等於多少時,
最後可以剩下13
規則見範例就可以懂了
基本上這題我沒什麼想法,
我是暴力硬解的
如果有比較好的方法麻煩指導一下,謝謝
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
簡單的一題
基本上就從中心點開始照著畫正方形
然後判斷是否被包含就好了
事實上不用畫到滿滿的正方形
(其實也不用畫上去|||,座標判斷就行了)
只要管可能包含該點的正方形就好了
而且除了K=0以外,也有許多情形可以做為停止的條件
我是覺得還不太難
這題好像是暑訓第一天AC的三題之一|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
應該沒人會想到要暴力算吧|||
即使使用大數,那要質因數分解也很困難
只要把<=N的所有數字質因數分解就行了
更懶一點的可以建表
把結果全部存起來就行了
這樣可以省掉不少不必要的動作
只要做一次100!
表就建完了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
又是撲克牌,不過這題不難
只是題目會騙人,所謂「發牌的順序」那個不要理它
根本就是騙人的
最左邊是K的牌,再來依序遞減到1
第一列是最上層的牌,一直到第四列是最底層的牌
把這邊解決後就很簡單了
也不用真的笨笨的把翻開的牌給擺到那堆底下去
至於輸出的部份,補零的方法為
%02d
%2d是長度為2,靠右對齊,前面加上零就代表不足的地方補零
如果不加就是補空白(ASCII碼32)
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/02/20 Wed 08:16:50
作者: sa072686 at 06/07/15
簡單的字串排列組合,問題只在字元次序問題
這題不依ASCII碼排序,而是AaBbCc…YyZz
嗯,這題我的做法是
讀入後先建一張表記錄下它們的大小
用ASCII碼加點小運算就行了
再來依這張表排序而不依原先的ASCII碼
保留ASCII碼的原因是方便輸出
接著把排序好的字串依一般排列組合的方法遞迴解就行了
只要防重複即可
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/15
200內的都整理好了耶
好多喔|||
那整理400~500的時候不就…囧TZ
分佈極端不均啊~
題目中主要是講到一些我解題時習慣用的小技巧
和大致的方向,難題才會附上解法
(所謂的難題差不多就是不問學長不會寫的|||)
如果有什麼好解法或是方便的小技巧歡迎分享^^
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:有點想把那兩張整理的表置底耶,要怎麼弄呀? 0715 17:59
→ etetet91 推:底線"_" 可以置底。 0715 18:02
→ sa072686 推:知道了,謝嚕(竟然有人在看我的版,感動XD) 0715 18:14
→ PG 推:嘖 我不是人嗎? 0715 19:53
→ gloompisces 呸:看來我也不是 0715 21:12
→ gloompisces 推:按錯.... 0715 21:13
→ gloompisces 推:補回來 0715 21:13
→ sa072686 推:原來你們有在看XD 怕進來清一色ACM會嚇跑人 0715 22:50
→ etetet91 推:就是因為都是ACM才進來看... 0715 23:20
→ sa072686 推:XD 原來 0716 12:46
→ ducksteven 推:因為置底符號是★,所以你按 * 也可以置底XD 0716 19:24
→ sa072686 推:原來,謝謝學長 0716 20:28
作者: sa072686 at 06/07/15
很簡單的一題
只要判斷長度為3和4的就行了(中譯題的提示)
原因是包含在別的迴文中的不算
例:AMAMA,那麼MAM包在AMAMA裡所以不算在內
BACCAB,ACCA包在BACCAB裡所以不算在內
所以呢…結論:
長度奇數的迴文必含有長度3的迴文
長度偶數的迴文必含有長度4的迴文
而包含不算,所以只要看長度3和4就好了
其它長度不用理它
%S讀入解決一切多餘空白的問題
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/16
終於AC了,這題卡好久
感謝gloompisces學長版上的解說及測試資料
不過,見鬼的12名…
也RE蠻久的|||
我是先開一個陣列,代表每一個人所指向的人的編號
初始值我設為-1,等等解釋
讀入我會先看大小排序
之後如果兩個人都沒指向任何人,就把大的指向小的
如果兩個人都有指向某人的話
先往下找到最初的源頭
也就是說如果指向的人還有指向別人,就往下找下去
然後比較源頭的大小,把兩個源頭中比較大的指向小的源頭
之後把源頭大的那邊指向小的源頭
例:7=>5=>3=>2和8=>4=>1
找源頭時我會順便把8指向1,7、5、3指向2
再來2>1,所以2指向1,接著把7也指向1
若其中有人沒有指向,另一人有
我是先找出有指向那人的源頭,若源頭小於沒指向那人
則把源頭指向沒有指向那人
反正就是看源頭就對了,我是統一指向小的
如果都沒有指向就把大的指向小的
接著總檢查的時候
把每一項都指回源頭看看,同時把經過的路一起指向源頭
然後把計數用的變數減去源頭的值(原本為-1)
減去負一就等於加一了
再把源頭設為0,再找
這樣子以後再找回這源頭就會變成減零(不影響)
沒有指向的人自身的值就是-1,就把自身當源頭
這樣子最後出來就是正解了,只要小心特殊情況就行
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/16
像一星題的三星題
秒殺啊~
只要用P=IV就全解決了
如果用字串讀入,因為數字有浮點數,所以很煩…
所以用字元吧,字元很多時候比字串方便
因為INPUT的額外說明(事實上這是我覺得最關鍵的部份)
只要讀到等號,看等號前面那個字,再用%LF讀後面的數字就好了
之後再讀看看有沒有m、k或M就行了
不過字串也有它的好用,那就是…
讀完兩個浮點數後就可以用GETS讀完後面無關緊要的部份了
計算上應該不用講了,P=IV解決
用%.2F輸出就行了
我寫過幾乎最簡單的三星題(105好像贏了XD)
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/16
幾乎和10583一樣的方法
只要找回源頭,源頭相等就是可以求出答案的
好像也沒什麼要注意的
感覺似乎簡單了不少
或許是方法懂了吧
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/16
和793、10583非常類似(幾乎都是用同樣的方法)
連寫第三題,所以一下下就AC了|||
這題我把10583的方法稍微變了一下…
因為要算最大集合,所以我把初始值定為0了
接下來只要每次找回到某個源頭
就把這源頭減一
然後把最少的給記下來
乘以負一還原回去(用零減其實也可以|||)就是答案
今天第四題…
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/16
有點小暴力
我是按規則讓它遞迴跑
最後看回傳值和有沒有找到字串底就行了
從SAMPLE INPUT可以推得
若同時存在兩個語法正確的句子在句子中
則此句子不成立
句子必須只包含單一語法正確的句子
因此即使語法正確,但沒有找到字串底的話
那也不算是個正確的句子,因為必含有超過一個句子
詳細看SAMPLE INPUT推吧,都正確的話幾乎就是正確了
有中譯的題目好像SAMPLE INPUT大多比較多
比較能看出是哪裡錯,像這題我覺得測試資料蠻完整的
也包含不少比較刁難的測試資料
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/17
之前完全寫不出來的題目
這次一寫就過了
就差在現在會了qsort |||
把bubble sort換掉就過了…
如果會qsort其實這題跟一星題沒兩樣
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/17
說穿了就是費氏數列
輸出第N+1列就行了
//其實是今天翻了十幾頁的書剛好有看到
不過要用大數解
其它…嗯,沒了
注意0的情況就好
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/17
大概被一些要輸出組合方法的嚇多了|||
事實上這題以前就寫過類似題了
開個BOOL陣列把可能出現的結果全部存起來
再找離所有錢幣相加除以二最接近的就好
話說我剛剛竟然WA在很天才的地方
除以二後因為後面捨掉了,所以公式B*B-I有小於一的可能…
//B為大於I/2最大的可能,I為所有錢的加總
然後就在除以二之後加一,變成整除時無法找到零這個可能…
後來改成I/2+I%2,解決…
嗯,這題也是之前問過學長類題才會
照慣例PO一下解法…感謝gloompisces學長的指導
開一串BOOL陣列(雖然之前是開INT |||)
把首項設為1,其它設為0
之後對每次的讀入A都在陣列中尋找一次
一旦在N找到1就把N+A設為1(事實上我因為忘了N+A可以大於50001而RE過|||)
一直把全部找完,如此讀入結束後只要從I/2+I%2開始找就行了
//如果用B--找其實I%2是可以省略的,用B++找的再加上去|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/17
這…好久沒寫過這麼短的CODE了
十行
基本上就是XOR(應該沒記錯吧?)
可以用二進位暴力,也可以…
嗯,翻書吧XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/17
終於AC了,限制真多啊
方法有點白痴加暴力…
如果有更好的方法請指導一下
基本上是用和562完全一樣的方法
只差要把所有的組合記錄下來
我是另開一個陣列在找的時候把該數字給存下去
如此便可得到組合了
但是還有個問題就是注意CD上不能有超過二十首歌
因為我是用蓋的,就是找到K[N]=1時把N+A的所有組合疊掉,
再放上A,不過這樣寫有超過二十首的可能,
我的解決方法是再來一個陣列存所有歌的最長長度
如果最長長度超過就蓋,沒超過就不蓋
這樣就可以避免超出二十首了
其它請看562那篇,除了以上所說的東西以外方法差不多
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ peter50216 推:其實直接DFS就會過了(茶) 0210 21:12
作者: sa072686 at 06/07/18
簡單的一題
不過注意,並沒有依照時間排序
所以不能夠依讀入順序來寫
我是開BOOL做處理,然後找最長的連續的區段
每個人方法不太一樣
我是錯在這組
1
10:00 17:59 123
我的跑出2MINUTES,後來才發現忘了設限|||
不過寫法不一樣就不一定會發生這問題了
讀入的部份我試過只用純%D讀,看來%D只能跳空白和斷行
只好乖乖把字元給讀完
可以用%D%C%D來讀HH:MM的部份 空格不管它 再用一次
之後反正不用管理由,GETS直接讀完就好不用處理
輸出部份在時間上可以使用%02D來輸出分的部份
如此一來在分的長度為1時會以0補齊到長度2
例:PRINTF("%02D\N",0);
會輸出00
COUT?別問我|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
解掉這種題目比較開心XD
這個純考思想不考演算法等等的
不過如果把想法貼出來好像就不好玩了
暗示一下,大家自己想吧XD
就是…
啊啊,怎麼想都是那種講了就會懂了那種|||
這樣好了,想辦法讓對方沒有彈性
也就是只能乘以一
不然會翻盤
再來就是考慮到結局,在能乘以一以上時控制住局面
把自己當玩家,看怎麼樣才會贏吧
抓到機會就卡死對方,讓對方永遠只能乘以一,無法翻身
那這局就是你贏了
好像講得很白XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
終於AC了,竟然是忘了拿檢查碼|||
囧TZ
解法和476、477相似
只是再比477多個三角形
三角形的話,若D點在三角形ABC中
則若ABD+ACD+BCD=ABC,D點必在ABC中
面積交給海龍公式吧,雖然那寫起來要整頁…
因為還得先用距離公式算出三邊長
至於浮點數誤差方面就把面積用減的
面積相減後絕對值在1E-6內就算是相等了
另外注意剛好掉在邊上也不算在圖形中
所以ABD、ACD、BCD中若有一個面積<=1E-6的話
那也必須算是掉在邊上
其它圓和方都很簡單,就不再多說了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
這題有點小奇怪
我用DFS結果WA好久…
後來用masnec學長的方法改寫一下就AC了
感謝masnec學長的指導
字母順序判斷還蠻簡單的
讀入解決後先找到起點
然後把起點和所有起點連出去的線都砍掉
砍完會出現另一個起點,再砍
砍到沒得砍為止
如此便可解決
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
字串題
讀入我是覺得用字元比較方便
每讀入一個單字便處理一次
若出現過就把位置調到第一個
若沒出現過就加在開頭的地方
我是使用類似BUBBLE SORT那種交換的方法來調整位置
其它只要注意大小寫視為相異、讀到數字則該字串要擺到最前面
因此我把開頭放在陣列的尾巴,這樣比較方便
陣列開到9000足夠
其它就暴力吧,注意如果要把讀入的單字當作字串處理
記得在後面加上'\0'
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
有點小麻煩又小暴力的一題
用方塊翻轉自然不好思考
也不好做翻轉動作
可是如果把它拆成平面圖,如下:
█
████
█
之後就可以發現翻轉其實很簡單
先固定一個,然後翻另一個
看能不能翻轉成固定的那個就行了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
紀念一下,第100PO ||| 剛好是題暴力題
基本上是題即使暴力解也不會TLE的題目
當然輸出的部份在COUT會很煩就是了
拿書小翻了一下COUT,看起來好複雜…
基本上用PRINTF的話%02D、%04D…就可以解決了
這樣一來即使是用%04D輸出1
也會變成0001
長度不足4的地方會以零補齊
嗯,暴力就行了,當然暴力完是也可以把結果抄下來啦…|||
拼排名用的
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
好久前就解的題目,還蠻簡單的
這題可以用正負一來解
先定兩個變數作分子分母
再定兩個變數為正負一
之後就分子分母持續加上這兩個變數
到該轉向時兩個變數各乘負一即可
這樣可以省掉不少的IF
其它沒什麼要注意的
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
好久以前學長們出給我的遞迴練習題
雖然剛學時是有點難…
不過基本上把不通的路給存起來
(為何選不通的路來記錄是因為不通的路遠比通的路要少)
之後用DFS一直往下找下去就可以了
找過的可以把它設為不通的路,就可以避免掉重複了
其它沒什麼特別要注意的,還蠻單純的
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
找因數太慢了,找質因數個數吧
然後用公式解就行了
設A可表為B^X * C^Y * D^Z
那麼A有(X+1)*(Y+1)*(Z+1)個因數
例:100可因數分解成2^2 * 5^2
那麼100就有(2+1) * (2+1) = 九個因數
分別為1、2、4、5、10、20、25、50、100
這好像是國中就有的東西
其它暴力就行了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
這題沒什麼好說的
根本就是做一次BUBBLE SORT看總共交換了幾次罷了
只要會BUBBLE SORT就行了
BUBBLE SORT:
設有N個元素,則跑N-1次將鄰近兩個元素交換順序成所想要的排法
(小到大、大到小之類的)
再來重覆這步驟N-1次就行了
而且像是小到大,則跑第一次就會把最大的替換到陣列的最後方
因此第一次跑N-1次,第二次只要跑N-2次就行了,因為最大的
已經到了正確位置,再來交換時會把次大,也就是第二輪中最大的
替換到第二輪中最後方的位置,也就是次大的位置
如此一來不用做到(N-1) * (N-1)次
而是(N-1) + (N-2) + ... + 1
亦即(N-1) * N/2次
也就是大約一半的次數而已
若再加上一條每輪只要沒交換到半次就脫出迴圈(代表已排序好)
會更快,雖然快不了多少…
//即使如此還是很慢就是了|||
咦,拿BUBBLE SORT湊字數竟然湊到比平常多|||
不過後面BUBBLE SORT的題目怎麼辦呢…||| 記得還有一兩題的
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ yuscvscv 推:那就用merge啊~ 1124 14:28
作者: sa072686 at 06/07/19
很簡單的一題
就是猜幾A幾B而已
照猜數字遊戲去暴力解就行了
其它沒什麼好注意的
就注意如果答案是3122
猜3333應該是1A0B而不是1A3B
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
這題照公式算,記錄是否有循環只要開個BOOL陣列就行了
感謝gloompisces學長的指導
其它…沒什麼要注意的了XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
進位制的換算
事實上不難
只要先判斷是否合法,再換算就好了
不知道有沒有辦法直接換算,我是先換成十進位制
因為換起來有點大,我是用UNSIGNED LONG LONG啦,
不過也不確定是不是要開到這樣才夠用
其它注意輸出的位數要夠,短短的十六進位數換成二進位的話…
陣列長度要開到夠大才行
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
公式題…
我好像是看討論版找到公式的|||
看看討論版吧,有興趣可以自己推看看
先推出四分之一圓,再乘以四就行了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
錢幣組合問題,之前好像PO過一篇
應該是147吧
看看那篇就好,不再贅述
記得後面好像還有一題674也是類似
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: Macaca at 06/07/19
GET!!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Macaca from 61.59.238.143 (種子電信)
→ sa072686 推:囧TZ 0719 22:14
→ etetet91 推:人家在寫ACM,小猴再搶100GET! 0719 22:32
→ sa072686 推:沒,整理而已XD 今天整理到400了(不過4XX最多|||) 0719 23:05
作者: sa072686 at 06/07/19
排列組合的題目
讀入別被騙,%d照讀
其它注意約階層時挑大的約
然後其它多約分就行了
不約分很容易OVERFLOW
因為數字小,我的做法是先把1~100的數質因數分解
計算質因數的總和要約分比較方便
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/03/03 Mon 08:12:08
作者: sa072686 at 06/07/19
看HINT比較快
http://www2.dmhs.kh.edu.tw/homework/h374.htm
依它給的公式遞迴解就行了
(事實上是我也不太懂XD~)
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
硬解也會過
就是找到A/2為止
我也沒什麼比較好的想法
只想到可以找到SQRT(A)為止
其它用前面的因數下去除就有了
也可以再加上如果該數為奇數就跳過偶數不找等等的
我是完全沒優化過啦,就從2找到A-1
基本上也會過|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
又是一題進位制的轉換
基本上直接轉就對了
只要小心地略過空白
嗯…
事實上,SCANF讀%S是會跳過所有空白和斷行的
也就是說不會因為連續的空白就讀到空字串
所以用%S配%D就可以做讀入的工作了
其它直接換吧
靠右對齊只要先準備一個字元陣列,全部都存空白
每次都用STRCPY複製過去就可以了
因為輸出時本來就要反轉著輸出
所以每次人工反轉後%S輸出還是倒著輸出都行,空白的問題都能解決
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
小暴力的題目
只要把各項系數還原成一個多項式就可以了
不難,可是蠻麻煩的,很多小細節要注意
注意+(-1)是不行的,要用減號
其它…我覺得題目說明還蠻詳細的XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
暴力吧
不然好像也沒其它辦法囉
和前面的圍圈圈殺人的題目挺像的
不過麻煩不少
暴力就行
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/19
質數題
建表應該就可以了
1000以內的質數要建表不慢
暴力應該就可以了
重點就在如何去找中間那幾個囉
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/20
終於AC了
感謝gloompisces學長的指導(?)
事實上是看討論版來的|||
不過也是學長說可以去看討論版的
在這邊貼一下看完後悟出來(?)的方法
//其實我看不懂||| 從部份CODE和一堆數字中想出來的
在讀入數字時直接把數字玩一次看看
看多久循環一次
而這循環不會超過200的長度
討論版有些人(如果我沒有看錯意思|||)
說所謂的"循環"會超出200的長度(而這也是我TLE的原因)
事實上那是把所有數給取最小公倍數才會如此
也就是分成一個個字元處理
分別把所有數的循環給找出來就可以了
這樣子最多繞一圈200的長度就會循環了
把循環節給記錄下來
之後善用取餘的方式一個字元一個字元的處理
就可以了
可以先建一個字元陣列,長度201並在最後加上'\0'
再把所有元素設為32,如此得到一個長度200且全為空白(ASCII 32)的字串
每次讀入前先用STRCPY複製過去做為底
再用字串讀入,用STRLEN把多的(用字串讀入時跑出來的)'\0'拿掉
就可以得到一串以空格補齊長度的字串了(當然這只是方便…暴力一樣做得到)
之後就處理吧
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/20
蠻簡單的一題
雖然不知為何我寫了好久|||
沒有中譯,所以小翻一下
每組測試資料給一個整數N代表有N個人
下一列有這N個人的名單,N不會大於十,
名字長度不會超過十二
接著是每個人所擁有的錢和要送禮的人數、名單
每個人必須送給他們想送禮的人最多的錢,且必須每個人送一樣多
別人送來的錢不用再送給別人
之後請輸出收到的錢-送出的錢
另外,請注意像擁有兩百元而要送禮給三個人
則沒送出的兩元要算在收到的部份
例如我擁有兩百元,送給三個人,自己收到200元
則應該輸出2元
注意特殊INPUT:
2
A B
A 10 0
B 10 0
應該輸出
A 0
B 0
讀入也沒有很刁難,%S配%D就可以輕鬆讀了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Macaca 推:哈哈,這題我也寫好久XDD 0720 14:28
→ sa072686 推:學我 0720 14:28
→ sa072686 推:其實這題我還沒AC的 XD 0720 14:30
作者: sa072686 at 06/07/21
終於AC啦,之前TLE卡好久
BUBBLE SORT加暴搜我想還沒排完就十秒了吧
依首字母開陣列存也不夠快
//不過第一名是怎麼寫的||| 我把處理拿掉留讀入也跑0.230…
把前陣子剛學的字串QSORT和二分搜尋法合併著用就過了
//頭一次在解ACM中使用二分搜尋法,紀念一下
剛剛翻書又翻到函式庫,學了不少字串的函式
現在發現前面字串的QSORT寫得太煩雜了(雖然速度上不清楚)
現在寫的話比對式會寫…
int abcc(const void *p,const void *q)
{
return strcmp((*(abc*)p).i,(*(abc*)q).i);
}
strcmp(a,b)當a<b會回傳-1,a>b會回傳1,a=b會回傳0
依ASCII碼排序
嗯…不過應該還有更好的方法,前面還好多人
//498 0:01.121 4700 11557 C++ <==排名 XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ YiPo 推:用 Hash 的話,時間可以到 0.124 (以我程度來說啦…._.)> 1206 17:23
作者: sa072686 at 06/07/22
秒殺題又來啦
簡單的機率運算
稍微想一下就可以懂了
運算時也沒什麼要注意的
也只要運算一下就好了
就是小心某組測資
1 1 0
一般的算法會跑出0.00000
正解應該是0.50000
用%.5f輸出就行了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/22
雖然是三星題
可是不難
問題就是為什麼我一直compile error啊…
我用strcpy(x,strlwr(y))有錯嗎?…
dc和vc也都沒有compile error啊
害我只好自己在ascii碼上做運算
又拿出老套方法:用%c讀…
我是用qsort加上防重複來解的
不過這樣解陣列要開超過20000
我是開50000,20000會rumtime error
跑起來還不算慢
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/22
不會太難的一題
雖然有點煩
注意數和運算符號間可能有許多空格
我不確定有沒有可能沒有空格
不過安全起見還是寫了防沒有空格的方法
基本上是大數除以整數的除法,還不難寫
不是大數除大數
就照一般除法的直式運算下去做就行了
小心以0為被除數的情況
也請用long long,不然除數接近2147483647時會錯
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/22
蠻簡單的一題
基本上可以看做是10494的類題
不過算是否整除就行
算秒殺題了,只是我忘了歸零又乘錯|||
至於算法嘛…十進位制是讀入一個數字
把前面的數字乘以十再加上讀入的數字
就可以慢慢把字串組成一個整數型態的數
那麼二進位呢…?
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/22
一星秒殺題
這邊提出來是修正一下之前置底的一星題整理
昨天無聊試玩了一下新看到的ABS函數
(雖然比暴力更慢|||)
發現開到LONG LONG還是WRONG WNSWER
不過把一樣的CODE改用DOUBLE就過了
所以推測這題不用DOUBLE不會過
之前說LONG LONG,昨天試似乎不行
用DOUBLE吧
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/22
接近秒殺題了
事實上似乎有某題彈珠盒的和這題很像
不過忘了題號了|||
就是找a^n+b^m使得它所浪費時間最少
也就是越接近給的時間t
這種問題是n越大越好,拿最大的n找回去吧
另外需注意n=0
通常這是比較不好的情況,但也有例外
這裡有個input可以參考
3 4 5
正解是1 1而不是1 2
小心一下
// 43 0:00.053 64 11557 C++
見鬼的43名,看來加/減法比乘法有效率很多
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/22
很麻煩的一題
要很注意誤差…
我也是看討論版才過的
不過也還不是很了解
就…參考討論版吧XD
應該是往「最小」下去想
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/22
又是一題字串排序題
qsort真是太好用了XD
我的方法是讀入後先排序,再看重複幾次
不過這樣做要小心一點就是萬一符合條件的在最後面
沒特別設定會跑不出來
基本上這方法還是蠻暴力的,不過反正它本來就得排序
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/22
不會太難的問題
用struct來做qsort還蠻方便的
之前都要開雙陣列慢慢排
基本上罰金的算法
可以用比例來排序
亦即全換算為遲做一天罰多少錢
這樣就可以排序了
用double來存
話說…double型態不能回傳它們的差來做qsort
又用結構寫起來實在有點小煩
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/23
十二點多了…遲了…
本來想一天湊齊九題說
離題了…
這題也算是字串的排列組合
只是又有整數又有*字實在很難寫讀入的部份
不過排列組合的部份還不難寫
基本上就是難在讀入而已,我好像用了兩三層while在讀字元|||
這題的排列組合比較特殊,就是ab和ba算重複這樣
函式寫得好的話不難排
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/23
貪玩差了三十分鐘,竟然讓它超過十二點
所以剩一天八題了,第九題沒來得及趕上…
不過還是紀念一下,題數到這裡要一天八、九題很難囉
雖然差傑洛差了一大截,他好像解了十來題吧
明天要看書不能太衝了…英文逼得很緊@@
加上c的入門書還好多東西沒看完
下個禮拜再來衝衝看
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/23
討論版寫著:
if A1 XOR A2 XOR ... XOR Ai = 0 則答案為yes
如果不是則為no
有人能解釋一下嗎?
如果想出來後還是沒人回答再自己po
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:這很不好說明 0723 21:24
→ gloompisces 推:某本競賽書上寫了一頁半 0723 21:26
→ gloompisces 推:我回在我的版..上面兩行當作沒看到吧 0723 21:32
作者: sa072686 at 06/07/23
gloompisces學長的版上有
說明得很清楚,就不再多說囉
懂了之後還蠻好解的,只是要想就不好想囉
沒想法的去看看吧
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/23
※ 引述《sa072686 (TFCis 97th小教學~*)》之銘言:
> 討論版寫著:
> if A1 XOR A2 XOR ... XOR Ai = 0 則答案為yes
> 如果不是則為no
> 有人能解釋一下嗎?
> 如果想出來後還是沒人回答再自己po
感謝gloompisces學長的回答
我想我應該看懂了,試著整理一下,寫寫看
XOR值代表前面所提的A1 XOR A2 XOR ... XOR Ai的結果
首先把數字轉換成二進位制
接著試著把每一位數做XOR運算
由於最後取完所有石頭後
XOR運算得出來的結果是每個位數皆為0
此為必敗的情形
由於XOR得出來的若為0,則不管怎麼動
只要對手取走相對應的部份,就能維持在XOR得到0的結果
而且在XOR得到0的結果下不管怎麼動一定會破壞這結果
而無法達成勝利,因為勝利一定要在取完後得到XOR=0的結果
例:2 3 5 8
0010
0011
0101
1000
----
1100
這時,我們只要把較大的,也就是1000改為0100(4),最後一定能夠得勝
此時情況為:
0010
0011
0101
0100
----
0000
則對方不管怎麼取一定會破壞這平衡而導致結果不為0
此時只要一直維持平衡則對手必敗
因為令最後結果為
0000
0000
0000
0000
的人勝利,而這時XOR的值為0
也就是能勝利的人必須能使XOR值為0
而我只要令對手XOR值恆為0
這時對手便永遠無法透過改變而令XOR值為0,也就是不可能得勝
那麼最後的勝者便會是自己
結論:
因得勝的條件是把全部變成0,此時XOR值為0
而在XOR值為0時不論怎麼取,必破壞平衡使得XOR值不為0
此時必無法達成勝利條件
故只要能把XOR值調整為0,對手必敗(因無法取勝)
反之若一開始XOR值便為0,則己方必敗(無法在調整後維持0)
由此得證
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:nice~ 0723 23:07
→ Zero 說: >"< 反應比你慢才想出來 0723 23:09
→ Macaca 推:2行秒殺題XD 0723 23:21
→ sa072686 推:不斷行的嗎?XD 0723 23:35
作者: sa072686 at 06/07/23
不小心看到排名程式
咦~ gloompisces學長又多了一題
就跟著寫了,那時gloompisces版這題還沒出來
基本上…又是英文,小翻一下
給你一個整數n代表有幾戶人家
下一列有a1 a2 ... an
第i戶人家若數字為負,代表售出多少酒
若為正,代表買入多少酒
這題是要算出最小運費,運費定義為距離乘上酒數
ai和aj的距離為|i-j|
解法,我的還蠻暴力的
開三排陣列存,然後硬解
剛剛就因為這樣陣列開太大,測測資時發生問題關閉
如果跟我用一樣解法的請開全域變數
//剛還用%d輸出long long結果wa ||| 好新手的錯誤 wa第12人
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/23
777 Ted 261 1539
很剛好的世界排名
777耶
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/24
很像100的題目
不過有點難寫,wa好久
看完討論版的心得
一、要使用unsigned long且用%lu讀入
二、注意先給的數有可能大於後給的數
三、出現如二的狀況必須先輸出小的數
四、1的cycle length是3(4、2、1)
這題讓我又多出了好多的wa和tle…
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ etetet91 推:我的wa好多...(劃圈圈) 0724 18:07
作者: sa072686 at 06/07/24
忘了只有十三種input(不含0)
把跑完的結果先存起來就行了
感謝gloompisces學長的指導
方法也蠻暴力的,跑了2.512秒
就是先取餘再跑
避免跑太多圈
不過還是很慢,有沒有人有更好的方法?
//方法是自己想的,跑很慢…
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/24 Mon 18:35:04
作者: sa072686 at 06/07/24
有點麻煩的一題
感謝gloompisces學長的教導
wa+tle可能有20次了
先把質數建表,再建符合條件的,我是開兩排bool建
之後再開一排int先加總
不然測資太多容易wa
先加總後只要用減法,快很多
其它…小心2吧
我的wa裡面一大堆都是因為2沒處理
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/24
終於AC了
這題卡好久
討論版沒幫到什麼忙
一開始是有點計算上的小錯誤
忽略了迴圈的減一
後面是陣列開太剛好了
這題不像字串題一樣是可以開到剛好的
我剛好試了100位的情況,結果就錯了,因為有進到位
這題有個很大的提示
即題目中的「不准出現相連的一」
好好想想這句話就知道怎麼直接做處理而不用換算了
另外注意以下INPUT
0
0
111
111
1111
1111
OUTPUT:
0
10101
1000001
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/25
之前一直看不懂的題目
不過仔細看就知道怎麼做了
排列組合的方式是取與不取
因此有幾個政黨就是2的幾次方種取法
我的方法蠻暴力的,是用遞迴硬解
只在遞迴中砍掉已過半數的而已
也就是過半數的話不再往下找
不過還是很慢,2.6秒左右,過半了
不知道有沒有更好的方式?感覺這版幾乎沒人在回覆的耶
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:這題我以前做過,那時跑快5秒 0725 17:16
→ PG 推:這題我還沒AC (打呵欠) 0725 20:32
作者: sa072686 at 06/07/25
還真難寫
陣列要開到2800000(兩百八十萬)事實上2703664剛好
易tle
感謝gloompisces學長的指導
善用a=a!/(a-1)!
其它注意0的時候是0!
其它就因數分解囉
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
蠻單純的一題
沒中譯,小翻一下
(故事看不是很懂|||)
給一張地圖,計算出相連字母出現個數
斜的不算
之後依字母出現個數排序,若出現個數相同則依ascii碼排序
bfs加上sort就行了,我是用qsort
注意同一字母出現在不同地方不能算在一起
參考sample output即可
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
同樣是很單純的一題
沒中譯,小翻一下
給一張以0和1組成的圖,找出共有多少war eagle
相連的1代表war eagle,斜向也算
並且不會有兩隻以上混在一起
很單純很簡單的bfs,而且考過今年toi的應該會很眼熟
跟第二題幾乎完全一模一樣
不過沒有那麼煩要算發幾級的絕招就是了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
也是蠻單純的一題
而且比其它bfs題多了一個好處
不用管會不會超出地圖範圍
有牆擋著,寫起來順多了
沒中譯,小翻一下
先給一個數字代表以下有幾組測資
每組測資以只含____的一行隔開
對每組測資有一個字元代表牆壁
而這字元可能是空白(ascii碼32)、'*'和'_'以外的任何字元
(其實不用管它是啥,bfs時判斷是否ascii碼為32就行)
每張圖包含一個字元'*',找到它並填滿周圍相通的所有空白(ascii碼32)
注意是以'#'填滿
不相通的空白就留著
之後把整張圖照著輸出
基本上這題用gets()讀入,取代完該取代的東西後
用%s直接全部輸出就好了,包含只有_____那行
不用想得太難,'*'一定在牆內且填的時候只要填完所有ascii碼為32的就行
其它都不用管
單純的bfs題
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
有點像476~478那種連續題
這點和784很像,不過比較麻煩
也是bfs
說麻煩其實也還好
沒中譯,小翻一下
給你許多張地圖,這地圖以只含_____的一行做為結束
之後在一個空白行後接下一組測資
測資中一樣任何ascii碼32外的字元皆有可能拿來當牆壁
且牆外有空白,不再是只被牆包著了,不過不用理它
接著在任一被牆包圍的區域內可能有任一和牆不同的字元
將這字元填滿整個區域
不同區域可能有不同字元,但同一區域可能有多個相同字元
卻不會出現不同字元
填完後照著輸出
一樣用gets()讀,填完%s輸出,其實還不太難
我拿784的code來改,改一下就過了
只要是空白就填就對了
至於要填的字元要自己讀,反正不是空白(ascii碼32)又不是牆的就是了
至於牆由於要填的字元必在牆所包圍的區域中
故得知第一個出現且非ascii碼32的字元就認定它是牆就好了
其它地方完全一模一樣
見鬼的32名,大家都想得太難了嗎@@?
比例上來說這幾題bfs題是這題名次最高了(其實光名次也是|||)
另外,注意:陣列請開大點
我wa了3次…
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/26 Wed 18:56:41
作者: sa072686 at 06/07/26
不難的字串題
暴力一個個找也會過
把最多的藉口數給記錄下來,每句也都記錄下來
再來輸出所有藉口數等於最多藉口數的就可以了
沒試過QSORT配BINARY SEARCH
不過應該會比較快
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
暴力吧
一個一個用輾轉相除比對
然後看是否互質
我只加了一個同為偶數就不比對
這樣應該就可以過了
剩下就分數的運算而已
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
這題沒有中譯
照慣例翻一下
給一串數字,以零做結尾
接著看這數列平均一次上升(出現非遞減時)升幾個數字
以及平均一次下降降幾個數字
例:1 2 3 2 3 4 5
1=>2=>3 升了兩個數字 2=>3=>4=>5 升了三個數字
而1升到3和2升到5共升了兩次
平均一次升2.5個數字
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
字串題
照慣例小翻一下
有兩塊版子要合起來
問合起來後,剩下多少空隙
事實上也沒多難
數數中間的空隙就行了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
非常簡單的一題
做大數加法而已
就一直加,加完進位
沒了…
算是練習大數的基本題吧
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
這題…暴力吧
我也想不到其它更好的方法
沒有中譯,小翻一下
給一個整數N,找出一個整數M
使得N個中從1開始每次砍掉第M個
砍到剛好留下2為止
則輸出這整數M
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
排列組合的題目
遞迴寫得好其實不難
好像沒什麼好寫的
那就這樣吧|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
和136幾乎完全一樣
多加個7而已
把CODE複製一下,小改一下就行了
解法看136那篇
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
簡單的一題
就是依指示建地圖
因為蠻單純的
所以應該不用多講
小心數字超出一位數時怎麼處理就行
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
十六、十和二進位制的小換算而已
也不難做
暴力就行了
讀入用%S會比較方便
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
很煩很煩的一題暴力撲克牌題
錯了還很難DEBUG那種
判斷上看技巧囉
花色只有同花和同花順計較
而這都只計較是否全部相同
所以花色只要看是否全都一樣就行
數字上順子的判斷蠻麻煩的
其它都還可以
判斷有幾支相同的反而比較常用到
蠻暴力的…而且很煩
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/26
找最小週期
不會太難
只要間隔著找就行了
例:AABAAB
判斷時先判斷間隔必整除長度
再來就用這間隔去看是否都相等
例如這範例用間隔2去看時
A!=B所以不合
但用間隔3去看
A==A
A==A
B==B
因此答案為3
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/27
建地圖的題目
踩地雷的,和某題類似(題號忘了|||)
沒有中譯,小翻一下
給你一數字n代表以下有幾張地圖
每張地圖先給一數字a代表長寬
之後的a列給一張地雷圖,'.'表示空白,'*'表示地雷
再來還有a列,有許多個'x'代表玩家已翻開的地方
若翻開的地方沒有地雷則輸出0~8的整數
代表其周圍八格存在之地雷數
若有地雷則把所有有地雷的地方都標示'*'出來
其實玩過踩地雷的話前面不用看就會知道了
也是一樣踩到地雷就把所有地雷標出來
不難,暴力就行了,我看懂題目的時間好像大於打code的時間
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/27
bfs題
不太難做,就是讀入上有些麻煩
沒中譯,小翻一下
給一張長、寬皆小於100的地圖(長、寬未知)
地圖只含'L'(LAND)和'W'(WATER)
並在最後帶有k行(k>0)有兩個整數i、j
k行後有一空白行接下一組測資
對每一對的i、j輸出一個整數代表和座標(i,j)相連之'W'個數
座標(i,j)那格亦算,且必為'W'
基本上用bfs就沒問題了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/27
一樣是很麻煩的一題,bfs的
沒有中譯,小翻一下
給許多張地圖,地圖與地圖間以'%'分開
接著由左到右、由上到下開始編號
連在一起且字母相同的要用相同的編號
之後照這格式輸出編號
需「靠右對齊」且要看數字長度
每組輸出間須以'%'為間隔
那個靠右對齊和讀入的部份都很煩|||
陣列因為沒講我也不知道要開多大
不過經過一陣pe和wa(始終沒有ac |||)後
(二十次有吧||| 真是吃飽太閒)
試出了開[100][101]夠用
改成[100][100]就wa了
而且bfs用的陣列開10010不夠
所以推測應該會出現三位數的吧
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/27
簡單的字串排列組合
沒中譯,小翻一下
給你一個字串(竟然是因為忙女朋友沒空||| 有點不太想幫忙)
和一個整數n,輸出所有長度為n的ascii碼非遞減字串
並不得輸出重複之字串
但給你的字串可以有重複的字元
不難,單純的排列組合而已
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/27
不難寫的一題,算dfs題吧
沒有中譯,小翻一下
給一張包含'A'~'Z'及'@'、'#'的地圖
必須找到一條路徑從'@'通到'#'
且只能踩"IEHOVA"過去,踩錯順序或字母都不行
必存在,且只存在一條這樣的路徑
另外@必在最底下那一列
輸出走的路徑
往上為forth,左為left,右為right
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/27
有點煩的大數題,wa很久,可是其實不太難
沒中譯,小翻一下
給你一個年份,判斷是否為leap/huluculu/bulukulu(均以小寫輸出) year
判斷的方式為:
年份為4的倍數且不為100的倍數者為leap year(400之倍數例外,它是leap year)
若年份為15之倍數則為huluculu
若年份為55之倍數且為leap year則為bulukulu
若以上皆非則為ordinary year
數字除了大於2000以外,有可能非常大,沒有任何一種變數型態能存入它
極易wa(看這題的ac人數和wa人數就知道了)
需要注意的地方如下:
一、注意bulukulu是用k而不像huluculu是用c
二、bulukulu的前提是leap year才算
三、需用大數,位數定到1500夠用,但1000不夠
四、注意優先上是huluculu>bulukulu
解法:請別用大數除法取餘
請用數學方式判斷是否整除
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:用string解不是更快,就不用定大小了? 0727 23:02
→ PG 推:SA寫C 0727 23:27
→ etetet91 推:強。 0727 23:29
→ sa072686 推:STRING?字串不也要開陣列存嗎||| 我是用%S讀沒錯 0728 00:23
→ chensc 推:喔喔…突然忘掉 SA 是寫 C 的。XD 0728 13:43
→ sa072686 推:算是C ONLY的…XD 0728 14:16
作者: sa072686 at 06/07/28
很麻煩的字串題
沒有中譯,小翻一下
給你一個字串為要搜尋的字串
接下來給你不知道多少列的檔案名稱(以空白列結尾)
輸出所有符合搜尋字串的檔案名稱
注意:若無符合之檔案名稱則不要輸出任何東西
詳細請參考sample output
欲搜尋之字串可能包含'*'(萬用字元)
它出現時表示可以忽略掉0~n個字元
例:c*at
則c和at中可以有任何字元、或者沒有任何字元
都算符合條件
這點實在蠻麻煩的
也就難在這而已
讀入請用gets(),因為有空白字元,用%s會斷掉
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/29
見鬼的bfs題
429
Word Transformation
Last update on
Sat Jul 29 14:35:36 UTC 2006
Judge Host Address System CPU
H0 acm.uva.es Linux version 2.4.18-27.7.x Pentium III
Back to Volume IV: contents
Ranklist (Best Accepted or Presentation Error from each author)
CPU Time Memory Author Source Date (UTC) ID (host)
1 0:00.021 64 12542 C 2002/08/14-14:32:44.396 1020393 (H0)
2 0:00.027 64 11557 C++ 2006/07/29-14:35:34.853 4774504 (H0)
(當然不是只有兩人|||)
老實說我也不知道我怎麼辦到的|||
這麼值得紀念就大致講一下方法好了
首先是字典讀法
另開一陣列存結果用
對每次讀入的字串s皆搜尋一次前面所有字串
並將長度相同又只差一字元的字串a之編號存入陣列中
亦同時於字串a處將字串s之編號存入陣列中
如此讀完字典同時亦已存完所有字串和其它只差一字元字串之編號
以此做bfs並另開一陣列紀錄該字串是否已存在於bfs的紀錄中
(雖然我就因這陣列歸零的地方放錯,wa了幾次|||)
做bfs時因為所有只差一字元之字串編號皆已有紀錄
故只需做陣列的搬移即可
在陣列搬移時先行判斷相等已測過不會比較快
方法大致如上,我也不知道快在哪裡|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/30
簡單的一題
沒中譯,不過題目寫很明白,也就給一條公式
和一兩句話而已
看公式就知道是費氏數列了,應該不用翻也懂
不過要用大數做
給的input不會超過1010,位數亦不會超過1010
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/31
秒殺題又來了
沒中譯,不過題意太簡單了
基本上把它給的數換算成二進位制
並輸出共有幾個1就行了
其它沒什麼要注意的,很好ac
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/31
秒殺題又來啦
沒有中譯,小翻一下
給一串只含大寫字母A~Z、1、0和'-'的字串
把它做適當轉換後輸出
事實上只要把字母部份依表轉為數字
其它照著輸出就行
用%c讀一個一個處理完馬上輸出可以省掉字串的麻煩
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/31
麻煩的字串題
慶祝一下,第一次寫麻煩的題目卻沒出過差錯的|||
這題…解決麻煩的讀入後排序再依格式輸出就行了
只有一組測資,第一行的數字是department數
讀完所有的東西再output就行了
測試結果:
超過3000人但不超過4000人
個人資料中最長那串超過50但不超過60
事實上因為只依last name排序而沒有第二條件
所以還蠻好排的
用qsort+strcmp反而讀入部份比較難寫
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/31
秒殺題,和進位制有關不過又不太一樣
沒中譯,不過題目實在也沒什麼好翻的|||
按它給的公式硬解也會過
我硬乘還是0.000 ac
範圍也在int內,直接做就好了
好像沒什麼好講的|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/31
秒殺題又來啦,進位制換算的
沒中譯,小翻一下
給一個數代表有幾組測資
每組測資輸出此數字以十進位和十六進位表示時
換算回二進位制共有多少個1
暴力解就行了
不用怕over flow,計算機按一按就知道了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/07/31
嗯,原來我這題當初沒AC
在此修正一下,絕不是只輸出0,K就能過的
前面那個是無條件捨去,後面則是無條件進位
例:X=5,K=2
則應該為2P+3Q
不過如果暴力會TLE
剛把方法修正一下就變0.004了
細想一下兩數關係即可解題
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/31 Mon 20:37:47
作者: sa072686 at 06/07/31
秒殺題
沒中譯,不過沒什麼好翻的
依照表輸出就行
重複略過
碰到表中沒的就不管
這樣就行了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/01
不難的一題字串題
沒中譯,小翻一下
記錄下字串的長度並輸出各長度各有多少字串
若該長度無任何字串則不輸出
另,以'\''和'-'分隔的要算同一字元且'\''和'-'不列入長度計算中
並且可跨行計算
以單獨一個#為一組測資之結尾
沒什麼該注意的,不難寫
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: hsun at 06/08/01
你好!
我...鮮少在寫ACM
我會懺悔的
不要打我
我是南一中T8資訊社公關
還有~~以後多多麻煩囉~~
強大程設教學XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by hsun from 220.142.8.147 (中滑一番)
→ etetet91 推:在一群ACM題目裡面報到不會有點奇怪嗎... 0801 14:40
→ sa072686 推:公關到這種程度XD 0801 15:27
→ hsun 推:這. 0801 16:33
→ hsun 說:沒打好~重來~~ 0801 16:34
→ hsun 推:這....不知是誰拉我來報到的XD~ 0801 16:34
→ sa072686 推:開玩笑的咩,後來說不用啦~ 0801 16:39
→ sa072686 推:話說 不愧是公關 這篇的推文數幾乎是最高的了XD 0801 16:39
→ etetet91 推:應該要用說明題目的那種方式來報到的才對....XD 0801 16:43
→ sa072686 推:沒有題號XD 0801 16:44
作者: sa072686 at 06/08/01
不難的一題
沒中譯,小翻一下
給一串數字和運算符號(只有加和乘)
求這算式的最大值與最小值
註:最大/最小值是變動先乘除後加減的順序後所產生的結果,
所以這題請別管先乘除後加減,找能求出最大數和最小數的先後順序就好
其實也很簡單
加減優先於乘除時就會出現最大值
乘除優先於加減時就會出現最小值
例:1+2*3*4+5
最大值=(1+2)*3*(4+5)
最小值=1+(2*3*4)+5
細想一下就知道原因了,也不用真的去湊出每種可能
另外,請用long long
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/02
秒殺暴力題
沒中譯,小翻一下
按它給的單位照著輸出就行了
很好解,不過要用long long讀入
而且注意像是「1 thousand」這種東西,不會用「10 hundred」表示
它最大的單位只到10^7,而測資是<10^16,也就是說
設最大單位為thousand則可能出現1 thousand 10 thousand
(1,010,000)這種東西
其它只要注意它給的數字是non-negative(非負整數)
所以小心一下0就行了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/02
至少三十次有…
討論版測資全過
code在此:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a,b,c,d,e,f,g,h,i,y[501][501];
char j[501][25],k[501][25],x[1001];
int main()
{
for(a=0;a<501;a++)
{
y[0][a]=0;
}
for(a=1;a<501;a++)
{
y[a][0]=0;
}
a=0;
b=1;
h=0;
g=0;
while(scanf("%c",&x[a])==1)
{
if(x[a]==10)
{
if(a>0)
{
x[a]='\0';
strcpy(j[b],x);
b++;
a=0;
}
if(b==1)
{
if(g==0)
{
gets(x);
//printf(" %d. Blank!\n",++h);
printf("%2d. Blank!\n",++h);
continue;
}
else
{
g=0;
gets(x);
if(strlen(x)==0)
{
//printf(" %d. Blank!\n",++h);
printf("%2d. Blank!\n",++h);
continue;
}
//printf(" %d. Length of longest match: 0\n",++h);
printf("%2d. Length of longest match: 0\n",++h);
continue;
}
}
g=0;
c=1;
f=0;
while(scanf("%c",&x[a])==1)
{
if(x[a]==10)
{
if(a>0)
{
f=1;
x[a]='\0';
a=0;
strcpy(k[c],x);
c++;
}
if(f==0)
{
//printf(" %d. Blank!\n",++h);
printf("%2d. Blank!\n",++h);
b=0;
}
else if(c==1)
{
//printf(" %d. Length of longest match: 0\n",++h);
printf("%2d. Length of longest match: 0\n",++h);
b=0;
}
a=0;
break;
}
else if(x[a]>64&&x[a]<91)
{
a++;
}
else if(x[a]>96&&x[a]<123)
{
a++;
}
else if(x[a]>47&&x[a]<58)
{
a++;
}
else
{
f=1;
if(a>0)
{
x[a]='\0';
a=0;
strcpy(k[c],x);
c++;
}
}
}
if(b>0)
{
for(d=1;d<b;d++)
{
for(e=1;e<c;e++)
{
if(strcmp(j[d],k[e])==0)
{
y[d][e]=y[d-1][e-1]+1;
}
else
{
y[d][e]=y[d-1][e];
if(y[d][e-1]>y[d][e])
{
y[d][e]=y[d][e-1];
}
}
}
}
//printf(" %d. Length of longest match: %d\n",++h,y[b-1][c-1]);
printf("%2d. Length of longest match: %d\n",++h,y[b-1][c-1]);
}
b=1;
c=1;
}
else if(x[a]>64&&x[a]<91)
{
a++;
}
else if(x[a]>96&&x[a]<123)
{
a++;
}
else if(x[a]>47&&x[a]<58)
{
a++;
}
else
{
g=1;
if(a>0)
{
x[a]='\0';
strcpy(j[b],x);
b++;
a=0;
}
}
}
return 0;
}
有AC過的可以幫忙看看CODE、或提供測資嗎?謝嚕
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/02
秒殺地圖題
沒中譯,小翻一下
每組測資給三個數字代表圖的行列數及開始的座標
注意座標只有一個數,就是從最上面那列的第幾格開始
踩到那格寫什麼方向就往那方向前進一格
對每組測資輸出在幾步後脫出地圖
或是幾步後進入長度為多少的迴圈
簡單,沒什麼陷阱
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/02
字串版lcs
非常麻煩
以下列幾個重點
一、即使是非空字串,只要沒有任何單字即算空白列
二、除了字母外,數字也算在內
三、大小寫視為相異
四、用%c會wa,請用gets
不過討論版都寫必須長度為0才算空白列|||
但確定只要沒任何單字就算空白列了
就因為第四點WA了三、四十次有…
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Macaca 推:我怎麼都沒想那麼多orz... 0802 23:19
→ sa072686 推:因為你沒WA到三十多次 0802 23:20
作者: sa072686 at 06/08/03
暴力秒殺字串題,不難寫
可是題目騙人
請用%d\n或%d+gets讀入數字
它騙人,明明寫頭尾沒有多餘空白
結果用%d%c就錯
小心一下
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: Zero at 06/08/03
因為這邊強者好多
讓我亂一下版XD
#include<vector>
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
int cases;
cin >> cases;
for(int z=0;z<cases;z++)
{
string tt;
map<string,string> cand;
map<string,int> party;
int n;
cin >> n;
getline(cin,tt);
for(int i=0;i<n;i++)
{
string a,b;
getline(cin,a);
getline(cin,b);
cand[a]=b;
}
cin >> n;
getline(cin,tt);
for(int i=0;i<n;i++)
{
string a;
getline(cin,a);
party[cand[a]]++;
}
string maxParty="";int maxVotes=-1;
bool tie=false;
for(map<string,int>::iterator itr=party.begin();itr!=party.end();itr++)
{
if (itr->second > maxVotes)
{
maxVotes = itr->second;
maxParty = itr->first;
tie=false;
}
else if (itr->second == maxVotes)
{
tie=true;
}
}
if (tie) cout << "tie";
else cout << maxParty;
cout << endl;
}
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Zero from 203.70.105.237 (種子電信)
→ sa072686 推:嫩教學看不懂map~* 0803 20:06
→ Macaca 推:為什麼你的code這麼複雜orz... 0803 20:08
作者: PG at 06/08/03
冏
說傑洛的CODE複雜 冏?
我覺得傑洛的CODE是我有史以來看過最順眼的說..
//除了我的以外..XD"
傑洛是強者 (膜拜)
--
╭──────╮ 享受解題的快感
靠腰,上課了啦 放開我 │ PG state │ 體會程式設計的奧妙
○︿_ 我還要寫ACM │A B C D E F │ 請至: http://acm.uva.es/p/
/友 ○/ 再一題 │ACACACACWAAC│ http://www2.dmhs.kh.edu.tw/
√\ 〈PG_ 再AC一題就好╰──────╯ 台南一中資訊社
╩ 7th廢渣 PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.128.13 (福爾摩沙固網)
→ Macaca 推:很討厭複雜的code這樣.. 0803 21:01
→ Zero 推:這個code很整齊阿。做什麼事情一看就知道阿= = 0803 21:37
→ sa072686 推:看不懂map在做什麼||| 0803 22:11
→ Zero 推:我改好了XD 感謝scott學弟:) 0803 22:13
→ scott 推:>\\\< 0803 22:13
→ sa072686 推:我果然還太嫩XD 0803 22:18
→ Zero 推:太強 0803 22:20
作者: sa072686 at 06/08/04
簡單的字串題
只要在圖中找到要求的單字就行了
可以八方向找,但一定同一方向不會轉折
其它…沒什麼要注意的,大小寫視為相同就行
因為要找的是最左上的那組的首字座標
所以我是用bfs的方式擴散找的
找到的第一個就是了
不過跑得有點慢|||
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: chensc at 06/08/04
謝謝幫忙 Debug,
還讓你寫了詳盡的解說,
不過我還是打算自己寫LIS的Algorithm,
自己寫比較好玩∼XDD
不過謝謝囉∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 59.113.5.32 (中滑一番)
→ sa072686 推:不會啦~ 加油喔^^ 我剛好也找到10131 也是lis 0804 19:46
→ chensc 推:嗯,問你的那題方才AC了。 0804 21:15
→ sa072686 推:那恭喜囉,等看完空英我也要去寫10131了 你也可以試試 0804 21:16
作者: sa072686 at 06/08/04
還真的是秒殺題
沒中譯,不過可以去看gloompisces學長的版
那邊翻譯和解法都齊全
不再多說
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/04
LCS題(SORT+LIS亦可)
為什麼我完全沒有想到這題是LCS…
明明很直觀的,最大子集合,只是個多條件LCS |||
偏偏我就把SORT後的東西用LIS,結果一堆WA
後來想想,IQ的地方根本就排錯了|||
在那邊防一大堆東西,後來把SORT時的排列改掉就行了
那麼,就這樣…
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/05
輕鬆的一題,算座標平面的
沒中譯,小翻一下
給兩個矩形的左上、右下兩點座標
判斷是否重疊
若重疊則輸出重疊部份左上、右下座標
若不重疊則輸出不重疊
沒什麼好想法,我竟然用qsort找重疊部份的座標|||
多擺幾條if說不定跑起來反而快…不過撰寫上是qsort比較快就是了
懶人做法
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/05
不難寫的一題,加/解密的
沒中譯,小翻一下
一組兩個字串,將第二個字串中所有字母的部份處理後輸出
處理方式:看該字母出現次數,出現最多次的就代換成第一個字串中
出現最多次的,第二多的代換成第一個字串中出現第二多次的
依此類推
不難的一題,不過字元陣列請開大點
5000不夠,但8000夠
這題讓我賺了不少re和tle…
開太小re,開大但不夠大則tle
不過事實上不難寫,只是有點煩,多用struct配qsort排序吧
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/05
基本上還不難寫
類似於264
可是難多了|||
不能暴力硬找了
也不能用陣列存,因為可能給你大到要用long long的數
(用int會神奇的tle |||)
用點數學方法吧
基本上就是拿梯形公式去變化
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/05
數學題
gloompisces板寫得很詳細
可以去看看,這裡就不多說了
附一下導法
當有兩數x,y時
灰面積=大圓面積-兩小圓面積=(x+y)^2π-x^2π-y^2π=2xyπ
當僅一數z時設兩圓半徑分別為x和y
連大圓圓心和該線段之中點及頭尾其一,設為OA和OB
則可知OB=x+y,OA=大圓半徑x+y - 小圓直徑2y=x-y
由畢氏定理知(z/2)^2=OA^2+OB^2=(x+y)^2-(x-y)^2=4xy => z^2=16xy
由上知灰面積=2xyπ=(1/8)(z^2)π
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/05
字串秒殺題
沒中譯,小翻一下
給一篇文章,以單獨一個'#'為一列時結束
對這篇文章請輸出空白(ascii碼32)和文字(大小寫a~z)的部份
其餘全部省略(當然要換行|||)
若有'-'出現在某列最後一個字元
則該'-'前之單字應與下一列之第一個單字相連
在列尾加上一個空白,並在單獨一列輸出,下一列列首為空白(ascii碼32)
例:(以'x'代表ascii碼32)
abxc-
aaxb
輸出:
abx
caa
xb
同時這題也是我的第三百題,紀念一下XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/05
終於上300題啦
感覺題目越來越難找了
紀念一下,接著往四百邁進XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推: 好閃! 0805 23:08
作者: sa072686 at 06/08/05
不難寫的一題
沒中譯,小翻一下
給一串數字,之後判斷是否符合條件
條件:任何一個數皆不得為其它兩個或以上數字之和
且必須呈嚴格遞增(不用管前面前面寫的>=1)
注意它不是要排序後是否嚴格遞增
而是輸入順序判斷是否嚴格遞增
做太多多餘的事會賺下不少wa(像我|||)
另外討論版上人氣很多那篇,前面的測資請別理它|||
那是錯的,後面第1x篇討論的才是對的
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/05
真.秒殺
code撰寫時間≒10秒
至於解法…
自己推推看吧XD
啊啊,沒中譯
小翻一下好了
有一塊n*m的大巧克力
要切成n*m等份
問要切幾刀
看sample input/output就知道怎麼算刀數的了
並非是m-1+n-1
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
φ zenixls2 轉:到 [zenixls2] 看板,于 2008/02/08 Fri 16:12:08
作者: chensc at 06/08/05
借po一下 :)
--
Please note that what is given in the input is the position of the i-th event
in the chronological order, for example, in your input:
10
3 1 2 4 9 5 10 6 8 7
2 10 1 3 8 4 9 5 7 6
that means that in the correct order, event 1 is in the 3rd position, event 2
is in the first position..., like this:
2 3 1 4 6 8 10 9 5 7
and the order of the order of the student is then:
3 1 4 6 8 10 9 5 7 2, and the LCS of that is 9 - (3 1 4 6 8 10 9 5 7)
--
用語很簡單,就不用翻譯了。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 59.113.5.32 (中滑一番)
→ sa072686 推:程設的東西都歡迎(其實就算不是也歡迎啦XD) 0805 23:22
作者: sa072686 at 06/08/05
感謝gloompisces學長的指導
雖說類似於joseph
易tle,暴力應該解不掉
不過可以先暴力做,然後抓抓看規律
我是用規律加上binary search
找到規律後事實上還不難做
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/06
昨天硬撐著寫完它,結果太累就沒po文 |||
今天補po
感謝gloompisces學長的指導
沒中譯,小翻一下
給你n、a、b,代表有n個士兵
這士兵圍成一個圈圈,編號由0到n-1
由0開始數,數到兩次就殺掉,三次就結束
數的方式為:設當次的士兵編號為x
則下一個士兵為(ax^2+b)%n
解法在gloompisces板有原文的連結
這邊小翻一下,不過沒有證明,先po結果以後再補證明
令(ax^2+b)%n 為 abc(x)
則同時做abc(x)和abc(abc(x)),即一邊一次跳一步,另一邊一次跳兩步
若這兩個值恰相等,則為循環開始
到下一次相等則為一次循環
而此循環即被殺之人數,拿101 9 2測試就知道了
在第一次相等時是點了十個土兵時,下次則是十五
故知循環為五,而後循環全為五,因此殺了五個士兵
因為觀察後可發現前面沒循環的那邊只被點了一次,所以沒死
第二次相等時就確定介在第二次和第一次相等的士兵已經被殺
而後循環節都一樣,士兵編號也都重複,故不再有人被殺
加點檢查碼跑跑看就可以看出來了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/06
又一題接近秒殺題的
抓一下規律就行了
其實我也是看題目推來的
題目:
…Note that 12! is the largest factorial that can fit into an unsigned
long int.
由此很簡單地得知一定和階層有關,就往階層想就好了
可是重點是這句在中譯題目中並沒有出現,所以要自己推
有個很簡單的公式
設字串長度為s
則公式為:s! / (a1!a2!a3!...an!)
ai代表某字母出現次數
例:sample input的wedding
則公式為:7!/(1!1!2!1!1!1!)=5040/2=2520
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:排列組合題阿? 0806 10:58
→ sa072686 推:你可以用排列組合做做看XD 沒猜錯會tle 0806 11:02
→ Zero 推:你用的方法不就是排列組合(囧) 0806 11:02
→ Zero 說:我是說你給的公式XD 0806 11:03
→ sa072686 推:咦 排列組合分母不是只有兩個階層連乘嗎? 0806 11:03
→ sa072686 推:公式是用那句話和sample input猜的 因為有重覆… 0806 11:04
→ Zero 推:排列組合是說所有跟排列組合有關的數學都是阿XD 0806 11:04
→ Zero 推:為什麼只有C,P才算XD 0806 11:04
→ sa072686 推:啊我只會那個咩 0806 11:06
作者: sa072686 at 06/08/06
11 sa072686 個人 ◎ TFcis 97th小教學~*(變ACM版|||) 5 sa072686
沒想到快變成學術板的個板竟然也能有這種人氣…
頭一次見到耶XD
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/06
今早得到的消息
日期暫定8/23(有可能會更動,確定後會公佈在BBS上)
不過又沒說是哪個BBS,校內初選沒限定資訊社,
不知道會不會貼在索尼
一定要會開/讀/寫檔(麻煩|||)否則必扣一半以上分數
HELP…我只會讀檔啊 囧TZ
記得是freopen(檔名,"r",stdin)
寫檔好像是把r改w,stdin改stdout
開檔…|||
會的麻煩教一下吧
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:用C++的fstream嘛>///< 0806 11:25
→ sa072686 推:如果可以用scanf和printf的話 那你教我XD 0806 15:24
作者: yuna at 06/08/06
嘻 我來報到了 ^^ 很高興認識你喔 :)
跟你小聊一下 你這孩子真可愛 不過不要裝弱 = =a
關於程設我們也許可以一起討論(!?) 不過我沒那麼強大orz
一起加油吧 哈哈 回家後我會記得加你msn 在一起聊吧 嘻
(我覺得我報到文發到這邊了應該不用再打那一堆了吧
大家都很像已經認識我了 orz 不過還是打一下好了)
我是雄女97級的 不是資訊社卻跑去學了程設
歡迎大家加我好友跟我聊聊喔 嘻
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuna from 163.32.57.254 (沒有故鄉)
→ sa072686 推:真弱非假弱也… 討論的話歡迎喔~ 我很喜歡討論的XD 0806 15:23
→ Macaca 推:<==真弱非假弱也… 0806 15:25
→ etetet91 推:<=真弱真很弱也… 0806 15:27
→ chensc 推:<===真弱,非常弱。 0806 17:22
作者: sa072686 at 06/08/06
新題目(目前是最新的,還是熱的XD)
類似於10930
沒中譯(有就見鬼|||)
給一串數字,判斷是否嚴格遞增且皆為自然數
注意不是排序後再判斷
並判斷Bi+Bj不得重覆(注意i<=j)
即:3 5 7不算是b-...(||| 懶得打)因為5+5=3+7
其它…嗯,10930不用判斷是否為自然數,這題要,
自然拿了不少wa |||
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/06
新題目,字串的
這次從尾巴做,所以||| 前面的都還沒過
沒中譯,小翻一下
給一篇文章,以end-of-file結尾
將所有出現過的單字排序後輸出
一行不會超過300字元,一個單字不超過60字元
加算重複也不會超過2000個單字
並且注意如果單字中間夾著'-'要把它算在單字內(見sample output)
但若'-'是在句尾,則和下一行的頭一個單字串接
例:
abc-
c-
d
得到abccd
不難寫,記得有類題(10815,感謝gloompisces學長的補充)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:10815 0806 15:58
▲ sa072686 改@2006/08/06 Sun 17:35:57
作者: panda1990 at 06/08/06
我ACM只寫了4題耶~*
這不是重點|||
你好~我是北資97級公關小嗨
由於太低調了所以把報到藏在ACM堆中~
請板主多多指教~
//我有問題可以問你嗎?板主好強~*
//我一點都不發唷~*
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by panda1990 from 210.85.21.175 (太陽神電信)
→ sa072686 推:歡迎發問(前提:如果我會的話)我還很嫩的XD 0806 18:16
→ etetet91 推:樓上算嫩的話,那我該怎麼辦!!! 0806 18:18
→ Macaca 推: 樓上算嫩的話,那我該怎麼辦!!! 0806 18:21
→ sa072686 推:待樓下~* 0806 18:21
→ Zero 推:樓上算嫩的話,那我該怎麼辦!!! 0806 19:07
作者: sa072686 at 06/08/06
大家幫忙看一下吧@@
SAMPLE INPUT和討論板上的測資都全過
麻煩各位囉
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/06
新題目
感謝gloompisces學長的指導
沒中譯,小翻一下
給一串數字(介於-10和10之間)
求最長連續相乘是多少
若沒有正整數的答案則輸出0
以0做為分介界好做很多
注意事項:
一、是連續
二、請用long long否則會wa
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/06
也是新題目
gloompisces板上有
沒中譯,小翻一下
給許多本書的價錢和擁有的錢
找出在恰好將錢用完時能夠買哪兩本書
如果有多組解請輸出價差最小的
可以買兩本一樣的
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: Macaca at 06/08/06
I GOT IT !!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Macaca from 203.73.9.87 (種子電信)
→ etetet91 呸:強人在寫ACM,發人在搶兩百。 0806 19:47
→ Zero 呸:XDD 0806 19:47
→ etetet91 說:= =+ 100GET也是馬卡卡的說~ 0806 19:48
→ sa072686 呸:被發猴搶光光XD 200了我都還不知道 0806 20:06
作者: sa072686 at 06/08/06
我好像忘了貼code |||
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct
{
char i[21];
int j;
}abc;
int abcc(const void *p,const void *q)
{
if((*(abc*)p).j==(*(abc*)q).j)
{
return strcmp((*(abc*)p).i,(*(abc*)q).i);
}
else
{
return (*(abc*)p).j-(*(abc*)q).j;
}
}
int main()
{
int a,b,c,d,e,f,g,h;
abc k[100];
char x[4];
while(scanf("%d",&a)==1)
{
for(b=0;b<a;b++)
{
scanf("%s",&k[b].i);
scanf("%s",&x);
scanf("%d%s",&c,&x);
k[b].j=c*100000;
scanf("%d%s",&c,&x);
k[b].j+=c*1000;
scanf("%d%s",&c,&x);
k[b].j+=c;
}
qsort(k,a,sizeof(abc),abcc);
for(b=0,c=1;b<a;c++)
{
printf("Row %d\n",c);
for(b,d=2;b<a&&d>0;b++,d--)
{
printf("%s\n",k[b].i);
}
}
printf("\n");
}
return 0;
}
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:你AC了 0806 20:40
→ Zero 推:因為他是忘記同時間要比名字是不分大小寫XD 0806 20:44
→ sa072686 推:啊啊 ac後忘了來說||| 0806 20:44
作者: sa072686 at 06/08/06
簡單的排序題
沒中譯,小翻一下
按照時間排序後一組兩個輸出
如果最後只剩一組就只輸出一組
如果時間相等就依名字排序,注意不分大小寫
其它沒什麼需要注意的了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/06
新題目快被我解完了|||
不過剩下的我也看不懂了就是
這題其實很簡單(其實我一寫就對,只是忘了把測資間的空白行算進去|||)
這題是多測資的,可是我都用%s讀,所以要用gets把空行拿掉
沒中譯,小翻一下
第一列有一個字串是要加密的
接下來的26列,第一列代表a用什麼取代,第二列代表b用什麼取代,…
再來有一個數字,代表以下有幾組額外的規則
每組額外規則x、y、z代表從第x字元開始(注意:首字元為0)
所有的y都以z取代
若有重複以後讀入的優先
注意:額外規則是看原字串,而非原規則加密後之字串
意即所有規則都看原字串就是了
我是用陣列做,先用陣列把各字元所在位置全存下來
接著邊讀入邊調出字元位置,並且直接覆蓋
陣列沒更動到,後面額外規則還是直接同上做法
不難,因為空白太多了我就用%s比較快(%c要把ascii 32忽略)
所以賺了一個wa(報應|||)
學我用%s的請注意用兩次gets把測資間的斷行和空白行讀掉
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:好嗆... 0806 21:28
→ sa072686 推:實力只到這邊,新出八題還有兩題收拾不掉XD 0806 21:30
→ Zero 推:囧rz 0806 21:34
→ chensc 推:哇…我被閃到了,好惆悵( ′-`)y-∼ 0806 22:21
作者: sa072686 at 06/08/06
讀檔:
freopen("file.txt","r",stdin);
寫檔:
freopen("file.txt","w",stdout);
之後好像照常printf/scanf就會寫/讀檔了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/06
藍75
綠15
紅18(比綠多耶XD)
跟上禮拜六日差好多(上禮拜是一天各一題|||)
暑假過一半有了
立志一天至少一題,目前還沒失敗XD
還有快一個月要撐,不過8/23左右好像會很忙的樣子
撐撐看XD,目標:暑假完達成360!
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 說:才剛貼就一題紅的跑掉了||| 0806 22:14
→ chensc 推:為什麼不是黃綠紅…(毆飛XD 0806 22:21
→ etetet91 推:什麼不是黃綠紅…(我看到綠紅就想到黃) 0806 22:23
作者: sa072686 at 06/08/07
非常白痴的一題(雖說我還是wa了幾次 |||)
剛忘了翻譯,補充一下
給兩數字I、J,I為帳單項目個數,J為人數
之後的I列是每個項目的價錢
輸出平均每人要付多少錢
小數點無條件捨去
I==J==0時輸入結束
大數加法配大數除法
事實上非常地簡單(是我大數寫多了嗎?感覺寫起來好順XD)
只要注意一件事就行
像以下的SAMPLE INPUT:
3 5
1
1
1
0 0
那麼答案應該是:
Bill #1 costs 3: each friend should pay 0
注意零要跑得出來
在大數暴力之下竟然見鬼的排第八名…有沒有搞錯 |||
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/07 Mon 17:20:28
→ Zero 推:囧∼又在寫了orz 這樣我趕不上耶 0807 18:02
作者: sa072686 at 06/08/07
顧名思義是筆記的整理
也沒整理什麼,目前有的筆記及文章編號而已
文章標題 文章編號 備註
qsort 44 無
Q111 187 無
開讀寫檔 204 無
[轉錄][程設]ACM 10992 234 找互質數個數
[程設]階層約分 307 適用數字小時
[程設]基礎篇 329 非新手勿看(看了也沒用…)
[程設]輸出、讀入與變數型態 331 同上
[ACM]10474 336 counting sort(計數排序法)
[程設]變數的運算與比較 341 新手教學
[ACM]10810 349 merge sort(合併排序法)
[程設]if的進階運用及迴圈 344 新手教學
[程設]基數排序法 350 基數排序法
[程設]快速排序法 351 quicksort(快速排序法)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/07 Mon 17:08:05
▲ sa072686 改@2006/08/07 Mon 17:08:15
▲ sa072686 改@2006/08/07 Mon 17:08:33
▲ sa072686 改@2006/08/13 Sun 21:25:33
▲ sa072686 改@2006/08/26 Sat 22:16:57
▲ sa072686 改@2006/08/30 Wed 20:55:58
▲ sa072686 改@2006/08/31 Thu 19:57:46
▲ sa072686 改@2006/09/09 Sat 19:36:46
▲ sa072686 改@2006/09/09 Sat 19:37:21
▲ sa072686 改@2006/09/09 Sat 19:37:57
▲ sa072686 改@2006/09/09 Sat 19:38:15
▲ sa072686 改@2006/09/09 Sat 22:05:49
作者: PG at 06/08/07
很明顯的拓墣排序
從一開始的清單逐條核對下來
如果"在那杯酒之前應該喝的酒"都已經喝光的時候
輸出該杯酒
就這麼簡單
大量使用STL外掛 15分鐘就搞定了...||
--
╭──────╮ 享受解題的快感
靠腰,上課了啦 放開我 │ PG state │ 體會程式設計的奧妙
○︿_ 我還要寫ACM │A B C D E F │ 請至: http://acm.uva.es/p/
/友 ○/ 再一題 │ACACACACWAAC│ http://www2.dmhs.kh.edu.tw/
√\ 〈PG_ 再AC一題就好╰──────╯ 台南一中資訊社
╩ 7th廢渣 PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.81.202.2 (福爾摩沙固網)
→ PG 推:我搭映學弟說AC之後要貼HINT的 0807 19:15
→ PG 推: 答應 修正錯字.. 0807 19:15
→ sa072686 推:感謝,不過何謂拓撲排序? 0807 19:27
作者: PG at 06/08/07
sa072686 推:感謝,不過何謂拓撲排序?
如果"在那杯酒之前應該喝的酒"都已經喝光的時候
輸出該杯酒
這個動作就叫做拓墣排序
--
╭──────╮ 享受解題的快感
靠腰,上課了啦 放開我 │ PG state │ 體會程式設計的奧妙
○︿_ 我還要寫ACM │A B C D E F │ 請至: http://acm.uva.es/p/
/友 ○/ 再一題 │ACACACACWAAC│ http://www2.dmhs.kh.edu.tw/
√\ 〈PG_ 再AC一題就好╰──────╯ 台南一中資訊社
╩ 7th廢渣 PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.81.202.2 (福爾摩沙固網)
→ sa072686 推:懂了,謝謝學長 0807 19:34
→ Zero 推:學長好厲害>///< 0807 20:30
作者: sa072686 at 06/08/07
前面PG學長寫得很清楚了,不再多說
感謝gloompisces學長和PG學長的指導與解答
以致這一題傳一次就AC,因為排法都知道了
沒中譯,小翻一下
給一數字N代表有幾種酒,接下來N列分別是酒名
再給一次數M代表以下有幾種大小比較,再來M列是比較
先給的是酒精濃度比較小的酒名
先喝酒精濃度大的,再喝小的
若沒有任何比較則依輸入順序
例:
4
AA
BB
CC
DD
2
AA DD
AA BB
那麼順序應為AA=>BB=>CC=>DD
因CC比DD早讀到,而CC和DD同樣在AA的後面
這題見鬼的14名,或許和我另開一陣列做QSORT
再用BINARY SEARCH尋找酒名有關
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/07
和11060很像的一題
只不過它沒有嚴格要求
沒比到的就隨意安排囉
只要求有比到的部份而已,簡單很多
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/08
很好寫的一個字串題
大概是這幾天沒睡飽感冒了,竟然寫了好久還這兒錯那兒錯的
頭腦不太清楚了,還好這題不難寫
沒中譯,小翻一下
讀入一整數n,代表以下n列有n個單字
之後的整數m代表以下有幾種規則
每種規則包含'0'和'#',碰上'0'便輸出數字,碰上'#'便輸出單字
詳細看sample output
注意以下這組測資:
1
sa
1
0#0
output:
--
0sa0
0sa1
0sa2
...
0sa9
1sa0
1sa1
...
9sa8
9sa9
看這組應該就懂了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:用sa當測資…真自戀∼XD 0808 22:59
→ Zero 推:真自戀>///< 0808 23:04
→ sa072686 推:下次你們倆有份了XD 0809 16:15
作者: sa072686 at 06/08/09
剛剛上站時竟然要求重新認證
囧rz
//開板才一個多月XD
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:話說我有審到你的單這樣XDD 0810 16:25
→ sa072686 推:原來是你審的XD 0810 18:25
作者: sa072686 at 06/08/09
數學題
詳細見gloompisces學長的板
太詳細了,所以就不再多說了
等問到導法再po
有中譯,已改正,感謝gloompisces學長的指正
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/09 Wed 20:00:21
→ gloompisces 推:有中譯吧 0809 20:03
▲ sa072686 改@2006/08/09 Wed 20:58:24
作者: sa072686 at 06/08/09
dfs題
看起來很簡單,可是實際上有陷阱
沒中譯,先小翻一下
給一堆字串,包含無用的S和IF、ELSEIF和END_IF、ENDPROGRAM
IF一定跟有一個ELSEIF和END_IF
碰上ENDPROGRAM代表一組測試資料的結束
依照給的IF看看到底有幾種可能
注意像以下的INPUT
IF
ELSEIF
END_IF
IF
ELSEIF
END_IF
IF
ELSEIF
END_IF
ENDPROGRAM
應該輸出8,因為第一組IF有兩種可能,後面又各兩種,共為2*2*2=8
其它就DFS就行了
以下提供一組測資,會過應該就會AC了
1
IF
IF
ELSEIF
END_IF
IF
ELSEIF
END_IF
IF
ELSEIF
END_IF
ELSE
END_IF
IF
ELSEIF
END_IF
IF
ELSEIF
END_IF
OUTPUT:
36
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/10
看sample input猜的
沒想到猜對了,還真的是這樣解
導的時間倒比猜的還多
最快不用說,一定是往兩邊行進
也就是沒有碰撞的情形,分成兩邊一起前進
最慢就很難導了
可猜出最邊緣那隻跑到最遠那端的時間
有可能是答案,沒想到是真的
關於碰撞的剛得到解答了
感謝gloompisces學長的指導
由於每隻螞蟻完全一樣,因此在相撞時可以忽略掉
設兩隻螞蟻相連,但這時不論是相撞後反向離開到掉下
還是直接背對背走到掉下是完全一樣的
所以既然一樣,就忽略它啦
<=====
---A----------B--
=====>
=======>
--------AB-------
<========
將A和B互換後和以下這張是一樣的道理
<==============
---A----------B--
============>
故不用將「相撞」考慮進去
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/10 Thu 23:10:11
→ sa072686 推:已加入碰撞相關的問題 0810 23:10
作者: sa072686 at 06/08/10
簡單的數學題
雖然,不知道是不是有什麼比較快的方法
沒中譯,小翻一下
給一個數字k和一堆數字an、an-1、…、a0,這些數字代表一
n次多項式的各項系數,設此多項式為p(x)
且知p(x)=(x-k)q(x)+r,求q(x)和r
另外,n不會給你
直覺性地想到綜合除法,也成功了
不過不知道為什麼就跑很慢|||
難道有其它更快的?…
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/10
很簡單的地圖題
說簡單是簡單啦,可是沒什麼好想法
所以是純暴力做的|||
沒中譯,小翻一下
給一塊大板子的長、寬及子板子數
之後是每個子板子的兩對角x、y(注意:未必是左上右下,見sample input)
問有多少面積沒有被子板子蓋掉
注意0和1的output,見sample output
暴力做法…很好猜吧?
拿bool建表後對每個子板子就直接蓋,蓋完把沒蓋的加總就是了
變模擬題||| 不過數字不大,還是可以過
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: angelalin at 06/08/10
我是台南女中97級資研社公關
聽說你是個沉浸於ACM的人...
恩,請多多指教
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by angelalin from 219.80.135.151 (福爾摩沙固網)
→ chensc 推: 原po好發。 0810 22:46
→ sa072686 推:請多多指教~* //沉浸…這詞中肯 0810 23:12
作者: sa072686 at 06/08/10
數學題
題目有點小複雜
沒中譯,小翻一下
給一數字n,求mu(n)和m(n)
mu(n)是將n質因數分解後,若有其中一種質因數有超過兩個,就是0
若都只有一個,那麼質因數個數為奇數者為-1,偶數者為1
m(n)為mu(1)+mu(2)+...+mu(n)之值
定義mu(1)=1,m(1)=1
以長度8、靠右對齊格式輸出
提示:a%b==0 => mu(a)必可由mu(a/b)推得
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/11
今天連破兩題「幾乎完全相同的題目」
不過為了熟練,還是老老實實地寫了兩遍
都是二元樹的題目,給前序和中序求後序
感謝顏老師的指導
前序:中左右
中序:左中右
後序:左右中
前、中和後序視「中」擺在前、中或後
不過我的方法有點暴力,不知道有沒有更好的
就是真的暴力把樹建起來,再用後序跑一次
首先對中序做處理,依ascii碼存下字元出現位置
例:ba
j['b']=1
j['a']=2
然後把前序做循序搜尋,找到的第一個必為樹根
之後因為前序是中優先,接著為左,再來才是右
讓它遞迴去跑
循序搜尋中每次找到一個新節點便尋找它在中序的位置
之後便得知由此位置向左為左子樹,向右為右子樹
並且對己而言具有右子樹的條件為新節點位置在己中序位置的右方
且不在母樹根的右方,否則應屬母樹根之右子樹而非己之右子樹
以此可將整棵樹完整重建,之後再以後序走訪一遍即為正解
開心,又會一種新題型,花掉兩天的午休學鏈結串列和二元樹是有收獲的
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:這麼快就搞上顏老師了啊… 0811 20:16
→ sa072686 推:我高一電腦課是他上的啊… 0811 22:24
作者: csftwpt at 06/08/11
我前來拜見強者了 @____@|||
我是雄中 97 級的 csftwpt,
跟 ACM 有一面之緣,
看到板主的題數實在太感到佩服了 orz...
加油加油!
--
對了 47860 是我的 @.@"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by csftwpt from 61.64.254.141 (所以內特)
→ sa072686 推:強者不敢當XD 很高興認識你^^ 一起加油吧~ 0811 22:25
→ csftwpt 推:強者 >//< 0811 22:26
→ etetet91 推:強者! 0811 22:37
作者: sa072686 at 06/08/11
呀~欠了好久的導法出來了
首先先討論一下簡單的情形
當n=x^y時,共有以下幾種情形:
(1,x^y)、(x,x^y)、…、(x^(y-1),x^y)、(x^y,x^y)、
(x^y,x^(y-1))、…、(x^y,1)
共為2y+1種情形
先舉個例子,以8來說
8=2^3 => 8 = (1,8)、(2,8)、(4,8)、(8,8)、(8,4)、(8,2)、(8,1)
共2*3+1種組合
到這裡應該不難理解
接著,把範圍擴大到n=x1^y1 * x2^y2 * ... * xm^ym
而對每個xi^yi又可分別以上述之方法表示
由於以上述方法表示時,每一數對lcm出來的結果皆為xi^yi
故把它們全部乘起來恰等於n
舉個實例,以12來說
12=2^2 * 3 =>
(1,4)
(2,4) (1,3)
(4,4) * (3,3)
(4,2) (3,1)
(4,1)
又左邊那排取lcm出來皆為4,右邊那排皆為3
故相乘恰等於12,至於相乘的方法
(a,b) * (c,d) = (ac,bd)
可知共有(2*y1 + 1) * (2*y2 + 1) * ... * (2*ym + 1)種配法
但其中有許多兩兩重覆,故加一後除以二即是所有配法
由此得證
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/11 Fri 22:51:39
→ sa072686 推:已修改,加上實例 0811 22:51
作者: sa072686 at 06/08/12
今天突然心血來潮,補齊了一下二星題
(當然107依然跳過|||)
就挖到了這題,還不難解
管它多少多餘空格,scanf搭配%s是不管這個的,好用
至於解法就暴力暴一暴就出來了
先看最小可能進位制是哪一個,再來算到36次方
然後再比對就好了
小心一下最後一組測資就行
見鬼,暴力成這樣還46名喔…|||
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/12
WA了一陣終於AC了(雖然是PE)
沒中譯,小翻一下
給兩整數M和N代表有M條道路和N個小題
接下來的M列有兩個城市名稱,第一個城市名稱的等級比第二個小一
接下來N列每列有兩個城市名稱,輸出它們之間的最短路徑
以首字母表示
每個城市的首字母必為大寫,且絕對不會重覆
羅馬(ROME)必出現至少一次且等級為0(最低)
對每個等級I的城市而言,它們必只連接一個等級為I-1城市
但卻可能連接有零或多個等級為I+1的城市
相連的道路不會出現超過一次,也不會有連接到自己的情況
這題因為等級的假設,所以蠻好做的
雖然一直WA,忘了考慮起點和終點在同一路徑上的情況…
由於可能連接多個高等級城市,卻必只有一個低等級城市
故陣列開到26就夠用了,把讀入的第二個城市(等級較高的)
指回第一個城市,之後遞迴即可把通往羅馬的路徑找出來
再依路徑去比對就行了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/12
很好寫的一題
抓一下規律就有了
沒中譯,小翻一下
給你兩點的座標,求從第一點走到第二點要幾步
走法請見題目給的圖
把給的圖分成斜的斜的一組
(0,0)一組
(0,1)、(1,0)一組
…
依此類推
接著假設得到的座標是(x,y)則可得到該座標位於第x+y組
而第一組(x+y=1)長度2,第二組長度3,…
因此將給的兩點座標分別往前、往後推一組,再用梯形公式
(注意長度為x+y+1)即可輕易算出中間的距離
接著再算第一點前進到下一組、第二點退回到上一組的距離
也很簡單,前進到下一組就是把y減到剩下0,故y即為步數
退回到上一組也很簡單,總長度x+y+1走到下一組要走y步
那麼退回到上一組就是(x+y+1)-y=x+1
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/12
終於AC了,雖然它看起來好簡單
沒中譯,小翻一下
給一個5*5的圖,上面有24個字母及一個空白
接著數行包含著許多移動指令(R、L、A和B)
分別代表將右、左、上和下的方塊移到空白中
並且可能跨多列,但必以'0'為結束
且不會含有任何移動指令外的東西('\n'除外,已測試過)
若有出現「不合法的移動」(例:空格在最左邊
卻得到'L'指令)則照SAMPLE OUTPUT第三組輸出
其餘參考SAMPLE INPUT/OUTPUT
注意:使用SCANF配合%S讀入時會把空格忽略
故無法判斷空格是在列首或是列末,請避免使用
講一下我WA的地方好了
請在「不合法的移動」出現後,老老實實地讀完它
不管和我一樣用%C也好、GETS也好
「不合法的移動」出現後後面可能仍有數列
只丟個GETS讀不完,請注意
當初竟然明知如此還一個GETS想把它讀完
報應:WA七次|||
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/13
11064到11073
目前只解決兩題
昨天得知時太晚了|||
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/13
太晚解了,沒時間PO
補一下
新題目,沒有中譯
有好幾組測試資料,一組兩列
每一列有三個整數a,b和c代表一直線方程式為ax+by+c
問兩方程式之交點,若無則輸出沒有交點
我是把平行的情況(含重疊)一起算沒有交點
不知道會不會有重疊的情形
注意b=0的情況是會re的(我是本題re第一人|||)
一開始判斷斜率前先看b是否為0
若是再另用其它方法求交點,也就是算出x代入另一式求交點
這題好像是少數不用管浮點數誤差的題目了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/13
地圖題,之前好像寫過類題
新題目,沒有中譯
小紅帽與大野狼的故事
假設小紅帽已知大野狼出沒點且大野狼也只在出沒點出現
但小紅帽為了走最短路徑,必只往上、往右走
令小紅帽家為座標(0,0)外婆家(是外婆嗎@@?)座標為(a,b)
(a、b為題目給的地圖大小)求共有幾條路徑可以安全通往
這題請不要用dfs
也可以過,我昨天就用這方法但跑了兩秒多
用遞迴的方式,碰到外婆家就return 1
之後只要兩種走法中有return值就把那點設為兩個return值的和
代表這點到外婆家有幾種走法
之後的點只要碰到有return值而不是空的時就直接加上這路徑數
這樣加回原點時,return值恰為路徑數
簡圖如下
..*.. <==外婆家
*....
.**..
....*
↑小紅帽家
往上優先的話會在右、右、右、上、上、上、右先到外婆家
所以右右右上上上這點收到外婆家的return值1
接下來是右右右上上右這點
故右右右上上這點收到兩條路的return值總和為2
依此類推,圖將如下:
..*11
*..21
.**31
3333*
每點的值=上、右兩點相加
不過我跑了兩秒多,所以不甘心又去想了另一種解法
用bfs從終點回推
設圖為這樣
..*.1 <==外婆家
*....
.**..
....*
↑小紅帽家
接著從外婆家出發,往左、下找
再對每一點把右、上的值相加
所以範例圖
..*11 <==外婆家
*....
.**..
....*
↑小紅帽家
..*11 <==外婆家
*...1
.**..
....*
↑小紅帽家
..*11 <==外婆家
*..12
.**..
....*
↑小紅帽家
..*11 <==外婆家
*..12
.**.2
....*
↑小紅帽家
…
實際將因bfs順序不同而改變,這方法一樣原理,但從兩秒變0.006
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:有興趣的可以暴力dfs跑15,15,0試試 0813 08:18
→ csftwpt 推:DP? 0815 20:07
作者: sa072686 at 06/08/13
簡單的一題,雖然它有些麻煩
新題目,沒有中譯
讀入一個四則運算的式子並把它的結果算出來
這式子只有加減乘除,沒有其它符號('\n'除外)
別被題目嚇到了(有浮點數又有正負號)
事實上用%lf%c讀入一切解決
%c讀到10('\n')時輸出答案並將變數歸零
這題說難也不難,就是將加減乘除分開記錄
並且在讀到第二個運算符號時才去運算第一個符號
再注意加減順序
事實上並不難做
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: PG at 06/08/13
找出有幾個m使 (m,n) !=1 且 (m,n) != m
你可以換個想法
改成 找出有幾個m使 (m,n) == 1 或者是 (m,n) == m
//(m,n) == 1 就是互質
//(m,n) == m 就是 m | n
然後之後把n-m就是答案了
--
╭──────╮ 享受解題的快感
靠腰,上課了啦 放開我 │ PG state │ 體會程式設計的奧妙
○︿_ 我還要寫ACM │A B C D E F │ 請至: http://acm.uva.es/p/
/友 ○/ 再一題 │ACACACACWAAC│ http://www2.dmhs.kh.edu.tw/
√\ 〈PG_ 再AC一題就好╰──────╯ 台南一中資訊社
╩ 7th廢渣 PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.81.200.141 (福爾摩沙固網)
→ csftwpt 推:我正在寫這題 哈哈 0813 16:28
→ csftwpt 推:找互質個數有什麼好方法嗎...? 0813 16:58
作者: gloompisces at 06/08/13
※ 引述《PG (心の中の冒𣖕)》之銘言:
> 找出有幾個m使 (m,n) !=1 且 (m,n) != m
> 你可以換個想法
> 改成 找出有幾個m使 (m,n) == 1 或者是 (m,n) == m
> //(m,n) == 1 就是互質
> //(m,n) == m 就是 m | n
> 然後之後把n-m就是答案了
提示:
答案就是n個扣掉(m,n)=1和(m,n)=m
(m,n)=1 (參考10179 & 10299)
(m,n)=m => m是n的因數
不過要注意1會重複出現在兩種地方
--
明天的 故事都是我的 是我的
所謂的 幸福快樂 不只一種
美麗的 春夏秋冬落葉 是我的
體驗過才懂夢是什麼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.145.172 (不失敗大學)
▲ gloompisces 改@2006/08/13 Sun 20:25:12
→ csftwpt 推:可以請教一下要怎麼求與 n 互質的數有幾個嗎? 0813 20:26
→ gloompisces 推:PG版1583 0813 20:30
→ csftwpt 推:i got it, thanks 0813 20:37
→ sa072686 推:已轉來 0813 21:09
作者: sa072686 at 06/08/13
※ 本文轉錄自 [PG] 看板
作者: PG (心の中の冒𣖕) 站內: PG
標題: [轉錄] [程設]ACM 10992
時間: 2006/08/13 Sun 15:25:38
※ 本文轉錄自 [TFcis7] 看板
作者: gloompisces ( ) 站內: TFcis7
標題: Re: [程設]ACM 10992
時間: 2006/02/13 Mon 22:44:49
if n有a1,a2,....,ak共k個質因數
就是 n = (a1^b1) * (a2^b2) * ...... * (ak^bk)
則 Ans = n * (a1-1)/a1 *(a2-1)/a2 * ...... * (ak-1)/ak
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.212 (不失敗大學)
φ PG 轉:從 [TFcis7] 看板,于 2006/08/13 Sun 15:25:38
→ PG 推:尤拉攻勢...XD" 0813 15:25
φ sa072686 轉:從 [PG] 看板,于 2006/08/13 Sun 21:08:15
作者: sa072686 at 06/08/13
和前面寫的方法一樣
附一下那公式的導法
感謝gloompisces學長的解釋
以24來說,24=2^3 * 3^1
在1~24中有1/2的機率出現2的倍數
因此不是2的倍數的是24 * (1-1/2) = 12個
同時1~24中也有1/3的機率出現3的倍數
故12 * (1-1/3) = 8個
依此類推
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:"機率" 用的夠詭異~ 0813 21:44
→ sa072686 推:看得懂比較重要XD 0813 21:46
作者: gloompisces at 06/08/13
> → csftwpt 推:"機率" 用的夠詭異~ 0813 21:44
我同意,我用"機率"來解釋的確有點不太好
其實說的精確一點,應該是24是3的倍數,所以在1到24中
除以3餘0,除以3餘1,和除以3餘2的數,他們的個數會一樣多
而扣掉2的倍數後,因為(2,3)=1,所以剩下12個數裡面除以3後,餘0餘1餘2的還是一樣多
所以可以直接用12*(1-1/3)算出剩下數的個數
--
明天的 故事都是我的 是我的
所謂的 幸福快樂 不只一種
美麗的 春夏秋冬落葉 是我的
體驗過才懂夢是什麼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.145.172 (不失敗大學)
→ sa072686 推:還是學長厲害 0813 22:00
φ PG 轉:到 [PG] 看板,于 2006/08/13 Sun 22:06:54
作者: sa072686 at 06/08/13
※ 本文轉錄自 [gloompisces] 看板
作者: gloompisces ( ) 站內: gloompisces
標題: Re: [ACM] 11069
時間: 2006/08/13 Sun 22:56:18
只給公式好像不太好
(感覺我就像討論版上的那個人一樣沒品)
給個解法好了
a[1],a[2],a[3]要用暴力推
來看看a[4]
a[1] = {1}
a[2] = {1} or {2}
a[3] = {1,3} or {2}
a[4] = {1,3} or {2,4} or {1,4}
^^^^^ ^^^^^^^^^^^^^^
a[1]加入3 a[2]加入4
a[5] = {1,3,5} or {2,5} or {1,4} or {2,4}
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
a[3]加入5 a[2]加入4
因為a[b-3]再加入一個b-1 或 a[b-2]再加入一個b
這樣可以得到全部的結果,但不會有重複
(因為一個有b-1,另一個有b,而兩個這不會同時出現)
也不會有遺漏
(因為b-1和b一定要有一個屬於集合,不然可以再加入b,違反題目要求)
--
我始終帶著你愛的微笑
一路上尋找我遺失的美好
不小心當淚滑過嘴角
就用你握過的手抹掉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.145.172 (不失敗大學)
→ sa072686 推:借轉一下 0813 22:57
φ sa072686 轉:從 [gloompisces] 看板,于 2006/08/13 Sun 22:57:52
作者: sa072686 at 06/08/13
翻譯一下好了
給你n個節點,編號為1到n
求符合以下兩條件之子集合的個數
一、沒有任何連續的數
二、無法再在此子集合中加入任一數使得條件一仍成立
附一下1~3的情形
1:{1}
2:{1}、{2}
3:{1}、{1,3}
皆無法加入任一數使得條件一仍成立
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/14
和11068還蠻像的
不過一個只給x1、y1、x2、y2,一個給ax+by=c
一個要注意浮點數誤差(我wa了許多次|||)一個不用
新題目親切多了XD
到最後wa到快放棄時只好去看討論板的…
「wa但後來有ac的code」怎麼防誤差的
把斜率的相等和截距的相等換上防誤差的寫法
(相減大於-0.00001,小於0.00001)
才終於ac,根本就完全沒寫錯|||
讀入用%d就行了,它不會給浮點數
計算上才用得到浮點數
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/14
好寫但麻煩的一題大數題
大數是寫多了嗎,現在寫大數都覺得好順手|||
沒中譯,小翻一下
輸出格式請參考sample input(注意皆無句點)
給定一年份(注意:所有鬼皆在2148年後出現
故2148年之前應沒有任何鬼出現)
輸出所有該年份出現的鬼
需要判斷是否為2、3、4、5、6、7、9、11、16的倍數
(16是因為需判斷leap year,leap year的400=16*25)
技巧:
2:看個位數是否整除於2
3:看各位數數字總和是否整除於3
4:看末兩位
5:看個位數
6:2和3同時成立
7:暴力硬除,一直把高位數*10加上低位數,再除7取餘,最後即可得
除7之餘數
9:同3,不用做兩次3
11:奇數位數和偶數位數差的絕對值
16:看末四位
其它像28就4和7同時成立,36就4和9同時成立,依此類推
25:看末兩位(事實上因為是看100,所以看末兩位是否皆為0即可)
注意:請別像我一樣完全照鬼的出現順序判斷
最後一隻鬼的年份判斷要用沒減2148的年份,小心這隻
第五名耶(雖然寫的人不多)不過0.000sec和64memory是打不下來囉
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/14 Mon 22:20:10
作者: sa072686 at 06/08/15
二元樹的題目
給中後序求最短路徑(路徑上的值相加最小)的終點值
暴力建樹竟然排到超出前1/3,memory吃了3000多
看來這類題目應該有什麼訣竅…
這樣前中序和中後序求原二元樹應該都會了XD
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
看起來很容易tle的一題
神奇的是我的笨方法竟然還會過(0.525sec,比gloompisces學長的平方還多)
方法挺笨的,完全靠binary search還不慢的速度維持不tle
n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
f(n) 1 2 2 3 3 4 4 4 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9
我用了一個很白痴的方法
x 1 2 3 4 5 6 7 8
y 1 3 5 8 11 15 19 24
把轉換點的位置存下來
這樣只要開一排大小673366的陣列就可以了
6x萬長度的陣列竟然用binary search硬建還在一秒內跑完
也算神奇了,本來想說會花掉兩三秒的
徵求更快的方法…
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
已換方法,目前是0.045sec
由於可知結果2000000000之答案為673365
故開兩排長度673366的陣列
一排存轉換點,一排存f(n)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
蠻好寫的一題
沒中譯,小翻一下
羅馬數字有i、v、x、l、c分別代表1、5、10、50、100
至於範例看題目吧
給你n求1~n共用了幾次的i、v、x、l、c
其實這題有個可以用迴圈輸出的小方法
開個char陣列把i、v、x…也給存起來就行了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:因為這題page<=100 所以用迴圈就搞定了 0815 13:53
作者: sa072686 at 06/08/15
蠻好寫的一題
暴力就行了
因為懶的關係我沒把空白給處理好
本來應該是去頭去尾,結果我把中間的也去掉了
不過不太影響,pe而已
去頭去尾用夾擊處理就可以了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:更正,去頭去尾還是pe…而且跑更慢了 0815 11:03
→ gloompisces 推:這題啊...我WA了30次有吧 0815 11:18
→ sa072686 推:我一次過耶…lucky貓的input很詳細 0815 11:27
作者: sa072686 at 06/08/15
還算蠻複雜的一題
矩陣相乘的題目,不過是它給你乘的順序
你只要把答案求出來就行了(當然有可能有不合格的乘法)
有括號的東西一般用遞迴就可以解決了
把整個括號當成一個矩陣來看待
一碰上括號就用遞迴求裡面的答案之後return
再針對return值處理即可
附一下矩陣相乘的規則
設a、b兩矩陣分別為w*x、y*z
則若x!=y表示不合法的相乘
若x==y則相乘次數為w*x*z或w*y*z(都一樣)
相乘後出現新矩陣,新矩陣為w*z(取頭尾)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
0.021sec
感謝gloompisces學長的指導
令f(1)=1,f(2)=3,…
令c=2,則f(3)=f(2)+c=5
又此時3==f(2),故c+1
再來f(4)=f(3)+c=8
依此類推
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
簡單的遞迴題
AC這題後有種今非昔比的感覺
不知道為何對這題印象很深,是寒訓的時候出的題目
那時完全沒有頭緒,現在則是輕鬆AC
要不是之前一直找不到這題(我一直用ballance當關鍵字在找|||)
應該早解了吧
沒中譯,小翻一下
給一個天秤,問它是否平衡
這是個樹狀的天秤,且必須每個子天秤都平衡才行
平衡的方式:兩邊的重量和長度乘積相等(力矩)
若重量為0代表有子天秤,子天秤兩邊重量和=母天秤該邊的重量和
(用該邊怪怪的|||)
因為子天秤給的順序是深度優先,所以用dfs求就行了
左邊順序大於右邊
注意別左邊不平衡就return掉了,這樣可能會漏讀了右邊的子天秤
剛就錯這裡|||
其它沒什麼特別的陷阱了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
M文非常多|||
沒M的沒幾篇
(事實上標明ACM的就佔總文章數8成有了|||)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
又是一題看加總的
不過比較不好寫的地方是因為拔河
兩邊人數要盡可能地相近(事實上就是人數/2)
之前寫過的題目都是看可能出現就行
這題要看是否能符合「可能出現人數」的情形
比如說共六人
那就看最接近總體重/2的那些可能體重
有出現過三人的
我的方法比較差一點,跑不快
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
新題型,之前看到都沒想法
簡單的dfs而已
我是先建表,再在讀入時找符合條件的輸出
還不難寫,建表的部份只要不和之前的數字相同
又不在同一斜線上(斜率!=|1|)
總共才92種情況
在這裡公佈一個小方法
我dfs只找了46個
剩下46個必和前46個對稱
所以只要找46個就行了,後面對稱建表即可
有題類題167,等等來做看看
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/15
成功解開750的類題
比750複雜一點,不過還是用dfs跑出92種結果
(當然可以用對稱方式產生)
再把對應位置相加就行了
如果750解得開這題就不難了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/16
非常麻煩的一題
qsort也非常難用
不過只要sort的地方做得好
後面做起來很輕鬆,lis就可以了
注意相等時並不能放入
簡單講一下想法好了
由於可以翻轉/扭曲(?)反正說穿了就是大對大、小對小
這種情形sort可以解決
不過用qsort的話,不論是二維或結構我都不會寫|||
後來只好先另開一維存,排完再丟進結構
之後就依每個盒子大小排序
排序的依據:小的放前面
提示:lis如果要做得順,就把最小的數字按小到大排序
若最小的數字相等,則後面數字由大到小排序
如此用我後面lis的方法才會順
lis的部份嘛
我是從頭開始找,若可以套入則略過(注意套入條件不包含相等)
若不能夠套入則把它蓋掉
原因:若不能夠套入這項,但前面的都能夠套入,故它該取代這項
然而為什麼可以直接取代是由於我把第一數字相等的情形
寫成依後面數字由大到小排序,如此直接覆蓋時
出現盒子之第一數字以非遞減順序呈現,故不列入考慮中
即後面出現的盒子在第一數字上可以蓋掉它
但相等的情形蓋不掉,不過因為後面是按大到小排序
因此在第一數字相同情形下,蓋到最後變成後面數字最小的留下
而後面比較第一數字時必可以蓋掉它,但它後面數字最小
故最可能可以套入後面的盒子,直接lis就可以順利完成
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/16
暴力也0.002過
這題和478蠻像的
不過有比海龍公式更好的公式
設三點為(x1,y1)、(x2,y2)、(x3,y3)
面積=0.5 × [(y3 - y1)(x2 - x1) - (y2 - y1)(x3 - x1)]的絕對值
只要隨便找三點再把這三點以外的點全部判斷一次看看就行了
判斷一點是否在三角形內:
任取三角形之兩點與該點形成一三角形,如此可產生三個三角形
若這三個三角形的面積和=原三角形面積則該點在三角形內
這題沒有浮點數誤差,不用擔心
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:有很多題有orz 0816 07:58
→ sa072686 推:所以附註了。11068也沒有~善良的題目 0816 08:00
→ Zero 推:乾脆用向量外積XD 0816 08:03
→ sa072686 推:那啥?||| 0816 08:40
→ Zero 推:請問pp XD 或問數學老師XDDD 0816 09:07
→ sa072686 推:向量已經在教了說~(不過只教到內積) 0816 09:21
作者: sa072686 at 06/08/16
之前一直寫不出來
現在剛好想到一個方法
暴力必tle(我試跑過|||)
不過被我抓到規律,用遞迴就可以把它跑出來了
已知1+2+...+9=45
故只要推算有幾個45就行了
一些不足的地方再另計
至於個位數為0的也很簡單,只要遞迴就可以了
即,把個位數為0的當成另一組來求解
例:1 111
首先1~10是45,111~110是1
目前得到46,再來把10和110分別除以10得到1和11
相減得10,代表有十組1~10(只看個位數)故得到10*45=450
目前得到450+46=496
之後剩下1和11,1~10是45,11~10是1,故又得46,目前為496+46=542
分別除以10後得到1和1,相減得到0代表沒半組,所以0*45=0
故得答案為542
這題從lucky貓的sample input看得出來要用long long
但記得除了最後存結果的變數要使用long long外
計算有幾組45的那變數也得使用long long(兩者用unsigned long皆overflow)
這題我wa了十幾次都是因為忘了把那變數改用long long…|||
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/16
終於過了,這題好多人都有
其實用暴力建表還蠻好寫的|||
開個83682*6的二維字元陣列硬建
再用strcmp配binary search
有個好處是不合法字串在裡面會找不到,找不到就輸出0
0.010sec就完成了
用此法請記錄各字串長度從第幾個到第幾個
否則像z會出錯,像chensc在strcmp是比z小的,zero才比z大
因為陣列是依長度遞增的,所以一開始如果就找到chensc
那只會往後繼續找,所以必找不到長度為1的
即使一開始找到zero,也不可能跑到前面去
(雖然chensc和zero都是不合法字串|||)
不然就用struct的qsort,不過記錄下來會比較快
//前面說我自戀的兩人終於有機會出場了,雖然這題沒大寫
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:..... 所以我還是沒出現阿XD 0816 11:16
→ chensc 推:我也是不合法的…><" 0816 15:08
→ sa072686 推:(事實上我自己也不合法|||) 0816 18:28
作者: sa072686 at 06/08/16
感謝PG學長的指導
讀入上用gets()比較方便
不過注意要把多餘的空白列讀掉
用gets()有個好處是把第一列讀下來,接下來用strlen()
就可以馬上知道後面還有幾列了
接下來講一下大致的方法
對每一點數字為1的都分別往下、往右擴展
先往下擴展看能到多少,再和往右擴展的長度相乘
注意若已有數行往下擴展則挑最小的相乘
例:
1111
1101
那麼在(1,1)時往下擴展可到2,這時1*2=2
往右擴展到(1,2)時往下擴展可到2,這時2*2=4
注意往右擴展到(1,3)時往下只能擴展到1,故3*1=3
再往右擴展到(1,4)這時往下擴展雖可達到2
但前面往下擴展最小值是1,所以是4*1=4,否則無法成為矩形
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/16 Wed 14:40:12
▲ sa072686 改@2008/02/26 Tue 15:10:10
作者: sa072686 at 06/08/16
和836幾乎完全一樣
差別在有給大小,且看0而不是看1
836都黏在一塊用gets()方便,10074卻是用%d方便
而且可以用bool存
方法看上一篇836吧
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/16
tree的題目
雖然我嫌tree麻煩,就用string的方式解了|||
將它們依ascii碼排序後遞迴就可以看是否完整
且排序後若有重覆給的節點也會排在一起
用strncmp就可以比對出來是否為子節點之母節點
若非則必不完整,因若有子節點必於排序後相鄰
從string長度可以得知level關係
輸出時也不必像建樹的時候要用到bfs
只要重新依長度優先、大小次之的方式將string重排
再依序輸出即可
wa好多次,竟然是在找右子節點時忘了加上防陣列長度爆掉的|||
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Macaca 推:<==一樣的方法 0816 20:54
→ sa072686 推:學我 0816 22:00
→ Macaca 推:我比你早寫耶.. 0816 22:05
→ sa072686 推:XD 0816 22:16
→ Macaca 推:XDrz 0816 22:19
作者: sa072686 at 06/08/16
不難寫的字串題
可是它非常地麻煩|||
我還是第一次碰到這麼煩的題目
QSORT用了兩次(第二次還用了兩三條比對式),結構開了兩個
沒中譯,小翻一下
給一個字典(最多五十字,每字最多十個字元)
以單一行有"::"為結束
接下來有兩百個以內的頭銜,每個頭銜不超過一萬個字元、十五個單字
(事實上那是騙人的,1001個字元就會過)
對每一列頭銜找到不在字典中的單字
將它們記下來並在輸入結束後將這些單字排序並輸出
輸出格式:依字典順序排序所有單字後,將出現這些單字的頭銜
重複輸出一次,並將這頭銜改為全部小寫,只有這單字大寫
若一個單字在一個頭銜中出現超過一次則視為相異處理
並且先出現的頭銜應該先出現在OUTPUT中
先出現在同一頭銜的相同單字也應先出現在OUTPUT中
且不能只輸出一次頭銜將所有相同單字一次改為大寫輸出
詳細格式見SAMPLE INPUT/OUTPUT
雖然我的方法很暴力,不過還是0.002sec過了
事實上結構大小影響執行時間影響很嚴重
在這公佈一下沒有任何字典外的單字會超過50字元(詳細未知)
並且所有字典外的單字不會出現超過三百次(這都是我AC CODE的陣列大小)
說不定更少|||
由於很複雜又很麻煩,大致講一下做法和要注意的地方
首先SORT字典以便二分搜尋(長度50其實用循序也不會太慢)
如果這裡要用QSORT請用結構
接著處理好字典後開始讀入
對每個讀入分離出所有的單字並將它們搜尋一次
若出現在字典中則忽略
//事實上最後排序完再判斷是否出現在字典中可能會比較快
並且記下它們出現在哪個頭銜、出現在哪裡
在這兒記下出現頭銜是為了讓頭銜維持全部小寫狀態
出現在哪裡這是為了能夠在輸出時能夠快速準確地找到這單字
並將其改為大寫,當然這對出現在同一頭銜的那些單字的OUPUT順序
以及防止每次都找到同一個等等也都很有幫助
記錄方式是記下這單字前面有幾個空白
接著SORT那些單字,依字典順序、出現頭銜及出現位置
再依序處理後輸出即可
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/16
非常簡單的一題
沒中譯,小翻一下
給兩個字串a、b,求一字串x為a、b字串的「任一排列」的子字串
且x長度必須最長、必須為字典順序中最前面的那一個
基本上對兩個字串sort後尋找相同的就行了
如果是依ascii碼由小到大排序
那麼出來的直接就是答案,連sort也不用了
和我的ACM比對程式原理好像喔
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:ACM比對程式? 0816 23:35
→ sa072686 推:拿來對對看哪些題目別人有自己沒有的XD 0817 00:39
作者: sa072686 at 06/08/17
很煩的一題
感謝gloompisces學長的指導
在這裡為了方便說明
我將圖形切成三個部份,依output順序分別編號為b、c、d
令邊長=a
於原圖找到隨意一角,將其連至以其為圓心之1/4圓弧上與其它圓弧之二交點
設那兩交點為x、y,取角e則可得一1/12扇形exy
並設正方形正中心那點為z可得zxy=b/4
又zxy可由exy-三角形zxe-三角形zye得到
而這兩三角形底為zx=sqrt(3)*a/2(做一30-60-90直角三角形可得)
高為a/2(由上之直角三角形可得)
故b=4*(a^2*π/12-a/2*(sqrt(3)*a/2 - a/2))
兩個1/4圓減去正方形可得中間那一條
兩條扣去中間那塊等於c
故c=2*(a^2*π/2-a^2)-2b
d的面積則是扣去c再扣去b
故d=a^2-(c+b)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:...|| 我的方法更直觀吧 XD" 0817 00:30
作者: sa072686 at 06/08/17
原來這題是暴力建表
感謝gloompisces學長的指導
因為成長太快,所以只有二十種可能
公式:(1 / x+1) * (2x! / x!x!) = n
n是樹的數目,x是節點數
由此又可得到k[1]=1,k[a]=(2(2x-1) / 2) * k[a-1]
暴力建表時請使用long long(反正慢不到哪去)
否則會overflow(存的時候不會,可是乘會…約分麻煩)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:k[a]=[2*(2x-1) / (x+1)] * k[a-1] 0817 10:44
作者: sa072686 at 06/08/17
非常暴力而且難寫的大數題
感謝gloompisces學長的指導
公式在gloompisces板上有
n^4-6n^3+23n^2-18n+24
---------------------
24
非常噁心的數字,不過還是可以寫就是了
50000以內用long long還存得下
50000以上…大數吧,雖然那很噁心但確實可以做
大數請開long long否則難做
公式由來…問到再po
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/17 Thu 09:59:30
→ gloompisces 推:問到......這個真的真的很難解釋...... 0817 10:41
→ gloompisces 推:尤其是在MSN的繪圖板上...改天去社部說吧 0817 10:42
→ sa072686 推:啊,好,還有11053喔 0817 10:43
作者: sa072686 at 06/08/17
終於找到方法了
感謝gloompisces學長的指導
(本人一定會覺得很奇怪,說明一下好了,是因為10223的關係
那條a和a-1關係式讓這題有解了)
雖然又是題非常煩的大數題
不過比起10213真是平易近人多了
位數不會超過610(事實上是603,不過那是除過的結果)
先把結果跑出來再輸出就行了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/17
目前…暴力4sec過
不過確定暴力不會tle就是了
至於比較好的方法…
問到再po XD
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/17
簡單的一題
就抓規律就行了
先看最基本的1~10
n 1 2 3 4 5 6 7 8 9 10
n^n % 10 1 4 7 6 5 6 3 6 9 0
加總 %10 1 5 2 8 3 9 2 8 7 7
發現除了2、3、7、8以外,10個就一次循環
因為1、5、6、10都是固定的,怎麼乘都一樣
4、9都是兩個一循環,也就是看奇偶,可是4、9不管加多少次10
奇偶都固定,所以可以視為固定
再來觀察2、3、7、8發現因為四個一循環
所以每20就循環一次
接著觀察11~20
n 11 12 13 14 15 16 17 18 19 20
n^n % 10 1 6 3 6 5 6 7 4 9 0
加總 %10 1 7 0 6 1 7 4 8 7 7
若將二表擺在一起會發現:3和7對調,2和8對調
故得知每十個的和都會完全一樣,而這值為47
由此可知只要利用此表搭配以上結論可知答案
n/10的值乘上7得到之個位數加上n%10在表上的加總數字即可得到答案
至於是該看1~10或是11~20只要看n/10的奇偶即可
這題位數雖大,卻只需要看末兩位,故以字串存之再取後兩位即可
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 06/08/17
另一題類似的題目是10007
只要把10303的答案乘上n!
就是這題的答案
n=300時有792位
但是為了要乘,陣列開到820會比較保險
--
I always bring the lovely smile which you gave
Going ahead to find my losing precious
If the tears slide down because of my careless
I will use the hand which you held to wipe off
Angla Chung -- Losing Precious
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.122 (不失敗大學)
→ sa072686 推:為什麼是N!呀?(乘N!就難算了|||) 0817 14:06
→ gloompisces 推:不會難算啊 0817 14:10
→ gloompisces 推:a[2]多乘2,a[3]只要再多乘3,a[4]只要再多乘4 0817 14:11
→ sa072686 推:啊啊 我想到兩個大數的乘法去了||| 0817 19:32
作者: sa072686 at 06/08/17
感謝gloompisces學長的指導
非常快且直接的方法,0.037sec AC(17名)
以3 10來講
3 <10
3+4 <10
3+4+5 >=10
故第10天住5人
從3這團開始令n團後大於10
則此題n=2,以梯形公式表示為((3+(3+n)) * (n+1)) / 2
令第一天住進x人,則第y天的人數是:
((x+(x+n)) * (n+1)) / 2 >= y
則可得到n^2 + (2x+1)n + 2x - 2y >=0
代入公式解n=(-(2x+1) + sqrt((2x+1)^2 - 4 * 1 * (2x-2y)))/2
當然n不一定為整數,若不是整數則取整數
因為要>=0,所以非整數時加一再取整數部份
之後x+n即為答案
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/17
感謝gloompisces學長的指導
詳見268篇
公式:
第n項為(1 / n+1) * (2n!n! / n!n!)
由10303得到公式:k[n] = 2(2b-1) / b+1 * k[n-1] * n
至於為什麼多了n!這點…老話一句,問到再po
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:因為有n個位置,所以把n個點排進去的方法數是n! 0817 21:04
作者: sa072686 at 06/08/17
很煩很煩的一題
bfs而且不難
不過編號會蠻大的
我開到10000還是re
不過不會超過100個點
所以就把點重新編號就可以了
之後就用編號做,但記得留張表記錄一下
這樣讀入時才能夠去判斷編號,再來都用編號做了
bfs亦同
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:所以我說用 C++ STL :P 0817 22:31
→ sa072686 推:stl連這都有?囧rz 0817 22:45
作者: sa072686 at 06/08/17
弄了好久終於搞懂了
感謝gloompisces學長的指導
其實就是假設10303的某一種情況有n種排法
那10007只是可以把這n種排法中的每個節點任意調換
故若有k個節點則10007只是在每種排法的共k個地方
任意排入第1到k的節點而已
排入的方法數為k!
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/08/17 Thu 22:22:58
作者: sa072686 at 06/08/18
蠻像836的一題
沒中譯,小翻一下
先給一整數代表以下有幾組測試資料
接著每組測試資料有m、n代表板子大小和…不知道怎麼翻|||
接下來n列每列有四個整數代表矩形左上和右下座標
之後輸出這板子不包含在矩形中的最大矩形面積
沒什麼要注意的
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/18
沒想到又把之前那公式拿來用了一次
還真好用,一堆題目都需要
沒中譯,小翻一下
給一個數字n必須湊出幾種組合才能包括所有答案
由於不互質的數對可以由互質數對推得答案
因此只需考慮互質數對
還是用之前gloompisces學長教的公式
設n=a1^b1 * a2^b2 * a3^b3 * ... * an^bn
則小於n裡面與n互質的數字共有n * (1 - 1/a1) * (1 - 1/a2) * ... 個
這題可推得在1的時候只有(1,1)一組
在2的時候多了(1,2)和(2,1)兩組
在3的時候多了(1,3)、(2,3)、(3,2)、(3,1)
…
由於皆成對出現,因此推得若以上那條公式為f(n)
則k[n]=k[n-1] + 2*f(n)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/18
很好寫的一題質數題,暴力都可以0.000sec
沒中譯,小翻一下
給一個整數p,求一最小質數q可使得n-q*d為最大
在這d=任一整數,但q*d<=n<q*(d+1)
很簡單地可以猜到d=1是最佳選擇
若d=1則q<=n就行,d=2要大於n只要q>n/2就行
故範圍為n/2<q<=n
若d=2則q<=2n,d=3要大於n所以q>n/3
範圍n/3<q<=n/2
由此得知,d選擇1時q可以得到最大值
請注意:n<q*(d+1)是沒有等號的
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/18
超級暴力字串題
非常好寫
沒中譯,小翻一下
給你一個整數n代表你要把"SAVE HRIDOY"字串放大幾倍並輸出
若n為0表輸入結束,n>0表由左到右輸出,n<0表由上到下輸出
詳見sample input
我的方法有點暴力
因為都是倍數關係,所以只要先把橫向和縱向的字串先分別建表存起來
之後先看橫縱向再看倍率,就把每個字元輸出幾次就好
至於縱向字串有個很快速的建法
就是寫一程式讀入字串並產生將這字串建表用的程式碼即可
範例如下:
a=0;
while(gets(k[a]))
{
printf(" strcpy(k[%d],\"%s\");\n",a,k[a++]);
}
當然花點工夫改寫一下,先把字串全存起來再輸出會省時不少
否則是複製一行進去跑出一行,會變成和input交錯
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/18
不難的字串題
沒中譯,小翻一下
給一個字串k,裡面包含許多的單字
第二列有一個單字s
試著把k在同加減一定值x後其中有一個單字轉換成s
如果超過就從a開始算
例如x=3
則a->d,b->e,…,z->c
依此類推
一定有方法可以轉換,找到所有可能把它們依ascii碼排序後輸出
若使用和我一樣的方法,用%s%c讀入,請小心答案出來不能重覆
若在做加減判斷的時候,請小心overflow(小寫z的ascii碼是122)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/18
很簡單的一題,不過陷阱還不少
記得這題有個類題,幾乎完全一樣的,也是soundex
題號忘了,記得的麻煩提供一下
沒中譯,小翻一下
將每個句子依表格列出編號
先輸出第一個字,接著依照表格給予編號
若連續字母編號相等則忽略後者(即不可能出現連續之數字)
若超過三位,第三位後全部忽略
若不足則以0補齊
不在表格中的字母則作為分隔
注意第一字母也算在內,故第二字母與第一字母編號相等則忽略
詳見sample input(沒見過這麼多重點input被放在sample input中…)
注意(我wa的地方):若第一字母不在表格中請記得將上個input
記下來的數字歸零
例:
CHENSC
AS
則AS應輸出:A200
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/18
其實還蠻好寫的
很簡單地可以想到1+2+...+k(以下稱f(k))必須>n
故用梯形公式代公式解先解出k
它只能放+或-,所以可以得到:
把+改成-或-改成+都一定會差一個偶數
故f(k)在減去n後必須是個偶數
而只要是偶數必有解
因n和f(k)最大的差是k,因f(k)>=n,故n若加上k+1則必可得f(k+1)>=n
k必可表示成1~k之間某整數之兩倍,故必有解
若為奇數則視k+1而定
若k+1為偶數則加上k+1後不影響奇偶
若非則加上k+1後即可改變奇偶,本來是奇數的差就可以變為偶數
仔細想想還不難寫
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:注意k>=1,所以小心n=0不應輸出0 0818 19:51
作者: sa072686 at 06/08/19
看tle人數就可以猜到如果dfs硬做很可能tle
如果抓最小的走又未必是最佳情形(不懂請見sample input 第一組)
不過如果仔細想想就可以找到一種蠻快的方法
這題我是第75名,0.596sec
我是用逆推的方式找的
從終點出發逆推回起點
對第i行的j列皆加上i+1行的j列、j-1列、j+1列中最小的,並記錄是哪一列
之後在第1行找到最小值,那就是答案
再用正推方式遞迴到底,出來就是路徑
本來wa到差點去爬討論板了,後來發現…
我把行和列完全搞反了啊啊啊啊…|||
神奇的地方在於sample input全過 |||
vc的範圍取代真是個好東西
反白一塊區域後就可以只針對這區域做取代(replace)的動作
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:DP XD 0819 14:27
→ csftwpt 推:我也有兩三次把行列搞反, 超困擾的 orz 0819 16:36
→ sa072686 推:DP?那啥XD 0820 00:05
作者: sa072686 at 06/08/19
不難寫的一題
雖然我在大方向上都對,還是wa在一些粗心的小地方|||
這題就推推看怎麼做才能達到最小就行了
千萬不要用面積做|||
反正數字不大,暴力把每種情況寫進去吧
用6*6裝一定是最好的情況
就看怎麼裝就好了
6*6的不用管它,沒辦法最佳化
5*5最佳情況是每個多塞11個1*1
4*4最佳情況是每個多塞5個2*2,當然沒塞滿的都塞1*1
3*3一個6*6能裝下四個,所以只要看最後沒裝滿那個就行
2*2同3*3
1*1…我想不用講了
注意不整除的情形要多用一個箱子(例:37 0 0 0 0 0 輸出2)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/19
卡好久的一題,終於過了
感謝masnec學長的指導
方法就是在第i列第j行那格存入這i*j矩形區域的和
之後用加加減減的方式就可以輕易算出每個區域的和了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:回到家還是繼續ACM == = 0820 00:19
→ sa072686 推:這…這是早上的||| 0820 00:22
→ sa072686 說:發文時間可以證明一切 0820 00:22
→ ducksteven 推:囧! 0820 19:45
→ sa072686 推:是10點不是22點啊… 0820 20:43
作者: sa072686 at 06/08/19
秒殺題一題
雖然我還寫了蠻久的
沒中譯,小翻一下
給兩個整數m和n,將m一直除以n看最後是否能夠得到1
且過程中一定要m能夠整除n才行
否則就是boring
請注意:題目寫的是non-negative number
所以請考慮除以0或除以1的情況
且若最後得不出1(例如得到0)也輸出boring
如果注意這些其實還蠻好寫的
不知道能不能用log做…?
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/20
好吧…我承認我回來後還是寫了|||
神奇的一題,之前一直沒想法的
現在竟然用很神奇的方法過了
明明就是最長路徑
因為單向的特性,我用bfs竟然過了
速度還不慢(0.152sec,約在200名)
講一下大致方法好了
先把所有點能連接的點全部記錄下來
之後用bfs每找到一個點就把所有能連的點做長度判斷
看是否從這點出發的長度會大於從其它點出發的長度
並一邊將最長長度存下來,若有兩個以上則挑點編號小的存
算完就是答案了
請注意若用雙向方式存點之間的連接將導致無窮迴圈(不過應該只有bfs會|||)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/20
雖然快出門了
不過看時間夠還是先解一題XD
這題其實也不難做,就是簡單的排列組合而已
只是有限定先後順序,其實只要把它反向記錄就行了
記下每字前面得先有什麼,之後就用一般的dfs做排列組合
放入的條件設為前面必須有所有該先存在的字母
若有一個沒先出現就跳過這字母
其實還不難做,input已確定用%s%c是可行的
也就是和題目說的,字母間可能有多餘空白一致
尾巴應該是沒有
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/20
數學題
可是這題很好心,公式和解法都給了
剛還很懷疑地跑去看了一下原文題目
…和中文的一模一樣,只是沒提j可以=0
如果j=0的話要做特別處理(例:0 0.3應輸出3/10)
其實就是後面那串/10^k而已(記得也要約分)
用pow還蠻方便的
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/20
好久前卡住的一題
之前竟然會卡在必須至少有一個是第二次綠燈
現在一下子就想出解決方法了(雖然還蠻暴力的)
看來有進步XD
其實也很直觀,就開一排bool如果第二次綠燈就在設綠燈時
把那排bool也給設為1就行了(當然要0也行|||)
這樣在確認該時間點綠燈數=紅綠燈總數時那排bool在同一時間點
為1時則為正確答案
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/21
卡好久了,結果masnec兩句話我就解決它了
一、sort by strength
二、lis
為何sort by strength呢?
我想過幾種方法:依負荷能力(力-體)或依體重
依負荷能力:
600 700
50 200
這組就掛了,因第二隻負荷能力150故排下面,但上面那隻是600…
依體重:
600 700
200 10000
這組也掛,因第一隻體重雖重,卻背不動第二隻
依力量:
依據力量排序的情形下,必不會有先出現的可以疊在後出現的上面的情況
lis若出現這情況一定失敗,而以上兩種排序依據都會出現
力量則不會,因為力量大代表有可能可以負荷對方體重
力量必大於等於體重,而若A力量>B力量則可推得A力量必>B體重
雖然未必能負荷,但可能可以負荷(不像依力-體時)
且因為A力量必>B體重故可以體重小但力量大的排在前面
因此依力量排序可以兼顧各種情況
至於LIS的方法就記錄目前為止最小負荷能力
為什麼記最小是因為在最大負荷能力內卻未必在最小負荷能力內
而對於每隻烏龜就是看在LIS中能取代哪些就全部取代
取代的條件是這隻烏龜擺下去時到目前為止最小負荷能力比原先的高
以最小負荷能力記錄時也可以知道該烏龜的體重前面有沒有辦法負荷
請記得若負荷能力=0的時候鳥龜還不會死
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/21
路徑題
好吧,我承認決定要學路徑後還是沒有去翻書
這題是dfs暴力拆的,不是標準的路徑解法
用dfs和bfs暴力解一堆路徑題了…
大致講一下方法好了
從起點出發,並取得每一條路的最小值
再找到通往終點那條路上,所有路的最小值中的最大值
那就是答案
正在想逆推行不行,實驗完後po文(不論成敗)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:這題是上次高市賽的題目 @.@ 0821 21:04
作者: sa072686 at 06/08/21
逆推成功
執行時間:0.196 => 0.154
看來逆推是比較快的
不過感覺比正推難寫多了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/21
剛剛喝水時
還好無意間往茶杯中看了一下
…中間浮著一隻蜘蛛|||
囧rz 我最討厭的生物竟然出現在那
還差點喝下去|||
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 06/08/21
我什麼我變副版了
版主回答一下啊
(偷偷說,其實還蠻爽的)
--
明天的 故事都是我的 是我的
所謂的 幸福快樂 不只一種
美麗的 春夏秋冬落葉 是我的
體驗過才懂夢是什麼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.18 (不失敗大學)
→ csftwpt 推:連學術看板也有八......... 0821 21:29
→ PG 推:段被3 0821 22:00
→ sa072686 推:呀,被發現(原po眼睛真好) 0821 22:15
→ sa072686 推:上次不小心發現有副版這種東西,就加了XD 0821 22:18
→ sa072686 說:(其實我也不知道副版是做啥的) 0821 22:20
→ csftwpt 推:就是可以一瞬間把你的文章全刪除 XD 0821 22:43
→ sa072686 推:即使是m文?XD 0821 23:09
→ Zero 推:好八... 0821 23:17
→ sa072686 推:…||| 0821 23:32
作者: sa072686 at 06/08/21
又一題被我用dfs解決了
事實上這題和544幾乎用一樣的方法
只是在讀入時先把每點間互相的距離存下來
用一樣的方法但取的值不太一樣
544是每條路的最小值中取最大值
534是每條路的最大值中取最小值
這題換逆推比較慢了(事實上0.8變0.797而已)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: hppy at 06/08/21
咦...
我出現了耶
恩...
繼續潛水去
ACM都看不懂阿 (閃
--
╭╮ 人生就像堆積木一樣
│╰─╮╭──╮╭──╮╭╮╭╮
│╭╮││ ▅ ││ ▅ ││╰╯│ 要一塊一塊慢慢來 ■ ■□
ˍ ╰╯╰╯│╭─╯│╭─╯╰─╮│ˍˍˍˍˍˍˍˍˍˍ■□ □□■ □
╰╯ ╰╯ ╰╯
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by hppy from 59.104.157.62 (種子電信)
→ sa072686 推:學姊好~* 0821 23:32
作者: sa072686 at 06/08/21
這題…不知道是不是我快睡著了
一直沒什麼好想法,後來乾脆暴力硬跑
2.99x sec
真是個好成績,不過這種路徑題我用dfs跑完所有結果
然後開陣列存起來竟然沒有tle,已經該偷笑了
好,路徑題暫時不寫了
還是先去翻翻書再說,只靠dfs和bfs大概不太夠
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:跟 544 同題型, 可以想想把 Floyd Warshall 變形 0822 17:50
→ csftwpt 推: 不知道有沒有拼錯 0822 17:50
→ sa072686 推:那是什麼@@?我三題都是dfs硬暴的…||| 0822 18:53
→ csftwpt 推:所有點到所有點的最短距離... 0822 19:13
→ sa072686 推:…||| 該看書了 0822 19:42
作者: stmkesl at 06/08/22
我是大頭 不好意思剛剛一下子沒認出你來
南女96級直排輪社 拆網的 已經是老人了
希望學弟不會覺得學姐是個很聒噪的人(囧)
先這樣吧 我要走了~
--
But there's a danger in loving somebody too much,
and it's your heart can't trust......
Baby, sometimes, love just aint enough.
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by stmkesl from 218.175.235.241 (中滑一番)
→ sa072686 推:學姊好~* 0822 00:19
作者: sa072686 at 06/08/22
又是題幾何題
不過事實上不難,雖然我debug了很久
但只要把所有情況一次考慮完事實上就不用
線段和矩形的相交有數種(注意不是直線)
最基本的就是切(割)過
其它情形就只剩線段在矩形內
而這情形看座標就比對得出來
接著是切過的部份,切過必交矩形之至少一邊(包含只交於一點
及恰重疊矩形之一邊兩種)這兩種看直線方程式用x=...和y=...代入
再判斷交點座標是否同時在線段上和在矩形邊上即可
至於恰割過的部份同上即可
另外就是小心線段的直線方程式斜率無意義(x1-x2=0)時
這情形要另外看(除以0會出現錯誤)
不過還蠻簡單的,套一下460的方法就好
判斷兩線段在同一直線上時是否部份(或全部)重疊之方法:
設線段a的兩端點小者為w,大者為x;線段b的兩端點小者為y,大者為z
則若w<=z且x>=y時代表部份(或全部)重疊
至於證明,最簡單的方法就是把重疊的三種可能(小包含於大、a在前且部份重疊、
b在前且部份重疊這三種)都列出來看看,都符合
不然想一下也可以想得通(說穿了就是不會證|||)
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/22
地圖題,還蠻麻煩的,不過bfs可以做
而且還是見鬼的23名,0.002sec |||
沒中譯,小翻一下
給你一張地圖,上面有許多的'X',問從給定的第一個X到第二個X
最少要經過幾次轉折?(出發那次也算)
且途中不能經過其它'X',但可以走外圍(參考SAMPLE INPUT)
若找不到走法則輸出IMPOSSIBLE
我是用bfs配strcat建表,將它弄成周圍一圈空白的情形
接著對每一組重建一次地圖,再用bfs走一次看看
每次都走到沒路(為防轉折少的路步數多)再看最小轉折數
至於bfs看轉折數的方式是開兩排二維陣列(四排一維也行啦|||)
一排存下一個要處理的點的x、y座標
另一排存下這格的前進方向和目前為止的轉折數
在處理時,目標格子的轉折數=目前格子的轉折數
若前進方向不一則加一
若無法前進則看該格是否為目標格,若是則記錄轉折數
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:輸出INPOSSIBLE一定會WA的... 0822 22:22
→ gloompisces 推:我該說樓上中肯嗎? 0822 22:23
→ Zero 說:我一向很中肯XD 0822 22:26
→ csftwpt 推:我輸出 no way. 也 WA.. 真奇怪.. 0822 22:51
▲ sa072686 改@2006/08/23 Wed 13:04:23
→ sa072686 推:已修正。(養台機器人真好?) 0823 13:04
→ Zero 呸:很抱歉,我是用隻算的~~~ 0823 18:48
作者: milkbear at 06/08/23
嗨 學弟
我是家齊96的米可
一隻很活潑純潔的熊
請多指教^^
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by milkbear from 59.113.80.16 (中滑一番)
→ etetet91 推:請多指教^^ 0823 23:34
→ sa072686 推:請多指教^^ 0824 00:27
作者: sa072686 at 06/08/24
MST(最小花費擴張樹)
為了這兩題害我昨天沒寫出半題
想說剛好翻書有翻到就試著寫
結果錯誤百出|||
後來抓抓抓終於把蟲抓完了
…10147解0.256sec,第四名
10397解0.76sec,第五名
這是怎樣…完全抄書的耶
講講MST好了
最小花費擴張樹:以最小的花費連接起所有的點
每個點都要連到,但只需連一次,且必須花費最小
做法:
先開兩排陣列,設為x、y代表所有點的最小距離和從哪裡連
接著先找一個起始點a,將它在x陣列中的值設為-1
然後找尋和a點相連的所有點,並將它們的距離存在x陣列中
再把y陣列存入a代表由a點過來
接著在x中找尋離a點最近的點b,再將它設為-1
接著以b為起始點如上述方法尋找,若有點連b比連a近的
則將y陣列該點的值設為b,之後再找最小的,…
直到所有點皆被設為-1為止
連接所有的點和該點在y陣列中的值,即成最小花費圖
且連線必為點的數量-1
不知道哪「台」機器人說用p法在10147會tle的?
//雖然確實因為沒寫好,tle了2x次,不過那是失敗作
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Macaca 推:害我用k法Orz //300耶,沒搶到囧" 0824 19:22
→ sa072686 推:其實k法和p法不都一樣嗎…順序問題而已 0824 21:24
→ csftwpt 推:複雜度不同? 0824 21:34
→ Macaca 推:我覺得有時候要看測資XDrz 0824 21:43
→ sa072686 推:不確定,反正p法還能排4、5名也不慢就是 0824 21:57
→ Zero 推:複雜度差一點點而已,基本上他們的理論差不多 0825 01:11
→ Zero 說:隻,是隻!基本上那是ACM討論版說的 0825 01:12
作者: sa072686 at 06/08/24
同上篇編號300的10147和10397
只是它沒有一開始就連好的路,所以比較單純
但是為什麼我的排名反而掉下去了|||
0.004p.e.,可是前面一堆0.000和0.002
不過有了前兩題的經驗加上這題比較單純的關係
好寫多了
//在403寫的,現在補po,結果因為沒vc忘了拿掉後面的while(1);
//導致tle了2次…囧rz
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/25
還不難寫的一題數學題
實際上因為都是正三角形,而且排列方法很好算
所以小心點就能過
做法:先把給的a加上1之後開方得到某數
之後利用這數字先算出前面的高,再以取餘方式得到擺法(倒/正)
這樣可以得出一個座標了,另一個座標把中心當作0
之後以正負表方向,數值表距離就行了
該小心的地方:
一、在做的時候請記得高不是1
二、注意+1之後overflow的問題(我用long long)
三、請不要和我一樣把題號打成10223(還在想怎麼會是how many nodes…)
//第三點其實可以忽略||| 沒人會白痴成這樣吧…
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/25
好久沒解過秒殺題了
沒中譯,小翻一下
給你某些時間(以非遞減順序出現)
若該時間點有速度,表示速度在這個時間點發生變化(不用輸出)
若無,則輸出在這時間點已跑了多少距離
請注意速度為時速
這題很容易,分段計算就可以了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/25
3. SA [██████████ ] 41% (386)
48 小時內: 5 上星期: 14 上個月: 100 ACM ID:11557
達成!
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ etetet91 推:強。 0825 21:02
作者: sa072686 at 06/08/26
※ 本文轉錄自 [gloompisces] 看板
作者: gloompisces ( ) 站內: gloompisces
標題: [ACM] 10273
時間: 2006/08/24 Thu 18:24:37
翻譯一下
這題是再說一個人有N頭牛
每頭牛製造milk的能力是有循環性的
這個人每一天都要殺掉一頭那一天製造milk最少的牛
但是如果有兩隻以上同為最少,他就不殺
問你最後會剩幾頭牛? 最後一頭牛什麼時候被殺
---------分隔線---------
怎麼確定已經不會再殺牛了呢?
我的作法是lcm
如果這一天有殺牛,剩下的牛的循環性分別是2,2,3,8,7,6
我取lcm[2,2,3,8,7,6]=192
所以192天內若沒有殺另一頭牛,則結束
在WA了好幾次後我看到討論版上有人說一定在3000天內結束
就改了code去傳
結果..
2006/08/24 10:11:45.675 Accepted 0:09.904 436 55508 C++ 10273 - Eat or Not to Eat?
後來抓到bug再傳一次
是有進步啦....
2006/08/24 10:15:14.833 Accepted 0:09.873 436 55508 C++ 10273 - Eat or Not to Eat?
詭異的題目....第一名竟然是0.000秒..
--
I always bring the lovely smile which you gave
Going ahead to find my losing precious
If the tears slide down because of my careless
I will use the hand which you held to wipe off
Angla Chung -- Losing Precious
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.34 (不失敗大學)
→ brucehsu 推:看到milk我怎麼想到milkbear?(汗) 0824 21:23
→ gloompisces 推:樓上...其實我在打字時就想到了.... 0824 21:49
→ csftwpt 推:我看到題號就想到了 XD" 0824 22:43
→ ducksteven 推:每頭牛製造milkbear的能力是有循環性的 0825 00:50
φ sa072686 轉:從 [gloompisces] 看板,于 2006/08/26 Sat 11:45:37
作者: sa072686 at 06/08/26
秒殺題一題,不過昨天因為索尼的關係
就遵從公告不po文,不過現在應該可以了
補po一下,不過dfs不熟的大概秒不掉吧
雖然是tree但是dfs可以做
至於落葉堆的存法嘛,先算出左邊最寬到多少,右邊到多少
把陣列開兩倍大,拿變數當指標就行了
這方法和10800畫那個鬼股市圖是一樣的
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (索尼加油!加油!!)
作者: sa072686 at 06/08/26
事實上這只適用於數字小的時候
將階乘用質因數表示並把質因數表建起來
之後就把階乘配合減法就可以完成約分了
例:5! / 2!
5! = 2^3 * 3^1 * 5^1
2! = 2^1
故
k[3] = {3,1,1}
l[3] = {1,0,0}
相減得
m[3] = {2,1,1}
故
i = pow(2,2) * pow(3,1) * pow(5,1) = 60
// compiler: 'pow' : undeclared identifier
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (索尼加油!加油!!)
→ bruce3557 推:嗯果然是強者! 0826 22:36
→ chensc 推:是…階乘。 0827 09:36
→ sa072686 推:N! = N階層,不是嗎@@? 0827 10:02
→ csftwpt 推: 乘 XD" 0827 10:35
→ sa072686 推:囧rz,我錯了好久 0827 10:36
▲ sa072686 改@2006/08/27 Sun 10:37:33
作者: sa072686 at 06/08/27
真是糟糕,寫好了竟然不能傳,拖到今天…
不過還是確定AC才放上來
感謝masnec學長的指導
這題如果用暴力應該是掛定了
不過如果用類似於10338的方法解
可以不用管它的順序
至於方法嘛,大致就像這樣:
拿caba來看
c開頭,所以看長度4前面有哪些組合
a開頭,故後面有cba,3! = 六組
b開頭,故後面有caa,3! / 2! = 三組
故長度四且c開頭的組合在第十組
把c扔了,變aba
a開頭,故不理它,把a扔了變ba
b開頭,故看長度二有哪些組合
a開頭有b,故有1! = 一組
由此得到6+3+1+1=11,因為一開始本來就有一組,要加一
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (來攜手重建索尼吧!)
作者: itspeter at 06/08/27
※ 引述《sa072686 (南一中97級小教學~*)》之銘言:
> 事實上這只適用於數字小的時候
> 將階層用質因數表示並把質因數表建起來
> 之後就把階層配合減法就可以完成約分了
> 例:5! / 2!
> 5! = 2^3 * 3^1 * 5^1
> 2! = 2^1
> 故
> k[3] = {3,1,1}
> l[3] = {1,0,0}
> 相減得
> m[3] = {2,1,1}
> 故
> i = pow(2,2) * pow(3,1) * pow(5,1) = 60
> // compiler: 'pow' : undeclared identifier
其實我覺得,如果只是...在這樣的情況下,只接對5~3進行因式分解就好了吧
還有pow 是個小數運算,用它來算不一定會比較爽...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by itspeter from 218.175.236.130 (來攜手重建索尼吧!)
→ sa072686 推:這東西很容易overflow…用這樣約分方便 0827 10:33
→ sa072686 說:pow在多次時好用 0827 10:34
→ csftwpt 推:是彼得... 0827 10:36
→ gloompisces 推:強者彼得... 0827 10:42
→ sa072686 推:烤肉時認識的XD 0827 10:44
作者: sa072686 at 06/08/27
嗯,剛翻過編號七那篇實在是不怎麼好懂
感謝gloompisces學長的指導
這題用lis,lcs幾乎是必tle的
舉例:abcaa cbaa
那麼答案應該是caa或baa(長度三)
lis的做法是:
以j[a][b]=c代表第b個a字元出現在c位置
故以此法,應該把abcaa存成如下:
j[97][1]=1
j[97][2]=4
j[97][3]=5
j[98][1]=2
j[99][1]=3
接著讀入cbaa時
讀到c,則陣列k的內容為:{3}
讀到b,則陣列k內容:{2}
a => {2,5} => {2,4} => {1,4}
a => {1,4,5}
故得到長度為3
說明:
讀到c時這一定沒問題
b時由於b在c前故b有較大可能能夠得到更長的字串
但b只能取代c因為c後面沒有任何b
讀到a則因為a有在b後面故形成ba的情形
但因為也有a在b前所以形成aa的情形
再讀到a時因為有a在a之後所以得到aaa的情形
至於為何出來不是正解我想應該不用解釋
不過用回溯方式就可以知道這方法是正確的,回溯結果是baa
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (來攜手重建索尼吧!)
→ csftwpt 推:WA 到快吐血了 嘖嘖 0827 15:39
作者: sa072686 at 06/08/27
蠻煩的一題
感謝csftwpt的指導(好難記的id,囧rz,還好有水球)
因為黑白不會互相攻擊(西洋棋棋盤沒人沒看過吧@@?)
所以分開討論即可
用j[a][b]=c存下在a*a大小的棋盤上於白色部份放b個棋子的方法數c
k[a][b]=c存下同上但為黑色部份的
之後交叉就可以算出答案了
因為黑白互不影響,方法數用dfs可行,但請注意防重覆
走過的不要再走就行了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (來攜手重建索尼吧!)
作者: sa072686 at 06/08/27
寫題簡單的輕鬆一下…
題目很簡單,要是知道even number就看得懂了
//我拿去翻譯才看懂|||
雖然我還是wa了幾次(又是老毛病,還沒讀完就break掉了)
基於沒中譯還是小翻一下
給一個boolean的矩陣,若每行/每列加總皆為偶數則為ok
若不全為偶數,但改掉其中一個元素可以變成都是偶數則輸出點座標
其它的情形全為corrupt
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (來攜手重建索尼吧!)
作者: PG at 06/08/27
我用單純暴力而已
然後用precalculation的技巧避免TLE
(好孩子不要學)
--
╔─────╗ ╮ │◎├───────────為了一個夢想────────
│Score │─│§─┼─┼─P─────P──── 我必須有所放棄 ──旋律─
│0000133440│─│∣─┼U┼O───U─O────即使現在那是指宅物─────
│Evaluation│─╱──┼─┼──────────── 我卻依然迷惑 ──淺野真澄
│●●●●●│﹝╭╮─┼─┼─────────────────────────
╚─────╝╰╰╯─┼C┼────C─── 台南一中資訊社 7th教學 PG───
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.81.203.157 (來攜手重建索尼吧!)
→ PG 推:已經算一分多鐘了 還在算 囧" 0827 14:26
→ sa072686 推:那串英文是什麼意思@@? 0827 16:28
→ bruce3557 推:你是學長嗎@@ 0827 16:30
→ sa072686 推:我不是@@ 0827 16:31
→ bruce3557 推:囧...我是指PG 0827 16:32
→ sa072686 推:單純暴力做得出來就太強了…我的暴力用p4 3.0g照爆 0827 16:32
→ sa072686 推:囧rz PG的話學長沒錯 0827 16:32
→ bruce3557 推:XDDD確實暴力可以喔,可是我不會co 0827 16:34
→ itspeter 推:試著會一下用Dymanic Programming做這題.. 0828 09:33
→ sa072686 推:我這邊有一份dp的code可是看不懂… 0828 10:45
→ sa072686 推:學長能說明一下這題dp的方法嗎? 0828 10:50
→ itspeter 推:它複雜的程度不太像文字可以說明的.. 0830 15:43
→ sa072686 推:喔… 0830 20:21
作者: gloompisces at 06/08/27
※ 本文轉錄自 [gloompisces] 信箱
作者: sa072686 (南一中97級小教學~*)
標題: Bishops DP (fwd)
時間: 2006/08/27 Sun 13:00:54
※ 引述《csftwpt (Eric)》之銘言:
//w[x][y],b[x][y] 表示黑色/白色中, x*x 的棋盤放 y 個 bishop 的方法數
//左上角塗的是白色,相間塗黑白兩色進去,黑白不會互相攻擊,故分開處理
#include <stdio.h>
int main(){
int n,k,i,j,m;
long long w[31][31],b[31][31],Bishops;
w[1][0]=w[1][1]=1;
for(i=2;i<=30;i++){ //棋盤的邊長
w[i][0]=1; //這應該不用解釋
w[i][1]=w[i-1][1]+(i-(1-i%2)); //多出了一條可以放的地方
可以多放i-(1-i%2)個
i是偶數時要減1
for(j=2;j<=i;j++){ //主教數,i*i 的棋盤最多只能放 i 個主教
if(j>i-1) w[i-1][j]=0;
w[i][j]=w[i-1][j]+w[i-1][j-1]*(i-(1-i%2)-(j-1));
//j>i-1時,w[i-1][j]根本不會被處理,所以預設值設為0
//我承認下一行我還再研究
}
}
b[1][0]=1;
b[1][1]=0;
for(i=2;i<=30;i++){
b[i][0]=1;
b[i][1]=b[i-1][1]+(i-i%2);
for(j=2;j<=i;j++){
if(j>i-1) b[i-1][j]=0;
b[i][j]=b[i-1][j]+b[i-1][j-1]*((i-i%2)-(j-1));
}
}
while(scanf("%d %d",&n,&k)==2){
if(n==0 && k==0) break;
Bishops=0;
for(i=0;i<=k;i++){
if(i>n || k-i>n) continue;
Bishops+=(w[n][i]*b[n][k-i]); //這裡應該不用解釋吧
}
printf("%lld\n",Bishops);
}
return 0;
}
這篇要不要公開你來決定
到目前為止我還沒完全弄懂
那個公式太驚人了...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (來攜手重建索尼吧!)
φ gloompisces 轉:從 [gloompisces] 信箱,于 2006/08/27 Sun 15:58:22
▲ gloompisces 改@2006/08/27 Sun 16:07:54
→ sa072686 推:基本上…弄懂再公開,公開想法就行 0827 16:29
→ gloompisces 推:嗯 0827 16:34
→ sa072686 推:不過你ac了耶 0827 16:36
→ gloompisces 推:複製公式的.... 0827 19:57
作者: sa072686 at 06/08/27
今天不死心地挑戰了這題
發現用dfs實在是秒殺題一題
為什麼昨天一直寫不出來…
好像也沒什麼好說的,即使暴力也可以0.000sec AC
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (來攜手重建索尼吧!)
→ bruce3557 推:一切都是感覺 0827 17:34
作者: sa072686 at 06/08/28
還不難寫的一題
就是陷阱還不少
需要注意的是:
一、多頭不算(多個點沒有人連到它們)
二、1 5 5 6 6 1 0 0這樣有循環也不算
三、有自己連到自己的不算
四、若不能所有點皆連在一起也不算
因為不確定數字是多少,可以把它重新編號
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (來攜手重建索尼吧!)
作者: PG at 06/08/28
有中譯 所以我就不翻了
這題如果在N<0的情況之下
輸出答案的時候只要把它控制在奇數就好
有一個特殊case -2147483648 要輸出31
大概就這樣了..
--
╔─────╗ ╮ │◎├───────────為了一個夢想────────
│Score │─│§─┼─┼─P─────P──── 我必須有所放棄 ──旋律─
│0000133440│─│∣─┼U┼O───U─O────即使現在那是指宅物─────
│Evaluation│─╱──┼─┼──────────── 我卻依然迷惑 ──淺野真澄
│●●●●●│﹝╭╮─┼─┼─────────────────────────
╚─────╝╰╰╯─┼C┼────C─── 台南一中資訊社 7th教學 PG───
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.81.203.157 (福爾摩沙固網)
→ sa072686 推:這題我的做法是求所有質因數個數的最大公因數耶XD 0828 16:31
→ sa072686 推:好感動,有人po文了 0828 16:31
→ csftwpt 推:這題就用 double 硬做啊, 運氣好一點就 AC 了 0828 16:36
→ sa072686 推:硬做?用pow暴力try? 0828 16:41
→ csftwpt 推:對 會 AC 哦 可是要運氣夠好 0828 16:49
→ PG 推:專業的五樓用這種方法AC的? 0828 16:54
→ csftwpt 推:沒錯 orz 0828 17:49
作者: sa072686 at 06/08/28
很好寫的一題,bfs就可以了
這裡有個特殊技巧在回溯上比較方便
它給你起點和終點時,原本一般的做法在回溯答案時
必須要先將它存在陣列再印出來,因為得到的是從尾巴回來的答案
可是這時只要把終點當起點找就行了
回溯時就可以直接做輸出的動作
另外請注意起點和終點有可能根本就不存在
這種情況直接輸出no route就行了
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:注意陣列必須開到500以上(我開500re,開1000ac) 0828 17:45
作者: sa072686 at 06/08/28
還不難解的一題
用dfs,因為必須連成一直線
不過要注意的就是未必從第一點開始
可以試試把第一組sample input的第一點5 19放到最後一個輸入
只從第一點出發的code會跑出310.xx(至少我的是@@)
實際上答案應該一樣
我用的方法比較笨,每個點都當起點跑一次
事實上應該有更好的方法…
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/28
秒殺題一題
當然前提是會LIS,不過真的沒看過這麼單純的LIS
我被題目騙了,多AC了3次…
「不夠效率的演算法可能會因INPUT過大而導致TLE」
我就開了100000,後來看秒數修正…
開100也過|||
那大概是INPUT都是一些沒用的東西在疊來疊去吧|||
對總數不影響這樣…
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/28
開995000結果RE,MEMORY使用30352
開1000000結果MLE,MEMORY使用60928
這是怎樣…
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:MLE是有點詭異,你開的是樹種嗎? 0828 23:14
→ sa072686 推:開列數||| qsort後算重覆次數 0829 10:56
→ csftwpt 推:乖乖建 tree 吧... (拍拍) 0829 13:14
→ sa072686 推:建tree? 0829 13:42
→ gloompisces 推:是的.....建tree吧 0829 14:05
→ sa072686 推:怎麼個建法@@? 0829 14:15
→ gloompisces 推:我也不會(攤手) 0829 17:24
→ sa072686 推:已解決 0831 00:09
作者: sa072686 at 06/08/28
事實上把公式推出來就不難寫了,不過不知道該算是什麼類型?
沒中譯,小翻一下
給你兩個數字p和q,輸出以q個非負整數的和表示出p的方法之末六位數字
…沒看錯,一行就翻完了|||
這題可以由簡單的數字去推出遞迴式,再把它用陣列記錄就行了
推法:
q=1很簡單地可以知道答案必為1
之後若q=2,則
0+p
1+(p-1)
…
p+0
共有p+1個,而若將p和q的答案表示為abcc(p,q)(個人習慣,別管它的意思|||)
//我的code除非出現兩個以上函數否則必只用abcc命名之…
則可以發現q=2時可表示為:
abcc(p,1)
abcc(p-1,1)
…
abcc(0,1)
再來看q=3可以發現:
0+0+p
0+1+(p-1)
…
1+0+p
1+1+(p-1)
…
(p-1)+1+0
p+0+0
由此可得知這裡能夠表示為:
abcc(p,2)
abcc(p-1,2)
…
abcc(0,2)
而以上又可以上述q=2時的方法表示之,故可寫出其遞迴式:
int abcc(p,q)
{
int w,x;
if(q==1)
{
return 1;
}
for(w=0,x=0;w<=p;w++)
{
x+=abcc(w,q-1);
}
return x;
}
至於為什麼會在這貼出遞迴式呢?
如果你用這東西不會tle我砍ACM帳號…
//反正我所有的code都還在
從這應該可以推出怎麼用陣列存它了
剩下的自己想囉
--
TFcis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/11/04 Sat 22:09:59
作者: sa072686 at 06/08/29
題目是蠻複雜的,不過真的還不太難想
感謝gloompisces學長的指導
觀察一下就可以發現:因為只有一隻貓不在其它貓的帽子裡
所以最基本的就是只有一隻,而且不戴帽子
這個很容易被忽略
再來就是那隻貓有戴帽子的情形
這樣至少有n+1隻了,而沒戴帽子的有n隻
這時可以發現不管給誰戴帽子都會多出n-1隻貓出來
這樣子就知道規則了,而且必是唯一解
唯一的不唯一解是在1 1的情形
這個想一下就可以了解
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/29
陷阱蠻多的一題,不過其實不難寫
首先注意n=0時n! = 1,這時若d=1輸出1,其它情形輸出0
其它就看n!能不能整除d,若d有n!所沒有的質因數或質因數個數超過n!
則輸出0,其餘情況用因數個數的公式
設n=a1^b1 * a2^b2 * ... * an^bn
則n共有(b1 + 1) * (b2 + 1) * ... * (bn + 1)個因數
見鬼的17名,我只是因個人喜好把n!全部先分解成標準分解式而已…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/29
還不難寫,只是有點複雜
我用的方法我覺得已經夠暴力的了
竟然還0.004sec AC(62名)
大概講一下方法好了
首先因數分解掉m,然後看是否有大於n的因數
若無則因數分解n!,然後比較
只需分解m有的就行了
若m有的質因數,個數大過n!(例:m=a^3,n!=a^2)
則不可能可以整除
若非,則看n的質因數個數除以m的質因數個數的最小值
例:m=a^3 * b^6,n=a^4 * b^12 則4/3<12/6故取1
取出來就是答案
至於n!看有幾個質因數a的方法為:
n/a^1 + n/a^2 + ... + n/a^b (a^b<n)
為什麼呢?想一下吧,不難理解
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:小心n=1時必無法整除 0829 13:59
作者: sa072686 at 06/08/29
噁心的一題大數題
不過後來分析後還不算太噁心,比起10213好上太多了,也沒10106難
但後來竟然落到重寫的命運|||
我怎麼會笨到把小數和整數分開算啊|||
後來乾脆把小數點拿掉(用%d%c%s…好多樣化的一次scanf)
然後直接算,再注意小數點位置
不過值得注意的是若小數點位置比位數還前面記得補0
其它…好像沒什麼要小心的,好久沒解到一傳就過的題目嚕
連ac率>60%的題目有時都要wa個兩三次|||
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/29
終於達成了
不過450就…囧rz 開學前實在是辦不到
好多人都在打感想,我也來打好了
事實上我在剛入資訊社時,對寫程式只是覺得好玩
所以加入的前幾個禮拜每天很勤地中午利用公假時間
在社部狂解ACM,不過在1x題左右就懶掉了
大概是因為那時還不算是「興趣」,而是「比較有興趣」而已吧
記得寒假開始時題數是20,都在玩,沒寫到什麼
雖然覺得寫程式還蠻好玩的,畢竟也只是好玩,萬一碰上更好玩的東西
還是扔到一邊去,加上那時功力還不夠,所以也比較沒興趣
寒假開始了,本來應該利用時間好好拼的,卻因為愛玩
gloompisces學長說寒訓前要30題,就去寫到30後丟著再去玩
寒訓完變成31題,因為寒訓的東西都聽不懂,可能也比較沒心聽
之後開學前gloompisces學長說最好在開學前寫到50題
我就乖乖的寫到了50題,寫完看到旁邊有一題四星題(5xx,倒水的)
就把它寫完,51題,之後又是丟著,因為寫起來還是覺得好累,偶爾寫寫而已
開學後公佈參加資訊奧林匹亞培訓營初選(TOI)時發現自己在名單上
想說既然都被選上了,拼一下好了
//其實有一半是因為發現有同屆的寫到71了,這也是主要動力之一
記得三月份去考的時候衝到了88題,每天回家只寫ACM,中午放棄午休不睡
到社部還是拼ACM,不過去考還是掛掉,還好完全沒粗心到比較不覺得可惜
都是真的不會寫(事實上計概也有差到,計概48分程設還有50分…)
再來就把段考爆掉了(3X名…快40了),沒看書的後果
之後又認真了一段時間,把題數衝到130左右,那時只是單純不想輸給同屆的
所以130左右贏了一些後又扔了|||
(目前手上這本資料結構與演算法其實是用爆段考換來的進步獎禮卷買的…)
不過,到暑假才翻第一次…||| 因為發現指標看不懂的情況下連資料結構都看不懂
//加上又買到很噁心的C++,更看不懂了,連陣列都很畸型
之後到190前的題數是怎麼來的呢?
「呀,又快到段考了,又不能玩了…好吧,不想唸書,來寫ACM」
就這樣每次段考增加個30題左右這樣
期末考完時,把LUCKY貓的二星題從頭到尾看過一次
「咦,80%以上都好簡單喔」之後就寫寫寫,也真的寫得很順
然後就這樣喜歡上ACM了,暑假前幾天達成200
開學前一天達成400,這都是自動自發的結果
因為ACM變成了興趣,每天幾乎都把它當成娛樂,當成在玩
每天都至少寫一題以上(當然,這在前幾天破功兩次了|||)
//一次是校內初選那天東拖西拖就沒寫到,另一次是ACM掛掉不能傳|||
也更確定了想走資工這條路的決心
雖然高二會比較忙,雖然課業成績已經很爛
不過我想我不會放棄ACM,不會放棄全國的比賽,更不會放棄進TOI
如果可以,我想成為第二個PP(好像想太多?)
現在題數400已達成,我想有一陣子我的題數不會太明顯增加
我已經寫了太多秒殺題了,也該看看書增加自己的實力
以應付那些ACM的難題,同時也讓解題過程更順利
同時也更能應付T9的學弟們的發問,也希望能從教學中學到更多東西
//當然,希望T9有學弟能勝過那位嗆完人後跑去足球隊的學弟
不小心打了好多…那就到此為止好了
另外也希望有在看這板的人別只是看,而能夠多做回應,分享你們的想法
或是寫到一些新題,把它們PO出來和大家分享
而且我相信在說明的過程中能夠讓自己更加地了解自己不懂的地方而去多做思考
讓想法更清楚
那麼就這樣吧,懷疑這篇會有幾個人看?有看的推一下文吧
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:我怎麼不記得那時候有說要你寫到30題和50題... 0829 17:32
→ sa072686 推:這…需要我翻翻看歷史訊息記錄嗎@@? 0829 17:34
→ gloompisces 推:我正在翻.... 0829 17:37
→ gloompisces 推:好........我承認我都有說 0829 17:40
→ styhihs 推:嗯 加油! 0829 17:44
→ sa072686 推:嗯,翻到了XD 不過也得感謝你那時有要求我寫 0829 17:45
→ csftwpt 推:XD 好厲害這麼快 400... 0829 18:04
→ panda1990 推:學長好厲害~* 0829 18:18
→ csftwpt 推: 學長好厲害~* 0829 18:22
→ gloompisces 推:長好厲害~* 每次都欺負長ID.... 0829 18:25
→ sa072686 推:囧rz 一樓才是學長 我是九七級的呀>"< 0829 18:41
→ panda1990 推:我知道阿XD 0829 18:41
→ sa072686 推:囧rz 還以為是說我 0829 18:42
→ sa072686 推:gloompisces學長才真的厲害~* 0829 18:42
→ gloompisces 推:最好是,剛剛是誰教我什麼鏈結串列和指標? 0829 18:44
→ panda1990 推:我不課以裝學妹喔Q_Q 0829 18:45
→ sa072686 推:可是你教我好多東西耶(含數學)連if那些也是 0829 18:48
→ sa072686 推:原來panda也有在看這個板…而且有在看文XD 0829 18:54
→ bruce3557 推:學長好厲害~* 0829 23:59
作者: sa072686 at 06/08/29
果然用tree就解決了
不過秒數實在是很…,2.99xsec(竟然還在前1/4 |||)
我是用二元搜尋樹做的,比樹根小就往左放,否則就往右放
若已存在子樹就看子樹的樹根,若和樹根相同則+1
最後以中序走訪一次就行了
不知道有沒有更好的方法?快3sec了,和那些0.4左右的實在是不能比
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/08/30
雖然應該還用不到,也應該沒幾個t9的會來看…
算了,反正無聊又不太想讀開學考還是寫一下
這篇從最最最…最基本的東西講起
首先是用來寫c語言的軟體
目前比較常見的是Microsoft Visual C++和Dev-CPP
新社部不知道有沒有前者可以用…
前者要付錢買,功能強大(不過在我來講用不太到|||)
主要是縮排方便,不過編譯器似乎比較舊了點
後者是免費軟體,網路上就找得到下載點
而且可以跑long long
缺點就是縮排做得超爛,學長說那根本就是智缺型縮排
不過看在它免費又好找的份上就加減用吧
//事實上如果夠行,網路上也抓得到VC的
反正兩種寫起來不會差太多,主要是縮排
打開軟體後,DC直接按CTRL+N就可以了
VC按完還要選FILES => C++ SOURCE
再來就可以開始寫了
注意不像VB不分大小寫,C語言大小寫是視為相異的
基本骨架如下
#include<stdio.h>
int main()
{
return 0;
}
當然,c++使用者請把第一行改成以下
#include<iostream>
using namespace std;
接下來這些解釋,想看就看,不想看就硬記上面的程式碼就好…
#include是載入一個函式庫,除了基本語法外大部份語法都要先載入函式庫
否則編譯時會不認得這語法
int main()是建立一個名為main的函數,這函數會在程式執行時先被執行
執行到return 0;表示離開main函數,同時也代表程式執行結束
之後就把程式碼寫在main()裡面吧
先講講最簡單的在螢幕輸出文字的方法
C請使用printf(),使用範例如下:
printf("Hello!");
這樣執行程式時就會跑出Hello了
當然,使用DC的人請在return 0;的上一行加上while(1);
否則還沒看到東西就因為程式執行結束,視窗就被關掉了…
記得一定要加雙引號,至於原因嘛
在雙引號中的會被認定為是「字串」而不會被當成是C語言來處理
另外要注意換行是要手動的,意思是?來看以下的程式碼
printf("Hello!");
printf("How are you?");
以上會輸出
Hello!How are you?
所以說一直用printf是不會換行的(除非超出視窗容納範圍)
想換行請加上\n(會html的可以當它是<br>)
以下兩種寫法都代表一樣的意思:
printf("Hello!\n");
printf("How are you?");
和
printf("Hello!\nHow are you?");
執行結果都是:
Hello!
How are you?
至於C++的嘛,就這樣寫
cout<<"Hello!"<<endl;
cout<<"How are you?";
這樣就可以了,其實大同小異的,endl代表換行的意思,不加雙引號
如果加了它會當字串處理,會跑出endl這四個字母喔
如果在雙引號中加入\n也是可以的
先這樣吧,如果晚點英文看完還有時間再貼
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:把智障性 TAB 關掉不就好了? 0830 21:17
→ PG 推: 把智缺型 TAB 關掉不就好了? 0830 21:49
→ gloompisces 推:缺型 TAB 關掉不就好了? 怎麼關= = 0830 21:50
→ hsun 推: 0830 21:50
→ PG 推:專業的五樓說 把滑鼠移到選項上面 按一下左鍵 就可以了 0830 21:51
→ hsun 推: 把智缺型 TAB 關掉不就好了? 弄錯= = 0830 21:52
→ sa072686 推:囧rz 關了變手動 還是輸VC一點點 0830 22:16
→ sa072686 推:結果都是學長在看這篇?囧rz 0830 22:16
→ gloompisces 推:這個版還沒有98級的逛過 0830 22:18
→ sa072686 推:似乎是有一個? 0830 22:18
→ csftwpt 推:為什麼我的 DevC++ 的縮排功能跟 VC 一樣強 = =" 0830 22:19
→ sa072686 推:這麼說是我家的沒調整好? //4860的縮排的確是不錯 0830 22:25
→ gloompisces 推:聽說4.9 9.0比9.2好很多? 0830 22:26
→ csftwpt 推:我這裡是 4.992 不錯用啊~~~ 0830 22:28
→ sa072686 推:VC好…連貼上都方便,也不用加WHILE(1)(因為這個TLE過 0830 22:34
→ csftwpt 推:在檔尾加入 scanf(" "); 就可以了... 0830 22:47
→ sa072686 推:原來…又學到一招XD 0830 23:30
→ sa072686 說:知道while前還乖乖用system("pause")的… 0830 23:30
φ chensc 轉:到 [TFcis9] 看板,于 2006/09/03 Sun 18:35:28
→ Robin 推:把智慧型TAB關掉 VC++的逐步執行偵錯很好用 1115 11:22
作者: itspeter at 06/08/31
※ 引述《sa072686 (南一中97級小教學~*)》之銘言:
> 開995000結果RE,MEMORY使用30352
> 開1000000結果MLE,MEMORY使用60928
> 這是怎樣…
這可能多少代表你程式有bug..
不一定是memory的問題..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by itspeter from 140.112.252.9 (椰林大學)
→ sa072686 推:我用完全相同的code改陣列大小試傳的說… 0831 00:01
→ sa072686 推:大概是防用qsort暴吧,後來用二元搜尋樹解掉了(3sec) 0831 00:01
作者: sa072686 at 06/08/31
這篇要講的是輸出和讀入的部份,不過C++基本上我不講
請各位高手補充,或是在必要時用C做輸出和讀入吧
這篇所有的東西都要include stdio.h
首先來講變數型態吧
變數型態有以下數種,先講較為常見的,其餘以補充方式寫在後面
另外請注意數字範圍越大的變數型態運算就越花時間
所以可以的話盡量使用範圍較小的變數型態
常見的有:int和double
int:
為整數型態,於16位元電腦(現在應該很少見?不清楚)和short同範圍
(印象中在turbo C中也是)於32位元電腦則和long同範圍
short和long有興趣的自己看後面
其範圍若和long同則為-2147483648(-2^31)~2147483647(2^31-1)
若和short同則為-32768~32767
這是最常使用的型態,一般電腦和ACM都是使用32位元
但是不能夠使用小數點,若以此存入帶小數點的數則會失去小數點後面的東西
double:
為小數(浮點數)型態,可存入較int為大的數,範圍不清楚…
至於其它型態寫多了也會常用到的
char:
為字元型態,範圍從-128~127,主要用於字元的處理
但同時因為也是整數型態之一,因此也能夠用於數字運算
字元的儲存方式…,中文的方面不清楚,一般字母和符號是以ASCII碼儲存
這個沒什麼,就是死記,查電腦課本應該也有(不過也可能下學期才有)
也常以字元陣列方式做為字串使用,這些以後再講
bool:
為一整數型態,僅能儲存0和1兩種結果,主要用於做「是」和「否」的判斷
初學者可能會覺得它沒什麼用,以後就知道它其實很好用的
short:
同int只是範圍為-32768~32767
long:
同int只是範圍為-2147483648(-2^31)~2147483647(2^31-1)
long long:
同int只是範圍為-10^15~10^15-1,不過不被VC接受
float:
同double只是範圍較小,範圍不確定(事實上沒用過|||)
unsigned:
這是比較特殊的東西,可接於short、int、long和long long之前
加了之後叫做「非負整數」,也就是儲存範圍從0開始
雖不能儲存負數但正數部份範圍增加兩倍
如unsigned int儲存範圍變為0~2^32-1
大致如此,接著就來講講如何在printf和scanf中使用
先講如何定義變數,至於變數是什麼先大致說明一下
在運算的部份會有更加詳細的說明
變數就是可以把一些你需要的數存起來,而且它們可以做運算
而不像「常數」一樣是固定不變且沒有彈性的
同時也可以儲存使用者輸入的數字,若不能讓使用者輸入資料
並對它們做處理,那程式就沒什麼意義了
定義的部份先以整數為例:
int a,b;
這行是定義兩個整數型態的變數,一個叫a,一個叫b
注意和VB不同的是它沒有初始值,因此定義完後並不是0
至於要定義更多的變數只要用,隔開就行了
若要定義其它型態的變數把int改掉就行了
接著先講scanf吧
大致的用法和printf同,不過若要讀入一個數字的話要寫成這樣
scanf("%d",&a);
其中%d代表要讀入一個整數,要讀入幾個就打幾個上去
至於對應上是第一個對第一個,第二個對第二個,…,依此類推
&a就是表示將它儲存在a變數中,&符號一定要加,至於原因…
講到指標你們就會懂了,先背起來吧
%d可應用於char、short、int、long
long long請用%lld
至於char可用%c讀入一個字元,若以此亦可讀入整數,但會以字元方式儲存
%f用於float,%lf用於double
%s用於字串,這個在陣列會提到
請注意讀入時使用%c以外的東西(包含%s)都會自動略過換行和空白字元
%c則連換行(ASCII碼值為10)也可以讀到
再來講講輸出
其實和scanf幾乎一樣,但是不用加上&符號
以下以輸出整數變數a為例:
printf("%d",a);
其它地方幾乎相同,不過還有%x可以輸出十六進位制表示法
以及%g可以輸出浮點數,但會自動略過後面多餘的0
例:令a=1.010
則
printf("%lf\n",a);
printf("%g\n",a);
輸出為:
1.010000 (固定為六位數)
1.01
最後提一下特殊的一些輸出方式
%d的方面可以在%和d中間加入數字表示長度多少、靠右對齊
以下均以a=10為例
printf("%1d\n",a);
printf("%2d\n",a);
printf("%10d\n",a);
輸出:
0
10
10
由此可推得靠右對齊、超過長度者省略且不足的地方以空白補齊
ACM有些題目會特別要求以此格式輸出
若在數字前加上0則表示長度不足者以0補齊
以下以a=10為例
printf("%01d\n",a);
printf("%02d\n",a);
printf("%010d\n",a);
輸出:
0
10
0000000010
這常用於時間上,像是02:16這樣
浮點數也有,以總長度.小數點長度表示,總長度以0或不輸入取代的話
則代表不限定總長度
以下以a=1.010為例
printf("%0.1f\n",a);
printf("%.1f\n",a);
printf("%.0f\n",a);
printf("%5.3f\n",a);
輸出為:
1.0
1.0
1
1.010
注意總長度部份,是包含小數點也算進去的,一樣多出來的長度以空白補齊
這部份結束,自己玩看看吧
//學到這快可以解某題一星題了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:360銀耶,最高的一次~ 0831 19:56
→ csftwpt 推:天啊 你真是個好教學 0831 20:06
→ sa072686 推:囧rz 我收卡了嗎? 0831 20:08
φ chensc 轉:到 [TFcis9] 看板,于 2006/09/03 Sun 19:18:30
作者: sa072686 at 06/08/31
剛看懂最短路徑的寫法,就拿這題來開刀了…
嗯,比dfs不順手很多,不過寫起來有mst的p法的感覺
至於方法就是從出發點開始找和相連的每一點的最大承載值
再以這點找下去,如此即可
但是請小心一點
為什麼99/25會是5呢?很簡單…
因為一次只能帶24人,巴士載24個遊客加上導遊就25人了
所以99/24=4,剩餘再載一次,所以5次
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:該死的導遊。 0831 21:10
→ silentvow 推:導遊去死。 0831 21:16
作者: sa072686 at 06/09/01
最後一題有中譯的shortest path了
事實上原文的題號到11015前面可能還有,後面應該也沒了
這題跑的秒數不是說很好,不知道是不是有更好的解法
我是用多端最短路徑解法(習慣叫它kij法…)
事實上應該叫Floyd-Warshall法,感謝chensc補充
//還是喜歡叫它kij法
然後再把各路徑用加總的方式比較算出答案
還不難寫,電腦課下課十分鐘就寫完了
不過電腦課還真是慘痛,竟然上flash
我要上程設課…囧rz
偏偏一下電腦課放掉一大堆,放假啦、段考之類的奪走了好多
又常被借去考試…囧rz
嗯,而且flash課還沒什麼空閒時間寫ACM
不像VB課的作業叫老師別切螢幕,老師還沒教完我就寫完了
接下來都是ACM時間…(當然常被叫去debug)
小抱怨一下,其實這段和11015完全沒有關係|||
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:那個algo叫做 Floyd-Warshall .... 0903 18:32
▲ sa072686 改@2006/09/03 Sun 19:03:21
→ sa072686 推:已改正 0903 19:03
作者: sa072686 at 06/09/01
日期是9/13
不過上學期只有七次社課是怎樣…
還是得靠中午的公假
公假開始後我中午也該去了
給學弟有人可以問,雖然有ming在應該就都沒問題了
不過還是去一下這樣…反正302也有VC,不像403
//今天用完發現4990好用很多啊,為什麼越改越差…囧rz
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ hugojay 推:之前好像是八節 差不多 0902 22:36
作者: maywu at 06/09/01
據說這是一篇報到文
被加了好友 所以順便來報到
你好
我是南女資研97級美工
請多多指教
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by maywu from 59.113.9.71 (中滑一番)
→ sa072686 推:請多多指教~* 0901 21:12
作者: sa072686 at 06/09/02
之前完全寫不出來的題目
這次一寫就過了
就差在現在會了qsort |||
把bubble sort換掉就過了…
如果會qsort其實這題跟一星題沒兩樣
//----------------------------------
以上是之前發文的內容(好久了,在第7x篇)
剛翻書翻到Lucky貓寫的counting sort了
發現好寫很多,加上不知道是不是改測資
我確定我AC過且這次AC也沒有增加題數
但是我拿舊CODE卻無法AC(WA掉)
講一下counting sort好了
利用陣列存下所有的數字的出現次數後
再把它們做加總的動作
例:2 3 4 3 1
k[1]=1
k[2]=1
k[3]=2
k[4]=1
=>
l[1]=1
l[2]=2
l[3]=3
l[4]=5
l[5]=6
故得知第一個1在1,第一個2在2,第一個3在3,第一個4在5
至於k怎麼變成l
第一項必為1,這應該不用說
第二項就把k[1]加上去,這應該不難理解,就把有幾個1給加上去
這樣子就可以知道第一個2在哪裡了
其它依此類推,不過我把它改造了一下
我的做法:
k[1]=1
k[2]=2
k[3]=4
k[4]=5
就是把k[2]開始的每一項都加上前一項的值
即另kn = k1+k2+...+kn
接著讀入時輸出k[x-1]+1就行了
至於為什麼要用x-1是因為k[x]已經包括了x本身有多少個了
而加1是因為有個基本值1在,這推一下就知道了
至於如何判斷是否不存在呢?因為前一個方法可以拿k[x]是否等於0來判斷
這方法也簡單,看k[x]是否等於k[x-1]就可以得知x是否存在了
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ silentvow 推:你的還原有做好嗎?? 0902 18:08
→ sa072686 推:還原?什麼的還原? 0903 09:45
→ silentvow 推:存各數各有幾個的陣列 (伸CODE) 0904 19:09
→ sa072686 推:舊的砍了||| 0904 20:13
作者: gloompisces at 06/09/02
副版好像一直尸位素餐,來貼點東西好了
這題是math題,我推的公式好像不太好,似乎有更簡單的
設題目給你的兩個數是a和b
你要求出p,q
使 p^q=a
(p-1)^q=b
輸出c和d
分別是 c = 1 + (p-1) + (p-1)^2 +...+ (p-1)^(q-1)
d = [p^q * (p-1)^0] + [p^(q-1) * (p-1)^1] + .... + [p^0 * (p-1)^q]
以第一組測資為例,216 = 6^3 ,125 = 5^3
所以 c = 1+5+25=31
d = 1*216 + 5*36 + 25*6 + 125*1 = 671
事實上不好實作,不過不要叫我實作
如果你堅持,好吧...請參考我板上的公告文
--
讓眼睛看不到,嫉妒的燃燒
讓耳朵聽不到,謊言的吵鬧
在沒有人相信,愛能永恆那一秒
我們正堅定的微笑
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.16 (不失敗大學)
▲ gloompisces 改@2006/09/02 Sat 17:04:43
→ sa072686 推:啊p、q的求法… 0902 17:10
作者: sa072686 at 06/09/03
實在是很難AC的一題
不過其實還不難想啦,從WA了幾十次後得到了不少結論
0.227sec AC(P.E.)
首先…先翻譯題目吧
給一個起點和一個終點看能不能走到終點
若不能則輸出fail,若超過五萬步(不含)則…嗯,照它寫的輸出
若無則輸出走訪的路程
只能走左上、左下、右上、右下四格
且地圖大小為9*9
優先度是右上>右下>左下>左上,只要能走就走優先的而不是走最佳的
並且在踏上新的一格時它會在這格放一塊石頭
在從這格「回」之前會拿掉
此後除非是「回」到這裡否則將不能再次踏上這格
而「回」的條件是已經沒地方走時就回到剛剛來的路上
例如它從1,1走到2,2後沒路了,就可以回到1,1,但若有路且繞了一圈後
再次回來時1,1是不能再踏上去的
且「回」也算一步,所以步數破五萬是有可能的
試試(2,2)(1,2)就知道了
fail就用西洋棋的棋盤去看就可以了
不過其實只是很簡單的dfs而已,只是有些要注意的地方
一、當起點等於終點時只輸出起點
二、所有走訪過程都要輸出,包括撞完牆又回來也要
其它都是個人一些小粗心,如忘了拿掉檢查碼、freopen以及","和" "位置搞反等等
而且通常都會出現許多次(freopen就有四次,檢查碼…|||)
//----
為什麼第一印象是bfs呢?因為我連題目都沒有看,直接看sample output…
為什麼之後想說是greedy呢?因為我漏看了1,9且沒弄懂步數的意思所以誤會了
後來仔細看過題目後…照它說的用dfs解就行了
之後為什麼wa那麼多次呢?因為我還沒看到1,9…所以不知道連碰壁和「回」
都要輸出…這大概也是我上傳次數快2500的原因吧|||
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ xtterl 推:呵呵 了解 謝謝" 學弟真強^^ 0903 23:22
→ sa072686 推:哪有,我很弱的||| 0904 20:14
作者: sa072686 at 06/09/03
新題目,不過超簡單
看AC率也知道,都一百多人了還80%以上
不過竟然排在前十名耶…
題目很簡單,給三個數字
第一個數字表示窗戶大小,第二個表框的厚度,第三個表每行每列有多少窗戶
用strcat可以很輕鬆地解決
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/03
也是很好寫的一題
新題目,小翻一下
給許多數字(至多12個)每個數字都是個位數
把它們所有的排列組合方式相加起來並輸出
重覆的不算,並且請小心暴力會tle
要直接用排列組合的方式算,想法取自153
設有n個數字,那麼記下每個數字出現的次數
接著拿掉其中一個數字,看看剩下的數字裡面有幾種排列組合的方式
代表這數字在每個位數出現的次數
像1 2 3,1可配23和32,故出現兩次
對每個數字都做過一次後將它們加起來
再看有幾位數就把它們放上去
像是sample input第一組的1 2 3
可得到拿掉1,有2和3共2種排列方式(23和32)
故得到有兩個1,所以是2
2和3同1,分別可得到4、6
加起來為12,就代表個位數=12,十位數=12,百位數=12
進位後就是答案了
12
12
12
----
1332
還不難寫,數字也不會太大可以直接乘,不過記得用unsigned long long
long long是不夠的(雖然題目有寫…不過我剛剛還是忽略掉了|||)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/03
聊過了輸出、讀入後,卻沒講講如何處理讀入的東西也蠻奇怪的
首先講講變數的「賦值」的概念好了
現在我們先定義一個變數x
之後我們可以將x以任何數字代入,例如以1代入
x=1;
這行的意思並非判斷x是否等於1,只有單獨一個等號時是賦值的意思
就是將左邊的變數代入右邊的值,等等會提到怎麼寫「等於」
接著,講講運算吧
x=x+1;
以上這行以數學來解讀是不是很奇怪?
但在程式語言而言它的意思是將「x+1」這值代進x變數中
換句話說,將x加1後回存到x變數中
至於運算符號,加減乘除分別是"+"、"-"、"*"、"/"
學過VB的請注意:沒有"\"(整數除法)這種東西
同時^代表XOR運算,也並非次方的意思
如果我們想寫得更簡潔呢?
請別寫出這種東西…
x+1;
這是不合法的,因為x+1代表著一個數值,但x本身並沒有改變
就好比我有x元,你有x-2元,但這x-2並不影響x本身,只是x-2代表著另一個數
故這行無法對x做任何改變
請使用自運算
x+=1;
這行表示將x變數+1,也就是x=x+1的意思
由此可推得x=x*2可寫成x*=2…依此類推
另外尚有幾種比較特別的寫法
x++;
這行也代表x+=1和x=x+1的意思,同時也有另一種方法
++x;
這比較難解釋,基本上可以視為是將x自身+1,不過有其順序的差別
說明時比較難說明,我們舉實例好了
x=1;
printf("x=%d, x++=%d\n",x,x++);
printf("x=%d\n",x);
printf("\n");
x=1;
printf("x=%d, ++x=%d\n",x,++x);
printf("x=%d\n",x);
以上的程式片段輸出將會是:
x=1, x++=1
x=2
x=1, ++x=2
x=2
為什麼會這樣呢?
x++顯示1是因為這時候x是1,它會先以x原本的值做處理,處理完後再把x加1
++x則是直接把x加1後再做處理
故我們推得:
x=1;
y=1;
y+=x++; //此時的y=1+1=2,處理完後x=2
y=1;
y+=++x; //此時的y=1+2=2,x在處理前便已是2
結論就是:
x++表示取出x的值來用,用完後將x加1
++x表示將x加1後再拿來用
當然單純一行x++也是可以拿來做x+=1來用
再來我們來談談比較,說到比較就要談if
if的語法:
if()
{
}
當然若if內只有一行程式碼,可以直接接在括號後面,或者換一行直接寫
沒有大括號的if就代表只有if的下一行會在if成立時執行,其它照常
不過加上大括號後程式碼會比較不那麼雜亂,可以增加可讀性
這裡就…喜歡怎麼寫就怎麼寫吧
比較的部份有幾種
x==y //相等
x>=y //大於等於,請注意等號和大於符號的先後順序
x<=y //小於等於
x>y //大於
x<y //小於
x!=y //不等於
當然比較運算的兩邊只要是數值就可以,因此也可以是常數或一運算式
像是:
x==y+2
故我們可以寫個小程式來練習一下
int a,b;
scanf("%d%d",&a,&b);
if(a+b>10)
{
printf("a+b>10!!\n");
}
else
{
printf("a+b<=10!!\n");
}
至於else後面是表示當前面的if內條件不成立時所要執行的
當然else不是必需,若有需要才寫
此外也可以寫成像這樣子
舉上次TOI初選的第一題來當例子
int a,b;
scanf("%d%d",&a,&b);
if(a==b)
{
printf("a=b\n");
}
else if(a>b)
{
printf("a>b\n");
}
else
{
printf("a<b\n");
}
else if內表示不符合if條件但符合else if內的條件時
以這題來說不符合a==b且符合a>b時才會執行到
因此請注意若符合if的情況下,即使符合else if也不會被執行
舉個例:
a=2;
if(a>=2)
{
a+=5;
}
else if(a<=2)
{
a-=5;
}
很明顯地兩個條件都符合了,但執行結果a=7
因為符合if之後就不會再管後面的else了
所以要寫成如下:
a=2;
if(a>=2)
{
a+=5;
}
if(a<=2)
{
a-=5;
}
這樣子執行結果,a就會是2了,不過因為想不到好例子
只好用個無意義的例子這樣…
至於上述if...else if...else也可以寫作如下:
if(a==b)
{
printf("a=b\n");
}
else
{
if(a>b)
{
printf("a>b\n");
}
else
{
printf("a<b\n");
}
}
講到這,許多一星題都已經可以做了,例如10071和10055
大家試試看吧
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/06
這題似乎有改測試資料
目前AC人數少掉很多,AC率好像剩7.6%
我之前有AC過,現在也不見了
題數也少掉一題,舊CODE上傳也失敗了
等有空再重解看看…
舊的那篇為考慮文章篇數的關係就不刪掉,但應該沒用了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.43 (台狼一中)
作者: sa072686 at 06/09/06
用掉了一節聯課活動把它的公式導出來了
還手動寫了一遍長度4的排列組合…
然後再實際交換看看
先翻譯一下題目好了
給n和m求n個相異數字在交換m次位置後成為已排序(sorted)的組合數
例:3 1
有以下幾種組合恰有三個相異數字且只需做一次交換即可排序完成
1 3 2 //交換3和2
2 1 3 //交換2和1
3 2 1 //交換1和3
已推得公式如下:
k[1][0]=1;
k[n][0]=1;
k[n][m]=k[n-1][m-1]*(n-1) + k[n-1][m];
至於公式來源
假設現在要求n,m的答案
則在長度n-1中加入n的組合共有n種方法
其中一種最簡單,就是把n放在最後面,也就是原本該放的位置
所以把n-1中共m種方法的組合數加上去就行了
另外的情況,因為加入n後一定要把n換到該放的位置
所以挑n-1中共m-1種方法的組合數乘上n-1(其中一種前面討論過)
舉例來講,求4 2時
把4放在最後面的情況下,4已經固定好位置
接著只要前面放長度3且需交換2次的情況擺上去就行了
這樣總次數就是2次,因為4不用動到
接著如果把4放在最後面外的其它位置共有n-1種放法
而4一定要做至少一次的交換
因此就挑長度3裡面交換次數為1的乘上n-1種放法就是答案
結果才跑0.002sec,還以為會蠻大的
型態用unsigned long long,光long long裝不下去
用double會wa…(我試過)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/06
上次把if的用法提過了
這次提點更深點的,雖然這都是非必需的
就是說不用知道也可以寫出一樣的東西就是了XD
首先講講邏輯運算
我想應該沒人不知道and和or的分別吧?
and寫作&&,or寫作||
故可得知以下的程式碼運作情形為:
a=10;
b=5;
if(a==10&&b==4)
{
printf("123\n");
}
else
{
printf("456\n");
}
輸出應該是456,因為and就必需完全符合才行,缺一不可
or就比較鬆
a=10;
b=5;
if(a==10||b>5)
{
printf("123\n");
}
else
{
printf("456\n");
}
以上程式碼輸出123,因為||的情況只要其中一個符合就行了
至於and和or的詳細情形(像是a and b的相反)應該數學會教
a and b <=> not a or not b
a or b <=> not a and not b
反正就是否定以外and換or、or換and,不然最基本的自己舉例就行了
再來講括號
舉個例好了
a^2-b^2=a+b*a-b;
這個東西是錯的,把a和b以10和5代入會發現:
10^2-5^2=10+5*10-5
=> 100-25=10+50-5
程式語言的話都是用小括號,不管幾層
小括號總是優先處理,若有數層小括號則最內層先處理
這應該很好懂,而且邏輯運算也可以使用
再來講講if是怎麼判斷條件成立與否及為何比較和邏輯都算是種運算
if後面的括號內放的東西如果值為0則代表不成立,即false
若不為0則為成立
而比較和邏輯就是對兩個值做運算並得到結果
我舉個例子
if(a<5)
這情況若a=10,則a<5不成立,所以a<5這個運算會得到0的結果
故不執行if內的程式碼
這也是為什麼比較的符號也算是運算的一種的原因
是個若條件符合(像<就是前小於後時)就會得到1,若否則得到0的一種運算
因此邏輯的部份…我們先把不等於0的都看作1
如此則會得到:
and
a| 1 | 0 | 0 | 1 |
------------------
b| 1 | 1 | 0 | 0 |
------------------
c| 1 | 0 | 0 | 0 |
c為結果,由此表知a和b必須同時成立,and才會成立
至於or則是:
a| 1 | 0 | 0 | 1 |
------------------
b| 1 | 1 | 0 | 0 |
------------------
c| 1 | 1 | 0 | 1 |
即只要其中一個條件成立就成立
而不符合條件在if中可以寫作如下:
a=0;
if(!a)
{
printf("123\n");
}
如此會輸出123,因為!a就代表若a不成立時
而a=0所以a不成立
因此我們可以知道若要判斷a是否為0
則
if(a==0)
和
if(!a)
是一樣的意思
這邊比較難懂一點
接著講講迴圈,不過利用時要小心造成無窮迴圈(即迴圈無法結束)的情形
迴圈就是不斷地執行某一段程式碼直到設定的執行條件不成立為止
迴圈常用的有兩種
while和for
先講while
while()
{
}
括號內放置一個條件,迴圈將執行至條件不成立時,即只要成立便執行
另外有一種變形是:
do
{
}while();
這和上面不同處在於while放下面,故不管符合條件與否必執行至少一次
上面的則是不符合就不執行
記得下面的要加分號,否則compile不會過,上面則不用加
不過do的事實上我還沒用過|||
這裡我們舉個簡單的例子
a=10;
while(a>0)
{
printf("%d\n",a);
a--;
}
以上程式碼將依序輸出10、9、8、…、2、1
這是最基本的寫法,若上面if的地方有看懂可改為:
a=10;
while(a)
{
printf("%d\n",a);
a--;
}
若a--和--a有弄懂還可以再改
do
{
printf("%d\n",a);
}while(a--);
接著講講在ACM中常用的技巧
ACM通常需要持續的讀入,故我們可以使用如下之程式碼
while(scanf("%d%d",&a,&b)==2)
{
}
來做持續之讀入,讀到幾個數字它就會回傳多少的數字
這樣子除非沒讀到東西,否則將會因while條件恆成立就重覆執行
如此就可以重覆接受讀入
當然把==2省掉也是可以,因為只要不等於0就還是成立
至於cin就直接寫在裡面就行了,不用寫==多少
再來講講for吧
for(1;2;3)
{
}
當然不是真的這樣寫,數字代表一個編號,等等好解說而已
1、2、3都可以空著不寫
1的地方是迴圈一開始時就執行的程式碼,以,分隔,通常是變數的賦值
2的地方是迴圈執行條件,若條件不成立則脫離迴圈
3的地方是迴圈執行時每執行一遍後要做的處理,通常是運算
而執行的順序如下:1=>2=>程式碼=>3=>2=>程式碼=>3=>2=>程式碼=>3=>…
以實例來說明
for(a=1;a<3;a++)
{
printf("%d\n",a);
}
這段會先執行a=1,再來輸出a
再來a+1後判斷是否<3,因為2<3故繼續執行,輸出a
再來a+1後判斷是否<3,因為3!<3故中斷執行脫離迴圈
接著講講兩個運用在迴圈中的語法
break;
這個是直接中斷迴圈的執行
continue;
這個是直接跳過後面所有程式碼,跑完3和2後再從頭跑
舉例:
for(a=1;a<5;a++)
{
if(a==3)
{
break;
}
printf("%d\n",a);
}
輸出為
1
2
當a=3時就脫出迴圈了,故只輸出到2
至於
for(a=1;a<5;a++)
{
if(a==4)
{
continue;
}
printf("%d\n",a);
}
輸出
1
2
3
5
因為a=4時直接跳過這一圈continue後面的程式碼回到一開始
但是a++照樣會執行到
教到這,九九和入社考第二題都沒問題啦
至於第三題要等下一篇的陣列囉
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ bruce3557 推:真是個好人學長! 0906 19:48
→ sa072686 推:囧rz 基本上會看這篇的應該都不是學弟… 0906 19:49
→ bruce3557 推:(舉手) 0906 19:52
→ sa072686 推:嗯嗯,果然不是 0906 20:03
→ bruce3557 推:你怎麼可以這樣否定我的年齡〒o〒|| 0906 20:11
→ sa072686 推:學長乖~* 0906 20:35
→ bruce3557 推:....真是個好學弟(茶) 0906 20:56
→ sa072686 推:…果然沒學弟看(泣) 0906 21:04
→ styhihs 推:不要難過...逼他們來看吧(拍拍) 0907 01:11
作者: sa072686 at 06/09/06
問到解法了
雖然只有想法的部份
首先先畫好所有的點,並假設沒有重疊的點
再來從第一個點開始連向其它點發現可切成N份
再來看第二個點,連向所有未連接的點時
第一條線可切出1個區域,第二條則是2個
故得1+2+3+...+N-2
第三個點則是
1+3+5+...
由此規律可推出那很醜很醜的公式|||
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/07
真秒殺
小翻一下
一句概括整題
「以輸入順序而言前減後最大的數」
結束…白痴題一題,沒什麼好講的
//雖然我因為看不懂題目卡了好多天
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/08
感謝gloompisces學長提供
這題其實可表為(x+1)(x+2)...(x+n-1)的各項係數
例如n=4時
(x+1)(x+2)(x+3)=x^3 + 6x^2 + 11x + 6
正好各項係數分別為n=4時的解
神奇…完全沒想到有這種關係
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/08
很煩的一題,不過其實不難寫,公式也不難推
我用d=c*c+c竟然掛掉…用d=c然後d*=c+1就過…
看來是因為暫存運算結果的地方是以int為標準,所以該是long long的就炸了
先小翻一下
設f(a,b)為a!中,b的次方數
例如f(10,2)為1+2+1+3+1=8
n
而題目要求的是g(n,b),g(n,b)為Σf(i,b)
i=1
其實並不難做,我的想法是先分解b
題目說b分解後沒有任何質因數會超過一次
所以就找看看b分解後最大質因數為何
之後以此計算就行了,因為越小的值算出來數字會越大
計算方法嘛…我把它拆成1次、2次、…直到大於n為止
討論方式以9,2來講
從2!開始有2的因數
之後先算一次方的
每2就多1個,所以可以推得:
2!=1
3!=1
4!=2
5!=2
6!=3
…
依此類推,再來算2*2=4的,從4!才開始有第一個
故4!=1
5!=1
6!=1
7!=1
8!=2
…
依此類推,8的情形也一樣,16則是大於9了
因此可以推得:
9/2=4,所以可以知道最大到4
中間剛好可以用梯形公式做運算,再整個乘就行了
以2來說數列會是11223344
故以梯形公式計算1+2+3再乘以2,再另外算後面的情形即可
後面亦同,此法相當於將m!中先把有2的因數的全拿掉一次
再來把還有2的因數的,也就是原本大於一次的再拿掉一次
如此反覆,只是因為是針對1~n這麼多個階乘
故需使用梯形公式輔助計算
講的有點模糊…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:話說題目那公式是我寫階乘題常用的東西…自己發現過 0908 19:54
作者: sa072686 at 06/09/09
終於過了,那麼又學到新東西啦
這題要用merge sort
感謝csftwpt的指導
…嗯,除了講merge sort以外也沒什麼其它好講的了
那麼講merge sort吧
就是先把一個陣列切成許多的小部份,再加以合併
也就是切到一個一個,然後再合併回去
合併的時候小的先放進去,再放大的
這樣放完就已經排序完了,再把這合併後的結果
再跟其它合併後的結果再合併一次
切割方式是用遞迴方式從中間先切,之後再把切出來的兩半再從中切掉,…
循環至不可再分割為止,就把它再合併起來
以下以先切左邊為例
舉個例:
9 1 0 5 4
先從中間分成:
9 1
0 5 4
再分成:
9
1
0 5 4
這時左邊分不掉了,都剩1
所以合併起來成為:
1 9
0 5 4
接著分右邊…
1 9
0
5 4
再分右邊
1 9
0
5
4
沒得分了,合併起來
1 9
0
4 5
再合併
1 9
0 4 5
再合併
0 1 4 5 9
排序完成,合併方法以1 9和0 4 5舉例說明
1 9
0 4 5
首先指到1和0
0<1,所以先放0
再來指到4,4>1,放1,指到9
此時已有0 1了
接著4<9,放4,指到5
此時有0 1 4了
接著5<9,放5,不過沒了,所以把後面全放下去
就成了0 1 4 5 9了
至於這和搬移次數的關係?想一下吧,不難懂
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:注意overflow 0630 16:26
作者: sa072686 at 06/09/09
基數排序法,以基數(base)做為排序依據的方法
講白話點,以各個位數的值做為排序的依據
方法:
看base(進位制)決定陣列大小
接著先看個位數,將個位數相同的放在同一排陣列
之後再依個位數放回原陣列,再看十位數,…
持續到處理完所有欲排序數中最大者即可停止
若位數不足者以0計算
舉例:
111 132 122 113 112 133 123 23
這時我們先比較其個位數,可將其分成:
1:111
2:132 122 112
3:113 133 123 23
這時放回去原陣列,原陣列成為:
111 132 122 112 113 133 123 23
再比較十位數,分成:
1:111 112 113
2:122 123 23
3:132 133
放回原陣列
111 112 113 122 123 23 132 133
再比百位
0:23
1:111 112 113 122 123 132 133
放回去
23 111 112 113 122 123 132 133
排序完成
原理:
不難了解其實就是先從個位數開始排序,將個位數排好後放回去
這時原陣列成為依個位數排序完成之數列
再排序十位數,由於是從原陣列頭依序放入
因此排序過程中個位數小的會先放入,因此在十位數相同的陣列中
會先放進個位數小的,所以順序不會亂掉
依此類推
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:俗稱桶子排序法 0909 19:56
→ sa072686 推:桶子?書上沒寫||| 為什麼叫桶子啊? 0909 20:40
作者: sa072686 at 06/09/09
雖然用內建的比較快
不過還是了解一下比較好
其實就是先任取一值做為比對依據
再把陣列分成兩個部份去處理,左半小於比對用值,右半大於比對用值
接著把比對值放到中間該放的位置去
直到所有小部份都排序完成時即排序完成
方法:
以遞迴方式慢慢切半處理,直到每個小部份都處理完為止
以8 5 6 4 7 9 3 2 1為例
拿第一個值當比對依據,以i和j做為左索引和右索引,執行到i>j就停止
一開始i指向5,j指向1
然後i找到大於比對依據8為止,j則找到小於為止
之後交換它們
因此i會指到9,j會指在1
交換後得:
8 5 6 4 7 1 3 2 9
之後j指向2,i指向9,i>j,故停止並把8移動到j的位置
成為:
5 6 4 7 1 3 2 8 9
接著把左邊5 6 4 7 1 3 2和右邊9分開處理
以5做為依據,i指向6,j指向2
接著恰i指向的大於5,j的小於5
故交換成為:
5 2 4 7 1 3 6
再來7和3交換
5 2 4 3 1 7 6
再來結束了,變成
2 4 3 1 5 7 6
分半,2 4 3 1和7 6
以2為依據,同上的方法先交換成:
2 1 3 4
再來完全,2放回,成為1 2 3 4
分1和3 4
1不用排,3 4也不用排
之後是7 6
以7為依據,i指6,j也指6,不過接下來i會指到6後面的地方
所以結束,7放到原本6的位置成為6 7
之後剩右邊不用排序的9,就排序完成了
原理:
排序時每次都分半處理,即把大問題分為小問題處理的方法
而兩指標每次交換數值的原因是把它依依據分成兩個部份
這樣只要左部份排序完成,右部份排序完成即代表全部排序完成
因為左必小於中,中必小於右(相等除外)
不過因其不穩定性(常常交換來、交換去的)
所以要注意如一開始有兩個5,叫5a和5b好了
那麼排完時可能因為交換位置的關係5a變成在5b後面
故即使使用內建之qsort排序亦需注意這點,像是一些要求條件相同時
便按input順序的請別無視input順序,因為在qsort中是有亂掉的可能的
因此必需要在qsort中:當設定條件相同時依input順序做為排序之第二依據
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ bruce3557 推:學長真是個好人 0909 20:40
→ sa072686 推:謝謝學長的誇獎 XD 0909 20:41
→ bruce3557 推:囧...學長過謙了 0909 21:12
作者: sa072686 at 06/09/12
校內初選成績公布囉,所以題目可以貼出來啦XDDD
不過出乎意料之外的是竟然拿了第一名…
而且好像還是第一個寫完?不確定,應該說是第一個評分
要是沒剛好電腦差點被ghost掉,而且還是幾乎寫完了在做最後檢查
老師也沒說可以提早評|||
//ghost掉就完了,重打…說不定bug就出現了…
題目和code沒帶,講大概和想法就好
第一題:加密
將一字串(長度小於等於八十)塞進8*10的陣列中
並將列優先轉為行優先輸出
給你加密後字串,請輸出解密後字串
解:把長度除以8之後跳著輸出就行了
難度:易
第二題:bfs
給定一包含0和1地圖,找有多大面積被包含在1中
面積必大於等於1,且只會恰有一塊被包圍的區域
解:隨便找到一塊被包圍的格子,將其以bfs擴散即可
找法:被包圍格子必可以其上、下、左和右四方向中找到1
另解:在外圍包上一圈0,再填滿,之後留下的0即為所求
感謝gloompisces學長的指導
難度:中(找被包圍的點麻煩)
第三題:暴力
給許多組貨櫃及其重量承受度,體積無視
看最多能夠放入幾組重量為7、10、10的東西
並輸出每個貨櫃存放的重量7和重量10的物品數
已確定我的解法非正解,只是剛好測資沒爆…
錯但是剛好過測資的解:暴力減,找出十個貨櫃中個位數最大者減去七
最小者減去十,若能找齊一組才算入一組
如此就可以找出,測過10組1000的,速度還可以
難度:極高(不好想…)
第四題:最短路徑
給一個n和n*n的表,再給起/終點(以0,0結束)求每組的最短路徑
表上的數字-1表不相連,0表自己,其它則表示距離
輸出最短距離及編號最小的一組路徑
解:bfs即可(dfs也行)把起點到任一點的最短距離及路徑都求出來
再輸出終點的距離和路徑即可
若覺得遞迴求路徑再輸出很煩,把終點當起點、起點當終點
遞迴找路徑時原本是倒著的,但負負得正的情況下…
直接逐一輸出就剛好是路徑了
難度:中(反而比第三題好想)
--
TFcis 97th小教學~*
ACM帳號:11557
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:什麼叫做竟然第一名…這樣很閃欸orz 0912 22:52
→ sa072686 推:本來就沒想著拿第一了@@ 0913 00:05
作者: sa072686 at 06/09/12
看標題也知道是八皇后的問題
小翻一下
簡單地說就是給你一個棋盤上面擺著八隻皇后
找到一個方法移動最少的次數把八隻皇后擺成不會互相攻擊的情況
而且只能以它指定的方法移動
其它…參考750吧,基本上蠻像的
第六名耶~*
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/12
很好寫的一題
說穿了就是費氏數列
翻譯一下
給你i輸出第i個只由0和1組合的二進位且不出現連續的1的數
觀察一下就可以發現其實是費氏數列
可以以遞迴的方式去做,先找出第一個1,再找後面的1
例:10
費氏數列1 2 3 5 8 13
10>8但10<13所以可以知道起碼是10000
至於後面是什麼很簡單
把10扣掉8後當作另一個數計算就可以知道了
扣完後是2,而2在第二位
所以得到10010
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: PG at 06/09/12
你可以嘗試求出每個位元代表多少
這樣比較好寫
--
╔─────╗ ╮ │◎├───────────為了一個夢想────────
│Score │─│§─┼─┼─P─────P──── 我必須有所放棄 ──旋律─
│0000133440│─│∣─┼U┼O───U─O────即使現在那是指宅物─────
│Evaluation│─╱──┼─┼──────────── 我卻依然迷惑 ──淺野真澄
│●●●●●│﹝╭╮─┼─┼─────────────────────────
╚─────╝╰╰╯─┼C┼────C─── 台南一中資訊社 7th教學 PG───
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.81.198.12 (福爾摩沙固網)
→ sa072686 推:求出來剛好是費氏數列@@(其實我沒遞迴,用迴圈扣) 0912 20:09
作者: sa072686 at 06/09/12
終於解開了,看來暴力是行不通的
也不用用什麼演算法…就觀察而已
先翻譯一下
有n個加油站,從完全沒有油的情形自某加油站出發
看是否能順時針繞一圈後再回來原加油站
給的測資是按順時針順序給的,上面那排是該站可提供的油
下面那排是該站至下一站(順時針)所需消耗的油
我不知道前面一秒內那兩位強者是怎麼寫的…
我的解法約要花1.5sec,28名
先把供油扣去耗油
之後將它們從第一個開始加,加到變成負數為止
就代表從這站之前所有站都無法達成,從下一站開始並記下這數
若有一站能夠一直到最後一站一個個加起來皆不為負數
且加上前面那些站(先前記的,不用重加)還不為負數
則此站即為正解,因為要求的是第一個符合的站
若無,則無解
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/13
想了好久,終於AC了
這題感覺比較像DP
先觀察磁磚大小和要排的大小
可以先發現奇數絕對排不滿
再來觀察一下,共有幾種排法
而這幾種排法都可從題目中得知
首先是sample input有2,可得知1*2共三種排法
接著從n=12的圖中可看出:有種特殊排法可排出4、6、8、…各種偶數
且排法唯一,故可以推知:
k[2n+1]=0
k[2n]=k[2n-2]+2*k[2n-2]+2*k[2n-4]+...+2*k[0]
原因:
對每個區域我們都把它分割掉
例:n=8
先把前面切出一個n=2的情形
後面變n=6,所以看成n=2和n=6組合起來,即k[2]*k[6]
接著再切成n=4和n=4,但因為有些k[4]的和k[2]的有重覆到
故只看可一體成形排滿4的…用圖解好了
1223
1443 <==編號相同則為同一塊
5566
共兩種情形(視5566在上或下而定)
而後面就有k[4]種組合,故得到2*k[4]
其它則依此類推,至於為什麼公式出來是k[n-2]+2(k[n-2]+k[n-4]+...)呢?
k[2]的值是3且對每個k[n]且n為偶數情形一定用得到
可是其它都是乘2,所以就把3改成2+1再展開就可以得到那條公式了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中)
→ Zero 推:話說當年市賽考這提的時候我用遞回暴力解XDDDD 0914 16:33
→ sa072686 推:XD 會寫這個的遞迴…強者 我都不會 0914 18:54
作者: sa072686 at 06/09/13
10918的類題,也差不多一樣的解法
公式:
k[0]=1
k[1]=1
k[n]=k[n-1]+k[n-2]*2
原因呢?嗯…
首先,k[2]=3這應該沒什麼問題
接著從組合中可以得知:n>2時必可以先放一塊2*2的
若放1*2的則有兩種放法:直放一個(佔去1)和橫放兩個(佔去2)
故得知把n切成1和n-1時可以得到有k[n-1]種組合
切成2和n-2時可以得到有k[n-2]*2種組合
至於其它種組合方式因為前面放的第一塊是一樣的
所以會重覆到
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/15
查帳號的地方整個改了
雖然速度變好慢…
連傳過幾題、其中過了幾題都有
然後以下的題目列表則是顯示各題最佳執行時間及個人該題最佳執行時間
以及當初是AC、PE或是WA等等的(包括有傳過但是沒有AC的也有)
詳細歸詳細,不過跑好慢啊…囧rz
而且…上傳次數那些不見了,大概是BUG(?)
變好高級…XDDD
//藝教二樓的電腦教室耶XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.3.14 (台狼一中藝教惡欸夫)
▲ sa072686 改@2006/09/15 Fri 10:38:23
→ sa072686 推:題目的也改了…而且似乎不按memory排名了 0915 10:41
→ sa072686 說:11087有三個0.000是怎樣||| 0915 10:41
→ Zero 呸:喵的這樣超難看= = 0915 11:38
→ sa072686 推:重點是速度…難看其實還好… //那我的比對程式要改了 0915 11:45
→ Zero 推:比對程式耶>///< 其實不用改.. :P 0915 14:52
→ sa072686 推:那是跟題目時用的…看哪些對方有寫我沒寫過的這樣 0915 17:51
→ Zero 推:對阿∼不用改:P 原來的網址介面不變 0915 21:25
作者: sa072686 at 06/09/17
不太好寫的一題
純dfs暴力會tle,我是用dfs再加縮減才沒tle的
縮減方式是先把結果存起來避免重覆的呼叫
請小心不要直接存依賴的工作的依賴量
因為有可能1依賴2和3,而2也依賴3
那就會出錯了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/17
其實要說難也不難,暴力做也0.002
不知道三星是怎樣,傳的人很少而已…
暴力的方法嘛…反正都是十字轉折,應該不用多說,用座標變化就可以解決
唯一要注意的是:有兩列起點(設第一列x、第二列y)
則x對應第二組轉折路徑,y對應第一組轉折路徑
其它沒什麼要注意的,小心終點相遇不算就行
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Macaca 推:ACM不是掛了@@? 0917 21:47
→ sa072686 推:剛復活,一次傳四題才過兩題…||| 0917 21:48
→ csftwpt 推:啊, 這題我想有一段時間想不到怎麼做 0917 22:38
→ sa072686 推:我也想了一段時間,後來想不到就暴力,才0.002… 0917 22:44
→ csftwpt 推:怎麼暴力 (默)? 0918 12:30
→ sa072686 推:一步步來||| 0918 13:17
→ silentvow 推:有種被耍的感覺, 一步步走最大可以到1000000^2 XD 0918 21:23
→ csftwpt 推:Orz...||| 0919 12:28
→ sa072686 推:一步步確實可以0.002sec,而且這題…最慢也0.002sec 0920 14:25
作者: sa072686 at 06/09/17
一星題…真的是一星題
移動地板使得它盡可能靠近,看能否全部合起來
事實上只要實際合合看就行了…就把上下兩塊互相靠近看看
真的很好寫…不過傳的人數…出奇地少
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:這題我有看到,不過不知道該怎麼下手…rz 0917 22:31
→ PG 推:暴力湊就好了 我記得以前有類題 XD" 0917 22:32
→ sa072686 推:怎麼下手喔…搞懂題意先 0917 22:33
→ chensc 推:我知道題意,不過真的是要用暴力喔… 0917 22:34
→ PG 推:暴力也是 O(N) 而已.. 0917 22:34
→ sa072686 推:注意不要不合後就把迴圈CUT掉就好…這樣讀入會錯亂 0917 22:36
作者: sa072686 at 06/09/20
其實就是dfs,然後多做一些判定把不可能的路砍掉而已
所以,結論就是:幾乎可以和dfs畫上等號
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
→ chensc 推:哼哼 我都聽不懂 orz 0920 15:22
→ gloompisces 推:結論:sa真神人也 0920 19:50
→ csftwpt 推: 結論:sa真神人也 0920 19:52
→ styhihs 推: 結論:sa真神人也 0920 20:55
→ sa072686 推:囧…那是中午去問顏老師和蔡老師的 0920 21:07
→ csftwpt 推: 不管,sa真神人也 0920 21:10
→ Zero 推: 結論:sa真強者也 0920 23:00
→ chensc 推: 別吵,sa真非人也 0920 23:10
作者: sa072686 at 06/09/21
觀念還蠻好理解的
當初被前置的一些東西搞亂掉了…
比快速排序法還要活一點,不管是資料的變更還是加入都很好處理
所以像10954,用快速排序法跑5.111sec,換錐形排序法變0.133sec(四十名)
先講一下觀念
首先建立一棵樹,這樹是個完整的二元樹且符合以下規則:
母節點的值必大於等於子節點
完整之二元樹定義如下:
每個節點必有兩個子節點,除了最後可能只剩一個節點外
故由此規則可知:
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
由此圖應很好觀察出對每個節點p其子節點為2*p和2*p+1
樹的建立方法有兩種
第一種是每次插入一個新的值,然後判斷是否比母節點大,若大於母節點
則往上移,再和母節點比較…,依此類推以遞迴方式找到最上方或小於母節點為止
這遞迴式暫稱它為向上調整
不過,我比較偏好第二種,原因等等會說
第二種是把一個存好的陣列從最後一個元素開始
逐次將每個節點都和其子節點判斷,若小於子節點則和子節點交換位置
並以遞迴方式繼續往下找,原理同向上調整但方向為向下且比較的是較大之子節點
為什麼呢?我們舉個例:
1
2 3
這樣子是不符合規則的,也就是說1並不大於2和3
若和2比較,1確實小於2,因此交換後成為
2
1 3
一樣違規,因為2<3,因此需拿較大的比較才能確定交換後是符合規則的
這應該很好理解,也因此同樣的資料和順序建立出來的錐形樹並不唯一
因為只要符合規則就行了,這向下調整的方法暫稱它為向下調整
接著,若要新增資料則只要加入後對其向上調整即可
更動資料的話,例如刪除,就把最後一個放到刪除後空出來的位置
再做一次向下調整即可,變更資料的話就看是比原本大還小來做向上或向下調整
至於錐形排序法則是將此樹之最頂端資料拿出來和最後一項資料交換位置
接著對第一項(即原最後一項)做向下調整後,再取出最頂端資料…依此類推
如此即可完成排序動作,至於前述為何用第二種方法將樹建立起來的原因
就是只要寫向下調整的函數就夠了,不必再寫向上的函數
至於此排序法的原理嘛…由規則可知第一項一定是最大的,因它大於兩個子節點
且子節點又大於它們的子節點…,依此類推
取出後為何拿最後一項來做向下調整是因為這樣只要對一個資料做調整
否則會變動到許許多多的資料
另外,此排序法並不穩定,即先輸入的資料排序後有可能反而在後面
例如輸入中有兩個2,但第一個輸入的可能排序後排到第二個後面,和快速排序法一樣
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/21
搜尋法的一種,原理很簡單且可以在不排序的情形下搜尋
難就難在找雜湊函數,這部份我也還沒研究出來比較好的雜湊函數…
最簡單的就是做取餘數的動作,不過似乎是效率比較差的,因為碰撞的關係
害我看完覺得11087很像用雜湊法去做…
原理:
將欲搜尋的資料丟入雜湊函數,經計算後生出一個數字
再將這資料扔到陣列中對應此數字的元素去
之後搜尋時把要搜尋的數字同樣丟入雜湊函數,出來的數字就是要搜尋的資料的存放位置
不過要小心的是有可能會出現碰撞,即兩筆資料算出同一個數字
這時要另外做處理,處理方法蠻多的,我目前只記線性處理和串列處理
線性處理:碰撞後往下找一空的地方,把資料扔進去
串列處理:以鏈結串列在相同的地方開一排,把數字出來相同的資料都丟進去
串列的效率比較好,線性則較差
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:本來我也是想要雜湊下去寫 可是最近感冒 不想動腦... 0921 19:47
→ sa072686 推:我一想到串列就想到二元搜尋樹的下場… 0921 19:49
→ csftwpt 推:直接 Mod 在 11087 會 TLE (泣) 0921 19:49
→ sa072686 說:不過怎麼大家都感冒? //雖然我也趕了一下流行 ||| 0921 19:50
作者: sa072686 at 06/09/21
※ 本文轉錄自 [gloompisces] 看板
作者: gloompisces ( ) 站內: gloompisces
標題: 一些準備數學的方法
時間: 2006/09/20 Wed 23:42:42
先聲明,這些是我覺得效果還不錯的方法
但是每個人的學習習慣不同,所以不見得適合每個人
我想學習數學最有效率的方法,或許是對它產生興趣吧
畢竟,硬是要去學習一樣完全沒有興趣的東西是非常痛苦的
或許你會問:數學討厭又無聊,怎麼可能對它有興趣?
我同意這一點,現行的高中教材只會逼我們用暴力去對抗數學
所以如果碰到幾何,課本只會教你代座標,無形中,已經是數學喪失了它應該有的美感
回歸主題,雖然很難對數學產生興趣,但還是要設法讓它看起來比較不要那麼討厭
首先是要找出自己相對喜歡的章節,然後先從那裡讀起
接著再漸漸進展到其他章節
一開始不要給自己太大的壓力,沒有人能第一次看就徹底了解
有的觀念要讀兩三次才會漸漸想通
如果還是弄不懂,可以去請教老師或同學
在研讀時有一個小技巧,就是不要浪費時間算出每一題
當你已經抓到解法,剩下的只是計算時,或許就可以先跳過
因為一直花時間計算複雜的式子不但無聊而且效果不大
然後盡量避免花很多時間算已經會的題目
時間是寶貴的,投資在不會的地方比較有價值
我也不推薦買很多參考書玩題海戰術,因為參考書的解題技巧就是那幾個一直重複而已
倒不如選定一本,然後徹底弄懂裡面的內容
最後,其實可以去看看前幾年的學測聯考題
試著做做看,順便了解命題趨勢
然後算個分數,在對照一下全國均標
你會發現,其實你並不是完全沒有救
我的英文老師說過一句話
"在學測指考前,所有的屈辱都是假的"
大家一起努力吧
--
我始終帶著你愛的微笑
一路上尋找我遺失的美好
不小心當淚滑過嘴角
就用你握過的手抹掉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.145.47 (不失敗大學)
→ ducksteven 推:本文被推薦加入到 SonyStudy 看板 0920 23:45
→ brucehsu 推:推薦這篇文章。借轉 :) 0920 23:48
φ brucehsu 轉:到 [brucehsu] 看板,于 2006/09/20 Wed 23:48:12
→ milkbear 推:借轉囉 0920 23:50
φ milkbear 轉:到 [milkbear] 看板,于 2006/09/20 Wed 23:50:37
φ ducksteven 轉:到 [StudySony] 看板,于 2006/09/20 Wed 23:50:53
→ chensc 推:還真的出現了,借轉。 0921 12:55
φ chensc 轉:到 [chensc] 看板,于 2006/09/21 Thu 12:55:57
→ sa072686 推:借轉~* 0921 19:48
φ sa072686 轉:從 [gloompisces] 看板,于 2006/09/21 Thu 19:48:58
φ lovemoonfish 轉:到 [lovemoonfish] 看板,于 2006/09/23 Sat 22:02:31
φ dust 轉:到 [dust] 看板,于 2007/09/28 Fri 12:44:38
→ truth 推:借轉XDDDD 0901 13:14
φ truth 轉:到 [truth] 看板,于 2009/09/01 Tue 13:14:31
作者: gloompisces at 06/09/21
如果一個正整數m可以表示成:" m = x * y,且x和y都是質數"
我們稱m為composite prime
題目包括多組測資,每組測資有兩行
第一行有一個正整數a,代表這組測資包含a個數
第二行則給你這a個數,這a個數均小於等於2^20(=1048576)
對每組測資,你必須輸出這a個數中有幾個composite prime
--
讓眼睛看不到,嫉妒的燃燒
讓耳朵聽不到,謊言的吵鬧
在沒有人相信,愛能永恆那一秒
我們正堅定的微笑
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.144.183 (不失敗大學)
作者: sa072686 at 06/09/23
又一批新題
這題雖然是很單純的bfs可是wa了非常多次
多虧討論板和重看了五次題目
小翻一下
在以最多兩種文字(不一定是哪種)繪成之地圖上
以最末列所給之座標之文字為土地,其餘為海
求包含最末列所給座標之土地外最大塊之土地面積
且左右是連通的,即最左和最右可視為相連,但上下則否
以座標而言即y座標的0和n-1是視為相連的,x的0和m-1則否
其實搞懂規則就不難了
//我讓tle人數暴了3倍…不過一切都是意外(茶)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/09/29
已經不算新題目的新題目,路徑問題,類似塗色的問題…
小翻一下
給所有的城市(junction到底是什麼…?管它的,當它是城市)
和它們之間連接的路,若在一城市放置一守衛那該守衛可以顧到該城市
及所有連到該城市之道路,而若兩守衛同時顧到同一條道路則他們會打架
問能夠保護完所有城市和道路最少要多少位守衛且不互相攻擊
若一定會互相攻擊則輸出-1
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ bruce3557 推:junction是街區 1102 18:56
作者: csftwpt at 06/09/29
這題的做法是 DFS, 不過要用點 cut 加快速度.
因為起點不固定, 所以以每個點都當起點去搜搜看.
現在假設 MaxLen 是目前為止找到最長的長度.
void dfs(int y,int x,int len){
if(len+CalcMaxExistLen()<=MaxLen)
return;
......
}
len 是 DFS 到 (y,x) 為止走過的長度,
而 CalcMaxExistLen() 是估計此後最多還有可能走幾步.
如此一來速度就夠快了. (至於那個估計函數亂寫亂估應該都可以...)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by csftwpt from 61.64.254.127 (所以內特)
→ bruce3557 推:害我忍不住寫了ACM... 0929 20:22
→ silentvow 推:寫阿 0929 20:26
→ DarkKnight 說:關鍵是上右下左 0929 22:51
→ csftwpt 推:真的耶 XD" 有特定走法會 TLE, 一些會 AC 0930 08:26
→ sa072686 推:我用上右下左結果爆了XDDD 有cut和沒cut都試過了 1001 12:07
→ gloompisces 推:估計最多幾次很重要,讓我從TLE變WA.. 1001 12:54
→ bruce3557 推:上右下左確實可以過,而且很快 1001 13:03
→ sa072686 推:用上右下左還是tle啊…後來跟bruce的順序還是tle… 1002 12:50
→ sa072686 說:我也都有用cs提供的方法估… 1002 12:50
→ bruce3557 推:看我板上的838那篇吧 1002 13:20
→ sa072686 推:終於是過了 囧…tle好久 1002 21:10
作者: sa072686 at 06/10/02
很容易搞錯題目的一題
翻譯一下
在一個字串中找出最長的wff並輸出,不必按照順序
wff定義如下
p、q、r、s、t為wff
若x=wff則Nx亦為wff
若w=wff且x=wff則Kwx、Awx、Cwx、Ewx亦為wff
那張表是騙人的,沒用
我是有防出現這十個字母以外的東西,不過不確定要不要防
因為很累懶得優化,字串長度也懶得去測了…
就拿些測資大家自己試試囉…
Sample INPUT
pqpqK
pqpqN
NpqK
pK
KNNp
Sample OUTPUT
Kpq
Np
KNpq
No WFF
NNp
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/03
和11103很類似,不過做法不一樣
題目雖然看似幾乎一樣,但其實要做的差很多…
翻譯一下
給你一組WFF,判斷它是否把p、q、r、s、t任意代入0或1後都能得到0
至於A、C、E、K、N則對照表格就可以了
這題暴力就能解,小寫字母才五種又連續,暴力還是0.002
其實也不會太難,題目就有講它們代表的意思了
K回傳w&x、N回傳!w、A回傳w|x、E回傳!(w^x)就可以了,C想不到
&、|和^都是位元運算,即換成二進位制後對每個位數做and、or和Xor比較
例如10&19就是:
01010
10011
-----
00010
得到2
and就是兩者皆為1才回傳1,其餘為0
or則是兩者存在一不為零即回傳1,其餘為0
Xor則是兩者必有一為零,另一則為一才回傳1,其餘為0
暴力也行啦…用一般的if來判斷也可以
結果暴了兩次問題都出在陣列開不夠大…開105結果爆掉
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/04
不難的一題,應該算是數學吧…
小翻一下…
在這題只把4N+1(N>=0)視為「數字」
故也有所謂的質數與合數
質數只有一和本身這兩個因數,合數則為質數以外之數
現在給你一個數,問你到這個數為止(包含)共有幾個數字
恰可由兩個質數相乘得到
不難想的一題
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/05
公式題…推出公式後就很好做了
首先先把它拆成兩邊來看…
兩邊都必須>1才有交點,所以從2,2開始討論
拿其中一邊來看,點的數目各為2、2
則若增加一個點進去則交點數為1+(2-1)*2共三個
若再增加一個則進去則交點數為3+(2-1)*3共六個
故推得點的數目為m、n時則交點數為m、n-1時的交點數再加上(m-1)*(n-1)個
則推得f(2,2)=1
則可知f(3,2)=f(2,3)=3,f(3,3)=9
故可知f(m,n)=f(2,n)*f(m,2)=(n-1 + n-2 + ... + 1)*(m-1 + m-2 + ... + 1)
=n*(n-1)/2 * m*(m-1)/2
沒想到可以從dp變成這麼簡單的公式XDDD
要不是因為四萬萬的陣列會爆我大概也不會想要簡化這東西吧…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/10/05 Thu 19:46:24
作者: sa072686 at 06/10/05
其實也不難做…不過我的做法效率也不怎麼樣
我是用大數的方式…就硬暴…硬湊到全都是1這樣
0.016sec,2500名左右(全部才2800不到…)
囧…不過位數竟然可以大到開8000還re,開10000才ac
原來我根本沒寫錯,只是陣列開不夠大…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/05
今天不知道為何寫了好久的ACM…
看了看之前不會寫的二星題結果都會寫了耶…
------言歸正傳------
其實提示MEDIAN就很清楚了,雖然我在推出來之前以為是平均值…
嗯,看來MEDIAN是中位數…
我的推法:
設有N個數,1<=M<=N,設第M個數X則得到|X-N1| + |X-N2| + ...
那麼讓X成為第M+1個數後,發現:X增加了M,減少了N-M
所以可以發現最小的情況必為M=M-N,也就是沒辦法透過加減M和N-M變小時
此時M即為中位數,即最佳解
不過既然要取中位數就要先SORT…
3.9sec,名次不是很好看…400左右
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:補充:用counting sort+binary search可以跑到2.090 1006 12:30
→ sa072686 推:目前是98名…至於counting sort的做法就從中位數想想吧 1006 12:31
作者: sa072686 at 06/10/06
其實也不難寫的一題
方法有點像在換算二進位制一樣…
分析一下
以深度4來講
編號一定從8開始
走的時候第一次踏到一定走左,第二次一定走右
故推得:n%2==1時必走左,n%2==0時必走右
n%2的時候就加上4吧,一定從4開始
然後除以2,繼續往下
接著同上的方法一直做下去就可以得到解答了
不過,1、3、5、7在走第二步時,除以二的餘數必為0(1、3、5、7除以二後必為偶數)
不過不難發現:若把它們先+1再除以2就會得到1、2、3、4
這樣子就沒有問題了,可以繼續做下去,做到n=1就不要做了
再不認真點要被學弟追過去啦…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/06
又是一題看似複雜其實很好寫的一題
要講也沒什麼好講的…條件也限制得很棒了…
真要說解法,排列組合四字就夠了
條件限成這樣就可以用dp的方式建階乘表直接算了
12! = 479001600 < 2^31-1 = 2147483647
基本上可以說是同10338了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/06
開始有題目了,雖然目前還不多…
嗯,只是公告一下下
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:Wow! 1006 21:10
→ bruce3557 推:是爆難的那種嗎? 1006 21:20
→ sa072686 推:不知道為什麼我覺得越來越多爆難懂的單字… 1006 21:31
→ bruce3557 推:(握) 1006 21:32
→ sa072686 推:900被我秒了(1min)和1106x某題完全一樣(有中譯那題) 1006 21:39
→ bruce3557 推:11069 1006 21:43
作者: sa072686 at 06/10/06
很輕鬆的一題,甚至一分鐘內就完成了
原因是?和11069是完全一模一樣的解法(當然題目不一樣…)
為何呢?
只有1*2一種瓷磚,那麼能排的方法只有兩種:
11
22
和
1
1
所以k[n]=k[n-1]+k[n-2]
因為n塊時可以視為n-1塊加上第二種排法也可以視為n-2塊時加上第一種排法
由於最後面排法不一樣,所以絕對不會重複到,而事實上也只有這些排法
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/06
還不難寫的一題,新題目
翻譯一下…這題還不太難看懂
給n和m求介於n和m中的質數,其「差」出現次數最多者
若範圍內無質數、或質數僅有一個,或是出現最多次者超過一個時
則判定為沒有最大的
和一般的質因數分解題差不多做法…不過最後一名是怎樣?
第十名,而且名次和第九還差蠻多的…都贏在memory…
後面我都拿counting sort輔助了說
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:那我怎麼辦? 記憶體最大,時間最久..... 1007 02:10
作者: sa072686 at 06/10/07
蠻好寫的一題…
翻譯一下
把奇數以以下規則寫出來:
第一行寫一個,第二行寫三個,…第n行寫2n-1個
給你n代表該行寫著n個奇數,問該行末三個數加總為何
不難推,觀察得第一行行末為1,第二行行末為7,第三行行末為17
而我是猜有某種規律,就看行末彼此間的規律,畢竟和行末關係蠻大的
因為是要找最後三個數字,所以從最後一個去想就對了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/10/07 Sat 11:23:36
→ sa072686 推:已修正。 1007 11:24
作者: sa072686 at 06/10/07
※ 引述《sa072686 (南一中97級小教學~*)》之銘言:
> 還不難寫的一題,新題目
> 翻譯一下…這題還不太難看懂
> 給n和m求介於n和m中的質數,其「差」出現次數最多者
> 若範圍內無質數、或質數僅有一個,或是出現最多次者超過一個時
> 則判定為沒有最大的
> 和一般的質因數分解題差不多做法…不過最後一名是怎樣?
> 第十名,而且名次和第九還差蠻多的…都贏在memory…
> 後面我都拿counting sort輔助了說
其實memory上我幾乎是用到最精簡了
質因數個數還不到八萬個,我是開到剛剛好一個也不多
counting sort的好處是只要開到兩質數差的最大值就可以了
跑出來是115,所以第二排我只開到115而已
例如2~11
一般存1 2 2 4
不過我會存
k[1]=1
k[2]=2
k[3]=0
k[4]=1
不過速度好像沒快多少,還是前面就慢了…但memory真的很省
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/07
不難寫的一題,雖然看起來很複雜,可是暴力就行了
感覺這東西似乎是微分?和物理教過的有一點點像…(應該說是一樣@@)
而且真的不用擔心overflow,直接解就行了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/08
該說它難寫還是不難寫呢?反正看過題目就知道是不難做但極度暴力的題目
複雜度很高,可是不難
不過注意:如果是用scanf來讀字元的,請改用gets
我wa了很久都找不到bug的code只改了這裡就過了…
0.066sec AC,第五名
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/08
也不難寫的一題,一開始還擔心暴力dfs會tle…
不難發現一個結論:不管前面是從數字多少的過來
能夠再多走的步數都是一樣的
所以呢…配合數字的比較大小可以cut掉不少路
不過可能cut得不夠好,目前在103名,0.072sec AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/08
字串題,不過暴力竟然沒tle…
翻譯一下
給你一個整數n和一字串,求此字串中長度為n的子字串中出現最多次者
我用暴力建表把所有子字串列出來排序處理再找最多次的竟然也過…
如果用map大概可以玩counting sort吧…不過qsort也可以過
7.811sec with 24xxx memory AC
開到雙八十萬…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:進步到7.703,22xxx memory了…陣列65萬不足,70萬夠 1008 12:07
→ DarkKnight 推:注意: 0<n<=10 1008 13:30
→ sa072686 推:有…所以struct開到11而已,不過那串會很長… 1009 17:38
作者: seanwu at 06/10/08
※ 引述《gloompisces (TFcis96th pisces)》之銘言:
> 副版好像一直尸位素餐,來貼點東西好了
> 這題是math題,我推的公式好像不太好,似乎有更簡單的
> 設題目給你的兩個數是a和b
> 你要求出p,q
> 使 p^q=a
> (p-1)^q=b
> 輸出c和d
> 分別是 c = 1 + (p-1) + (p-1)^2 +...+ (p-1)^(q-1)
> d = [p^q * (p-1)^0] + [p^(q-1) * (p-1)^1] + .... + [p^0 * (p-1)^q]
> 以第一組測資為例,216 = 6^3 ,125 = 5^3
> 所以 c = 1+5+25=31
> d = 1*216 + 5*36 + 25*6 + 125*1 = 671
> 事實上不好實作,不過不要叫我實作
> 如果你堅持,好吧...請參考我板上的公告文
<求 c d>
用等比級數
c = 1 + (p-1) + (p-1)^2 +...+ (p-1)^(q-1)
公比為 p-1,首項為 1
= (1) * [(p-1)^q - 1]/[(p-1) - 1]
以 (p-1)^q = b 代入
c = (b-1) / (p-2)
d = [p^q * (p-1)^0] + [p^(q-1) * (p-1)^1] + .... + [p^0 * (p-1)^q]
公比為 (p-1)/p,首項為 p^q
= (p^q) * {[(p-1)/p]^(q+1) - 1} / [(p-1)/p - 1]
化簡
= (p-1)^(q+1) - p^(q+1) = (p-1)*[(p-1)^q] - p*[p^q]
以 a = p^q ,(p-1)^q = b 代入
d = (p-1)*b - p*a
<求 a b>
以 (p-1)+1 = p 代入a,展開
a = p^q
= [(p-1)+1]^q
= (p-1)^q + ...(中間這幾項皆有因數p-1)... + 1^q
(p-1)^q = b故
p-1 | a-b-1
p-1 | b
所以 p-1 | gcd(b,a-b-1)
特別注意當 a-b-1 = 0 時不成立 (RE 了好幾次 >_<),要另外做
還有 a = p^q,所以 p | a
從最大gcd(b,a-b-1)因數的開始找,直到 p | a 成立
我猜這是正解(證不出來),但為了保險起見,由
log_p[a] = loq_(p-1)[b]
加上
log(a)/log(b) = log(p)/log(p-1)
來檢驗
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 218.187.31.121 (太陽神電信)
▲ seanwu 改@2006/10/11 Wed 13:11:50
▲ seanwu 改@2006/10/14 Sat 21:07:09
作者: sa072686 at 06/10/09
不是很難的一題,不過害我想過了好多種方法…
後來決定直接用bfs暴力拆,22名(0.033sec AC)
看來bfs就行了嘛…
翻譯一下…
判斷一個方格中同樣數字的有沒有全部連在一起
輸入給你一個n值代表方格大小,然後有n-1行
第m行代表所有數字是m的方格的座標,最後一個數字則是沒給的座標
不知道有沒有人像我這麼笨的,不過還是提醒一下
「並不是每一行都有n個座標!」
因為這假設wa了兩次…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:啊...難怪我一直WA,所以要用%d%c? 1009 22:15
→ gloompisces 推:自問自答,看起來是 1009 22:28
作者: sa072686 at 06/10/09
其實也不難寫,只是我太相信double放得下它了…囧rz
嗯,用大數吧
翻譯一下
拿n個cd盒(不確定,這單字看不懂,囧rz,假設它是cd盒好了)
放d塊cd的方法(每塊cd與每cd盒皆視為相異)
公式很簡單,不過…要用大數做
其實也還好啦…n最多才到10
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:不是啦, 是要把 CD 分給外甥... 1009 20:18
→ sa072686 推:…||| 隨便啦,寫起來還不都一樣… 1009 23:13
作者: gloompisces at 06/10/09
偷偷說,有一種噁心至極的存字串方法
方法不便直接po
我只想說,26的10次方小於10的18次方
我希望你知道我在說什麼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.144.32 (不失敗大學)
→ Zero 推:我好想知道XD 1009 22:24
→ silentvow 推:好想知道XD 1009 22:27
→ csftwpt 推:我好想知道XD 1009 22:34
→ sa072686 推:10是字串最大長度,而26是字母數,所以意思是…? 1009 23:18
→ sa072686 推:沒猜錯應該是類似counting sort的方法…用c寫map 1009 23:19
→ sa072686 推:有空再試試看…綠皮書還有一大堆…||| 1009 23:20
→ sa072686 說:更正…應該和long long有關@@ 回太快了… 1009 23:31
→ sa072686 推:已AC,不過還是慢了0.5sec…不過變5.9sec了 1010 00:22
→ DarkKnight 說:不用 1 秒耶 XD 1022 19:52
作者: sa072686 at 06/10/14
一開始看覺得有點難,不過後來想想可以暴力解
算是用數學的方法吧,開陣列存下所有非self-number的數,剩餘的就是了
開bool就行了
先分析找出它的公式,首先是觀察每個self-number能不能以公式列出
之後呢…就把找到的非self-number記一下
公式嘛,從進位制去想就對了,我是用遞迴解
名次在108,秒數0.236sec,這題過的人蠻多的,這樣應該算不錯了…
如果能用dp輔助應該跑出來成績或許會更好吧
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/15
新翻譯的題目,其實還不太難
就用lis做就好了,除了這個好像也沒什麼好講的嚕
0.025sec AC,名次是13名
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/15
還不難寫,就大數除法而已
找循環節的方法也不難,不過我的方法還蠻暴力的
用循序搜尋果然很慢,0.055sec AC
到500多名還0.002sec我就不想找名次了 Orz
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/15
還不難寫的一題,dfs暴力就解決了
這題和216的確蠻像的,不過它的最短路徑不是兩點距離
而是兩點間走格子點的最短路徑
例如3 3和4 4距離是sqrt(2)
不過在這題是往下一步再往右一步,故為2
用dfs暴力拆0.023sec AC,名次在401…前面很多0.000的,看來有更好的方法
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/15
很容易的一題,不過因為看錯題目花了好多冤枉時間…
其實就只是很簡單的bfs而已,其它沒什麼好提的
翻譯一下好了…
給你人和人的關係圖,再給你新聞來源
之後來源會傳給他的朋友,隔天他的朋友會再傳給他的朋友的朋友
求單天最高首次聽見新聞的人數及該人數首次出現在第幾天
//寫這樣能有幾人看得懂…
結果我居然看成第一天傳給幾人,最高同一天有幾人首次聽見此新聞…囧rz
能看成這樣真佩服我自己
0.035sec AC,第三名(其實才十九人)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/15
不知道為什麼卡了很久的一題,明明想法都沒問題了…
大概是頭腦不太清楚…算了,不是重點,雖然wa了十來次…
這題其實不會太難,不過用dfs應該會爆…用dp就可以了
先翻譯一下
給起點和終點座標及施工中之道路求有幾種最短走法可到達終點
施工中的道路有點煩人,是給你點座標和方向
代表該點該方向的道路正在施工中,我是用三維存啦…
這個解決掉應該就沒問題了,至於走的方向的話嘛…
因為不是從一端到另一端的簡單型題目,不過沒關係
利用±1,一切解決
不會太難的一題,0.008sec AC,沒去注意名次,因為這秒數還蠻平民化的…
另外請記得使用long long
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:有心機到, 原來是要 long long, 害我超納悶的 1113 00:02
作者: sa072686 at 06/10/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@itszero.twbbs.org (686270as)
標題: [亂入]借po一下ACM 927
時間: 2006/10/19 Thu 20:44:03
作者: sa072686 (686270as) 看板: Zero
標題: [亂入]借po一下ACM 927
時間: 2006/10/16 Mon 19:13:18
不難寫的一題…不過因為索尼掛掉了,在這借po一下XD
翻譯一下…
給一整數k問{bm}中第k個整數為何?
其中{bm}為b1,b2,…,bn的集合
bi為連續i*d個ai,ai為一多項式
舉個例:第一組sample input
4 3 0 0 0 23
25
100
其中代表an是4次多項式,其0到4次項之常數分別為3、0、0、0、23
則第k個數n值為3(n=1是1~25,n=2是26~75,n=3則為76~150)
故為3*3^0 + 23*3^4 = 1866
最後請記得使用long long
這題大概0.002sec就會掉到最後一名了
重傳後拿到0.000sec囉
--
╮◢███◣╭─────────╮
│◤ ◢◤│傑洛基地•傑洛小站│
│ ◢◤ ╰─╮ by sa072686
│ ◢◤ ◢ │ From 203.204.38.30
│ ◥██◤ ╭╯ (和信超媒體)
╰──────╯
→ csftwpt 推:XDDDDDDD||| 06/10/16
→ sa072686 推:是cs耶XDDD 竟然被你發現我在這偷po文>///< 06/10/16
→ csftwpt 推:>//////////< 06/10/16
φ sa072686 轉:從 [sa072686] 信箱,于 2006/10/19 Thu 20:45:45
作者: sa072686 at 06/10/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@itszero.twbbs.org (686270as)
標題: Re: [亂入]借po一下ACM 10539
時間: 2006/10/19 Thu 20:44:22
作者: sa072686 (686270as) 看板: Zero
標題: Re: [亂入]借po一下ACM 10539
時間: 2006/10/16 Mon 19:42:32
不怎麼好寫的一題,不過說難也不會太難…
就是後面binary search要算個數時還蠻煩的 囧rz
我的方法是暴力把所有的數都存起來再加以sort,最後以binary search處理
0.937sec with 1636 memory AC…還蠻差的
--
╮◢███◣╭─────────╮
│◤ ◢◤│傑洛基地•傑洛小站│
│ ◢◤ ╰─╮ by sa072686
│ ◢◤ ◢ │ From 203.204.38.30
│ ◥██◤ ╭╯ (和信超媒體)
╰──────╯
φ sa072686 轉:從 [sa072686] 信箱,于 2006/10/19 Thu 20:46:01
作者: sa072686 at 06/10/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@itszero.twbbs.org (686270as)
標題: Re: [亂入]借po一下ACM 263
時間: 2006/10/19 Thu 20:44:28
作者: sa072686 (686270as) 看板: Zero
標題: Re: [亂入]借po一下ACM 263
時間: 2006/10/16 Mon 20:34:33
其實也不難做,暴力就可以了
只是要注意重覆的數未必連續出現,不注意的話應該是ole收場…
暴搜的下場…
0.736sec with 392 memory AC…排到124名去了
//第一次自己拿到百po的樣子…
--
╮◢███◣╭─────────╮
│◤ ◢◤│傑洛基地•傑洛小站│
│ ◢◤ ╰─╮ by sa072686
│ ◢◤ ◢ │ From 203.204.38.30
│ ◥██◤ ╭╯ (和信超媒體)
╰──────╯
φ sa072686 轉:從 [sa072686] 信箱,于 2006/10/19 Thu 20:46:17
▲ sa072686 改@2006/10/19 Thu 20:47:31
作者: sa072686 at 06/10/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@itszero.twbbs.org (686270as)
標題: Re: [亂入]借po一下ACM 10212
時間: 2006/10/19 Thu 20:44:38
作者: sa072686 (686270as) 看板: Zero
標題: Re: [亂入]借po一下ACM 10212
時間: 2006/10/17 Tue 18:09:11
神奇的一題,暴力解掉後…
嗯,名次在倒數了,不過秒數竟是28.697sec…雖然還是有過…
然後說明一下我觀察出來的東西,例如它給你n和m
那麼就是n*(n-1)*...*(n-m+1)
算出它的個位數就好了…
--
╮◢███◣╭─────────╮
│◤ ◢◤│傑洛基地•傑洛小站│
│ ◢◤ ╰─╮ by sa072686
│ ◢◤ ◢ │ From 203.204.38.30
│ ◥██◤ ╭╯ (和信超媒體)
╰──────╯
φ sa072686 轉:從 [sa072686] 信箱,于 2006/10/19 Thu 20:46:34
→ seanwu 推:我是看個位數1~9循環下去做,9!的個位數是8,看有幾個循環 1020 20:56
→ seanwu 說:不過莫名的WA掉 囧 1020 20:57
→ sa072686 推:要取出會導致零的出現的數字另外計算 1020 21:01
→ sa072686 推:我猜是最後非零那位數非個位數,既不可能完整計算 1020 21:01
→ sa072686 說:又不可能用不完整計算來算出,不是個位數就不單純了 1020 21:02
作者: sa072686 at 06/10/19
索尼掛掉時AC的
沒地方PO只好PO在別的地方…
感謝傑洛允許我在傑洛小站的Zero板借PO以便之後轉回來…
//百PO終於沒被MACACA拿走了XD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Macaca 推:囧rz 1020 20:39
→ sa072686 推:沒拿到很傷心嗎XDDD 1020 21:02
作者: sa072686 at 06/10/19
DP+物理題,從小米的ACM板挖到的
本來不會寫,不過剛好今天上物理課時聽到了一題完全一樣的題目…
所以把拿到的公式帶去社部寫,兩三分鐘就搞定了
至於解法我想會重心/質心應該就推得出來了
不過還是翻譯一下
在一張桌子上給你N張撲克牌,然後把它們一張一張堆在一起
看最多能夠超出桌面多少長度,長度以一張牌的長度為單位
物理課是講堆積木,如何堆最多塊讓它凸出第一塊最多卻不會垮掉…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:you can try acm 11116 now. 1019 21:29
作者: sa072686 at 06/10/19
新翻的題目,不過之前就寫過了,一題很簡單的dfs
我覺得這題輸出的處理比dfs上難了許多…
之前寫的時候因為題意沒弄懂所以一直失敗卻又抓不到原因
現在看了中譯才知道原因是題意沒搞懂XD
建議可以用字串的方式代替暴力輸出,就是先把底用字串方式做好
然後把問號先放上去該放的位置,再在dfs過程中把找到的放上去
這樣子之後只要利用簡單的公式指定輸出到哪裡(把那個元素值設為0
使其做為字串終點)即可很方便且快速地輸出,但記得輸出後要拿掉
0.000sec AC(P.E.)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/10/19
我以為我已經AC了,結果剛看發現竟然是TLE
不過後來觀察了一下之前的紀錄,應該是測資的問題
可能是改測資後爆掉了,不然好好的AC直接被TLE蓋掉又不是憑空消失…
還不難做的字串題,就是字串的計數而已,我用二元樹做出來了
1.1000sec AC(P.E.)with 3264 memory
事實上害我高興了一下,以為可以排進25名卻在3XX名才找到
還以為它壞了,結果從重傳的秒數得到一個結論:這是兩秒
重傳:2.021sec AC(P.E.)
而…把free()拿掉後,1.864sec AC(P.E.),不過memory醜掉了
變成6000多…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:欸...1864 sec? XDD 1023 18:55
▲ sa072686 改@2006/10/23 Mon 22:53:44
→ sa072686 推:XDDD 忘了加小數點了>///< 1023 22:53
作者: sa072686 at 06/10/21
dp題,花了一堆時間去想,可是到頭來卻發現很簡單的一題…
之前把它想得太複雜,動手時又一直怕overflow,後來才發現用double就行
根本不用怕overflow的問題…
0.002sec AC,不過該算難還是簡單呢…
公式不難推,說不定有它的規律,不過我不是用規律下去找的…
觀察一下暴力寫出來的東西吧,會找得到它的規律的
在這兒附上一些好了
當2 1時
0
1
2
當2 2時
00
01
10
11
12
21
22
當2 3時
000
001
010
011
012
100
101
110
111
112
121
122
210
211
212
221
222
發現了吧?什麼?還沒發現?那麼往下看吧…
不難發現尾巴的東西似乎都大同小異,而我們可以得到一個結論:
和加進去的那個數字有關聯性
而且加進去數字後若要依舊為tight則必須原本就是tight所以只需考慮tight
那麼,公式就很好看出來了
以2來說原本是tight中的那些數,其中尾巴必有0、1、2三種情形
而0後面只能接0或1,1則0、1、2皆可,2則只能接1、2
看出來了嗎?依尾巴的數字分開記錄個數,就可以做dp的處理了
我想應該有更好的dp方法,像是利用其對稱性切半之類的,不過似乎很麻煩
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:囧rz…才在想說題數怎麼沒增加,原來以前就AC過了 1021 10:08
→ sa072686 說:而且是一樣的方法,只是那時不會dp所以用暴力而已… 1021 10:08
作者: sa072686 at 06/10/21
類似於10081的做法…也是dp題
事實上用那題的想法去做會發現這題簡單了許多
不過呢,請記得用long long否則必錯…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: Robin at 06/10/22
這個版真不錯耶^^
你有去過infor嗎?
那邊個人版的everyacm也有在討論ACM喔
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Robin from 203.75.133.9 (沒有故鄉)
→ csftwpt 推:是 EverydayACM 1022 20:41
→ sa072686 推:歡迎歡迎XDDD 不過infor是…?沒去過耶~ 1023 12:40
→ shaform 推:是建中資訊社雅勒尼恩? 1023 21:38
→ csftwpt 推:雅勒 1023 21:40
→ chensc 推:我說shaform…你怎麼現在就開始發了= =+ 1023 22:32
→ shaform 推:其實我只是按搜尋……好吧…再次潛水 1024 18:07
→ Robin 推:噢不小心打錯了 1113 17:33
作者: sa072686 at 06/10/23
還不難寫的一題,路徑題的變形,用bfs就可以做了
翻譯一下…
給一張圖,'#'表障礙物,'.'表可通行點,'S'表起點,'E'表終點
從起點起第一步只能走一格,第二步走兩格,第三步走三格,第四步再走一格,…
依此類推,問最少幾步可以到達終點
不知道為什麼一樣bfs我memory用到快5000…雖然是開到最壞情形…
0.184sec AC,memory約5000,名次在6(事實上只有26人)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:第四步似乎是1格 1023 23:21
▲ sa072686 改@2006/10/23 Mon 23:22:45
→ sa072686 推:嗯,是一格…抱歉手誤 1023 23:22
作者: sa072686 at 06/10/24
其實也還不難想的一題,從二進位出發就可以解決了
翻譯一下
給一個數(注意0和負數也會出現,要小心0的情況)
輸出其以-2為底時的表示方法
轉成二進位後就好想多了,不過…
0.217sec AC,大概有更好的方法,或是可以直接算吧?
提示:
轉二進位後,在2^0的地方其它2^n(n!=0)的部分是影響不到的
同樣,可推廣至2^m(m!=n)時影響不到2^n
但二進制有個方法可以解決,以7為例:
7在二進位制的表示法為111
有2在,所以把它當成4-2,變成:
211
即1011
但這樣有8出現(有八!?)故將其視為16-8得11011此即為所求
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
→ Zero 推:報告學長我也不會@@ 1025 21:44
→ sa072686 推:囧rz 都有提示了… 1025 22:05
→ bruce3557 推:XDDDD 1025 22:05
→ bruce3557 推:話說最後一句我有冷到 1025 22:06
作者: sa072686 at 06/10/25
寫出來的請把code寄給我,用bbs的信箱把code複製後按alt+p(或右鍵)貼上即可
首先是輸出的部份
題目:
今天你想給你女朋友一個驚喜,因此你想寫一個程式
在執行時會輸出"I love you"的字樣,那麼現在就試試吧!
Sample input
No input.
Sample output
I love you
接著是讀入和變數的運用了,當然能養成將變數做有意義的命名會較好
我個人是都用a、b、c…這樣是很短啦,可以寫比較快,可是不好看懂
題目:
我想很多人的夢想應該都和我差不多,想自己用程式寫個遊戲
不過,不知道玩家輸入了什麼東西怎麼做出回應呢?
因此,試著突破這一關,判斷玩家的輸入值吧!
Sample input
1
3
5
Sample output
Your input is 1.
Your input is 3.
Your input is 5.
接著來一題和運算相關的吧
題目:
電腦為何又稱為計算機是因為它原本是拿來計算的
因此,你打算寫一個程式在讀入a和b後,輸出a+b、a-b、a*b和a/b的結果
Sample input
10 5
7 2
Sample output
a+b=15
a-b=5
a*b=50
a/b=2
a+b=9
a-b=5
a*b=14
a/b=3
我想很多人會想問為何7/2是3吧?因為當運算的兩數皆為整數時運算結果以整數計
故3.5就會把0.5省去啦
接著,我們練練if
題目:
國中學過一種東西叫做絕對值吧?寫出如下的東西是穩錯的:
printf("%d\n",|a|);
絕對值在c中可不是這麼寫滴,試著讀入a和b後輸出a-b之絕對值吧
Sample input
5 2
2 5
Sample output
3
3
接著試試迴圈吧
題目:
許多人或許記過梯形公式1+2+3+...+n=(n*n+n)/2
但是那就練不到迴圈了,是不是?當然,如果你想挑戰階乘也可以
n階乘表示為n!,計算方式為1*2*...*n,但只要n>12用int就overflow(溢位)啦
所以,玩玩連加就好了
Sample input
5
12
Sample output
15
78
再來來點綜合練習吧
題目:
稅金的算法我想大家都不陌生。什麼?不知道?那我大致講一下,不過比例是我定的
當收入<501時要繳交收入的1/4
當500<收入<1001時要繳收入的1/2
那你會想說收入504的人不就很倒楣,收入500才交125,多四元就要交252
有沒有搞錯!?是的,搞錯了,是超過500的部份繳1/2
故500/4 + 4/2 = 125 + 2 = 127
現在國稅局重金聘請你幫他們寫個程式,給你收入你就輸出應繳的稅金
為了重金,拼吧!
Sample input
124
576
1024
Sample output
31
163
387
綜合練習第二題:
題目:
因數這東西相信大家並不陌生,不過若大一點的數你想分解它時
當然是很累的,相信若數學作業中出現>200的數要求你分解時你會想撕作業本
這時聰明的你當然立刻想到讓電腦去做苦工,自己就可以和朋友在旁邊泡茶聊天啦
(事實上以電腦的處理速度,只要別太大的數你都喝不到茶、聊不到天的)
Sample input
9
77
100
Sample output
1 3 9
1 7 11 77
1 2 4 5 10 20 25 50 100
到這裡,我想作業中的九九乘法應該也可以試試看了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ bruce3557 推:好教學 1025 18:57
→ Zero 推:學長學長,我也要寫嗎XD 1025 20:00
→ sa072686 推:這打發不了你三分鐘時間吧…||| 1025 20:14
→ bruce3557 推:XDDD 1025 20:21
→ csftwpt 推:看完題目就超過五分鐘了 orz 1025 20:50
→ sa072686 推:XDDD 出得還可以吧? //會不會下次就被你們拿去用了XD 1025 20:52
→ bruce3557 推:XDDDD好高級,報告學長我不會XDDD 1025 20:59
作者: sa072686 at 06/10/25
基本架構:
#include<stdio.h>
int main()
{
return 0;
}
也有學弟問到常在其它地方看到用void main()
這個也可以,而且不用return 0;
輸出:printf(); 包含在函式庫stdio.h
中加""夾在裡面的是要輸出的字串,要輸出變數則用%d…等等
例:printf("Hello"); printf("%d * %d = %d",a,b,c);
讀入:scanf(); 包含在函式庫stdio.h
中加""夾在裡面是要讀入的東西,通常用%d…等
例:scanf("%d%d",&a,&b);
變數型態:定義一整數變數
例:int a,b,c;
變數的運算:賦值例a=5;
加減乘除運算例:a=a+5; a=a*3;
自運算:a+=3; a*=5;
接著是條件式if()
()中間放條件,{}中放條件成立時要執行的程式碼
else if()和else則是當置於前之所有條件皆不成立時才判斷
且不能單獨存在
再來是邏輯運算,也就是&&和||(且和或)
注意不管<=或>=,大於和小於符號都必須置於等號之前
條件運算有以下幾種
> 大於
>= 大於等於
== 等於
< 小於
<= 小於等於
!= 不等於
以上皆可以小括號改變順序,小括號中的會優先運算,即使三、四層或以上
也一樣用小括號,而不是中、大括號
最後是迴圈,for(;;)
中間分號隔成三個區域,第一區通常將變數賦予初始值,第二區是條件
條件成立時會一直不斷地執行,最後一區是每跑一圈後執行的運算
三區皆可空白不寫,最後一區在每一圈開始時才會執行
補充(以下社課均未教到)
變數型態:
定義方法 名稱 範圍
bool 布林變數 0~1
char 字元 -128~127
short 整數 -32768~32767
int 長整數 -2147483648~2147483647(-2^31~2^31 - 1)
long 長整數 同int
long long ?(不知) -2^63~2^63 - 1
float 浮點數 ?(不知)
double ?(不知) ?(不知,至少和long long等大)
其中float和double要用%f,其它均可用%d,char可用%c(字元)和%d(字元之ascii碼)
short、int、long和long long可加unsigned,將成為非負整數,正數範圍加大2倍
常用ascii碼:
10 換行
32 空白
48~57 0~9
65~90 A~Z
97~122 a~z
其它輸出用:%x是轉成十六進位制輸出,%g輸出浮點數(自動調整位數)
對long long需用%lld,unsigned long和unsigned long long分號要%lu和%llu
靠右對齊:例%3d則長度為3靠右對齊,不足以空白補齊,超過就忽略
靠右對齊以0補齊(如作業第三題的時間):例%02d則長度為2靠右對齊,不足以0補齊
浮點數調整輸出長度:%5.2f表示長度5(含小數點)輸出到小數點後2位,不足以
空白補齊,可簡略為%.2f則整數部份不限制長度
條件判斷的原理:事實上不管是比較或邏輯都是種運算,回傳值為真(1)或假(0)
例:3<5就回傳1,3>5就回傳0,而if()中小括號內的數若為0則不執行
若不為0則執行,故可直接以變數代表例if(a)這樣a=0時不執行,其餘情況皆執行
加上!則會把0變成非0、非0變成0,例如if(!a)則a=0時才執行
故有二進位制運算如&、|、^是將整數轉成二進位制後一個一個位數比較
&是同為1就得到1,否則為0,|則是只要一個為1就得到1,^則只有一個是0
一個是1的時候才得到1,否則為0
舉個例:用10和12
1010
1100
----
1000 => 10&12=8
1110 => 10|12=14
0110 => 10^12=6
這個現在看可能沒用,以後就會用到了
for(;;)裡面若用到continue;則直接跳過這圈直接執行下一圈
break;則是直接離開迴圈
接著運算的部份有一個很實用的東西,就是%
a%b就是a除以b的餘數,例如7%2為1,111%10為1
用法和其它運算一樣
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ silentvow 推:long long是超長整數 XD double是雙倍精確浮點數 1025 21:35
→ sa072686 推:XDDD 原來 1025 22:05
→ sa072686 推:t9板那篇也幫忙一下吧XDDD 1025 22:06
→ bruce3557 推:long long double XDDDD 1025 22:06
→ sa072686 推:long long bool XDDD 1025 22:12
→ bruce3557 推:囧...bool不能開long long啦...他不能加長= =|| 1025 22:26
→ silentvow 推:還有double 要用%lf 讀入 1025 22:50
→ sa072686 推:囧…我漏了l… 1026 12:49
作者: sa072686 at 06/10/26
輕鬆解決…用dp就可以了,很像147和674的題目
翻譯一下
給你體積,問有幾種方法可用邊長為整數之立方體組合而成
事實上和給你錢數,然後求用一元、五元…等硬幣有幾種組合方法
寫過類題的話應該還蠻輕鬆的
0.004sec AC,第11名
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 06/10/28
ACM 11136 : Hoax or what
有一間公司提出一種吸引顧客的方法
在購物完後,每個顧客會將他們花了多少錢寫在紙片上,並投到一個箱子中
在每一天結束後,公司將會檢查箱子,選出花最多錢和花最少錢的顧客
公司將會退錢給那位花最多錢的顧客,退的錢的總數是兩張紙片上數目的差
然後這兩位顧客的紙片將從箱子中抽掉
其他顧客的紙片將會繼續留在箱子中
這個活動一共進行n天,問在n天之內,公司一共要退多少錢?
測資第一行給一個正整數n,1<=n<=5000
以下n行有一個正整數k,0<=k<=100000,代表這一天有幾個顧客消費
後面有k個數字,是每個顧客消費的金額(<=1000000)
當n=0,程式結束
Warning: 用STL可能導致TLE,因為Input的資料大概是16Mb
--
我始終帶著你愛的微笑
一路上尋找我遺失的美好
不小心當淚滑過嘴角
就用你握過的手抹掉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.57 (不失敗大學)
→ PG 推:又是一題歧視C++的 1028 12:27
→ csftwpt 推:原來題目是這樣 @.@ 嫌他太長一直沒去看 1028 19:08
→ sa072686 推:謝謝…之前有看沒有懂…看成送價值相當於價差的獎品… 1028 20:57
作者: sa072686 at 06/10/28
還不難寫的一題,之前還以為會tle…算是數學吧…
真糟糕,我發現我越來越看不懂題目在說什麼了
事實上這題只看到cube和in at least two ways,然後猜出題意
是ACM題目越出越多生字還是我英文越唸越弱了…囧rz
小翻一下
給最小限制及範圍,求範圍中可表示成有至少兩種方法可以兩個完全立方數相加的數
事實上可以看成給你n和m,求n和m(含)中有多少個數符合以上條件
0.457sec AC,約用3800多的memory
純暴力跑這樣應該還不差吧…用排列組合硬湊加quick sort…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:38 是好數字 1028 22:06
→ sa072686 推:囧…為什麼啊? 1030 12:43
作者: sa072686 at 06/10/28
簡單的一題,以費氏數列為底表示一個數字的
老實說題目我完全沒看…||| 直接看那張表和題目就大概知道了
嗯…還是翻譯一下吧
將一數字以費氏數列為底表示出來
0.008sec AC,因為傳錯題wa了一次…囧rz,傳到962去了…忘記改
嗯,事實上有很直觀的解法,用遞迴的概念,不過因為要補零就乾脆用迴圈暴力了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:跟 11089 一樣 1111 23:55
作者: gloompisces at 06/10/28
ACM 11129 : An antiarithmetic permutation
給你一個正整數n(n<=10000),你必須給出0到n-1的一個重排數列
使得在這個數列中,對於任何的i,j,k(1<=i<j<k<=n)
他的第i項,第j項,第k項恆不成等差
--
明天的 故事都是我的 是我的
所謂的 幸福快樂 不只一種
美麗的 春夏秋冬落葉 是我的
體驗過才懂夢是什麼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.57 (不失敗大學)
→ csftwpt 推:這題我不會耶... 1028 23:54
→ gloompisces 推:數學題.. 1028 23:55
作者: gloompisces at 06/10/28
ACM 11130 : Billiard bounces
在一個長為a,寬為b的撞球桌上,一個球放在球桌的正中心
他的初速度是v,一開始的運動方向是與寬夾A度角
且因為摩擦力的作用,球會在s秒後靜止
給你a,b,v,A,s,請求出在球停止前,他會碰撞長和寬各幾次?
註:這個撞球桌是沒有洞的
--
I always bring the lovely smile which you gave
Going ahead to find my losing precious
If the tears slide down because of my careless
I will use the hand which you held to wipe off
Angla Chung -- Losing Precious
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.57 (不失敗大學)
作者: sa072686 at 06/10/30
迴文題,還不難寫…有點小麻煩就是了
其中要特別注意0的情況
我是讓它用迴圈跑15~最小的數字,但是如果輸入值給你0呢?
那麼你可能會輸出十五個數字,請小心…
0.324sec AC,名次在83名
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:324 也是個好數字 XD 1030 19:26
→ sa072686 推:為什麼啊?XDDD 1030 20:34
作者: ryan1027 at 06/10/30
你好,我是阿泰
昨天真的很謝謝你
我現在知道我的教學方法哪裡要修正了
謝謝 ~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ryan1027 from 218.169.163.170 (中滑一番)
→ chensc 推:板主好發 ||| 1030 20:55
→ sa072686 推:XDDD 你好~* //一樓…囧rz 1030 22:58
→ bruce3557 推:發 1030 22:59
→ sa072686 推:事實上是透過我國中同學才認識的…||| 1030 23:00
→ Zero 推:發 1030 23:01
作者: sa072686 at 06/11/01
要練要練…如果每次進度都忘光光會跟不上喔
因為只在社課練不太夠…雖然我東西會愈教愈少,但相對會愈難
想超前的可以中午來找我或用bbs
想要即時通和msn請去使用者名單查詢
那麼,回歸正題吧
while迴圈:while(),()中間放執行條件
請注意while()較易造成無窮迴圈
陣列:即一連串、被從0、1、…編號到n-2、n-1的變數
定義方法為定義時於變數名稱後加上[],[]中間為長度
注意編號從0開始,[]中間為長度而非結尾編號,故定義a[n]時
只存在a[0]~a[n-1],且[]中只能用常數而不能使用變數
給它編號就能使用它了,就像是座號,知道座號就能找到對方了
字元:以char定義之變數,為一整數型態,大小為-128~127
在數字小時常做為整數型態使用,因範圍小運算速度會較快
字元儲存方式為存入代表該字元之ASCII碼,字元包含英數及符號
而不包含任何全形的東西(不知道全形的請自行查資料)
讀入及輸出方法為%c,由於是記錄ASCII碼所以可以直接對其做運算
另外,將字元以''包起來即可得其ASCII碼,也就視為一個整數
例如a的ASCII碼是97,故'a'代表97,使用'和"請先加上\例'\''
請注意讀入時會讀到\n,可是c++的cin並不會
字串:以char定義之陣列,且以ASCII碼0做為結尾,故不等於字元陣列
讀入可使用scanf("%s",a);在碰到space或\n時會視為字串結束且不會記錄space及\n
gets(a);則會記錄space,只在\n時結束且不記錄\n
輸出一律使用printf("%s",a);
判斷一字串是否到底可依其定義找到ASCII碼出現0為止
或以strlen()函數先行找出字串長度
補充:
常用ASCII碼:
0~9分別對應48~57
A~Z分別對應65~90
a~z分別對應97~122
\n為10,space為32
%的輸出方式:%%而非\%,請注意
字元讀入有時會過於敏感,故有造成wrong answer之可能(如10800)
若無故wrong answer且確定code是對的,請試著使用字串處理
字串函數:皆需先include string.h
strlen(a) 為一整數,表a字串之長度
strcmp(a,b) 比較a和b兩字串,值為0則相等,>0則a較大,<0則a較小
大小定義為依ASCII碼排序
abc > acb
abc < ab
strcpy(a,b) 將b字串複製過去給a,a只需為字元陣列即可
二維陣列:通常用於記錄圖形資料(以座標方式)或較特殊之資料
定義方法如a[5][5],使用方法和一維一樣,但需給二數
依此可類推至n維陣列,但一般只用到二維
最後補充:字串有許多好用的地方,大家可以去發現一下
例如用來簡化或加速輸出等等…
嗯,那麼就這樣,練習比較重要
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/01
由於學會以while讀取後便具備寫ACM之能力,故以ACM為練習題
若無法AC卻找不出原因請把code和問題一起寄過來
若AC也請把code寄過來,此外請養成縮排習慣
初次社課:
100
488
10055
10071
10300
10499
10550
10589
10783
10812
10963
本次社課:
272
458
494
591
10035
10141
10340
10370
10929
挑戰題:
476
477
579
10018
10038
10062
10082
10107
10209
10222
10473
10673
10789
10878
10903
10924
11059
暫時整理了一下一星題,除10696應該都有足夠能力解了才是
就看能不能想得出解法而已,學的解這些都夠了
二星也有不少簡單的,有興趣可以試試,有空再整理
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:我也可以把沒 AC 的 Code 寄給你嗎 XD 1101 19:35
→ sa072686 推:可以啊XDDD 未必抓得到bug就是 1101 19:37
→ csftwpt 推:sa 你人好好喔 >///////////////////< 1101 19:49
→ sa072686 推:>///< 我被發卡了XDDD 1101 19:50
作者: gloompisces at 06/11/01
※ 引述《sa072686 (南一中九七級小教學~)》之銘言:
> 嗯…只記得stack、dfs、brute force和prime,另一個忘掉了…抱歉
> 能再說一次嗎@@?
另外一個我記得我說是LIS還LCS,但好像太殘忍
> 另外…dfs我有想了一題,題目大致如下,能幫我看一下嗎?
> 把五個國字數字一、二、三…到十依以下規則排列:
> 相鄰的兩數字筆劃只能差一
> 試印出所有排列組合
是至多差一吧XD,一定要差一的話無解
> 不過有個小缺點:大部份都是兩劃…而且組合數好像也不少
> 真要檢查起來倒也麻煩…但是比較不那麼直觀
如果我沒算錯,共有4800種 XDDD
> stack我根本沒用過@@,能用stack的我都用陣列或dfs解決…
這樣就可以了啊,我好像也只會用陣列解決
> 不過我會想想看的
> prime正在考慮要不要出很像某題acm的一題
如果是這樣,那或許可以直接叫他們傳ACM,省的還要出測資和judge
> 給一數n,且n|m!,求m之最小值
> 雖然出題是不急…不過怕到時沒靈感趕不出來@@
我是覺得要和ming討論一下,看難度要出多難
--
☆╓努力越過風暴,向著未來飄╖☆
│▁▂▃▄▅ ◎ ▅▄▃▂▁│
☆╙我們才會遇到,感動的擁抱╜☆
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.145.98 (不失敗大學)
作者: pioneerlike at 06/11/03
還不難寫的一題,只要看懂題目作者很無聊,
本題馬上AC...XDD
翻譯一下:
[19919]中一中電研98級低調小學弟一枚XDD
有一位學弟有在寫ACM,但最近寫USACO比較多......
他準備參加中區資訊能力競賽......
他知道善良的你是個很強大的教學,
請你幫助他寫出一個程式提醒自己的行程。
Input
第一行有個整數N(1<=N<=100)。
接下來有N行字串,請依據字串內容給予正確回應。
Output
請輸出N行正確回應。
Sample Input
6
打混
摸魚
逛網誌
打Game
掛B
睡覺
Sample Output
去code啦你!
去code啦你!
去code啦你!
去code啦你!
去code啦你!
去code啦你!
--------------------------------------------
XDD....
學長好^^"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by pioneerlike from 210.60.107.237 (一串高中)
→ sa072686 推:學弟好 /*真特殊的報到文XDDD*/ 1103 11:19
→ seanwu 推:我ㄧ開始還認真讀題目... ACM 19919?! 嚇死我也 1103 18:46
→ sa072686 推:嗯…請善用標題前面的分類… 1103 19:14
→ pioneerlike 推:唬到人了XD 1103 21:44
→ georgemouse 推:我也被嚇到了XD 1104 00:20
作者: sa072686 at 06/11/03
總算是完成它了…還真是不太好寫的一題,細節一直出錯
還是要靠dp輔助…在腦筋不靈活的情況挑戰這題果然很辛苦
至於方法,暴力算吧…lucky貓的測資能全過的話就很難wa了
邊界問題可以用unsigned long來處理
算法的話,我是先建表查出它到底是在哪結束
若是在Sn結束,那就把前面全部扣除直接算Sn就可以了
詳細的方法自己想看看吧
0.002sec AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (沒有故鄉)
▲ sa072686 改@2006/11/03 Fri 22:03:08
作者: seanwu at 06/11/02
...一邊敲著鍵盤 一邊留著鼻水的昏沉感冒狀態也會過啊...
沒中譯 翻:
Input: 給一數n及2個n*n矩陣
Output:判斷第一個矩陣經由以下方法是否能等於第二個矩陣
順位 1 Preservation: 根本就一樣 = ="
2 (X度) Degree Rotation: 旋轉 90, 180, 270度
3 Vertical Reflection: 垂直翻轉(上下翻)
4 Combination: 先翻轉再加旋轉
5 Improper: 做不到
開陣列硬轉吧...
注意最後一組測資:
2
.. XX => Pattern 7 was rotated 180 degrees.
XX .. (順位 旋轉>翻轉)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 218.187.28.9 (太陽神電信)
→ sa072686 推:嗯?我發現這篇的日期擺在這位置怪怪的… /*有蟲?*/ 1103 22:28
→ seanwu 說:轉載的話日期不變 1103 22:37
→ sa072686 推:原來是轉載文 1103 23:50
→ sa072686 推:0.000sec AC…嗯,差點真的寫was combination… 1104 09:33
作者: seanwu at 06/11/03
煩呀!
別看那張圖還有中譯....囉哩八唆的
基本上就是問:在ΔBNM中的NM邊上取一點A,而AB為定值
問最長的NM是多少,其中∠BNM, ∠NBM, ∠NMB為定值
令 α=∠BNM, β=∠NMB, γ=∠NBM, θ=∠ABN
用正弦律,可得
y=NM=AB×〔sinθ/sinα+sin(γ-θ)/sinβ〕
求極大值令dy/dθ=0,解得 (好啦,我用微分硬幹...)
θ=arctan〔(sinβ/sinα-cosγ)/sinγ〕
代回y,即得。
我很疑惑為何要用數學符號整死自己
其實,一切原於 LaTeX 的真傳呀!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 218.187.28.63 (太陽神電信)
▲ seanwu 改@2006/11/03 Fri 22:26:33
→ seanwu 呸:sin打成cos,這可不是開玩笑的啊 1103 22:27
→ sa072686 推:我數學不好…囧rz 我可以說我都看不懂嗎? 1103 22:29
→ seanwu 推:其實也沒差,這種題目應該是考數學,不是考資訊 1104 16:31
作者: sa072686 at 06/11/04
看起來很恐怖(像TLE題)可是還不難寫的一題,質數題
我用的做法還蠻簡單的,1.574sec AC,用掉1676的memory,22名
算是拿記憶體空間換取執行速度吧
小翻譯一下
給兩數m、n求m到n(包含)之間有幾個Circular Prime
Circular Prime的定義為:不論從哪個位數開始讀起都是質數
像19937是質數,從千位開始的99371、百位的93719、十位的37199、個位的71993
全都是質數,故其為Circular Prime
事實上在快八萬個的質數中,找出來只有55個…
做法我是暴力建表,再用二分搜尋找一下就出來了
其實55個用循序也不會太慢…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/04
不難寫的一題,雖然之前不會寫…算是推規律?
嗯,基本上我是求m-1和n兩數所要寫的零的個數
然後再相減就可以了…至於方法可以用遞迴解,抓到公式的話不難
0.057sec AC,17/172…名次還不錯
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/05
不太難寫的一題,不過有點小陷阱要想清楚…用dp還不難解
雖然wa蠻久的…嗯,翻譯一下
給你兩數m、n求m、n中之所有Kaprekar Number
Kaprekar Number定義如下:將其平方分成兩部份再相加與原數相等
例如55^2=3025,取30+25=55
事實上這樣找出來符合的只有19個…蠻少的,我想0.002可能是這樣來的…
0.025sec AC(P.E.),名次12/39
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/11/05 Sun 11:39:47
作者: sa072686 at 06/11/05
嗯…看板閱讀記錄跟我說這板的人氣似乎越來越好了
也多了許多不認識的ID出現,而且有些還是常客
我想會是常客應該是同好吧XD,所以蠻想認識一下的
所以…那些我還不認識的人們,可以請你們報到一下
讓我認識一下嗎?謝謝大家
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:我在這裡報到 1105 23:45
→ pioneerlike 推:報到文在樓上XDD 1106 00:09
→ web 推:推XD 1106 01:30
→ sa072686 推:XDDD 這樣還是不認識呀 1106 13:00
作者: Zero at 06/11/05
版主大人你好,
我想你說的常客大概就是在下我吧。我是傑洛,是一隻.... 帥氣(?)的機器人,目前
就讀中央大學通訊工程學系大一新生喔>///<
請版主多多指教。
傑洛
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Zero from 59.117.120.124 (中滑一番)
→ sa072686 推:學長好~* /*裝不認識?XDDD*/ 1105 12:08
→ Zero 推:可是我沒報到過阿:P 1105 12:09
→ bruce3557 推:(發) 1105 12:10
→ sa072686 推:嗯嗯…傑洛蠻發的(茶) 1105 12:34
→ Zero 推:發個屁啦= = (怒) 1105 13:04
→ sa072686 推:不是我說的XDDD 1105 13:12
→ Robin 喔:嗨 1113 17:38
作者: sa072686 at 06/11/05
沒想到還蠻好AC的,不過0.160sec排到674名,都快殿底了是為什麼@@?
雖然我沒有用dp做,可是2^20要開陣列會很大吧…
不知道怎麼寫才會比較快…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:開了陣列,但比你快不到0.05sec 1105 15:49
作者: sa072686 at 06/11/05
和10229幾乎一樣的題目,不過秒數和排名還是一樣爛…
5.142sec AC,害我以為爆掉了||| 連兩題成績都很差…
不知道怎麼做才會跑比較快…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:有偷吃步...但還是很慢 1105 16:35
作者: hsun at 06/11/05
因為我的報到文被一大堆ACM淹沒了
所以在一次XD
我踩踩踩~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by hsun from 220.142.12.234 (中滑一番)
→ gloompisces 推:先代版主m了XD 1105 15:28
→ sa072686 推:XDDD 的確是不知道擠到哪去了 1105 17:43
→ sa072686 說:感謝學長代m XD 1105 17:43
→ chensc 推:哼哼…都是acm文害的(丟) XDDDDD 1105 21:56
→ sa072686 推:ACM文好啊XDDD 還有翻譯耶,翻譯才是重點 1105 22:17
作者: bruce3557 at 06/11/05
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 沒想到還蠻好AC的,不過0.160sec排到674名,都快殿底了是為什麼@@?
> 雖然我沒有用dp做,可是2^20要開陣列會很大吧…
> 不知道怎麼寫才會比較快…
剛剛觀察一下有一點偷吃步,不過不知道可不可行,
請數學強者幫我看一下XDrz
就是我觀察這個數列,
發現是一個自描述數列,
mod 2得到的餘數
0 1 1 0 1 1 0 1 1 0 1 1---->循環長度3
mod 4得到的餘數
0 1 1 2 3 1 0 1 1 2 3 1 0 1 1 2 3 1---->循環長度6
mod 8得到的餘數
0 1 1 2 3 5 0 5 5 2 7 1 0 1 1 2 3 5 0 5 5 2 7 1 ...--->循環長度12
那依此類推的話,2^n次的循環長度就是n*1.5
依此可以建表,
且餘數可以為前兩項之和%2^n(同餘),
至於長度會兩倍兩倍的原因應該是mod 2^n的結果,因為除數*2所以長度到2倍,
不知道這樣對不對,煩請各位強者給我解答。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by bruce3557 from 220.129.18.82 (中滑一番)
→ bruce3557 推:轉回我的版一下 1105 20:09
→ DarkKnight 推:重點是會循環 1105 20:32
→ DarkKnight 推:不然就用 lg n 的硬做 應該也不會慢太多 1105 20:35
→ bruce3557 推:是這樣沒錯 1105 20:36
作者: shaform at 06/11/06
那麼……
我是南一中的一年級學生
偶而路過此地
請多指教……
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by shaform from 125.229.8.2 (中滑一番)
→ sa072686 推:學弟好~* 1106 19:43
→ Zero 推: 學弟好~* 1106 19:47
→ chensc 推: 學弟好~* 1106 20:08
→ ducksteven 推:弟好~* 這個是強者XD 1107 00:03
→ sa072686 推:強者好~* 1107 18:29
作者: gloompisces at 06/11/06
說到這個
我還蠻想知道 ACM ID = 53469 那位的姓名
--
☆╓努力越過風暴,向著未來飄╖☆
│▁▂▃▄▅ ◎ ▅▄▃▂▁│
☆╙我們才會遇到,感動的擁抱╜☆
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.146.1 (不失敗大學)
→ Robin 推:我知道了耶!叫 鍾以千 1113 23:11
→ Robin 說:他是誰啊? 1113 23:11
作者: sa072686 at 06/11/07
被rejudge掉的一題…研究過後還不難寫,只要sort寫得好就簡單了
我是把它當字串題看,連讀入都用字串讀XD 原因當然是便於比對
以及方便的字串貓函式啦,不過其實數字最大長度在80以上…
0.424sec AC,排名37/343
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/07
一副TLE樣的一題,不過用dfs硬做還可以…
嗯,4.715sec AC,286名,沒想到這樣暴力解成績還不差…
湊個三行好了…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/07
又是一題長得一副TLE樣的題目,不過dfs還是過了…
0.002sec AC,沒想到暴力還蠻快的
湊個第三行…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/07
不難解的一題,算是字串題,善用排序就可以過了
先找完再排序不知道會不會比較快…不過似乎會比較麻煩
嗯,0.012sec AC,不過名次還蠻差的,過半了…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/07
嗯…用n^2的暴力解法把它解掉了…雖然執行時間一樣很醜
而且還附加了n^2 log n^2的quick sort,再加上binary search…
嗯,1.1sec左右,6000左右memory…暴力的下場
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ peter50216 推:m*n^2 好像比較快.... 0215 10:41
作者: sa072686 at 06/11/07
不難寫的一題,不小心看了三組測資看出公式後就覺得好簡單
不過要用大數寫乘法和減法…雖然也不難啦
嗯,0.010sec AC,168名,在以前的大數題成績來說算不錯了…
今天大概頭腦有點不正常吧,把課業完全拋到腦後不加理會後
做了好多題…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:我記得我好像沒用減法,快了點 -> 0.008 1108 13:04
→ seanwu 說:公式...忘了...重推看看.... 1108 13:05
作者: sa072686 at 06/11/08
其實還不難寫的一題,不過要用到long long,事實上暴力就可以了
嗯…不過請小心,n可能會很大,s1和s2都有可能會超出int的範圍
我就是其中一個忘了開long long暴了好多次…
0.346sec AC(P.E.) 83名,還不壞
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:囧,沒趕上11/07 1108 00:01
作者: sa072686 at 06/11/08
嗯,教得似乎有些亂,來整理一下
自定函式
事實上我們運用的幾乎所有東西像是scanf()、printf()…等等都是函式的一種
它是由一連串的程式碼所組成的一個集合,只需呼叫他就能執行一連串的功能
就連我們基本的main()也是一個函式,接下來談談函式吧
定義方式
基本上它和變數最大的不同就是函式後面有加(),而()中間可空白
也可定義幾個變數在裡面做為傳值呼叫所用,傳值呼叫等會兒談
函式主要分兩種:有回傳值(以變數型態定義,視為一變數)
和無回傳值(以void定義,不回傳值)範例如下:
int abcc()
{
return 0;
}
void abcc()
{
}
呼叫方式
有兩種,一種是直接呼叫,一種是傳值(事實上也有傳址等等,但不常用)呼叫
直接寫出函式名如abcc();便算是呼叫它並執行一次了,故應避免重複呼叫
以造成多次進行相同之運算,傳值時只需在裡面加上要傳的值,如:
abcc(3,5);如此便可,有回傳值之函式可視為一變數,其值為其回傳之值
使用時機
一般用於遞迴或深度優先搜尋法(DFS)及相同程式碼出現多次及複雜時
它可以簡化程式碼,並且增加可讀性
否則不太複雜的程式碼直接寫就可以了,以下示範一下
給底和高求三角形面積:
double abcc(int a,int b)
{
return a*b/2;
}
int main()
{
printf("%.3f\n",abcc(5,9));
return 0;
}
注意事項:
若將其置於所在之函式上方,則直接呼叫可,若非則需先行定義,例:
int main()
{
int abcc();
printf("%d\n",abcc(5));
return 0;
}
int abcc(int p)
{
return p*p;
}
否則將不認得該函式
全域變數和區域變數:
顧名思義,全域變數即在任何函式中皆可調用,但需注意在任何函式中亦皆可改變其值
而區域變數則僅限於該函式內方可使用,故同名之區域變數於不同函式視為相異
而全域變數於不同函式則視為相同且不可與區域變數重複
定義方式,定義在函式內的即為區域變數,反之則為全域變數,舉例:
int x;
int abcc()
{
int a,b,c;
return 0;
}
int main()
{
int a,b,c;
return 0;
}
則x於兩函式皆可使用,a、b、c由於是區域變數且位於不同函式,故視為相異
遞迴:
基本定義為一函式不斷地直接或間接呼叫自己,且有一終止條件
故可用以處理有規律之計算,如連加可寫作:
int abcc(int p)
{
if(p==1)
{
return 1;
}
return p+abcc(p-1);
}
int main()
{
printf("%d\n",abcc(5));
return 0;
}
如此輸出值便為1+2+3+4+5=15,原理如下:
呼叫abcc(5)後由於p!=1故回傳p+abcc(p-1),前面提過abcc(p-1)可視為一變數
而其值相當於其回傳值,故我們必須先計算abcc(p-1)再與p相加得解答15
如此層層地往下深入計算,並在最深層p==1結束,因其回傳1而不再呼叫自己
故我們可從尾巴推回去:
abcc(1)=1
abcc(2)=2+abcc(1)=2+1=3
abcc(3)=3+abcc(2)=3+3=6
abcc(4)=4+abcc(3)=4+6=10
abcc(5)=5+abcc(4)=5+10=15
由此可知其運作方式及原理,並可得到一結論,即它是先深入到底後
再由底的回傳值層層回推,此種方式類似於堆疊,補充會提
所以到這裡,試著練習遞迴吧?
請寫出一函式求解階層(n階層寫作n!,定義為1*2*...*n-1*n)
不過注意到13,int型態就已經放不下了…
如果做得出來就試試費氏數列吧,前幾項為:
1 1 2 3 5 8 13 21 34 …
即除前兩項外每一項皆為前兩項之和
課外補充:
深度優先搜尋法(Depth First Search, DFS)
顧名思義,深度優先而廣度次之,即一條路找到底後,返回再找其它路
做法即多向式的遞迴,如果還不能理解就看看例子吧
舉例:給你一n階之樓梯,求解每一步皆可依心情跨一階或二階,共有幾種走法
例:n=3,我們遞迴式可以寫成如下:
int abcc(int p)
{
int w,x;
if(p==3)
{
return 1;
}
else if(p>3)
{
return 0;
}
w=abcc(p+1);
x=abcc(p+2);
return w+x;
}
int main()
{
printf("%d\n",abcc(0));
return 0;
}
由此可看出它是多向式的遞迴,事實上可以寫作:return abcc(p+1)+abcc(p+2);
不過為了方便講解執行先後順序,故寫成這樣
首先我們分析一下,可得到它必先呼叫abcc(p+1)
為方便分析,我們做以下表格,可得到以下結果:
第n步 1 2 3
跨步大小 1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
2 2 2
由先後順序可得是先找到最底,再來退一步再試第二種走法
再來再退再試,…,如此不斷地執行
那麼我想應該對DFS的搜尋順序有個基本的了解了,其它就做題目熟悉它吧
堆疊與佇列
這是很基本的資料結構,若以一語蓋之,則前者為先進後出,後者為先進先出
前者可視為堆起一疊東西,先放的在底下,故最後取出
後者類似於排隊,先排先處理,後排後處理
遞迴及DFS類似於堆疊的形式,如上例的遞迴式就像是:
在堆疊中放入1步,再放入1步,再放入1步,到達底層了
接著退回1步,換走2步看看,再退回,由於最底層1、2步都試過了
故再往回退一步,再試,…
像這樣子:
111 到底了,拿掉最後一個再試
112 到底了,拿掉後發現兩種走法都試過了
11 沒得走了,再退
121
122
…
依此類推
這就是堆疊的概念了
二維陣列:
之前教的叫做一維陣列,如a[50],但二維陣列則如下:a[50][50]
若一維可視為一條線,二維則可視為一個面,最簡單的方式便是將其看作迷宮
給x和y座標便可得到那一格有些什麼,寶箱?石頭?陷阱?…等等
故常用來存下整張的圖,當然也常用於其它用途,如路徑的連通或兩點之距離等
除了定義方式外其它沒什麼不同,便不再多談,也可依此推廣至n維陣列
今天就講到這裡啦,找作業去囉
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ DarkKnight 說:if 和 for 都不是喔 1108 20:51
→ sa072686 說:不是嗎@@?不是都有()嗎… 1108 22:39
→ csftwpt 說:不是吧 1108 22:55
→ sa072686 說:嗯… 1108 22:57
▲ sa072686 改@2006/11/08 Wed 22:57:55
作者: sa072686 at 06/11/08
函數的東西實在沒什麼好出的…既然可以寫在函數裡面
代表可以直接寫出來運算而不需要透過函數
所以任何東西都可以用函數做,也可以都不用…
遞迴的題目的話ACM 10696可以試試看
或是試著用它來寫費氏數列
讀入一個n值之後輸出第n個費氏數列
費氏數列前幾個為1 1 2 3 5 8 13 21 …
規律是第n項等於其前兩項之相加
至於291要做就要會用二維陣列,不過還沒教到
我會放在補充裡面,dfs一旦會了少說可以做出20、30題以上
那麼,先試試看吧,dfs的題目我再另外找
另外,想挑戰高難度遞迴的試試11038吧,或在我板上的置底文找找遞迴題
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
→ Zero 推:dfs耶>///< 1108 18:01
→ sa072686 推:不過就多向的遞迴而已嘛…囧rz,不過時間不夠沒講stack 1108 18:03
作者: sa072686 at 06/11/08
註:請讓你的程式可以重覆接受讀入
自己出的(比ACM好寫):
遞迴:
一、
你向一神祕商人買了隻神奇的小兔子,牠並不用透過交配便可以產下一隻兔子
現在牠剛出生還沒有長大,所以在一個月後才有能力產下一隻兔子
但當牠有能力產下一隻兔子後,每個月都固定會產下一隻兔子,而產下的小兔子
和原本的神奇小兔子完全一模一樣,那麼問買n個月後你共有多少隻的兔子?
Sample input
1
3
5
Sample output
1
2
5
二、
相信大家對將數列或字串做重新排列組合這件事應該很有興趣
因為將一字串重新組合有時會得到意想不到的有趣結果
以往在做排列組合總常漏東漏西且很費時,但如今你會寫程式了
給你一個字串,請將其所有排列組合輸出
Sample input
cat
Nush
Sample output
cat
cta
act
atc
tca
tac
Nush
Nuhs
Nsuh
Nshu
Nhus
Nhsu
uNsh
uNhs
usNh
ushN
uhNs
uhsN
sNuh
sNhu
suNh
suhN
shNu
shuN
hNus
hNsu
huNs
husN
hsNu
hsuN
三、
相信大家都看過電子的數字,如下:
1 111 111 1 1 111 111 111 111 111 111
1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 111 111 111 111 111 1 111 111 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1
1 111 111 1 111 111 1 111 1 111
然而其都是由一畫一畫構成的,我們現在想求一種組合
即給你一數字n,輸出長度為n且符合以下規則之數列:
相鄰兩數只能多幾畫或少幾畫(如1多上下左上左下則成0,而2則需少掉右上加上左下
才能成為5,故2和5不能放在一起)那麼,試試吧
Sample input
2
Sample output
13
14
17
18
19
10
26
28
31
37
38
41
48
49
56
57
58
59
65
68
71
73
75
78
79
70
81
82
83
84
85
86
87
88
89
80
91
94
95
97
98
01
07
08
//有看漏之可能…有錯漏請更正
ACM部份:
遞迴:
271
374
435
442
10854
11038
DFS:
167
291
441
574
628
639
676
750
839
10004
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ bruce3557 推:好難喔xd 1108 20:24
→ sa072686 推:XDDD 好假喔 1108 20:24
→ styhihs 推:超難的xD 1108 20:44
→ Macaca 推:好難喔XDrz 1108 21:20
作者: lovemoonfish at 06/11/08
學長好~~~
我是98TH害羞小學弟~~~
來報到嚕
(真希望不會被ACM淹沒)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by lovemoonfish from 125.229.181.86 (中滑一番)
→ sa072686 推:學弟好~* /*不過你可能要失望了…*/ 1108 23:00
→ pioneerlike 推:XDD~ 1108 23:09
→ Zero 推:好嗆的學長(嚇) 1109 07:46
作者: sa072686 at 06/11/08
補上stack(堆疊)和二維陣列好了
「今天又有討厭的英文作業了!」恨不得寫個病毒讓英文老師的頭當掉的你
因為功力不足(?)也只好作罷,乖乖屈服…不過你的書桌還蠻亂的
懶懶的你不太想整理,不過看著亂亂的書桌你很好奇它到底還有多少的面積
是沒放東西,可以讓你寫作業的,因此你寫了一個程式讀入雜物的數量
與其左上和右下座標,假設雜物們都是長方形且擺得很正,書桌大小為50*50,試試吧!
註:左上角座標為(0,0)
Sample input
2
10 10 20 20
0 0 10 10
2
0 0 20 20
0 0 10 10
Sample output
2258
2059
每個人編寫code的習慣都不太一樣,雖然它沒有絕對的好壞之分
但是呢,有些習慣還是避免的好,可是有些人就是固執…
code中常見的{}、[]、()、''、""通常都是成對出現的,但有人總是不喜歡
先把它打上去後再在中間加上要放的東西,例如a*(1+2)總有人喜歡1+2打完後才打)
當然這樣很容易漏掉,因此他們希望有程式可以幫他們檢查
那麼,給你code,幫他們檢查是否以上五種皆有成對出現吧,只需做這個檢查就行
結尾為/*End Of Code*/
Sample input
int main()
{
int a,b;
printf("%d%d",a,b);
return 0;
}
/*End Of Code*/
int main()
{
char a[1000000];
scanf("%s",a);
printf("%s\n,a);
return 0;
}
/*End Of Code*/
Sample output
yes
no
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 06/11/09
(看到大家都在自介)
南一98級學弟
請多多指教
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.39 (台狼一中桑靈餓)
→ sa072686 推:學弟好~* 1109 17:51
作者: sa072686 at 06/11/10
真是誇張的一題…長得一副TLE樣,不過卻是秒殺…
很單純地寫法,兩三下就過了…還以為會wa的
本以為一定要有相對應的人,結果把目的地和故鄉分存再檢查是否全部相等也過
換言之,a到b,b到c,c到a也可以
1.547sec AC,memory 6167,144/429名
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 06/11/12
給你一張地圖和起點終點
上面有一些地雷
你必須避開所有的地雷走到終點
問最少需幾步
第一行是地圖的長和寬
第二行的數字k是只有幾行有地雷
接下來的k行的前兩個數字m,n是指這是第m行,這行有n個地雷
後面的n個數是這些地雷在這一行的哪些位置
長==0 && 寬==0 時,結束程式
--
我始終帶著你愛的微笑
一路上尋找我遺失的美好
不小心當淚滑過嘴角
就用你握過的手抹掉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.169 (不失敗大學)
→ sa072686 推:1.746sec AC,記憶體用到了16012…不過還蠻好寫的 1112 18:04
作者: sa072686 at 06/11/13
不難解的一題,不過題目看不懂,弄了很久…
題目我也看不懂,不知道怎麼翻譯,給第二組sample input的解法
自己類推好了XDDD
23:59:59:99 = 8639999/8640000 = 9999998/10000000 小數點捨掉就好
嗯,那麼就這樣吧XDDD
0.217sec AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 06/11/13
ACM 10688 : The Poor Giant
在一個桌子上有n顆蘋果,第i顆重k+i (1<=i<=n)
ex:k=3,n=4時,有四顆蘋果,重量分別是4,5,6,7
在這些蘋果中,只有一個是甜的,比這顆重的都是酸的,比這顆輕的都是苦的
現在有一個巨人想找出甜的蘋果是哪一顆,請問他的"倒楣指數"最小是多少?
倒楣指數怎麼算呢? 假設現在有4顆重量是1、2、3、4的蘋果
如果巨人先吃第二顆
(1)是酸的 => 甜的是第一顆
(2)是甜的 => 甜的是第二顆
(3)是苦的 => 他要再吃第三顆蘋果才能分出哪顆是甜的
此時 #1=sweet : 2
#2=sweet : 2
#3=sweet : 2+3=5
#4=sweet : 2+3=5
total = 14
也就是他的倒楣指數是14
但如果他先吃第一顆,有錯再吃第三顆呢?
你應該能推出
#1=sweet : 1
#2=sweet : 1+3=4
#3=sweet : 1+3=4
#4=sweet : 1+3=4
total = 13
他的倒楣指數只有13,事實上,這也是最小的倒楣指數
測試資料的第一列有一個數字t,是測試資料的總列數 (t<=100)
接下來的t行各有兩個數n,k (1<=n+k<=500)
Sample Inputs:
5
2 0
3 0
4 0
5 0
10 20
Sample Outputs:
Case 1: 2
Case 2: 6
Case 3: 13
Case 4: 22
Case 5: 605
//How nice a problem it is!
--
I always bring the lovely smile which you gave
Going ahead to find my losing precious
If the tears slide down because of my careless
I will use the hand which you held to wipe off
Angla Chung -- Losing Precious
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.144.53 (不失敗大學)
→ PG 推:應該是How nice a problem或是What a nice problem 1114 08:29
→ PG 推: \it is (放在"或是"前面) 1114 08:30
→ sa072686 推:印象中是How nice the problem is.... 1114 12:52
→ gloompisces 推:= =....我的英文... 1114 21:48
▲ gloompisces 改@2006/11/14 Tue 21:49:57
作者: sa072686 at 06/11/13
不難寫的一題,不過要用到大數…之前看不懂,現在倒覺得很好推
嗯,double存不下那麼大的…讀入用long long就夠用了
小翻譯一下,不過其實也不太會翻
給你n,輸出第n個三的次方數的子集合,如下:
第一個是空集合,第二個是1,第三個是3
其它就依此類推吧,不難想
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: csftwpt at 06/11/13
--- http://acm.uva.es/p/v106/10688.html ---
This yields a solution of 1+3+3+3=13, beating 14.
XD... 我還沒看懂題目倒是真的...
如果先吃 #2, 那 "#2 is sweet" 為什麼不是只吃一個就知道了...?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by csftwpt from 61.64.125.217 (所以內特)
→ sa072686 推:呃,應該是看重量吧?只吃一個,可是那個重量2 1114 07:35
→ csftwpt 推:Oh! 1114 12:16
→ gloompisces 推:紅色那行是題目錯,應為1+4+4+4 1114 21:48
作者: PG at 06/11/14
提醒一下
這題最好用long long
剛剛因為沒注意到溢位問題
害我Debug了快要半個小時= =
--
╔─────╗ ╮ │◎├───────────為了一個夢想────────
│Score │─│§─┼─┼─P─────P──── 我必須有所放棄 ──旋律─
│0000133440│─│∣─┼U┼O───U─O────即使現在那是指宅物─────
│Evaluation│─╱──┼─┼──────────── 我卻依然迷惑 ──淺野真澄
│●●●●●│﹝╭╮─┼─┼─────────────────────────
╚─────╝╰╰╯─┼C┼────C─── 台南一中資訊社 7th教學 PG───
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 192.168.4.24 (台狼一中桑靈餓)
→ sa072686 推:為什麼要long long?我沒用說 1114 12:53
→ PG 推:寫法不同吧 1114 13:24
→ sa072686 推:怎麼寫的呀? 怎麼想都不用注意耶… 1114 13:26
→ PG 推:我是先乘後除 (q[0]-'0')*360000*1000/864 會爆 1114 13:29
→ sa072686 推:1000/864可以用double存,我是把它直接轉出來 1114 18:31
→ sa072686 推:再換算單位大小就解決了 1114 18:31
→ sa072686 說:不過,q[0]-'0'這寫法是…? 1114 18:36
→ seanwu 推:算成數字? 1114 18:38
→ sa072686 推:算成數字不也還是string嗎…而且還有0的出現 1114 19:22
→ Robin 推:要用long long int 1115 11:04
→ sa072686 推:long long就行了 1115 12:51
作者: Robin at 06/11/14
※ 引述《gloompisces (努力做到最好。)》之銘言:
> 說到這個
> 我還蠻想知道 ACM ID = 53469 那位的姓名
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Robin from 203.75.133.9 (沒有故鄉)
作者: sa072686 at 06/11/16
被rejudge掉的一題…經過一番波折又冒著南區炸掉的危險
終於完成它了,0.207sec AC
看來是和rejudge的原因一樣是浮點數誤差問題,一開始都抓錯方向了
因為給5.11499999999…只要九多到一定數量就會變輸出5.12
所以就沒用內建的%.2f輸出,而自己算算看:
例如出來是10.1149
我想辦法拿到0.0049,再看它是否小於0.005
若小於0.005則把輸出調整為10.11,若否則輸出調整為10.12
雖然我不確定比較大小的部份是不是有比內建四捨五入嚴謹,至少我確定這樣會過
花掉了好多無謂的精神和休息時間…研究了這個幾乎0%出現在南區的東西
值得嗎?可是弄出來後心情好了很多XD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ pioneerlike 推:對不起,我西斯了._. 1116 22:44
→ sa072686 推:啊? 1116 22:46
→ sa072686 推:不過過這種AC率2%的題目實在蠻有成就感的XD 1116 23:07
→ csftwpt 推:我改這樣就 AC 了 (double)t1/t2*100+1e-7 1117 22:27
作者: sa072686 at 06/11/17
感謝IiDoxz XDDD
可是南區炸了 囧rz
一等獎…
炸了四格 囧rz
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.71.96.201 (椰風谷無限延伸)
作者: sa072686 at 06/11/17
憑印象寫的…也沒有照題目編號
一、
列
4 1 2 15 16
3 4 3 14 13
2 5 8 9 12
1 6 7 10 11
行 1 2 3 4
嗯,給你數字問座標
二、
給你m和n問這之間除數(因數)最多的是哪一個和有幾個
1<=m<=n<=100000000
三、
給你一數問是否為完美的數,定義為其不含自己之所有因數和等於自己
例,6有因數1、2、3(不含本身)而1+2+3=6故6為一完美數
四、
給你兩數a、b與一字串,若a為1則加密後輸出,2則反之
加密方式為將該字串依A=0,B=1,…,Z=25,SPACE=26(ASCII 32)
加上b之後除以27取其餘數,再換回字母輸出
例如字串ABC,b=2,則加密成CDE
五、
給兩大數(最大一百位)求其乘積
六、
給一連串含負號、四則運算符號及括號之四則運算式,求解
七、
給你m和n,m人編號0~m-1並圍成一圈,數n個人後殺掉他,再從n+1人開始數
求最後存活者
八、
給你兩數,a代表有多少個工作,b代表有幾個依賴,接著下一列有每工作花費天數
再來b列有兩數x、y,表示y工作得在x工作完成後才能開始
且每個工作不能同時進行,求每個工作最長和最短起始天數之差
例:a做四天,c做兩天,d做一天,b做三天,且b在a、d皆完成之情形才能進行
c同b的情形,則對b而言最短為a、d做完即做b,須4+1=5天後方得進行
但若先做c,最後再做b則在七天後進行,故其差值為2
完成:七題 失敗:一題(第六題)
事實上,白痴暴力題很多
第一題,其實表只有這麼大,n<=16,只是題目沒講罷了
第二題暴力就好,測資間的差值不大,除數就寫成標準分解式就可以算了
第三題暴力照解,我的解法是:
c=sqrt(a)+1;
d=a%2;
for(b=2+d,i=1;b<c;b+=1+d)
{
if(!(a%b))
{
i+=b+a/b;
}
}
這樣簡短又不失速率,沒檢查到許多不可能的地方
第四題直接用ASCII做加減,取餘用+27或-27最後直接輸出就好了
這題看到是直接跳過,因為題目很長滿滿一張,可是其實很白痴…
第五題就大數…
第六題真的解不出來,到現在還想不太到解法
第七題joseph三分鐘就寫完了,只是忘了把n+1就炸掉一分…
第八題看起來很複雜,實際上卻不難,我一開始看錯以為工作可同時進行
後來發現不是,兩排dfs就出來了,所以才能在最後十分鐘趕出來
嗯…四個六題的(加上我是五個)應該都很緊張,一方面想寫出關鍵的第七題
一方面又怕有人寫出來(黑板上有寫解題狀況)不過卻在最後一分鐘
囧rz,有人暴出第七題了
不過要不是這樣,全場炸最多分的我應該就倒了吧XD
至於成績…
低調,低調 >///<
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:其實一直很擔心計概炸掉,演算法好少,沒看過的好多 1117 18:07
→ chensc 推:我才剛要寫而已 你就po出來了 = =" 1117 19:17
→ sa072686 推:>///< 我po好久你才上的 1117 19:17
→ styhihs 推:可以問一下第一題是什麼意思嗎...?(我好笨xD") 1117 20:02
→ Zero 推:Input 3 Ouput 1,1 是這樣吧? 1117 21:40
→ sa072686 推:啊啊…囧了 沒說清楚 上到下是4=>1 左到右是1=>4 1117 22:24
→ sa072686 推:所以3是…3 2 1117 22:24
▲ sa072686 改@2006/11/17 Fri 23:30:53
▲ sa072686 改@2006/11/18 Sat 12:57:29
φ ming1053 轉:到 [TFcis] 看板,于 2006/11/18 Sat 22:19:23
作者: chensc at 06/11/17
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 憑印象寫的…也沒有照題目編號
幫忙補一下測資。(題本上的)
> 一、
> 1 2 15 16
> 4 3 14 13
> 5 8 9 12
> 6 7 10 11
> 嗯,給你數字問座標
> 二、
> 給你m和n問這之間除數(因數)最多的是哪一個和有幾個
> 1<=m<=n<=100000000
Sample Input
8889 9999
> 三、
> 給你一數問是否為完美的數,定義為其不含自己之所有因數和等於自己
> 例,6有因數1、2、3(不含本身)而1+2+3=6故6為一完美數
> 四、
> 給你兩數a、b與一字串,若a為1則加密後輸出,2則反之
> 加密方式為將該字串依A=0,B=1,…,Z=25,SPACE=26(ASCII 32)
> 加上b之後除以27取其餘數,再換回字母輸出
> 例如字串ABC,b=2,則加密成CDE
Sample Input
1 3 TAKE THAT HILL
> 五、
> 給兩大數(最大一百位)求其乘積
Sample Input
35, 100
> 六、
> 給一連串含負號、四則運算符號及括號之四則運算式,求解
> 七、
> 給你m和n,m人編號0~m-1並圍成一圈,數n個人後殺掉他,再從n+1人開始數
Sample Input
5 3
> 八、
> 給你兩數,a代表有多少個工作,b代表有幾個依賴,接著下一列有每工作花費天數
> 再來b列有兩數x、y,表示y工作得在x工作完成後才能開始
> 且每個工作不能同時進行,求每個工作最長和最短起始天數之差
> 例:a做四天,c做兩天,d做一天,b做三天,且b在a、d皆完成之情形才能進行
> c同b的情形,則對b而言最短為a、d做完即做b,須4+1=5天後方得進行
> 但若先做c,最後再做b則在七天後進行,故其差值為2
Sample Input
4 4
4 3 2 1
1 2
4 2
1 3
4 3
(這題記最清楚…因為快暴出來了啊 = =")
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.173.12 (Isis 的希臘金字塔)
→ sa072686 推:囧 那要不要補 先po output? 1117 19:34
φ ming1053 轉:到 [TFcis] 看板,于 2006/11/18 Sat 22:19:35
作者: masnec at 06/11/17
對了...
根據慣例......
南區第一要請pizza和飲料喔XDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by masnec from 61.64.165.137 (所以內特)
→ chensc 推:嗯 這個好 XD 1117 22:33
→ masnec 推:我這樣會不會太過份XDD 1117 22:34
→ csftwpt 推:可以跨縣市要 Pizza 嗎? 1117 22:35
→ pioneerlike 推:我要跨縣市要可樂>///< 1117 22:38
→ Zero 推:我也要跨縣市pizza! 1117 22:40
→ pioneerlike 推:大家來伸!!XD 1117 22:40
→ Macaca 推:我也要啦>\\\< 1117 23:01
→ masnec 推:話說這個"慣例"好像是從今年開始XDD 1117 23:03
→ Macaca 推:總要有人開始阿,sa就交給你了吧(拍) 1117 23:06
→ styhihs 推:(伸) 1117 23:07
→ sa072686 推:囧rz,我會不會賠錢啊…可不可以拉南區數學的下水XDDD 1117 23:07
→ Robin 推:可以 1117 23:45
→ csftwpt 推:沒問題! 你數學物理化學一起拉來我們更高興~ 1118 07:14
→ sa072686 推:XDDD 只有數學認識啊 1118 07:43
→ pioneerlike 推:要吃哪一家阿 1118 09:31
→ Macaca 推:我都沒差XD 1118 12:30
→ sa072686 推:我可不可以用親筆簽名取代請客?XDDD 1118 12:51
→ chensc 推:當然不行啊(瞪) 1118 12:59
→ sa072686 推:囧 我好傷心 1118 13:36
→ etetet91 推:xDD" 1118 15:09
→ sa072686 推:話說…已經有人問過我能不能伸默寫考卷去收藏了>///< 1118 16:22
→ panda1990 推:我也要>/////< 1119 13:09
→ sa072686 推:妳也要伸我的默寫考卷嗎 >///< 1119 13:26
→ Zero 推:Pizza到底在那裡∼∼ 1119 20:54
→ sa072686 推:>///< 機器人不用吃Pizza 1119 20:55
→ chensc 推:要啦要啦 機器人當然要吃 1119 21:01
→ sa072686 推:囧 我會破產啦 你也要幫忙出 1119 21:03
→ uselessCat 推:請客+1 XD 1119 21:13
→ sa072686 推:越來越多了…這篇會不會變成我板上第一篇推爆文呀XDDD 1119 21:19
→ gloompisces 推:OK啊, 讓它爆XD 1119 21:35
→ sa072686 推:XDDD 請客的話學長要陪我請 1119 22:16
→ gloompisces 推:再說XDD 1119 23:29
→ georgemouse 推:來幫忙推爆XD 1121 20:07
→ sa072686 推:囧,結果ACM文沒爆卻爆請客文 1121 20:35
→ uselessCat 推:這就是人性阿(誤) 1122 00:39
→ sa072686 推:不過外校的應該請不到?XDDD 1122 12:56
作者: sa072686 at 06/11/19
有點難想…算是brute force吧,其實還不算太難
只是…某圖形看錯,wa了好久後來重看題目才發現
小翻譯一下,其實光看圖也可以做啦…
給你一堆無蓋箱子,問疊起來高度多少,且疊時遵從以下規則:
一、若箱子比最上面的箱子大則疊上去
二、若箱子比最上面的箱子小,則下墜至找到比自己小的箱子並疊上去
三、大箱子裡面的小箱子疊起來不得比大箱子高
四、若三無法成立,則小箱子可疊在大箱子上面且浮空也無所謂
五、注意第四點,請注意題目的圖,未必要疊在最大的箱子上面
我就是因為第五點沒看清楚…嗯,該題wa數增加了50%左右
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:XDDDD 1119 13:10
作者: sa072686 at 06/11/19
瞬殺,思考+coding約三十秒
當然,不加上把公式想回來的時間
嗯,翻譯…我也不太知道題目在講什麼,徵求翻譯題目內文…
我只是看到4和14就有某種感覺,為了確認再看了題目的3和5…
確定是它了XDDD,題目在講什麼其實我不知道 囧rz
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/19
秒掉了…嗯,之前很天真地用%e輸出,結果大一點就跑零出來了
看了seanwu板後就大概知道怎麼做了,用dp可以解
0.127sec AC,memory嘛…12000左右…|||
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:為甚麼你的可以到0.127sec,不公平!! (滾) 1119 22:10
→ sa072686 推:或許是因為我不是雙double? 1119 22:17
作者: sa072686 at 06/11/19
不難寫的一題,正確地來說只要會寫就很簡單,只是純C會有點小麻煩…
嗯,不過我用的方法似乎有點慢,目前是最後一名XD而且還慢一倍
小翻譯一下
給k、i、j,k表戰場數,i、j分別表綠軍和藍軍數
接下來i行是綠軍戰鬥力,再來j行為藍軍戰鬥力
每一輪各推派戰鬥力最強幾位的去各個戰場戰鬥,若一方人數不足則戰場留空
若雙方戰鬥力相同則同歸於盡,否則戰鬥力強者存活且戰鬥力會變弱
變弱的程度相當於對方之戰鬥力,存活者回到陣營中,再選人進行下一輪
戰到至少有一方全滅為止,問是雙方皆全滅或是藍、綠哪一方獲勝
及獲勝方剩餘的戰鬥力,以非遞增方式輸出
0.551sec AC(P.E.) memory 1952,目前最後一名中
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ bruce3557 推:好政治XDrz 1119 19:27
→ sa072686 推:它就寫這樣咩 不然要sa軍和bruce軍嗎>///< 1119 19:43
→ bruce3557 推:囧...SA軍和CS軍啦orz 1119 19:44
→ csftwpt 推:... 顯然是我戰敗了... 1119 20:38
→ sa072686 推:囧 四樓不太中肯 1119 20:54
→ sa072686 推:話說…笨了 竟然沒用counting用heap 難怪慢那麼多 1119 20:59
作者: csftwpt at 06/11/19
e = floor(log10(2) * n + 1);
a = 10^e / 2^n
log2(a) = log2(10^e) - n*log2(2);
log2(a) = e * log2(10) - n;
log2(a) = e / log10(2) - n;
x.xxx = a = 2^(e / log10(2) - n);
y = -e;
-
Accepted 0.088 Minimum VacationClub
C++ 474 - Heads / Tails Probability
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by csftwpt from 61.62.56.117 (所以內特)
→ seanwu 推:唔...原來是這樣 之前怕log太慢都不敢用,看來應該是還好 1119 22:13
→ csftwpt 推:真強大, 看來學長你是數學強者 >////< 1119 22:14
→ sa072686 推:囧,我是數學白痴 1119 22:17
作者: sa072686 at 06/11/19
還以為是拓樸,沒想到暴力就行…
越來越喜歡把問題複雜化了,糟糕的現象
小翻譯一下
從人生的起點(事件零)到死亡(沒有任何選擇)有幾種不同的路
0.000sec AC(P.E.)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:可以這麼暴力嗎 = =||| 1119 22:28
作者: gloompisces at 06/11/19
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 還以為是拓樸,沒想到暴力就行…
> 越來越喜歡把問題複雜化了,糟糕的現象
> 小翻譯一下
> 從人生的起點(事件零)到死亡(沒有任何選擇)有幾種不同的路
PS:同樣的路有可能會出現兩次,此時要當做兩種不同的路
所以
2
3 1 1 1
0
他的output是3
> 0.000sec AC(P.E.)
--
明天的 故事都是我的 是我的
所謂的 幸福快樂 不只一種
美麗的 春夏秋冬落葉 是我的
體驗過才懂夢是什麼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.42 (不失敗大學)
→ sa072686 推:原來有這種事,我直接存路徑數和目的地所以沒這問題 1119 22:42
作者: sa072686 at 06/11/19
看起來像greedy卻又好像不行的一題
只好用dfs爆它了…所以成績嘛,嗯…
小翻譯一下
給兩整數t、w及一堆寶藏的深度和金幣數,求最多拿到多少金幣
t為氧氣數,w為消耗量,下去要消耗w*深度,上來要2w*深度
0.131sec AC(P.E)想當然是最後一名,不過目前似乎greedy也會過
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:DP 1119 23:54
→ sa072686 推:正解是DP嗎XDDD 等等來想想看 1119 23:57
作者: PG at 06/11/20
奇怪了
居然TLE= ="
--
╔─────╗ ╮ │◎├───────────為了一個夢想────────
│Score │─│§─┼─┼─P─────P──── 我必須有所放棄 ──旋律─
│0000133440│─│∣─┼U┼O───U─O────即使現在那是指宅物─────
│Evaluation│─╱──┼─┼──────────── 我卻依然迷惑 ──淺野真澄
│●●●●●│﹝╭╮─┼─┼─────────────────────────
╚─────╝╰╰╯─┼C┼────C─── 台南一中資訊社 7th教學 PG───
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 192.168.4.24 (台狼一中桑靈餓)
作者: sa072686 at 06/11/20
※ 本文轉錄自 [seanwu] 看板
作者: seanwu (Blindest) 站內: seanwu
標題: [筆記] 加泰隆數 Catalan Number
時間: 2006/11/20 Mon 14:50:11
加泰隆數列
n 0 1 2 3 4 ...
F(n) 1 1 2 5 14 ...
1. F(n) = Sum[ F(n-i-1)*F(i) ] (i=1,2,3, ... n-1)
ex F(3) = F(0)*F(2) + F(1)*F(1) + F(2)*F(0)
2. F(n) = C(2n,2) - C(2n,n-1) C(n,m)為組合數 = n!/[(n-m)!m!]
3. F(n) = F(n-1)*(4n-2)/(n+1)
第三個最好用,感謝SA學長的指導
第一個我做大數時用,因為不用除法
Catalan可以表示:
1.給N個節點,可產生的二元樹數目 (ACM 10303)
2.在正N多邊形中,以三角形分割多邊形的方法數
3.ACM 991
4.對N個物品任意分群的方法數
5.在N*N方格圖中,由(0,0)->(n,n)且恆在直線y=x下方的路徑數
6.如下圖的"山"的數目,N=3:
/\
/\ /\ / \ /\/\
/\/\/\ /\/ \ / \/\ / \ / \
7. N對 ( ) 可產生的合法括號匹配式數目
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.74 (台狼一中桑靈餓)
→ PG 推:界轉 1120 15:32
φ PG 轉:到 [PG] 看板,于 2006/11/20 Mon 15:32:43
→ sa072686 推:第三條應該感謝gloompisces學長,我給他公式他幫我導的 1120 18:05
→ sa072686 推:順便借轉XDDD 1120 18:05
φ sa072686 轉:從 [seanwu] 看板,于 2006/11/20 Mon 18:06:06
→ csftwpt 推:叫 "卡特蘭" 不是好聽很多嗎 orz 1120 19:20
→ seanwu 推:我學到的是這樣啊...? 1120 19:31
→ sa072686 推:不知道以後會不會有sa數列?XDDD 1120 20:38
→ csftwpt 推:有啊, 0 7 2 6 8 6 1120 21:09
→ sa072686 推:囧…這樣只有六項呀… 1120 21:15
→ seanwu 推:我找到最長的ID b22556744,有八項喔... 1120 21:44
→ etetet91 推:樓上...xD 1120 22:25
→ ming1053 推:建電社長 1120 23:45
作者: sa072686 at 06/11/20
還不難做的字串題,而且方法暴力成這樣還0.000sec AC,不過掉到480名去了
小翻一下
給一個包含大小寫字母且每個字長度不超過20的字典
求顛倒字母順序、變換大小寫後也無法在字典找到第二個的字
並依ASCII碼順序輸出它們
例:
sa As SA AC
#
應該輸出AC,因為sa、As和SA在顛倒或轉換大小寫後一樣,而AC則找不到
事實上不難寫,不過有點小複雜…開了兩個struct和兩個qsort比對式
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/22
嗯,這題從六點回到家寫到現在,少說有五個小時了吧
真是難寫的可以…而且也因為是暴力題所以很難debug
拿討論板的幾百組測資比對了好久才把蟲抓完…囧rz
嗯,翻譯一下,試著一行翻完這難寫的題目
判斷一羅馬數字合法與否及其值
I=1,V=5,X=10,L=50,C=100,D=500,M=1000(抓到都會背了…)
嗯,補充一下討論板寫的羅馬數字規則和心得
注意:數字等於一個或以上字母相加
一、羅馬數字當小字母置於大字母之前時,為減
二、反之則為加
三、最多減一個字母
四、最多加三個字母
五、十進位中每個位數只能由一個數字提供
六、先出現的數字不得大於後出現之數字
七、羅馬數字無法表示0,若為空白行則輸出0
嗯,需要測資請去討論板,有四五百組的測資…剛為了debug用眼睛暴力比對…
為什麼不用程式輔助呢?不知道是什麼問題,知道的解答一下
用freopen結果沒辦法完整存下跑出來的結果,所以無法利用開讀檔做比對
不然比對用的程式都寫好了…如果要分兩次比對也得要去找第一次存到哪裡
0.111sec AC,排名30/224,不過wa了十五次…嗯,AC率6.25%(本題22.8%)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: chensc at 06/11/22
→ sa072686 推:不知道以後會不會有sa數列?XDDD 1120 20:38
→ csftwpt 推:有啊, 0 7 2 6 8 6 1120 21:09
你錯了。
其實那個是… abcc(n) !
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 192.168.4.60 (台狼一中桑靈餓)
→ sa072686 推:囧…那會跑出啥鬼? 1122 13:09
→ etetet91 說:0 7 2 6 8 6 0 7 2 6 8 6 0 7 2 6 8 6 0 7 2 6 8 6 0 7 1122 20:42
→ gloompisces 推:樓上中肯 1122 21:43
作者: sa072686 at 06/11/22
嗯…很像我南區唯一沒寫出來那題,中序轉為後序表示
其實也不難寫,用堆疊輔助就可以了
先小翻一下
將含括號之四則運算式從中序轉為後序表示
轉換方式:
先建一堆疊,然後把讀到的放進去
優先度最低的放最底下,若放入優先度低的東西則先把裡面優先度高的
都先pop出來,然後再push
最後再把所有東西pop出來則所有pop出來的東西即為所求
後序的運算方式是讀到一運算元就pop出兩數做運算後push回去
0.186sec AC,排名58,還不錯…事實上我沒有寫堆疊函式,直接用陣列模擬了…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
→ Robin 推:轉成後置以後要算算是就很容易了^^ 1123 21:40
→ sa072686 推:嗯…有負數麻煩了一點,不過補零上去應該就還好 1123 22:12
作者: seanwu at 06/11/22
※ 引述《seanwu (Blindest)》之銘言:
> 加泰隆數列
> n 0 1 2 3 4 ...
> F(n) 1 1 2 5 14 ...
> 1. F(n) = Sum[ F(n-i-1)*F(i) ] (i=1,2,3, ... n-1)
> ex F(3) = F(0)*F(2) + F(1)*F(1) + F(2)*F(0)
> 2. F(n) = C(2n,2) - C(2n,n-1) C(n,m)為組合數 = n!/[(n-m)!m!]
> 3. F(n) = F(n-1)*(4n-2)/(n+1)
> 第三個最好用,感謝SA學長的指導
> 第一個我做大數時用,因為不用除法
嗯...我跟另一條公式弄混了...
拜託拜託!
千萬千萬不要用第一個
否則TLE不要怪我...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 220.130.92.145 (中滑一番)
→ csftwpt 推:不會 TLE 啊, DP 一下就可以了 1122 21:15
→ seanwu 推:試試10303? 1122 21:33
→ seanwu 說:大概是我乘法寫的太爛 XDD 1122 21:34
→ csftwpt 推:我看到大數就沒寫了 orz 1122 21:52
作者: sa072686 at 06/11/23
基本題:
題目:九九九乘法!?
內容:
九九乘法表?小學生在背的
用C寫九九乘法表?小學生在寫的…啊,不是XD,初學者在寫的
嗯,如果對巢狀迴圈的結構夠熟應該可以推廣一下不成問題
給你三數a、b、c求abc乘法(0 < a,b,c < 10
Sample input
2 3 5
Sample output
1*1*1=1
1*1*2=2
1*1*3=3
1*1*4=4
1*1*5=5
1*2*1=2
1*2*2=4
…
2*3*4=24
2*3*5=30
遞迴題:
題目:英阿互換!?
內容:
嗯,或許這對你而言很簡單,但對電腦呢?不過沒關係,有聰明的你嘛XD
看不懂題目嗎?看sample input好了,數字保證不大於2147483647
Sample input
eight hundred sixty thousand seventy one
Sample output
860070
質數題:
題目:SA RPG!?
內容:
今天有一款新遊戲SA RPG(Super A RPG…?當然不是XDDD)
不過呢,它的魔法攻擊傷害計算方式很怪,也沒有所謂魔法防禦力的問題
設魔法力為i,魔法攻擊力為j
傷害公式:第i個質數 * j之所有因數和
因為魔法攻擊力有個很怪的特性,就是大不一定好,例如9就沒有8的好
(1+3+9=13<1+2+4+8=15)
所以需要寫個程式來計算一下,給你魔法力和魔法攻擊力,求傷害?
Sample input
5 8
Sample output
165
題目:矩形切割問題
內容:
對於一個矩形,由於SA比較喜歡方形,所以要求你把它們切成方形(四邊都一樣長)
雖然有最簡單的方法,就是全切成1*1,不過那樣就太無聊了
試試看每次都切最大塊的,能切出幾塊?又,若將其切成相同大小的小正方形
最少能切出幾份?雖然這切起來很容易,可是當矩形太大就麻煩了
所以你想寫個程式直接解決它。試試吧!
Sample input
7 5
14 21
Sample output
5 35
3 6
暴力題
題目:橫式與直式書寫的轉換!?
內容:
我想橫式與直式書寫應該就不用多做說明了吧?試著轉換它們吧
請注意行末不要出現任何多餘的空白,但若於原文有出現則保留
Sample input
Hello!
I like ACM.
Sample output
IH
e
ll
il
ko
e!
A
C
M
.
題目:99…9(n個)乘法
內容:
給你一小於10的n及n個數a1、a2、…an,求a1a2a3…an乘法
Sample input
4
6 1 7 4
Sample output
1*1*1*1=1
1*1*1*2=2
…
2*1*7*4=56
3*1*1*1=3
…
6*1*7*4=168
DFS(DP!?)題:
題目:idj+k!?
內容:
應該多少看過1d2+3這種東西吧?這代表丟一次2面骰,出來的點數再加3
這一般用在遊戲中做為公式使用,它的好處是丟的骰子越多分佈就越平均
現在,任務很簡單:給你i、j和k,求n的出現率是多少,請記得%符號
Sample input
1 2 3
2
2 3 0
4
Sample output
0%
33%
字串題:
題目:字典的查詢
內容:
今天你得到仙人傳授一本魔法書,但上面都是些看不懂的文字,幸好有附字典
可是查找字典卻很是麻煩,因為該字典並未依任何順序排序(有啦,依仙人的心情)
為了方便,你要寫一個程式將字典輸入電腦,之後輸入魔法書的內文讓它自動翻譯
若未在字典中出現請輸出原文,文章結束前不要斷行
Sample input
abcc function
bcaa function2nd
sa weakprogrammer
abc struct
#
abcc abcc abc bcaa abc sa sa sa as sa abc abccc
abc abc accepted sa
#
Sample output
function function struct function2nd struct weakprogrammer weakprogrammer
weakprogrammer as weakprogrammer struct abccc struct struct accepted
weakprogrammer
BFS題:
題目:馬的問題
內容:
嗯,雖然題目唸起來不怎麼好聽,可是它卻是個好問題
今天給你一個標準象棋棋盤,並告訴你有幾顆棋子在棋盤上,及其位置
並給你一隻馬和牠的位置,請將牠以最少步數移至指定位置
並輸出最小步數及其路徑。請記得象棋棋盤是10*9的大小
由右到左編號1~9,請以標準棋譜方式(當然,不用用中文)輸出路徑
為防不懂怎麼走的,提供一下走法和棋譜輸出方式
01234 若馬在c,則可以走到1、3、5、f、l、n、9、j這八格
56789
abcde 即|Δx|+|Δy|=3且|Δx|,|Δy|>0,但有拐馬腳的情形
fghij
klmno 若|Δx|>|Δy|則視為走x的方向,反之則為y方向
則馬的前方不得有子,即走1、3則7不得有子,走5、f則b不得有子
棋譜記法很簡單,從編號m到編號n,只有馬m進n和馬m退n兩種情形
在此簡化記做:h m f n和h m b n就可以了,另外馬不得吃子
Sample input
待產
Sample output
待產
題目:行動力問題
內容:
許多戰棋式的遊戲都會有行動力這東西,判斷主角們一回合可走的格數
但有的遊戲並不單純,不是4就是4格,而是地形有其阻力(?)
若行動力不足阻力就不能夠走到該格,行動力不足時也無法進行某些動作如強力劍技
且更複雜的是由於path的不同,從某格出發到某一格時的殘餘行動力也不相同
給你地圖大小、主角所在地和行動力及該地圖每格所扣之行動力
求在某座標上殘餘之行動力及移動路徑
Sample input
等Sample code…
Sample output
同上
加分題:
題目:數獨
內容:
顧名思義,數獨就是數字獨字出現,故請輸出所有只有一個位數的數字…啊,不是
給你一張9*9的表,其中每一行列皆需填入1~9的數字,且不得重覆出現
另,將其分成9個3*3的九宮格,九宮格中也需填入1~9的數字且不得有重覆的情形出現
給你一張表,0表示空格,請完成它,不會有多組解或無解情形產生
Sample input
…|||
Sample output
…|||
額外加分題:
ACM 989 && 10957
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/11/23 Thu 23:57:51
▲ sa072686 改@2006/11/25 Sat 11:18:02
作者: sa072686 at 06/11/24
數獨題,先前考TOI培訓營炸掉的題目之一…嗯,雖然沒這麼複雜
這題用dfs配backtracking可以過,不會炸掉
題目…還是翻一下好了
給你一個數獨,試判斷其為不合法(行、列或3*3九宮格出現到重覆的)、
唯一解、多重解或是無解
嗯,dfs快速解決,加上判斷不合法還不會花太多時間
1.229sec AC,不過171/227似乎有點…嗯…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/11/24
數獨,不過大小不再限制於9*9了,也有4*4和1*1的出現
老方法照過,雖然PE掉了…
小翻譯一下
給你n值代表n*n * n*n大小的數獨,求解,若無解則輸出無解,若不唯一則輸出最小的
至於判斷方法嘛,行優先就行了
0.027sec AC(P.E.) 排名6/20
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:好少人寫 @@ 1124 23:01
作者: zusoik at 06/11/25
也是有人叫我過來的...
hmmm, ik from zuso.
nice to meet you @@
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zusoik from 140.113.22.84 (塞車大學)
→ sa072686 推:Nice to meet you, too. ^^ 1125 08:16
→ Zero 推:根據可靠消息來源指出你不小(溜∼) 1125 08:20
→ zusoik 推:什麼可靠消息= =? 1125 09:07
→ pioneerlike 推:不是我的消息就是了 1125 09:12
作者: Robin at 06/11/25
�引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 數獨,不過大小不再限制於9*9了,也有4*4和1*1的出現
> 老方法照過,雖然PE掉了…
> 小翻譯一下
> 給你n值代表n*n * n*n大小的數獨,求解,若無解則輸出無解,若不唯一則輸出最小的
> 至於判斷方法嘛,行優先就行了
> 0.027sec AC(P.E.) 排名6/20
他的這個測資啊
3
0 6 0 1 0 4 0 5 0
0 0 8 3 0 5 6 0 0
2 0 0 0 0 0 0 0 1
8 0 0 4 0 7 0 0 6
0 0 6 0 0 0 3 0 0
7 0 0 9 0 1 0 0 4
5 0 0 0 0 0 0 0 2
0 0 7 2 0 6 9 0 0
0 4 0 5 0 8 0 7 0
我跑出來字典排序最小的是這個耶..
3 6 2 1 7 4 8 5 9
1 2 8 3 4 5 6 9 7
2 3 4 6 5 9 7 8 1
8 1 3 4 9 7 5 2 6
9 7 6 8 1 2 3 4 5
7 8 5 9 6 1 2 3 4
5 9 1 7 8 3 4 6 2
4 5 7 2 3 6 9 1 8
6 4 9 5 2 8 1 7 3
是那個地方弄錯了嗎?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Robin from 203.75.133.119 (沒有故鄉)
→ csftwpt 推:左上方格有兩個 2 兩個 3 1125 22:00
→ gloompisces 推:行和列都對,但是3*3方格有點怪 1125 23:03
→ Robin 推:AC了,原來是我不懂數獨的玩法.. 1126 18:21
作者: gloompisces at 06/11/25
ACM 985 : Round and Round Maze
你被困在一個迷宮的左上角,而你必須設法用最快的方法走到右下角
每個迷宮中會有指示的符號,告訴你哪些方向可以被走
並且當你走出每一步時,迷宮內的每一格都會順時針轉90度
測試資料中的第一行有兩個數R和C,你要從(1,1)走到(R,C) (2<=R,C<=500)
接下來的R*C-1行各有一列數
分別是(1,1),(1,2),...,(1,C),(2,1),...,(2,N),...,(R,1),...,(R,C-1)一開始的情況
在原題目中對 Sample I/O 有詳細的圖示。
--
明天的 故事都是我的 是我的
所謂的 幸福快樂 不只一種
美麗的 春夏秋冬落葉 是我的
體驗過才懂夢是什麼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.144.126 (不失敗大學)
作者: gloompisces at 06/11/26
ACM 976 : Bridge Building
這是一個有關搭橋的問題
給你一條河和河岸,其中'#'代表陸地,'.'代表水
河岸可能會包圍著小湖,但是河中絕對不會有小島
現在市長請你造B座橋,兩座橋間至少要空S格,請你算出最小的長度是多少
第一行給兩個數,R 和 C,代表地圖的長和寬
第二行給兩個數,B 和 S,再來是一張地圖
5 ≦ R,C ≦1000
1 ≦ B ≦ 100
PS: 若 BAAAAB ,稱兩個B間空4格
--
我始終帶著你愛的微笑
一路上尋找我遺失的美好
不小心當淚滑過嘴角
就用你握過的手抹掉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.144.126 (不失敗大學)
作者: gloompisces at 06/11/26
ACM 960 : Gaussian Primes
大家都應該學過複數吧,也就是所謂的a+bi
現在要看那個複數是不是質數,怎麼判斷呢?
首先來看看2,2=(1+i)(1-i),所以2不是質數
但是11是質數,因為你無法分解他
(分解出來的那兩個數的任意一個,不能是1、-1、i、-i)
那13呢? 13=(3+2i)(3-2i)
3+i呢? 3+i=(1+i)(2-i)
所以13和3+i都不是質數
現在給你a和b,要請你判斷a+bi是不是質數
測資的第一行是一個正整數n,代表有n列測資 (n≦100)
以下n列分別有兩個整數,a和b,且a^2+b^2≧2
對每一列輸出一個字母,如果他是質數就輸出P,反之則輸出C
PS:根據討論版,目前存在一個bug是他會給你多出n列測資
先 scanf("%d",&n);
然後再 while(scanf("%d %d",&a,&b)==2)
{
....
}
應該能有效解決這個問題
--
一個人踏上不能攜帶地圖的旅行
開始太過好奇忘了還有恐懼
然後路變曲折夜變漫長到不了也回不去
堅持著不聽別人甚至自己的懷疑
終於來到寬得能狂奔的草地
有人誇我勇敢一直都在微笑的我忽然流下淚滴
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.124 (不失敗大學)
作者: sa072686 at 06/11/29
好奇…
ACM板會出現幾篇生日的祝賀文呢?
不過我這麼低調只怕不會有太多篇文,而且又剛好在段考前幾天XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:聽起來原po在要生日文...(逃) 1129 18:58
→ sa072686 推:XDDD 我只是很好奇會有幾篇(茶) 1129 19:57
→ gloompisces 推:你的註冊資料是不是沒有填生日? 1129 19:58
→ sa072686 推:有吧,剛翻了一下個人設定,裡面的是正確的呀 1129 19:59
→ sa072686 推:還是你以為是…XDDD 不是今天喔~* 1129 20:00
→ gloompisces 推:那大概是下個月XDD 1129 20:00
→ csftwpt 推:也不是這個月~ 1129 20:02
→ gloompisces 推:看來樓上和我查了一樣的東西XDD 1129 20:06
→ etetet91 推:是一月段考前嗎... 1129 20:18
→ csftwpt 推:也只有那個可以隨手查到了 XD 1129 20:24
→ sa072686 推:囧…查了哪個? 1129 20:27
→ chensc 推:喔喔...我是用Ctrl+O直接開使用者資料去查...(茶) 1129 22:33
→ etetet91 說:平民老百姓祇能從"本日壽星"裡面看而已 1129 22:36
→ chensc 推:阿...我一時忘了(逃) 1129 22:42
→ sa072686 推:囧 特權(指) 1129 23:56
作者: PG at 06/12/02
沒想到我居然是第一個PO生日祝賀文的...
XD"
學弟 生日快樂!
第一名的獎金撒來請客= =+++
--
╔─────╗ ╮ │◎├───────────為了一個夢想────────
│Score │─│§─┼─┼─P─────P──── 我必須有所放棄 ──旋律─
│0000133440│─│∣─┼U┼O───U─O────即使現在那是指宅物─────
│Evaluation│─╱──┼─┼──────────── 我卻依然迷惑 ──淺野真澄
│●●●●●│﹝╭╮─┼─┼─────────────────────────
╚─────╝╰╰╯─┼C┼────C─── 台南一中資訊社 7th教學 PG───
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.81.203.219 (福爾摩沙固網)
→ sa072686 推:謝謝學長~ 請客喔…會啦XD 1202 14:26
作者: chensc at 06/12/02
12002 - Birthday Problem
....
....
Sample Input
1202
Sample Output
Happy Birthday, sa!
XDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.173.12 (Isis 的希臘金字塔)
→ sa072686 推:XDDD 謝囉 1202 14:27
作者: pioneerlike at 06/12/02
學長 生∼日∼快∼樂∼
祝學長越來越強^^"
--
★web 真是害羞>///<
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by pioneerlike from 210.60.107.237 (一串高中)
→ sa072686 推:謝謝學弟~ 1202 14:27
作者: Robin at 06/12/02
SA 生日快樂
XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Robin from 203.75.133.9 (沒有故鄉)
→ sa072686 推:謝謝~* 1202 22:41
作者: bruce3557 at 06/12/02
發人生日快樂XD,
祝你繼續發!!!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by bruce3557 from 163.32.78.6 (高雄一中)
→ sa072686 推:我很低調的>///< 1202 22:41
作者: csftwpt at 06/12/02
對不起我一向很沒誠意 XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by csftwpt from 163.32.78.6 (高雄一中)
→ csftwpt 推:對厚... 連生日快樂都忘了說... 囧... 1202 15:26
→ sa072686 推:有來我就很高興囉 1202 22:42
作者: gloompisces at 06/12/02
祝學弟生日快樂XDD
還有預祝全國賽和NPSC能拿到好成績
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.144.23 (不失敗大學)
→ sa072686 推:謝謝學長^^ 會盡力的 1202 22:42
作者: etetet91 at 06/12/02
生日快樂!!!
祝越來越發!!!
祝ACM的AC題數破一千∼*
>///<
--
╭────╮╭────╮
│▋ ╭─╯│▋ │
│▋ ╰─╮│˙ │
│˙ ╭─╯╰╮ ╭╯
│ ╰─╮ │ │ telnet://csc241.twbbs.org
╰────╯ ╰──╯ telnet://203.71.212.241
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by etetet91 from 218.170.66.41 (中滑一番)
→ georgemouse 推:標題......囧 1202 19:31
→ etetet91 說:標題怎麼了? 1202 20:57
→ csftwpt 推:Happy + Sad 1202 22:32
→ sa072686 推:或許是要說sa day吧XD 謝囉 1202 22:43
作者: georgemouse at 06/12/02
祝SA生日快樂~~~
還有預祝你在NPSC和全國比賽中有好表現!!
沒有的話要[ ]喔XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by georgemouse from 59.127.1.166 (中滑一番)
▲ georgemouse 改@2006/12/02 Sat 19:36:34
→ sa072686 推:謝謝學長 會盡力的~ 1202 22:43
作者: Macaca at 06/12/02
生日快樂喔XDrz,
差一點就過12點了,
還好有趕上XDrz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Macaca from 203.73.66.90 (種子電信)
→ sa072686 推:謝囉~ 1203 00:37
作者: ryan1027 at 06/12/03
雖然好像已經晚了一天了
不過還是要祝你生日快樂
&全國比賽拿第一
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ryan1027 from 218.172.245.150 (中滑一番)
▲ ryan1027 改@2006/12/03 Sun 01:07:58
→ sa072686 推:沒關係啦 有我就很高興了 1203 17:04
作者: silentvow at 06/12/03
餓死抬頭
NPSC互相勉勵吧 XD"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 59.113.133.222 (中滑一番)
→ sa072686 推:要手下留情啊XD 1203 17:04
作者: web at 06/12/03
睡前一poXD
學弟生日快樂
祝比賽有好成績~~
晚安(呵欠)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by web from 140.112.247.157 (害羞網子學弟宿網三)
→ sa072686 推:會加油的 謝謝學長 1203 17:04
作者: funfox at 06/12/03
生日快樂阿~~~
全國大賽加油喔
你說你會請客嘛~~
那麼我也要一份~~
哇哈哈哈~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by funfox from 218.175.228.79 (中滑一番)
→ sa072686 推:謝囉~ 請客嘛,可能會在下禮拜六吧 你可以來的話XDDD 1203 17:05
作者: angelalin at 06/12/03
祝你生日快樂
全國的比賽加油吧!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by angelalin from 219.81.197.230 (福爾摩沙固網)
→ sa072686 推:會加油的,謝囉 1203 17:05
作者: seanwu at 06/12/03
遲來的紀念
祝學長生日快樂喔! ^_^
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 220.130.92.145 (中滑一番)
→ sa072686 推:謝謝學弟~ 1203 17:06
作者: chensc at 06/12/03
10 sa072686 繼校內和南區再爆段考 和信超沒品 閱讀文章 工友
意思是段考會校排第一就是了啦...= ==+
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.173.12 (Isis 的希臘金字塔)
→ pioneerlike 推:哇喔! 1203 17:06
→ sa072686 推:囧…星期五才開始趕工怎麼可能第一…一定是炸掉 1203 17:07
→ pioneerlike 推:把前面全部都炸掉...果然是強者 1203 17:09
→ chensc 推:我今天才開始耶∼||| 1203 17:22
→ seanwu 推:有段考這回事嗎∼? 1203 17:23
→ lovemoonfish 推:"段烤"是新的燒烤食物嗎 1203 17:45
→ chensc 推:是的 從火星來的喲 ~* 1203 17:46
→ pioneerlike 推:我上禮拜才吃過...噁心死了 1203 17:48
→ Robin 推:超強耶全炸 1203 18:08
→ Robin 推:應該是全爆 1203 18:10
→ sa072686 推:已經先炸三科了…囧 數學要及格要有寫的全對… 1204 13:27
作者: seanwu at 06/12/03
→ chensc 推:我今天才開始耶∼|||
^^^^^^^^^^^^
翻譯:(台語)我真天才該死
(亂棒)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 220.130.92.145 (中滑一番)
→ chensc 推:被你發現了…啊不是… 1203 18:25
→ csftwpt 推:XDDDDDDDDDDDDD 1203 18:39
→ sa072686 推:XDDD 1204 13:28
作者: uselessCat at 06/12/03
Happy sa day.
//星期六搶不到電腦(默)
//要是你有瞄到那是在學校要抓人測npsc
既然生日過了
改說段考快樂課以嗎XDrz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by uselessCat from 218.165.99.94 (中滑一番)
→ sa072686 推:段考炸了啦(泣) 不過還是謝謝妳喔~ 1204 13:30
作者: chensc at 06/12/03
> 45 sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 7 sa072686
> 65 web 個人 ● 黃老師一路好走 7 web
夭壽哦∼
實在有夠發。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.173.12 (Isis 的希臘金字塔)
→ sa072686 推:因為chensc來了。 1204 13:31
→ chensc 推:樓上一定是控碼...我才不會被騙咧 XD 1204 13:55
→ sa072686 推:你可以用你另外一個帳號來看XDDD 1204 13:57
→ Scnech 推:是呀…明明就是控碼,五樓你說是不是?XD 1204 14:02
→ sa072686 推:不是 1204 14:02
作者: styhihs at 06/12/04
哈...是說也不知道過了多久了~
我一向很低調...
嘎嘎~ 全國賽加油!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by styhihs from 163.32.57.254 (斑城女中)
→ sa072686 推:連日期都不知道似乎有點沒誠意XDDD 不過還是謝謝妳 1204 14:07
作者: hsun at 06/12/05
最近段考沒注意到~
想必你也都在K書吧XD
生日快樂呦~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by hsun from 220.142.7.134 (中滑一番)
→ sa072686 推:謝囉^^ 是都在k書,但是沒k完XDDD 1207 12:52
作者: jaymi at 06/12/06
祝你生日快樂
現在說好像晚了很多了 ^^a
不過我是很有誠意的喔
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by jaymi from 59.113.79.76 (中滑一番)
→ sa072686 推:沒關係啦 謝謝^^ 話說我當初也慢了好多XDDD 1207 12:52
作者: panda1990 at 06/12/07
版主生日快樂阿XD
//我據說遲到了5天阿orz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by panda1990 from 210.85.21.175 (中國熊貓養殖工作室)
→ Zero 推:你lag大了XD 1207 16:17
→ panda1990 推:orz 1207 16:17
→ sa072686 推:有來我就很開心囉 /*學術!?*/ 1208 10:21
作者: sa072686 at 06/12/08
雖然是以前就寫過的二星題,不過因為是dp,之前用dfs解
所以重試了一下,4.568sec => 0.471sec
差真多…而且想法其實還蠻簡單的
結果這題變成flash的期末作業XDDD
秒掉了,以後電腦課可以做ACM了
想法的部份其實也蠻簡單的,做出來似乎是n而已
每次讀入一個數,就把它加到a裡面並紀錄a的最大值
若a比0小則a歸零
若最後a的最大值小於1則表示無法贏錢
由於起始未必在第一局,可是又不知道是哪一局
乾脆就從第一局開始加,如果加出來是負數則歸零是表示把前面幾局全部捨掉
然後從這局重新開始,因為不管後面的局是輸是贏,加上前面那一串都一定不划算
那不如捨掉,這樣就能得到最佳解
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.3.52 (台狼一中藝教惡欸夫)
作者: sa072686 at 06/12/08
這題要怎麼寫呀?
沒什麼想法…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.3.52 (台狼一中藝教惡欸夫)
→ csftwpt 推:類似 Floyd-Warshall 的做法 1208 13:01
→ sa072686 推:那是啥@@… 1208 13:25
→ bruce3557 推:Warshall 1208 14:34
→ Zero 推:推Floyd-Warshall. 提示是要3層 1208 14:44
→ csftwpt 推:Floyd 1208 15:10
→ csftwpt 推:噢, 對了, e04 就幹啊 1208 15:10
→ Zero 推:啥鬼XD 1208 15:23
→ DarkKnight DP:狀態是 [換了 n 次,從第 i 種,換到第 j 種錢] 1208 20:39
→ sa072686 推:謝囉…不過路徑怎麼辦? 1208 21:27
→ Zero 推:i換到k, n-1次 * k換到j, 1次 1208 23:32
→ sa072686 推:AC了,感謝大家,尤其是cs >///< 1211 17:31
→ csftwpt 推:>///////////////////////////////////////////////////< 1211 20:01
作者: sa072686 at 06/12/08
感謝cs >///<
Done 711 Dividing Up
Done 10081 Tight Words
Done 10482 The Candyman Can
Done 10549 Russian Dolls
Done 10558 A Brief Gerrymander
Done 10201 Advantures in Moving Part IV
Done 10154 Weights and Measures
Done 10259 Hippity Hopscotch
Done 10261 Ferry Loading
Done 10280 Old Wine into New Bottles
10379 Pit Stop Strategy
10529 Dumb Bones
Done 10559 Blocks
Done 10593 Kites
Done 10599 Robots (II)
Done 10604 Chemical Reaction
Done 10617 Again Palindrome
Done 10635 Prince and Princess
Done 10645 Menu
Done 10690 Expression Again
Done 10721 Bar Codes
Done 10723 Cyborg Genes
Done 10739 String to Palindrome
Done 10755 Garbage Heap
Done 10759 Dice Throwing
Done 10817 Headmaster's Headache
Done 10819 Trouble of 13-Dots
Done 10827 Maximum Sum on a Torus
Done 10860 Many a Little Makes a Mickel
Done 10874 Segments
Done 10913 Walking on a Grid
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:CS XD 1208 21:23
→ sa072686 推:好人>///< 1208 21:27
→ DarkKnight 推:10549 應該不能用 DP 做....還有他少給了很多好玩的 1210 20:43
→ csftwpt 推:我沒看到清單中有 10549, 另外這是 uva board 上的 1210 22:41
→ sa072686 推:有看到10549XDDD 不過這題沒什麼想法 囧rz 1211 12:51
▲ sa072686 改@2006/12/11 Mon 18:17:23
→ sa072686 推:487題裡面只有一題有在表中…囧rz 1211 18:17
→ csftwpt 推:囧 原來清單沒有排序過 神經病 1211 20:02
→ sa072686 推:寫個程式排 >///< 1211 20:14
▲ sa072686 改@2006/12/12 Tue 07:45:39
→ sa072686 推:對了,10549有某外國人說是DP經典題 1212 07:48
→ csftwpt 推:那還真抱歉, 排名一三名是 DarkKnight 跟我 1212 10:21
▲ sa072686 改@2007/03/15 Thu 10:03:17
φ ben196888 轉:到 [ben196888] 看板,于 2007/06/08 Fri 03:23:22
▲ sa072686 改@2007/09/03 Mon 20:23:55
▲ sa072686 改@2007/09/05 Wed 18:38:48
▲ sa072686 改@2007/09/07 Fri 11:21:44
▲ sa072686 改@2007/09/10 Mon 07:42:54
▲ sa072686 改@2007/09/10 Mon 08:57:02
▲ sa072686 改@2007/09/10 Mon 10:42:06
▲ sa072686 改@2007/09/10 Mon 11:57:19
▲ sa072686 改@2007/09/11 Tue 10:02:51
▲ sa072686 改@2007/09/11 Tue 10:30:17
▲ sa072686 改@2007/09/12 Wed 10:06:43
▲ sa072686 改@2007/09/12 Wed 16:05:59
▲ sa072686 改@2007/09/12 Wed 20:53:36
▲ sa072686 改@2007/09/13 Thu 09:07:35
▲ sa072686 改@2007/09/14 Fri 07:50:26
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/14 Sun 02:40:54
▲ sa072686 改@2007/11/22 Thu 09:47:30
▲ sa072686 改@2007/12/05 Wed 15:37:18
▲ sa072686 改@2007/12/06 Thu 15:47:07
▲ sa072686 改@2007/12/07 Fri 09:42:13
▲ sa072686 改@2007/12/11 Tue 12:20:13
▲ sa072686 改@2008/03/03 Mon 18:58:31
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:27:25
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/01 Thu 14:09:31
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:01:03
φ t52101t 轉:到 [t52101t] 看板,于 2009/05/07 Thu 00:04:33
→ brucehsu 推:借轉 0922 18:06
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/09/22 Tue 18:07:14
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:29:03
φ txs 轉:到 [txs] 看板,于 2010/07/29 Thu 12:23:16
→ sb283 推:ru,45j03 1007 12:58
→ sb283 推:借轉~ 1007 12:58
φ sb283 轉:到 [sb283] 看板,于 2010/10/07 Thu 12:58:22
φ hkhs7821 轉:到 [hkhs7821] 看板,于 2011/11/20 Sun 09:41:19
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:37:21
作者: sa072686 at 06/12/08
一樣感謝cs >///<
Done 259 - Software Allocation
Done 563 - Crimewave 點莫名其妙的多?!
Done 663 - Sorting Slides 簡單的配對題
Done 670 - The Dog Task 也是不難的配對
Done 753 - A plug for Unix
Done 820 - Internet Bandwidth 最簡單的一題
Done 10080 - Gopher II 也是很容易的一題
Done 10092 - The Problem with the Problemsetter 點很多的配對問題
Done 10122 - Mysterious Mountain 好像很有趣?
Done 10249 - The Grand Dinner Flow --> Greedy
Done 10330 - Power Transmission 把節點當作邊來做
Done 10349 - Antenna Placement
Done 10366 - Faucet Flow Simulation? 是這樣嗎?
Done 10380 - Shogi Tournament
Done 10418 - Hyper Toy Soldiers
Done 10511 - Councilling
Done 10594 - Data Flow
10735 - Euler Circuit
Done 10746 - Crime Wave - The Sequel min-cost flow, 小心誤差
Done 10779 - Collectors Problem
Done 10804 - Gopher Strategy 6.8 秒 AC, 沒寫好會 TLE
Done 10888 - Warehouse min cost flow
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
φ ben196888 轉:到 [ben196888] 看板,于 2007/06/08 Fri 03:23:15
▲ sa072686 改@2007/11/14 Wed 12:09:18
▲ sa072686 改@2008/01/11 Fri 21:30:50
▲ sa072686 改@2008/01/14 Mon 19:10:30
▲ sa072686 改@2008/01/14 Mon 19:12:11
▲ sa072686 改@2008/01/14 Mon 23:10:56
▲ sa072686 改@2008/01/24 Thu 09:59:52
▲ sa072686 改@2008/01/27 Sun 13:46:33
▲ sa072686 改@2008/01/28 Mon 01:14:00
▲ sa072686 改@2008/01/29 Tue 12:28:22
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:27:49
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/01 Thu 14:09:41
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:01:11
→ brucehsu 推:借轉 0922 18:07
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/09/22 Tue 18:07:19
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:29:09
φ b821213 轉:到 [b821213] 看板,于 2011/01/13 Thu 07:54:02
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:37:27
作者: sa072686 at 06/12/08
還是感謝cs >///<
Done * 00112 Tree Summing *
Done * 00140 Bandwidth *
Done * 00155 All Squares * 一塊分成四小塊
Done * 00165 Stamps * 用做不出來的那個值當 limit
Done * 00193 Graph Colouring * 基本 DFS
Done * 00195 Anagrams *
Done * 00208 Firetruck *
Done * 00216 Getting in Line * 8! with some cuts
Done * 00280 Vertex *
Done * 00296 Safebreaker *
Done * 00301 Transportation *
Done * 00349 Transferable Voting (II) *
Done * 00380 Call forwarding *
Done * 00384 Slurpys *
Done * 00399 Another Puzzling Problem *
Done * 00416 LED test *
Done * 00441 Lotto * 基本 DFS
Done * 00469 Wetlands of florida *
Done * 00529 Addition chains * 可用 IDA* (但不會比較快)
Done * 00539 Settlers of Catan *
Done * 00565 Pizza Anyone? *
Done * 00571 Jugs (bfs appr) *
Done * 00574 Sum It Up *
Done * 00590 Always on the run *
Done * 00598 Bundling Newspapers *
Done * 00610 Street Directions *
Done * 00620 Cellular Structure *
Done * 00652 Eight *
Done * 00657 The die is cast *
Done * 00677 All Walks of length n ... *
Done * 00628 Passwords *
Done * 00639 Don't Get Rooked * 圖形的暴搜題 類八皇后
Done * 00656 Optimal Programs *
Done * 00729 Hamming Distance Problem *
Done * 00732 Anagrams by Stack *
Done * 00743 The MTM Machine *
Done * 00776 Monkeys in a Regular ... *
Done * 00782 Contour Painting * Flood Fill?
Done * 00784 Maze Exploration * Flood Fill
Done * 00785 Grid Colouring * Flood Fill
Done * 10004 Bicoloring * 著色問題
Done * 10063 Knuth's Permutation *
Done * 10068 Treasure Hunt, the *
Done * 10073 Constrained Exchange Sort * IDA*
Done * 10098 Generating FastSorted ... *
Done * 10181 15-Puzzle Problem * IDA*
Done * 10186 Euro Cup 2000 *
Done * 10276 Hanoi Tower Troubles Again! *
Done * 10285 Longest Run on a Snowboard *
Done * 10344 23 out of 5 *
Done * 10364 Square * 接完三邊後就不必接第四邊了
Done * 10400 Game Show Math *
Done * 10419 Sum-up the Primes *
Done * 10422 Knights in FEN * IDA*
Done * 10447 Sum-up the Primes II *
Done * 10496 Collecting Beepers *
Done * 10501 Simplified Shisen-Sho *
Done * 10503 Domino Solitaire, the *
Done * 10513 Bangladesh Sequences *
Done * 10582 ASCII Labyrinth *
Done * 10605 Mines for Diamonds *
Done * 10637 Coprimes *
*********************************************
************* BFS ******************
Done * 00321 The new Villa *
Done * 00336 Node too far * 基本 BFS, 亦可 Floyd-W...
Done * 00383 Shipping routes *
Done * 00429 word transformation *
Done * 00567 Risk *
Done * 00589 Pushing boxes *
Done * 00633 Chess knight *
Done * 00642 Word Amalgamation *
Done * 00707 Robbery *
Done * 00762 We Ship Cheap * 基本 BFS, 走過的點不再走
Done * 10009 All Roads Lead Where? *
Done * 10422 Knights in FEN * 用 IDA* 解的
**************************************
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/12/11 Mon 18:11:59
▲ sa072686 改@2006/12/11 Mon 19:49:15
▲ sa072686 改@2006/12/12 Tue 09:42:02
▲ sa072686 改@2006/12/12 Tue 13:01:16
▲ sa072686 改@2007/02/26 Mon 20:56:11
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/03/07 Wed 13:23:31
▲ sa072686 改@2007/03/13 Tue 10:43:22
φ ben196888 轉:到 [ben196888] 看板,于 2007/06/08 Fri 03:23:34
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/14 Sun 02:40:41
▲ sa072686 改@2007/10/28 Sun 01:36:29
▲ sa072686 改@2007/10/28 Sun 07:43:00
▲ sa072686 改@2007/10/28 Sun 09:57:29
▲ sa072686 改@2007/10/28 Sun 18:53:22
▲ sa072686 改@2007/10/29 Mon 00:23:47
▲ sa072686 改@2007/10/29 Mon 09:35:04
▲ sa072686 改@2007/10/29 Mon 11:22:58
▲ sa072686 改@2007/10/29 Mon 13:37:42
▲ sa072686 改@2007/10/30 Tue 11:48:00
▲ sa072686 改@2007/10/30 Tue 14:48:35
▲ sa072686 改@2007/10/30 Tue 16:21:21
▲ sa072686 改@2007/11/01 Thu 08:49:34
▲ sa072686 改@2007/11/01 Thu 16:10:12
▲ sa072686 改@2007/11/01 Thu 20:00:09
▲ sa072686 改@2007/11/01 Thu 20:20:34
▲ sa072686 改@2007/11/01 Thu 23:16:59
▲ sa072686 改@2007/11/02 Fri 12:11:19
▲ sa072686 改@2007/11/02 Fri 21:33:17
▲ sa072686 改@2007/11/04 Sun 08:59:28
▲ sa072686 改@2007/11/09 Fri 08:36:36
▲ sa072686 改@2007/11/12 Mon 14:16:48
▲ sa072686 改@2007/11/12 Mon 16:31:55
▲ sa072686 改@2007/11/12 Mon 22:28:56
▲ sa072686 改@2007/11/13 Tue 08:12:01
▲ sa072686 改@2007/11/14 Wed 09:49:29
▲ sa072686 改@2007/11/14 Wed 11:51:06
▲ sa072686 改@2007/11/15 Thu 07:46:33
▲ sa072686 改@2007/11/15 Thu 09:48:03
▲ sa072686 改@2007/11/16 Fri 10:13:27
▲ sa072686 改@2007/11/16 Fri 15:49:45
▲ sa072686 改@2007/11/16 Fri 20:50:06
▲ sa072686 改@2007/11/16 Fri 23:13:17
▲ sa072686 改@2007/11/17 Sat 21:52:28
▲ sa072686 改@2007/11/18 Sun 09:37:05
▲ sa072686 改@2007/11/18 Sun 12:38:44
All done.
▲ sa072686 改@2007/11/18 Sun 12:39:19
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:27:17
→ SKYLY 說:借轉感謝<(_ _)> 0715 18:45
φ SKYLY 轉:到 [SKYLY] 看板,于 2008/07/15 Tue 18:46:16
→ LFKing 推:好物 感謝分享~~! 0729 23:06
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/01 Thu 14:09:19
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:00:56
φ t52101t 轉:到 [t52101t] 看板,于 2009/05/08 Fri 20:15:15
φ txs 轉:到 [txs] 看板,于 2009/05/26 Tue 18:02:42
→ brucehsu 推:借轉 0922 18:06
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/09/22 Tue 18:07:09
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:28:57
→ sb283 推:借轉~ 1007 12:57
φ sb283 轉:到 [sb283] 看板,于 2010/10/07 Thu 12:58:03
φ b821213 轉:到 [b821213] 看板,于 2011/01/13 Thu 07:53:50
φ hkhs7821 轉:到 [hkhs7821] 看板,于 2011/11/20 Sun 09:41:04
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:37:14
作者: sa072686 at 06/12/10
應傑洛要求po一下想法…
pe:
floyd warshall(感謝gloompisces學長)
pf:
dp(類似lcs的東西,感謝PG學長)
建一張表格,使其上之數字代表該格子往左上可建之最大方形
若d[m][n]=3表示座標(m,n)為一邊長為3之方形之右下角座標
a=min(d[m-1][n],d[m][n-1])
d[m][n]=a+abcc(a)
abcc()
if(d[m-a][n-a]<2)return 1
else return 0
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ming1053 推:還是abcc啊...這樣決賽的時候= =" 1210 22:12
→ sa072686 推:不然到時你們提供一下吧 我知道你們英文都很強XDDD 1211 12:52
作者: sa072686 at 06/12/11
不是104 XDDD,是題不太難寫的DFS題,不過也抓了一段時間的蟲
翻譯一下
給許多個以'A'~'Z'任一字母命名的點及與其相連的點
問如何排列這些點其最大bandwidth最小
bandwidth:排列中某一點和相連點最大距離
例如sample中的ABCDEHFG,對A而言A和B、F相連,而A和B在排列中相距1
A和F則相距6,則6為A之bandwidth
換言之,bandwidth為某一排列中某點和其圖形中相連點在排列中位置的差
0.463sec AC,500名整…有一點點慢,寫得也醜醜的
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:我的超慢, 1.395... 1211 20:04
作者: sa072686 at 06/12/12
終於過了,wa掉好多次XDDD,基本上是不難的DP題,類似coin
當然如果用另一種dp每次都加一個下去的話會tle…
小翻譯一下
有六種價值分別為1~6的石頭,給你這六種石頭的個數求是否能分為價值相等之兩份
把用coin的做法做一下修正,並限制住個數就可以了
限個數的部份比較難一些,不過只要克服就和coin沒兩樣了
0.236sec AC,345名
沒去優化…每次都找到總價值/2 XDDD 懶得優化了,能AC就很開心了
提一下限制的方法
----
首先我在加入每個幣值的時候我先令一數a=幣數*10
接著每找到一個數它已有一種或以上組合時,設d[n]為n元的情形
那麼設幣值為i則若d[n+i]==0則d[n+i]=d[n]+10
若d[n+i]>0則若d[n+i]>d[n]+10時d[n+i]=d[n]+10
並且找到的d[n]回歸到1
意思是若加上這硬幣後出來的是新組合,那只有一種可能且包含目前的幣值
若不是新組合則看這值的大小,若比d[n]+10來得小表示該幣值的錢幣用得少
反之若用得多,則以用得少的d[n]再加上10來取代
換言之有幾個10代表該值最少需要多少個目前幣值的硬幣
故若為新組合直接為d[n]+10也就是多放一個硬幣來組成
若否則視其大小而定,若d[n+i]>d[n]+10則必放較多,或是相同數的目前幣值硬幣
故取代之以求得到最佳解
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/12/12 Tue 08:47:25
作者: sa072686 at 06/12/12
終於過了,換一下想法有差…DFS題
小翻譯一下
令n(h,k)為最多h張郵票且有k種可能票價情況下,所能產生從1開始
最長連續可能總票價,求n(h,k)及最佳情況下之k種票價
0.588sec AC,排在300上下,過半了…
解題提示:設目前已有m種票價,則第m+1種票價之最大值為m種中最小之不可能值
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
作者: sa072686 at 06/12/12
還不太難寫的一題DFS題,不過之前都沒什麼想法
雖然這次也沒用到DFS…用遞迴而已XDDD
0.1左右AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Robin 推:我這題也是看了幾次,也AC了耶^^(跑了5秒多) 1213 21:05
→ sa072686 推:五秒…囧 我用2^n才0.1說 1214 17:53
→ yuscvscv 推:DFS時 n-目前深度+目前塗黑數 < 目前最佳解 可剪枝 1207 22:35
作者: sa072686 at 06/12/12
感謝gloompisces學長幫我整理了一些XDDD
/*結果自己完全沒動到,還是事後才得知…*/
嗯,所以有精華區了這樣
/*其實應該說精華區有東西了會比較恰當…*/
然後就是…
我不會收錄文章到精華區啊 囧rz
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/12/12
最近這東西不等於AC了
雖然我覺得計較這個沒什麼意義
不過還是改一下好了,還好code都健在
嗯,紅題可能可以破50
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:沒關係,在我的統計看版上還是等於AC XD 1212 18:28
→ sa072686 推:真想翻桌…改到快瘋掉了,有的還弄不到AC 1212 19:50
作者: sa072686 at 06/12/12
如果有什麼解決方法比較特殊的題目
那麼麻煩po一下方法,能夠P.E.表示已有解開該題之能力
至於這比較不那麼要緊的部份就大家一起解決吧
可以省下不少時間去寫沒寫過的題目,而不是研究PE題弄到想翻桌
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ etetet91 推:推 1212 20:52
→ csftwpt 推:說不定改好一題 PE, 我可以多寫兩題 AC... 隨風去吧去吧! 1212 20:57
→ seanwu 推:推 我只知道行尾不能空白 還有需空行的輸出最後一組不能空 1212 21:06
→ sa072686 推:囧,有的要空最後一組才會AC 1212 21:12
→ seanwu 說:.....囧 舉個例子(我大概是這樣才PE) 1212 21:18
→ styhihs 推:囧 有些是最後一組不能空才會AC... 1212 21:19
→ seanwu 推:凸(翻桌了) 1212 21:21
→ sa072686 推:408… 1212 21:40
→ gloompisces 推:XDD,這是很複雜的,不過大多數都是空行的問題 1212 21:40
→ gloompisces 推:(只是大多數= =) 1212 21:41
→ sa072686 推:333、400、706和445、612就神奇了… 1212 22:45
→ gloompisces 推:333和400超傷 1212 23:28
→ gloompisces 推:我100~999的PE只救回大概60%,有的真的是沒有辦法= = 1212 23:31
→ sa072686 推:706AC了,保留行末空白並輸出多餘空白行… 1212 23:35
→ sa072686 推:即最後一組也輸出一個就是 囧rz 1212 23:36
作者: sa072686 at 06/12/12
不會太難寫的一題,不過請注意題目下方的note,每次都多空一行會wa的
基本上brute force可解
翻譯一下
給一圓環之節點數及一連串指令,求如何以最少步驟達成與一連串指令相同之情形
注意若不需改變則輸出一空白行,且板上那種沒有任何指令的測資並不會出現
指令為rn、mn的格式,n為一數字,rn表順時針轉n個單位,mn表翻轉n次
小提示一下:最佳解可以參考討論板的output
我是自己有想出來,但多空一行…嗯,神奇的wa了20次應該有
0.225sec AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/12/16
台北帝國大學耶>\\\<
紀念一下這樣XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.3.252 (台北帝國大學)
作者: sa072686 at 06/12/17
NPSC,總歸一個爆字…
然後第一天的經歷有點慘這樣
運動會沒去看大隊接力,也放棄一次和歷史老師(朱老師,據說是象棋狂)
下一盤棋的機會留在社部,怕過去卡太久,太晚回社部
然後本來在練coding後來變成練打字、練cs(不是雄中社長XDDD)
反正一整個混就是,做了一兩題AC過的題目練習一下
試著不compile和測測資直接傳,結果ce、re和wa拿了不少
然後練了一下bfs用複製貼上還改錯,還忘了練shortest path的dp解
接著開開心心(?)地出發了,不過還沒吃東西
就在全家買了一碗麵帶上車吃,不過一整個囧
首先是上車後發現沒有拿筷子,幸好gloompisces好心地把筷子給我
還出現了以下的對話XDDD
「啊,囧了,竟然忘了拿筷子」「囧,他(店員)竟然忘了拿筷子給你」
XDDD,不過更囧的還在後面
打開之後我後悔沒有微波了,「這是果凍嗎?」一整個囧…
挖下去(不是wa,囧)就找到麵了…所以推測果凍==湯
然後就吃麵配果凍這樣,越吃越噁心…不知道後來一整個想吐是不是這原因
那些果凍差點吃不完,吃完還留著一些噁心的味道…
一路上一直不怎麼舒服…感謝gloompisces學長的一些秘訣讓我好過了不少
路上還因為塞車耽擱了不少,不過塞車時有比較好過
好不容易回到陸地上後就去飯店了,還好還有地方住XD
不過也好晚了,七八點了,不過詳細忘掉了
接著分兩隊人馬XD,一隊去夜市一隊去找強者傑洛
因為要去給傑洛看(?)所以就放棄了去夜市覓食XDDD
不過卻因為這樣使得中午只吃一碗果凍麵的我得到十一點半才有東西吃
一路上真是悲慘…趕路趕得很快,結果和傑洛聊沒幾句就又回去了…囧
一堆強者在聊我完全聽不懂的東西,只好保持我一貫的低調與沉默
好不容易結束了這痛苦的旅程,一路趕路加淋雨再加很晚吃東西餓得要命
回到飯店後去PG那玩了一下隔天會考的東西…嗯,名字忘了
(其實是根本就不知道XDDD)一點左右想說明天coding的時間可能會很長
畢竟比賽長達五小時,會蠻累的,就丟下和電影的ming和sc先去睡
結果他們玩到三點XDDD,隔天居然還有精神,反而我一副沒睡飽的樣子
然後就去考試了,也見到了雄中的Peter和cs XDDD
不過bruce和styhihs沒認到就是,robin也沒認到
結果和想像中的都差好多XDDD,接著就進去比賽了
一整個囧的是我覺得我好像一直在coding…如果我能到旁邊坐一下冷板凳
或許會比較有想法,不過就連sc和ming自己有想法也都叫我co…囧rz
好不容易結束了…嗯,四題,不會得名但是也不差的成績,其實主要是罰分多
再來當然馬上衝出去吃東西啦XDDD,畢竟離那不用錢的「高級」早餐
也有數小時之久了,當然餓了XDDD,吃掉了不少東西
後面出pizza也拿了五六塊有,不過竟然有上面直接放辣椒的XDDD
反正不怕辣就是了
然後就是頒獎啦,只拿到決賽入圍獎的office2003…XDDD
只取六名,不過我那隊是第八名,前三名的獎章看起來好棒啊…
peter穿我要上台大的衣服被發現XDDD,教授請他轉過來後就出名了
不過我記得看到前面有對話是這樣的:「走!打cs!」 「好!」 XDDD
接著就回家了,到家後都好晚了…
然後就來po文了這樣XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:你這樣算爆很慘 那我豈不是該去跳樓...|| 1217 02:33
→ PG 推:還有 那個叫做 交響樂之雨~ 1217 02:34
→ sa072686 推:不是爆很慘…是NPSC爆,然後第一天整個很慘 1217 02:36
→ sa072686 推:不過那個還蠻好玩的耶XDDD 節奏性的東西蠻有趣的 1217 02:37
→ PG 推:囧 我現在腦袋好像已經有點不清楚了...|| 1217 02:37
→ PG 推:交響樂之雨 劇情才是重點阿 XDD 1217 02:37
→ sa072686 推:囧,不過全國之前應該是沒空做別的事XDDD 1217 02:43
→ silentvow 推:我是被隊友給出賣的阿<0> 1217 03:33
→ georgemouse 推:XD 很豐富的一趟台北行呀 至於"果凍"......(抖) 1217 10:13
→ bruce3557 推:開玩笑,我那麼低調怎麼可能被你發現XD? 1217 11:55
→ csftwpt 推:最好是 1217 11:56
→ angelalin 推:我覺得全家的便當系列不太很新鮮 1217 12:00
→ angelalin 推:我吃兩次涼麵都胃不舒服 1217 12:00
→ sa072686 推:還好沒事 不然會炸更大XD 1217 12:07
→ sa072686 推:不過坐車時一路不舒服這樣…果凍的味道留了好久 1217 12:21
作者: sa072686 at 06/12/17
之前不會寫的一題,問了還是不懂的一題
現在輕鬆解決了,不知道是不是因為我家的IE裝備了強大的google tool的關係XD
成功擊敗原文題目後就想出做法了…dfs直接拆掉
小翻譯一下
給你n和L,求出以L種字母組成的字典順序第n個hard字串
hard字串定義:沒有任何兩個相鄰的子字串是相同的
不過如果相同的子字串不相鄰就沒關係了
0.000sec AC,一開始PE了一下後來發現新行的行首多了一個空白…囧
主要是字串的比較而已,不難寫
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ DarkKnight 推:啥? IE 不是山頂洞人在用的東西嗎? 1217 16:48
→ csftwpt 推: 啥? IE 不是山頂洞人在用的東西嗎? 1217 16:50
→ sa072686 推:囧…啥鬼 1217 17:13
→ chensc 推: 啥? IE 不是五五六六在用的東西嗎? 1217 17:36
→ seanwu 推: 啥? IE 不是七七八八在用的東西嗎? 1217 18:52
作者: sa072686 at 06/12/18
我好發~~~
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
→ PG 推: 看的出來 1218 12:55
→ gloompisces 推: 看的出來 1218 12:57
→ hsun 推:對阿~你好發XDD(逃) 1218 12:57
→ georgemouse 推: 看的出來 1218 12:57
→ sa072686 推:哪裡發了 我很低調 囧…sc嫉妒我的低調就玩我帳號 1218 18:09
→ etetet91 說:樓上不用解釋了,看的出來真的很發。 1218 21:37
→ chensc 推:等一下...這篇不是我玩的= ===== 不過你真的很發 XD 1218 23:06
→ sa072686 推:sc玩cs不是嗎…囧rz 1219 12:48
作者: sa072686 at 06/12/18
這絕對不是玩帳號。XD
☆csftwpt XDDDDDDD cs 好西斯... 2006/12/18 Mon 12:58:42
★csftwpt 對阿對阿 我好西斯~~~ XDDDDDD 2006/12/18 Mon 12:59:00
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
→ bruce3557 推:這個大家都知道 1218 13:08
→ csftwpt 推:噢 .. 我一直不想講而已 真不好意思 >/////< 1218 13:18
→ chensc 推:本日最中肯。 1218 13:18
→ sa072686 推:囧,樓上玩我帳號 1218 18:08
→ csftwpt 推:囧, 我的帳號也被玩 1218 19:22
→ csftwpt 推:所以是有人玩你帳號丟我水球結果剛好我的帳號也有人在玩 1218 19:22
→ etetet91 說:xDrz 誰來玩我的帳號啊∼* 1218 21:38
→ sa072686 推:囧rz 還真剛好 1218 22:05
→ web 推:et密碼給我 我幫你~ 1219 20:02
作者: sa072686 at 06/12/18
這個實在是太中肯了。
嘿嘿.....ac ac ac ac....XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
→ Zero 推:why = = 1218 17:22
→ sa072686 推:因為被玩了 囧 1218 18:07
作者: sa072686 at 06/12/18
被玩了不少的樣子|||
可惡的sc…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:使用者列表按 I 可鎖屏... 1218 23:37
→ sa072686 推:那能鎖po文嗎XDDD 1219 12:48
→ chensc 推:鎖屏就不能po文了啊 囧" 1219 12:53
→ sa072686 推:囧…下次要防sc 1219 12:54
→ chensc 推:又不只我玩 ... 你看 #530 就是別人玩的 XD 1219 13:08
作者: seanwu at 06/12/19
剛剛跟sa學長討論明天的社課題目...
sean 「不行啦,488會PE的...」
sa 「不會吧,我寫寫看...」
5209822 2006-12-19 14:47:06 Wrong Answer 0.000 Minimum Ted C++ 488
5209829 2006-12-19 14:51:05 Wrong Answer 0.000 Minimum Ted C++ 488
sean 「sa:學弟們!注意看!這就叫做WA...來跟我念一遍,哇∼」
5209833 2006-12-19 14:52:07 Presentation Error 0.430 392 Ted C++ 488
5209836 2006-12-19 14:54:35 Presentation Error 0.430 388 Ted C++ 488
sa 「囧"」
sean 「我寫寫看」
5209841 2006-12-19 14:57:22 Accepted 5.631 440 Sean C++ 488
sean 「AC了」
sa 「AC了」
5209843 2006-12-19 14:57:58 Accepted 0.432 392 Ted C++ 488
sean 「差這麼多....」
5209890 2006-12-19 15:15:29 Accepted 0.088 392 Ted C++ 488
sa 「56倍左右(茶)」
sean 「靠...」
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ sa072686 推:神奇的是memory…開100+2000大小的char還比較少 1219 23:33
→ lovemoonfish 推:"靠" 算髒話嗎 1220 20:38
作者: sa072686 at 06/12/19
XDDD,很想來試一個東西:明天有辦法0.088sec上下AC的免考留社考
不過還是算了XDDD,有一個人想出來大家就都不用考了,這樣不行
來提一下做法好了,用上了我最擅長的string技巧
想看請按右,不用喊出來沒關係
cin/cout迴圈版:5.6sec
scanf/printf迴圈版:2.0sec
scanf/printf字串版:.43sec
scanf/printf極限版:.088sec
字串版:
建以下字串:1、22、333、4444、…然後輸出,反正才到9
極限版:
建如上字串後以strcat先行將1~9的答案建起來,請記得建'\n'
可另開一字串"\n"然後用strcat接,然後按頻率輸出就好
字串貓vsC++…56倍,勝 XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:= ================= C++的coding速度是C不能比的.... 1219 23:27
→ seanwu 推:歧視 C++ 1219 23:28
→ seanwu 說:有沒有人要用STL試試 <=好物耶!! 1219 23:29
→ sa072686 推:co這題沒巧解用什麼都差不多啦…不過我很好奇C++ 1219 23:29
→ sa072686 推:極限優化後的速度XDDD 1219 23:29
→ chensc 推:學弟終於知道 STL 是好物了,不過會慢一點點就是了 XD 1219 23:29
→ chensc 推:看有沒有人要用組語嗆sa的...至少我不會= == 1219 23:30
→ sa072686 推:囧,組語…那可能可以快C++更多倍 1219 23:31
作者: sysop at 06/12/20
───────────────────────────────────────
◆ [sa072686] 看板投票:大家對ACM將P.E.視同沒有AC有什麼感想?
舉辦板主:sa072686
舉辦日期:2006/12/12 Tue 23:37:16
開票日期:2006/12/19 Tue 23:37:16
◆ 投票主題:
想了解一下大家的看法,並不是想說它錯或是這改變很爛之類的
然後想要大家支持這樣…雖然它有些題目是真的很難不P.E. 囧rz
改起來很想翻桌,不過未必就是不好…應該是某些題目的問題
總之大家對這次改變抱持什麼想法都來發表吧>///<
最後的意見欄請務必填XDDD
◆ 投票結果:每人可投 1 票,共 9 人參加,投出 9 票
中立,有改沒改沒差 3 票 (33.3%)
反對,改code很麻煩 3 票 (33.3%)
全力支持,本來就該這麼做 1 票 (11.1%)
支持,但某些題目測資該跟著改 1 票 (11.1%)
其它 1 票 (11.1%)
全力反對,沒什麼意義 0 票 ( 0.0%)
◆ 我有話要說:
•web :路人純贊助
•bruce3557 :嘎嘎
•chensc :無聊死了= ==
•seanwu :格式應該講清楚
•gloompisces :我想改有一定的合理性,PE畢竟在很多程式比賽都算WA
•shaform :對於龜毛如我之人,似乎沒什麼影響
•csftwpt :支持支持, 就算我掉了幾十題也沒差~~~
→ Zero 推:我沒注意這個投票XD 不過我會選全力反對= = 1220 00:33
→ PG 推: 我沒注意這個投票XD 不過我會選全力反對= = 1220 15:15
→ PG 推:PE應該在大部分的比賽中都算AC喔。。 1220 15:15
→ sa072686 推:指NPSC的「人工」judge嗎XDDD 好像有提到的樣子 1220 21:10
作者: shaform at 06/12/20
感覺寫 ACM 實在是不適合用 C++ ......
OOP, template...全都幾乎無用武之地
不過 C 和 C++ 有太多細微差距了,在學好 C++ 前又不敢學 C (會混在一起)
為 STL 挽回一下名譽:
之前用 iostream + STL 解 488 的時間:
0.388s
去掉 ios_base::unitbuf (UVA 的舊g++要用 ios:: ) (據說偶爾會有戲劇性效果?)
0.328s
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by shaform from 125.229.23.156 (中滑一番)
▲ shaform 改@2006/12/20 Wed 17:48:30
▲ shaform 改@2006/12/20 Wed 17:52:39
→ Zero 推:好厲害,怎麼做到的XD 1220 20:07
→ Zero 推:不過OOP在寫網路流問題很好用... 1220 20:07
→ csftwpt 推:OOP @@||| 1220 20:13
→ Zero 推:OOPs XD 1220 20:34
→ sa072686 推:XDDD 是不太適合沒錯 STL據說很方便 不過怕會懶掉 1220 21:11
→ chensc 推:STL 本來就很方便了...不過我就是懶掉了orz 1220 23:11
→ sa072686 推:想保留手爆啊…像我用qsort… 1220 23:22
→ shaform 推:其實不過是開一個字串用迴圈建立前波 + reverse() 1221 17:33
→ shaform 推:\ 1221 18:08
作者: sa072686 at 06/12/21
嗯,幾經波折終於是AC了,類似LCS的字串題
小翻譯一下
輸出將A字串經過刪除、插入或是改變某字元變成B字串的最少步驟
0.410sec AC,n^2的方法…
至於解法方面嘛
使用類似LCS的表格來做,不過要建兩張表
一張是方向(也可以說是指令),另一張則是步驟數
在做LCS時先設定插入(I)、刪除(D)、改變(C)的優先度
我是設定I > C > D,聽說順序有影響,不確定
然後步驟數上可以先把邊緣部份建起來,然後查表時
方法:先依序建表,並把指標(方向)指向較小的來源
若相等時請維持左上那格的值,並不要做任何指向
左邊小則指向左並為插入,上面小指向上並為刪除,左上小則指向左上且為改變
且值為來源的數加一,原因請見下面想法部份
最後把建好的表從最後一個元素backtracking回去就行了
一路依著指標改變方向前進直到i=0,j=0結束為止(即表之最左上方)
想法:以sample input為例:
b c g f e
0 1I 2I 3I 4I 5I
a 1D 1C 2I 3I 4I 5I
b 2D 1X 2I 3I 4I 5I
c 3D 2D 1X 2I 3I 4I
d 4D 3D 2D 2C 3I 4I
e 5D 4D 3D 3C 3C 3X
最左上不會用到,隨便怎麼設都行。對某一點而言
數字代表轉換完成所需最小步數,我想LCS大家都不漠生:
第i,j表示字串A前i個字元轉換到字串B前j個字元的最少步驟數
故可先推得:a要刪到空要刪一次,ab要兩次,abc要三次,…
空字串轉到b要加一次,到bc要兩次,bcg要三次,…
而決定好邊緣的指令後,接著中間的指令想當然是取最佳解:
當兩字元相同時不用做任何改變,不相同時則看最佳情形,如:i=3,j=3
abc到bcg最少要做兩個步驟,從表中可知abc可透過一步驟後改變到
只需再一步就可以轉換成功的情形,故要兩步;但也可以透過改變後
再透過2、3次改變,這得做3、4個步驟,故不取,選取最佳的
然而來源也不難理解:若相等則和ab及bc有一樣的步驟數
若不相等則可視為abc刪去c得ab和bcg,這很直觀
或是abc和bcg插入g,這樣子abcg和bcg只要看前面abc和bc就好了
或abc和bcg將c換成g,變成abg和bcg則可視為和ab轉為bc一樣
但ab轉為bcg要三步,ab和bc要兩步,可是abc和bc只要一步
故選擇插入的步驟,依此類推,最後回溯可得解
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:我用的是D>C>I,好像也可以 1221 19:37
→ sa072686 推:我覺得應該沒差才是… 1221 20:15
→ Robin 推:看起來跟 vol.9 的某個新題目很像,快去搶吧 1221 21:12
→ sa072686 推:和526也幾乎一樣…唔,不過526比較陰 1221 21:20
作者: sa072686 at 06/12/21
DP題,好久以前就想過了,到問學弟才會寫XD
0.375sec AC,用應該是n^2的做法說…n才到10
簡單講一下做法好了
先建兩張表,第一張的第i,j格為從第i個矩陣到第j個矩陣連乘結果
第二張則為第i,j格中間矩陣
因此我們先得到當j>i時是無意義的,表出來會對稱
接著,i==j時都是0,中間矩陣=i
然後慢慢兩個、三個、四個…慢慢擴充,即:
先找2-3、3-4、…再找2-4、3-5、…如此
然而,我們可以知道:像2-3只有一種情形,2-2 連 3-3
2-4則是2-2連3-4、2-3連4-4兩種,依此類推
2-6則可表為2-2連3-6、2-3連4-6、2-4連5-6、2-5連6-6
找出最小的然後把中繼站放進結果的表,次數也存在表中
故推得i-j的最小乘法次數若為i-k連k+1-j時
則最小乘法次數為min(i-k)+min(k+1-j)+i-k連k+1-j
表建完後最後結果便是min(1-n)了,先後順序依這表倒是很好輸出
如果用遞迴的方式可以輕易地做出來
倒是名百的n^3方法號稱最好理解,卻是怎麼看也看不懂
看它的圖也不像很好處理輸出的樣子…問學弟的n^2還沒講完就理解完了
小抱怨一下,名百數學味道極重,實在看不太懂…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:囧" 我那時是憑直覺亂掰....學長還聽得懂....好神.... 1221 20:25
→ csftwpt 推:是 O(n^3) 吧.. 1221 20:30
→ seanwu 說:我的方法比較神奇? XDD 1221 20:36
→ sa072686 推:XD 沒仔細算過時間耶 1221 21:20
→ sa072686 推:回一樓:聽了兩個重點就懂啦 一是表格意思 二是排列組合 1221 21:21
作者: sa072686 at 06/12/21
和164幾乎一樣的題目…
所以翻譯和解法都參考164好了XDDD
0.2sec AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:538篇 1221 21:31
作者: sa072686 at 06/12/22
標準的拓樸排序,也沒有太奇奇怪怪的測資
小翻譯一下
給數個工作的名字、所需天數及前置工作,求全部完成的最小天數
且工作要前置工作全部完成才可以做,名字只會包含一個大寫字母
並且在工作進行時是平行進行的,也就是互不影響的工作可於同一天進行
0.4sec AC,第25名的樣子,沒歸零wa了一兩次XD
然後,嗯,抵霸個是件困難的事情,尤其是抵別人的霸個
花了半小時的樣子XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/12/22
和348類似的DP題,也有中譯
不過不是拿刀數來做,而是先分段後拿分段長度來做
所以應該算是逆推,不是很好想,不過方法類似
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/12/23
全國賽耶
在清大XD
本來想破500再來的XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.114.85.116 (青蛙大學)
→ pioneerlike 推:囧rz //你這個是在演講聽!? 1223 18:29
→ chensc 推:對啊,我們有筆電可以po文。XD 1223 19:51
→ etetet91 說:一樓好像也有筆電的樣子… 1223 20:53
作者: sa072686 at 06/12/24
XDDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 220.132.88.92 (中滑一番)
作者: sa072686 at 06/12/25
接近全軍覆沒了…只有某一直說要去玩、去吃點心的學長得三等獎
實在是很可惜…其實不應該沒得獎的
「就當作是證明自己的實力吧」這是賽前(事實上是很久前)蔡老師說的
不過卻是證明了本來應得到的二等獎因為不明原因的粗心就沒了
第一天考計概,考完還蠻開心的,題目大多是需要推而不是需要背的
而且我拿手的部份居多,寫起來蠻順手的,除了某一題總覺得有爭議外
某題看起來像無窮迴圈的東西,我覺得它在overflow後會停止執行
但理論上應該是無窮迴圈,實際co出來卻真的會停止
沒半次筆試可以寫到這麼順,一堆演算法和資料結構的問題
算一算不確定的全爆也有八十吧,雖然佔分並不重
第二天拿到題目還很開心,從第一到第四題除了第三題想了一下
其餘幾乎都不用想就可以直接做了,都很簡單
在時間經過5分時解決第一題,15分解決第二題,45分解決第四題
90分解決第三題,180分解決第六題,剩餘兩小時專攻第五題失敗
其中有兩次重看前四題code,結果都沒發現任何的bug
時間結束後,六題都有寫,不過第五題用dfs,約是3^n的方法
想說看能不能撿個一兩個測資,結果出去後發現第四題似乎沒擋重覆
然後,評審時第一題就先去找第六題了,跑出來結果是全對
接著呢…跑出來的結果卻是大出意料之外
第四題,真的沒擋重覆,全炸
第五題,唯一沒TLE的測資是WA,評審還說我的答案還比他的好(26<30)
第一題,抄那行The average of …時抄太高興,常數也抄下去了,扣四分
第二題和第三題全炸,原因還不明
嗯,大概連三等也噴掉了,如果萬一加上那個可能撿得到的測資
應該可以到85分以上,結果卻完全相反,似乎只拿了三十分的樣子
爆掉的分數都快可以上三等了,真的是比完全不會寫還痛苦
不過反正爆了就爆了,爆掉也是我自己的問題,會寫卻炸掉還是一樣
再抱怨事實也無法改變,不如下次再加倍努力拼回來
我想主要問題可能是出在沒有經過詳細的檢查,也沒有多測範例以外的測資
再加上寫ACM時那種傳了沒過也沒差的心態,我想這是我該做改變的
同時我也得更加充實自己才行,試試看明年TOI初選能不能以700左右的題數去考
還有約三個月,即90天左右的時間,一天要有一題以上才行
不過中間有寒假,我想應該做得到,同時要開始加強不熟或不會的題型
而不是想不通就直接跳過了,也務必養成詳細確認的習慣以縮減上傳次數
而不是盲目地亂傳,有錯再做修正,也要開始更加努力了
這次的成績真的是辜負了不少人的期望,包括我自己,不希望再有下次失誤了
最後,我必須向T9道歉:學長沒用,沒辦法多留個TOI初選的名額給你們
然後,感謝seanwu學弟,若我不會解348那第六題也不用解了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (☆ 聖 誕 快 樂 ★)
→ csftwpt 推:筆試是很重要的......... 1225 07:34
→ seanwu 推:學長加油~ 1225 12:17
→ sa072686 推:實作爆了筆試滿分也沒用…囧 1225 12:35
→ csftwpt 推:我是因為筆試才二等的, 程式分數我比三等一還低 1225 12:43
→ pioneerlike 推:我是因為筆試才把三等噴掉的... 1225 13:08
→ sa072686 推:我程設炸過頭了…對了,你們怎麼都知道分數? 1225 20:10
→ csftwpt 推:程設可以算, 筆試不會太難估吧 1225 20:37
→ sa072686 推:有些不太確定答案…算全爆應該八十左右 1225 20:44
→ Robin 推:筆試答案和評審測資已經公佈了喔 1226 21:04
→ DarkKnight 說:題目寫多不見得有用啦 100題垃圾還不如兩三題漂亮的 1227 20:29
作者: sa072686 at 06/12/25
不是有一題題目是一個像是無窮迴圈的題目嗎?
似乎是這樣子:
for(i=1;i>0;i++)
{
printf("ha ha\n");
}
這東西的答案到底是什麼呢XD
看似無窮迴圈,可是以我overflow多年(?)的經驗
當i大到超出int的範圍,即overflow時會變成負數
那麼,既是負數,i>0便不成立了,而事實上實際執行過後
發現結果和我預料的一模一樣,不過似乎有爭議
不知道大家的看法是?
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (☆ 聖 誕 快 樂 ★)
→ csftwpt 推:印出很多後就停止, 事實勝於雄辯 1225 21:10
→ sa072686 推:我也是這麼想,不過聽說有些書寫這樣是無窮迴圈 1225 21:36
→ sa072686 推:也聽說有些環境對overflow的處理不一樣…所以才想問問 1225 21:36
▲ sa072686 改@2006/12/25 Mon 21:43:37
→ csftwpt 推:我看到這題時跟著 printf 哈哈哈哈了好幾聲 orz 1225 21:54
→ sa072686 推:這… 1225 21:56
→ ming1053 推:看compiler的實做方法吧 1225 23:06
→ ming1053 推:overflow後變負數應該只是特例 1225 23:06
→ Zero 推:ming好聰明>///< 1225 23:56
→ shaform 推:C++ 的話 unsigned 會變負數 int 則效果 undefined 1226 18:05
→ sa072686 推:不過即使只是特例 也算有爭議XD 畢竟存在 1226 18:14
→ shaform 說: unsigned 是變"0" ||| 1226 18:19
→ sa072686 推:還有 這題是signed的 1226 18:26
→ Robin 推:sa 我跟你想的一樣耶 1226 21:05
→ sa072686 推:答案和我想的一樣…去看過了XD 1226 22:07
作者: seanwu at 06/12/26
★sa072686 找不到題目寫啊…囧
☆sa072686 啊,1900多題都寫完了...(閃)
噢....
好可怕~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ panda1990 推:我瞎了 1226 21:14
→ csftwpt 推:那你可以去嗆嗆鷹眼了 1226 21:18
→ sa072686 推:囧,是找不到會寫的 1226 21:18
→ chensc 推:囧”好強好強 我都快看不到了 ●-● 1227 15:15
作者: sa072686 at 06/12/26
終於達成了>///<
好感動,終於到500題了
雖然這題是學弟教我的XD,我數學不好
接著往600邁進啦~*
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/12/26
恭喜這題很榮幸的成了我的第五百題…呃,不是
很感謝這題讓我達成了五百題XDDD
然後,感謝學弟的數學支援
公式:過圓心長的那條半徑(?)乘上短的那條半徑(?)再乘pi
pi=2.0*acos(0),請記得math.h(該不會萬能的iostream也有吧XD)
原因的話不要問我,我是數學白痴
0.000sec AC,公式題都短短的…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:數學題都是好物 1226 21:52
→ Zero 推:iostream才不萬能... 1226 21:56
→ sa072686 推:有公式很歡樂,沒公式會想翻桌… 1226 21:56
作者: sa072686 at 06/12/27
本來要教的,不過時間不夠…只好po板了
然後我想先聲明一點:從現在起幾乎不會再有語法相關的東西了
完全是純理論,而不會指導你們該怎麼寫
因此你們必須加強對語法的熟悉度,養成理解觀念後便能寫出程式的能力
後面的課才有辦法跟得上,跟不上的請私下找我,bbs、即時通、MSN或中午都行
而我的即時通和MSN在名片檔有,使用者名單按右查詢就可以看到了
那麼,回到正題吧
今天所要講的是排序和搜尋。什麼是排序呢?
很簡單,就是將一堆東西按照某特定規則進行重新排列。那什麼是搜尋呢?
搜尋就是在一堆東西裡面尋找你要的東西出來
那麼,我們先講講搜尋吧。常見的搜尋有兩種:
一、循序搜尋(linear search)
顧名思義,便是從頭找到尾,直到找到為止,只需用迴圈跑一次即可
既簡單又直觀,缺點是速度較慢,資料量大時很費時
二、二分搜尋(binary search)
顧名思義,便是以二分的方式搜尋,將不可能的那一半先行淘汰
再對剩下的一半做一樣的事情,直到找到或找不到,因此速度很快
好處是速度快且易懂,缺點是只能用於排序後的資料
那麼,我們大致講一下方法:
首先定出上下限,如以下數列:
1 3 8 15 697
若我們想搜尋10,那麼我們先找中間那個看看,也就是8
我們可以發現10>8,故10若存在也一定在8的右方,故讓下限=中間+1
接著中間值是15,我們發現10<15,但8和15之間已經沒有任何數了
故10不存在,如此原本要比較5次的現在只需比較兩次
實作範例:
n=10;
l=1;
r=5;
while(1)
{
c=(l+r)/2;
if(ary[c]==n)
{
break;
}
else if(ary[c]>n)
{
r=c-1;
if(l>r)
{
break;
}
}
else
{
l=c+1;
if(l>r)
{
break;
}
}
}
if(ary[c]==n)
{
printf("%d is located in ary[%d].\n",n,c);
}
else
{
printf("Cannot find %d in ary.\n",n);
}
相信這不難理解,可是它只能使用在排序後的東西,所以我們談談怎麼排序
在談排序之前先討論一下有關兩數交換的方法,這很常用
若欲交換兩數a和b你會怎麼做?直覺會想要這麼寫吧
a=b;
b=a;
我們來分析這段程式碼。a=b,故a已被b覆蓋過去,接著b=a時,a已和b相等了
所以這做法會失去a,這不是我們想要的結果對吧?
不過我們可以利用一個暫存的變數來達成我們想要的結果
tmp=a;
a=b;
b=tmp;
簡單吧?先把a記起來,再讓a=b,再讓b=先前的a值就可以了
補充一個很神奇的東西:
a^=b^=a^=b;
不要求會這個…會上面的方法就行了
較好理解的排序法有三種,速度差不多,怎麼選看心情吧
一、選擇排序法
很簡單,用迴圈來跑,將要放在第一順位的先找出來,和放置在第一位的交換
然後無視第一位,從第二位開始找到要放在第一順位的,和第二位交換
如此交換下去即可,假設我們要將以下數列由大排到小
0 7 2 6 8 6
我們先拿0來和其它數比較,發現最大是8,故8和0交換得到如下
8 7 2 6 0 6
接著無視8,因為它已在該出現的位置,再從7開始找發現7最大,但交換後不變
再來發現6最大,得到以下結果
8 7 6 2 0 6
接著依此類推得:
8 7 6 6 0 2
8 7 6 6 2 0
排序完成。很簡單吧?
二、插入排序法
嗯,這東西很嚴肅的,一點也不西斯,別想太多
顧名思義便是將一連串的東西從左到右依序做插入的動作
所以可以看做是將一連串的東西一一丟進去,每丟進一個便尋找到自己的位置
如此即可完成排序。我們拿以下數列來看,假設要由大排到小:
0 7 2 6 8 6
我們先不要當作它是一個數列,先看作是一個空數列
接著,我們放入0得到
0
再放入7得到
0 7
可是7比較大,所以尾巴不是它該待的地方,故插入得到
7 0
接著2放入,得到:
7 0 2
則插入後得到:
7 2 0
接著放入6,得到:
7 2 0 6
6>0,插入
7 2 6 0
唔,6>2,再插
7 6 2 0
反正就是插到不能再插就是…且不難由6插入時發現事實上是做兩兩交換的動作
以達成插入的結果,故不難推出接下來的情形
8 7 6 2 0
8 7 6 6 2 0
其實也不難,且在新增加一個數字到數列中時不必全部重排
當然聰明的你一定想得到也可以在用其它方法排序後用插入法加入新東西
所以不用我提醒了吧?
三、氣泡排序法(亦稱泡沫排序法,bubble sort)
比較難理解,不過也還好,就是一直對一連串的東西做兩兩比較並不斷交換
直到達成排序完成為止,然而我們怎麼知道要做多少次才會完成呢?
我們先來看看它到底怎麼運作:
0 7 2 6 8 6
排序時先依序比較第一個和第二個,再比第二個和第三個,…
故第一個和第二個比較後得到:
7 0 2 6 8 6
接著第二個和第三個
7 2 0 6 8 6
接著第三和第四
7 2 6 0 8 6
接著四和五
7 2 6 8 0 6
接著五和六
7 2 6 8 6 0
有沒有發現0直接從第一個跑到最後面去了?而事實上這就和插入法差不多
只是它方向正好相反罷了,故可以得到最右邊那個一定最小,就可以不要理它
接下來比較到四和五就行了,如此反覆。可是要反覆幾次呢?
不難發現:當最大的數放在最尾巴時因為每一個循環都只能和一個數交換位置
每次都只能交換一個位置時要跑到最前面,假設有n個數那就得移位n-1次
也就是說,做n-1次的比較和交換的動作且對第m次只需從一兩兩比較到m+1就行了
是不是也很好理解呢?那麼,今天的課程就到這兒了,先自己試著實作排序
成功後再實作二分搜尋法試試。至於題目可試做以下的ACM題目
10026
10107
雖然還有其它的,不過目前還沒去找,等找到了再補po
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 06/12/29
又一題要感謝學弟的XD,簡單的LIS題,可是不能用n漏個n
唔,n漏個n會把不該蓋的東西蓋掉,目前我還想不到方法用n漏個n
用n^2因為有把之前的東西完整保存,所以用n^2就很好解決
因為之前masnec學長直接教了n漏個n的,所以n平方並不會寫XD
大致講一下n^2的LIS做法
建一張表,然後找到每一個元素前面僅次於自己的元素
使自己成為該元素前面的個數+1,若找不到就用1
如以下:1 3 2 7 6 4 8 5
1 3 2 7 6 4 8 5
-------------------------------
1 2 2 3 3 3 4 4
對1,只有自己
對3,前面已有1比自己小,它個數是1,所以變成1+1
對2,前面只有1比自己小,它個數是1,所以是1+1
對7,前面僅次於自己的是3,它個數2,所以是2+1
依此類推,至於找僅次於自己的原因是因為它是要嚴格遞增
所以最大的那個前面一定擁有最多的數比自己小
這題只要做一點點小變形即可,0.006sec AC,101名
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:嗯 想通了 102名.... 1229 20:03
作者: seanwu at 06/12/29
嗯 討論版或其它地方都說要用DFS
那....我用拓撲排序會錯在哪裡呢?
類似拓排的方法,找依賴數為0者剔除(設為1就不會再被找到)
找的時候由編號大者找到編號小的,為了確保選到工作編號較小者
想請問這麼做是哪裡不對,有例外嗎?
#include <iostream>
using namespace std;
int c[101][101];
int b[101];
int main() {
int n,x,s,f;
while(1) {
cin >> n;
if(!n) break;
for( int i=1; i<=n; i++ ) {
for( int j=1; j<=n; j++ ) {
c[i][j] = 0;
}
}
for( int i=1; i<=n; i++ ) {
cin >> b[i];
for( int j=0; j<b[i]; j++ ) {
cin >> x;
c[x][i] = 1;
}
}
for( int i=0; i<n; i++ ) {
for( int j=n; j>0; j-- ) {
if(!b[j]) {
f = j;
break;
}
}
b[f] = 1;
for( int j=1; j<=n; j++ ) {
if(c[f][j]) b[j]--;
}
}
cout << f << endl;
}
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: silentvow at 06/12/29
試試這組
Input:
4
0
0
1 2
1 1
Output:
3
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 59.113.128.99 (中滑一番)
→ seanwu 推:噢噢!! 了解了! 謝謝嘍 :) 1229 22:12
作者: sa072686 at 06/12/30
想通後覺得很簡單的一題…遞迴就可以解了
0.027sec AC,第35名
做法和11038蠻類似的,不過要小心變數型態的問題
------
以下是想法,不想看請別按右
------
我是先分析那函數,很簡單看得出來:若n%10>0則回傳n%10,否則回傳f(n/10)
得到若尾數為0則遞迴呼叫,故推出其回傳值為最後一位不為零的數字
接著便去尋找其規律,會發現每10個數出現一個零,其它則依序為一到九
即,自1起一定是如以下循環出現:1、2、3、4、5、6、7、8、9、0,沒有例外
接著,我們不難發現其總和為45,且有n/10組完整的及最後有一組不完整的
不完整的另外計算,完整的則為組數*45,接著我們再看個位數為0的
不難發現10、20、30、40、50、…、100、110、…
亦與個位數有著相同的規律存在,故可以遞迴尋找其解
那麼p到q這個限制呢?總不會那麼順利,每個都從0開始吧?
這個簡單,設f(p,q)為p到q的值,不難發現到:
f(p,q)=f(0,q) - f(0,p)
這問題便可以很簡單地解出來了,只需注意變數型態即可
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:囧,這題原來AC過了…和前面那篇(255)一樣… 1230 23:20
作者: sa072686 at 06/12/31
還蠻好解的一題,不過蠻麻煩的
0.113sec AC,一百名整
稍微講一下我的做法好了,不過其實也沒什麼特別的
給沒想法或像我之前一樣的參考一下
然後,重的是heavy這樣…還好沒猜錯,不然又要wa了…中譯題目沒寫到
------
防不小心看到
------
其實也很簡單啦,才十二個嘛,對不對?
將結果先存起來,再把所有「不曾在even的兩邊出現過」的紀錄下來
再依其up或down增減重量代代看,其它則維持定重
然後結果如果矛盾代表這個是真硬幣,如果成立則表示它是假硬幣
因為唯一結果的前提,而且一定有解,所以很好做判斷
這樣大不了12個都下去代,而事實證明速度不慢(至少五百人以上,我在百名)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 06/12/31
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 還蠻好解的一題,不過蠻麻煩的
> 0.113sec AC,一百名整
嗯,665差不多一樣...的亂 XD
只是不知道為什麼,上限 12 vs 100
結果變成 0.018 vs 0.252
啊這個...嗯...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (☆HAPIG NEW YEAR★)
作者: ducksteven at 06/12/31
索尼ACM板板主新年快樂 XD
---
你真的很強 XD
祝你明年上全國賽可以得名(如果有?)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ducksteven from 220.142.28.89 (☆HAPIG NEW YEAR★)
→ sa072686 推:謝謝學長~ 還有這裡還不算ACM板,因為都是我自己在po… 0101 00:08
→ sa072686 推:謝謝學長的祝福,我會好好努力的 0101 00:09
作者: sa072686 at 07/01/01
和608很相似的一題,做法可以參考608
折騰了好久終於AC了,wa好久都是死在一個很神奇的地方
而且很奇怪的是它不給re…
我把開得有點大的char陣列搬到全域去就AC了…也不給re執行也沒錯誤
0.018sec AC,不過名次糟了不少
然後,wa的可以試試這組
3 1
1 1 2
=
答案應該是3
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (☆HAPIG NEW YEAR★)
作者: csftwpt at 07/01/01
※ 引述《seanwu (悵)》之銘言:
> 嗯,665差不多一樣...的亂 XD
> 只是不知道為什麼,上限 12 vs 100
> 結果變成 0.018 vs 0.252
> 啊這個...嗯...
我剛剛寫也是, 665 比 608 還要快...
2007-01-01 Accepted 0.100 Minimum Eric - TAIWAN C++ 608 - Counterfeit Dollar
2007-01-01 Accepted 0.018 Minimum Eric - TAIWAN C++ 665 - False coin
提供一下雄中 godgunman 的做法, 應該會好寫很多.
608 比較好講, 就拿它當例子. 首先是, 只有唯一一種解.
那麼我們對於每一個硬幣都給它一個 value, 初始為 0.
如果遇到了 even, 則兩邊的硬幣都變成, 例如 999999999 好了, 表示肯定為真.
如果遇到了 up, 則左邊的硬幣 value 通通減一, 右邊通通加一.
如果遇到了 down, 則相反的, 左邊加一, 右邊減一.
最後只要去找所有的硬幣, 哪一個 value 的絕對值最大就可以了.
至於為什麼... 嗄... XD...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by csftwpt from 61.62.188.98 (☆HAPIG NEW YEAR★)
作者: sa072686 at 07/01/02
從一片純潔的白變成了紅綠對決了XD
沒辦法,只靠字形分辨陣營太累了…
然後我就弄了一整個下午這樣…沒想到牽一髮就動全身了
改了很多地方,才完成…不過很有成就感XD
然後1/1的一半就在抵霸個中渡過了…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (☆HAPIG NEW YEAR★)
→ ducksteven 推:學弟 Gj ! 0102 00:31
→ sa072686 推:Gj是什麼@@? 0102 18:06
→ georgemouse 推:Good Job!! 0102 18:46
→ sa072686 推:不過發現象棋爛了… 0102 18:46
→ seanwu 推:Opps...一整個爛了...不只象棋 囧" 0102 18:55
→ etetet91 說:我一直不知道哪裡有象棋= =a 0102 20:54
→ sa072686 推:在情話綿綿裡面…樓上上爛哪裡要說啊 囧rz 0102 21:45
→ chensc 推:sa再慢慢抵霸個吧XD 0102 23:07
→ ming1053 推:暗棋一打開就斷線 0102 23:14
→ sa072686 推:在研究了,基本上已知的只剩暗棋還沒搞定 0102 23:15
→ sa072686 推:囧,抵到了結果沒人可以傳,是被軍棋搞爛的沒錯… 0102 23:55
作者: chensc at 07/01/03
★sa072686> [友廣] 大家好,我是發發sa!!(這絕對不是玩帳號= ="
XDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 192.168.4.19 (台狼一中桑靈餓)
→ pioneerlike 推:發發強者~* 0103 13:24
→ sa072686 推:想也知道是玩帳號 囧rz /*因為我不會友廣…*/ 0103 18:07
→ funfox 推:純推發~~ (恩恩~~中肯) 0104 17:56
→ sa072686 推:發是原po 原po是發 0104 18:02
作者: sa072686 at 07/01/04
bug筆記:
原有bug修正
五子棋第二局以後第一手讓手就卡死
五子棋分出勝負後仍可讓手(導致第一點的原因)
象棋類勝利後仍可繼續下
可無限次數重覆認輸
修改顏色後新bug(不是咖啡店)修正
象棋類吃滿十子後再吃會斷線
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:再加一個暗棋移/吃/翻子後移掉選取字樣 0104 22:40
作者: seanwu at 07/01/06
似乎是不久前剛可以傳的樣子
所以...0.000AC 4/6...
給你一個...運算式,然後根據這個算式產生數列
新數列=[數值(+或*)[舊數列]]
如果是加的:
第一項為舊數列的第一項加上該數
其餘的是在新數列的中的前一項加上舊數列的中的前一項
乘的:
第一項為舊數列的第一項乘上該數
其餘的是在新數列的中的前一項乘上舊數列的中的這一項
例如:
[1] = 1 1 1 1 1 ...
[2+[1]] = 2 3 4 5 6 ...
[3+[1]] = 3 5 8 12 17 23 ...
[2*[3+[2+[1]]]] = 6 30 240 2880 48960 ...
[-1+[-2]] = -1 -3 -5 -7 -9 ...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ seanwu 說:喔對了,ACM題目中的圖是錯的 0106 16:13
作者: sa072686 at 07/01/14
終於完成了,第一次寫大型程式真是辛苦,不過好好玩XD
用純C寫的,一堆指標指來指去XDDD
網址:
http://ciswork.tfcis.org/~bbs/default.htm
如果有發現bug、有什麼建議或是想放進去的請推文或回文,謝謝
另外,目前只是暫時找不到蟲子了,美工還在修XD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:亮亮的...||| 0114 14:13
→ sa072686 推:不會啊,背景一整個暗色調 0114 18:19
→ etetet91 說:超亮的…配上暗色調背景,更亮! 0114 20:53
→ sa072686 推:什麼鬼…和我一樣低調的暗色調呢 0114 22:06
→ sa072686 推:自動更新正常了…會自動更新囉,頻率是15min 0115 19:38
→ csftwpt 推:改成 3 min 一次也沒關係吧 @.@ 0115 19:55
→ sa072686 推:跑一圈正常要約2min 不正常要10min以上啊XD 0115 20:00
→ sa072686 推:多一個user再加約5sec,不正常要20~30sec 0115 20:00
→ csftwpt 推:驚... 怎麼會這麼久... 0115 20:01
→ chensc 推:因為是用c寫的...(逃) 0115 20:33
→ sa072686 推:因為ACM有時會慢掉(嘆) 樓上啊 慢的都是fetch啊XD 0115 20:37
→ ducksteven 推:=_= 你可以把processes丟到背景,操一下 CPU... 0116 00:54
→ sa072686 推:啊這…那我要改很多地方耶 0116 12:42
作者: Zero at 07/01/16
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 終於完成了,第一次寫大型程式真是辛苦,不過好好玩XD
> 用純C寫的,一堆指標指來指去XDDD
> 網址:
> http://ciswork.tfcis.org/~bbs/default.htm
> 如果有發現bug、有什麼建議或是想放進去的請推文或回文,謝謝
> 另外,目前只是暫時找不到蟲子了,美工還在修XD
現在有點西斯了...(炸)
564 "MC" 01/14 sa072686 ◆ [程設] ACM 排名程式
XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Zero from 59.120.106.59 (中滑一番)
→ chensc 推:葛格你好西斯(敲) 0116 13:05
→ sa072686 推:啊這…那我回去改一下葛格的「介紹」好了 0116 13:26
→ Zero 推:你們兩個少在那邊狼狽為奸(生氣) 0116 22:54
→ sa072686 推:修正好了,西斯機器人 XD 0117 12:42
作者: sa072686 at 07/01/16
很多人都有過的一題數學題
嗯,拿剛學的圓方程式和矩陣、行列式解決掉了,才一頁多一點
矩陣配合行列式的聯立方程公式解,加上圓方程剛剛好
不知道是不是變數命名太長,0.002sec總是無法突破,嗯…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:變數命名太長跟時間有什麼關係阿||b 0117 21:35
→ etetet91 推:程式會不爽…念名字要念很長(誤) 0117 21:43
→ sa072686 推:要讀比較長的code XDDD 0117 21:59
→ Zero 推:編譯過變數名稱會不見orz 0118 00:18
→ sa072686 推:編譯時比較長XD 0118 19:37
作者: sa072686 at 07/01/17
不太好想的一題,但是想出來後很簡單
小翻譯一下
問在買n瓶可樂的情況下可以喝到多少可樂,三個空瓶可以換一瓶
但是新奇的是還可以和朋友借空瓶子用,借多少都可以,但要還才行
0.000sec AC,想法請按下一頁,而且有歡樂的「公式解」
------ 分隔線 ------
------ 分隔線 ------
仔細推想各種情況後,可以發現借到三個瓶子或以上都不划算
多喝一瓶,但少掉可以換一瓶的三瓶,所以沒用
借兩瓶的情形要四瓶時才有用,可是也只多喝了一瓶
借一瓶的話是最有用的了,而且由上面的情形來看,不管怎麼借
都只能多出一瓶,那應該只借一瓶就夠了
題目會誤導人一開始借,其實想最後不夠時再借就行了
也就是,如果處理到最後剩兩瓶就借一瓶,即使是借兩瓶有用的四瓶
也正好是借一瓶後多了一瓶出來,所以只要考慮剩兩瓶時就行了
至於神奇的公式解,n*1.5取整數就是答案了
如果你想問我為什麼,我可以回答你是觀察結果嗎?
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:這個問題好像有老師講過耶@@ 0117 21:35
→ sa072686 推:對我來說是初次見面 XD 0117 22:00
作者: csftwpt at 07/01/17
不久前打的 @@ 話說好久沒看到你 PO ACM 文了, 真懷念...
-
首先觀察到一件事, 跟朋友借 1 個空瓶, 最後總是能夠還他.
而且, 借 2 個以上的空瓶是沒有意義的. 這部分不證明了 XD.
由於借了一個空瓶, 現在共有 N 瓶可樂加 1 個空瓶.
先把 N 瓶喝掉, 目前為止喝了 N 瓶, 並且有 N + 1 個空瓶.
假設 N = 6, 把空瓶編號為 1 2 3 4 5 6 7.
故事會變成這樣子 ---
(1) 1 2 3 拿去換一瓶新可樂, 並喝掉
這時候呢, 等於是 (1 2 3) 變成 (1), 但是多喝了一瓶可樂
而空瓶編號變成 1 4 5 6 7
(2) 一樣的, 1 4 5 再去換可樂喝掉, 剩下 1 6 7, 又多喝一瓶
(3) 1 6 7 換最後一次, 喝掉, 剩下的瓶子還朋友
當剩下 N + 1 個空瓶時, 可以換 N / 2 次可樂, 也就是可以多喝 N / 2 瓶.
所以這題的解... f(N) = N + N / 2... (這裡 N / 2 只取整數部分)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by csftwpt from 61.64.235.13 (所以內特)
→ Zero 推:推好懷念XD 0117 21:34
→ sa072686 推:墮落掉了XD 再加上排名程式和期末考,寒假衝吧 0117 22:01
作者: sa072686 at 07/01/19
不難解的佇列題,善用指標和結構會解得很開心
翻譯一下
將人分成最多一千組,接著有一連串指令代表結束、加入到佇列或取出
加入的時候如果已經有同組的在,就加在他們的後面
如果沒有,就加在佇列的最後面
然後每遇到一次取出的指令就把佇列的第一個輸出並刪除
0.248sec AC,130/248,有free用過的記憶體
0.236sec AC, 75/248,沒free用過的記憶體
至於drazil…抱歉,我還是不知道wa的可能原因,我只re過…
第一次用環狀佇列和一堆的指標,不過現在指標越來越熟了XD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
→ Zero 推:什麼時候可以吃XD 0119 13:41
→ chensc 推:how bright the last line it is....||| 0119 16:01
→ sa072686 推:快焦了(?) 不過,這題是好題耶,練指標好用 0119 18:18
→ csftwpt 推:你的那個記憶體是什麼意思 @@? 0120 16:10
→ sa072686 推:malloc伸的沒free()就要到程式結束才會釋放XD 0120 21:54
→ csftwpt 推:130 跟 248 分別代表什麼? 我開了 1000000 的大陣列 @@ 0120 22:02
→ sa072686 推:名次…memory一個4900一個4800 0121 00:38
作者: sa072686 at 07/01/28
白痴的一題…暴力就行了
小翻譯一下
給你一個非負整數n,求一最小數使其各位數之積等於n
若找不到請輸出-1
可以算一星題等級了吧…0.000sec AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:我想很久耶 (泣) 0128 13:40
→ sa072686 推:會嗎XDDD 你怎麼做的? 0128 14:39
→ styhihs 推:亂找xDDDDDD 0128 14:45
→ sa072686 推:我是亂除耶�///< 0128 14:46
→ styhihs 推:我也是xDDDD 0128 14:57
→ sa072686 推:那就找出來啦XD 還蠻白痴的 0128 15:04
→ drazil 推:亂?? 不懂?? 多亂?? 0128 15:48
→ seanwu 推:大概跟從1數到9差不多吧 XDDD 0128 15:59
→ styhihs 推:差不多xDDDDD 0128 18:21
→ sa072686 推:從一到九會爛吧XD 不過是差不多 0128 18:42
→ styhihs 推:那就從2到9吧xD 0128 18:47
→ sa072686 推:反了XD 0128 18:48
→ styhihs 推:xDDD (好明顯orz...) 0128 18:59
作者: sa072686 at 07/01/28
http://ciswork.tfcis.org/~bbs/SearchingAlgorithm.ppt
差點打成.ptt XDDD
話說這課縮寫起來正好是sa呢…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:SA~ 0128 22:13
→ sa072686 推:有錯或寫得不好請指正XD 0128 23:35
作者: ming1053 at 07/01/28
36319
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 終於完成了,第一次寫大型程式真是辛苦,不過好好玩XD
> 用純C寫的,一堆指標指來指去XDDD
> 網址:
> http://ciswork.tfcis.org/~bbs/default.htm
> 如果有發現bug、有什麼建議或是想放進去的請推文或回文,謝謝
> 另外,目前只是暫時找不到蟲子了,美工還在修XD
--
The art of programming
is the art of organizing complexity.
-- E.W.Dijkstra
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ming1053 from 59.120.243.128 (一切都是命的家)
→ sa072686 推:好 0128 23:35
作者: sa072686 at 07/01/29
http://www.csie.ntu.edu.tw/~pangfeng/ACP2004/slides.htm
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.26 (台狼一中資訊社寒訓)
→ seanwu 推:我看標題還以為是瞬間打好... 0129 15:10
→ sa072686 推:瞬間打好連結 0129 15:34
作者: sa072686 at 07/01/29
不太好寫的一題,算是路徑題,扯到尤拉路徑
小翻譯一下
給你許多街道名,其字串長度表街道長度,首尾字母表此路由哪點走到哪點
其中只有最多兩個點有奇數條路,求走訪過所有街道後走回原出發點
所需走的最小長度
尤拉路徑上:若每個點皆有偶數條路,則必有一筆劃之方法
若有點為奇數條路,則必有一筆劃之方法由此點連往另一奇數條路之點
0.000sec AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/01/30
多端最短路徑問題,當然是用Floyd-Warshall啦…
不過不小心外層用l(因為k拿來當大小的判定了)裡面打k這樣…抓很久
小翻譯一下
給你兩點間的路徑(以二維表示)及到每一點所要交的過路費
接著給你許多組測資,一組兩個點,求之間的最小花費
最小花費為路徑長度+過路費最小,頭尾不用過路費,並求其路徑
路徑用遞迴其實可以五行解決,讀入比較難
因為都沒給測資數和點的數目,不過用點小技巧就可以輕鬆解決
1.062sec AC,memory 708,153/228
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/01/30
不太好想的DP題,不過還蠻有意思的
小翻譯一下
給你一個字串,求其在刪去零或更多個字元後所能形成最長的迴文
然而,空字串也算是迴文
0.268sec AC,63/167
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:不要把我刪去QQ 0130 22:08
→ kytu 推:要判空字串..... 0317 21:43
作者: ben196888 at 07/01/31
為什麼我答案一直錯Orz
學長可以幫個忙嗎??
小弟先謝了(鞠躬)
#include<stdio.h>
#include<stdlib.h>
int cycle_length(int n)
{
int length=1;
do
{
if(n%2==1)n=3*n+1;
if(n%2==0)n=n/2;
length++;
}
while(n!=1);
return length;
}
int main()
{
int i,j,oi,oj,max=0,n,k;
scanf("%d %d",&oi,&oj);
if(oj<oi)
{
j=oi;
i=oj;
}
else
{
i=oi;
j=oj;
}
for(k=i;k<=j;k++)
{
n=cycle_length(k);
if(n>max)max=n;
}
printf("%d %d %d\n",oi,oj,max);
system("pause");
return 0;
}
--
★renhao 叫我國王>////<
☆renhao 仁豪女王>////<
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ben196888 from 219-70-253-181.twt1.com.tw (沒有故鄉)
→ pioneerlike 推:為什麼有pause? 0131 16:36
→ csftwpt 推:是泡斯耶 >//////< 0131 16:54
→ ben196888 推:自己測試用= =|| 一直WA Orz 0131 17:00
作者: sa072686 at 07/01/31
※ 引述《ben196888 (建電98級GPS)》之銘言:
> 為什麼我答案一直錯Orz
> 學長可以幫個忙嗎??
> 小弟先謝了(鞠躬)
沒問題
> #include<stdio.h>
> #include<stdlib.h>
> int cycle_length(int n)
> {
> int length=1;
> do
> {
> if(n%2==1)n=3*n+1;
> if(n%2==0)n=n/2;
這行不用else if有造成length錯誤可能,3n+1必為偶數的…
所以如果n是奇數,做完3n+1後會變偶數…就會再做一次,可是length只加一
> length++;
> }
> while(n!=1);
用do…while有錯的可能,這題給你1的話length好像要1
不過這點保留…不是很確定
> return length;
> }
> int main()
> {
> int i,j,oi,oj,max=0,n,k;
> scanf("%d %d",&oi,&oj);
沒有用多種讀入穩爆
> if(oj<oi)
> {
> j=oi;
> i=oj;
> }
> else
> {
> i=oi;
> j=oj;
> }
> for(k=i;k<=j;k++)
> {
> n=cycle_length(k);
> if(n>max)max=n;
max的初始值…改成多重讀入後要每次讀入都歸零
> }
> printf("%d %d %d\n",oi,oj,max);
> system("pause");
system()會導致restricted function的樣子,用scanf(" ")吧
上傳了不會錯,自己測時也不會太快跑掉
> return 0;
> }
大致如此,有無錯漏不敢確定
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ben196888 推:OK了 應該是因為else if的問題 謝謝學長 0131 18:31
→ ben196888 推:Orz 還是WA = =||| 0131 18:46
→ ben196888 推:Orz...結果是system("pause")害我Orz... 0131 18:58
作者: sa072686 at 07/01/31
弄了好久才AC…嗯,字串分析題
小翻譯一下
把每一列的所有數字乘起來,單獨數字為整數,a/b表分數
a-b/c表帶分數a又b/c,且每組數字後面必緊跟著一空格
看起來有點難處理,其實也還好,strtok配sscanf輕鬆解決
0.000sec AC
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/02
目前是0 PE狀態
修好久,然後很白痴地發現某些題目加了一堆判斷式擋結尾空白
結果卻是PE主因這樣…重點是sample output行末也沒空白
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:真有閒 XD 0202 00:56
→ sa072686 推:被陰了兩次 還有每組行首空行或行末空兩行的XDDD 0202 07:22
作者: sa072686 at 07/02/02
還不難想的DP題,只是讀入要小心…
翻譯一下
給你有n^2個點的矩形及相鄰兩點間有無連線,問圈出的所有正方形
並以每種大小有多少個來表示
0.305sec AC,47/993
有發現h和v若數字一樣會產生對稱,對稱軸為左上到右下的連線
故生成一正方形之所有邊必成對在h和v出現
不過以這個為基本的解法還沒想到…有興趣可以想一想,想到了告訴我XD
方法和我一樣用n^2且wa太大的可以往下看提示
我的方法是在矩形的右下點往左、往上拉,拉拉看能不能成為正方形
但是卻忘了考慮以下的情形…
.─.─.
│ │
. .─.
│ │ │
.─.─.
如果方法和我一樣的也注意一下這種測資…討論板一組測資都沒有
除非你想把唯一一組,但和sample input完全一樣的也算下去…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/02
不難解的一題,是字串解密的…又是考驗字串能力
翻譯一下
給一個表header,接著是連續的0和1,分成許多段
每一段一開始的三碼二進位數字表示接下來每一個單位的長度
每個單位長的數字代表著它在header中的位置,你要輸出那個數
然而如果碰到數字全是1的表示這一段結束了
如果一段的單位長度是0表示該組測資結束
以sample input為例
TNM AEIOU
0010101100011
1010001001110110011
11000
前三碼001表示這段單位長是1,接下來下個單位"0"表示輸出0代表的位置的數
0表示第一個位置,故輸出T,接著下一單位"1"因為全部都是1所以這段結束
下一段前三碼011在十進位是3,所以接下來下個單位是"000",輸出A
接著"111"表示該段結束,下一段010表示單位長度2,便得到"00"、"10"、
"01"接著"11"結束,…依此類推
在這裡由於大家應該有注意到第二段的結束"111"分在不同列
所以讀入時要注意,我用%1d讀就沒這問題
讀入部份我自己寫了簡單的函式取得指定長度的二進位數,就用%1d讀指定次數
善用%1d,%d本身會自動忽略space和\n,%nd表示讀入n位整數
故使用%1d既可忽略\n又可一次只讀一位,蠻方便的
0.426sec AC,3xx/624…好像是讀入慢的樣子XD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/02
不難解的一題,主要又是字串相關,對strtok變熟了XD
翻譯一下
給一張puzzle以*做分隔,分別取縱橫所有文字輸出
看題目很難懂,可是看sample很好懂,只看sample也能解
橫者可用strtok,不過strtok會改變字串本身
所以最好備份一套,然後用來做strtok比較保險
指標和string函式用熟其實這種題目會很好玩XD
暴力也很好AC的一題
0.135sec AC,139/733
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:奇怪...WA了..... ^@(#@%!( 0202 23:39
→ sa072686 推:啊,sample有過的話好像有點難wa? 0202 23:53
作者: sa072686 at 07/02/02
歡樂的一題,DP求所有可能數字
翻譯一下
給郵票限定張數和郵票方案,求哪種方案能覆蓋的範圍最大
覆蓋範圍定義為中間不間斷之最大覆蓋範圍
價錢算法是以方案中郵票任意組合,只要不超過限定張數皆可
若範圍相等則比方案中郵票張數,若相等則比最貴那張,再相等任一組皆可
最大覆蓋範圍不會超過1000,輸出方案中郵票時長度3靠右對齊
0.154sec AC,36/248
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 07/02/03
ACM 125 : Numbering Paths
給你幾個城市和一些單行道,請你把任一個城市到任一個城市不同的走法有幾條求出來
單行道j k表示從j到k有一條單行道,單行道不會重複,j也不等於k
若A城到B城有無窮多種路則輸出-1
Input的第一個數字是n,代表有n條單行道
每條有兩個數字j,k
城市的編號從0到m,題目並沒有給出m,但你可以自己判斷
(m其實就是所有j,k中最大的一個)
特殊I/O
6
0 1
0 2
1 2
2 3
3 2
3 4
matrix for city 0
0 1 -1 -1 -1
0 0 -1 -1 -1
0 0 -1 -1 -1
0 0 -1 -1 -1
0 0 0 0 0
--
我始終帶著你愛的微笑
一路上尋找我遺失的美好
不小心當淚滑過嘴角
就用你握過的手抹掉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.176 (不失敗大學)
作者: sa072686 at 07/02/03
不難的一題,可用簡單的dfs解
有中譯,就不翻了
不過有一點連原文題目也沒提,那就是每組後面都要輸出空白列
PE了一次…
0.066sec AC,70/527
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: zenixls2 at 07/02/03
#include<iostream>
#include<cstdlib>
#include<ctype.h>
using namespace std;
int main()
{
long long a,b;
char c[10];
int k,i,j;
cin>>k;
while(k)
{
a=0;b=1;j=0;
for(i=0;i<=10;i++){c[i]=0;}
cin>>c;
long long pi=atol(c);
if(cin.fail())break;
while(a!=b||pi==b)
{
a = atol(c);
strrev(c);//用反轉字串的方式比較好處理
b = atol(c);
itoa(a+b,c,10);//把數字轉回字串
j++;
}
cout<<j-1<<" "<<a<<"\n";
k--;
}
return 0;
}
能幫我除錯就幫吧!
這題我在VC++編譯沒問題,但傳到ACM上卻說我Compile Error。
不知為什麼,最近都很難Accept 唉~~
58004---------------------------------------------------
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.110.198 (中滑一番)
→ chensc 推:#include <ctype.h> -> #include <cctype> ... try it 0203 11:56
→ sa072686 推:VC不太準…有些函式在VC能用,ACM會CE 0203 12:08
→ sa072686 推:不過這些function我也不會啊… 0203 12:09
→ Zero 推:我沒記錯ACM不能用itoa 0203 14:22
→ Zero 推:沒記錯的話* 0203 14:22
→ Zero 推:所以我都用stringstream (逃~) 0203 14:22
→ sa072686 推:用sprintf嘛XD 0203 15:56
→ pioneerlike 推:推樓上~* 0203 16:42
→ sa072686 推:剛看了一下題目…其實一開始數字轉string後就直接做了… 0203 18:11
→ sa072686 推:也不用再轉來轉去了 0203 18:11
→ pioneerlike 推:strrev()? 0203 22:24
作者: sa072686 at 07/02/03
剛開了兩個檔案,第一個編完後,有個char check[]
結果在第二個檔案裡面把滑鼠移到int check上面…
出現char check[]…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:本來他就有這個功能阿... 0203 18:51
→ PG 說:編輯大型專案的時候有機會用到的提示功能... 0203 18:51
→ PG 推:不過個人覺得不好用 0203 18:51
→ sa072686 推:不是啦…是在file2顯示編譯好的file1中的定義… 0203 19:09
→ PG 推:本來就會這樣... 0203 19:13
→ sa072686 推:所以會產生誤會這樣…不過這對我來說很好用 0203 19:19
→ sa072686 推:因為我memory用很省,型態就…function一多時也很方便 0203 19:20
→ chensc 推:這本來就會這樣的...XD 0204 10:09
作者: sa072686 at 07/02/03
Euler Path題…不過有比較難寫,然後排名整個爛掉…
0.090sec AC,295/737
大概是判定太暴力的關係XD
尤拉路徑基本的若所有點都有偶數條路則必有一條路徑可以連出去又回來
這題若有兩個點是奇數條一樣成立,因為它不用繞回來
不過若只判斷這樣還不夠…wa的人可以玩下面這組測資:
1
4
ac
ca
pe
ep
這組不能串起來,可是確實都是偶數條路,因為它有兩條尤拉路徑而不相通
想看我的暴力判定法的請繼續看…
簡單一句,製作單向圖使出必殺warshall…加上建表和warshall才多花0.006sec
接下來怎麼做我想應該不用說了…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:我好像忘了考慮上面固定的四行…囧rz 0203 19:20
→ seanwu 推:還是WA...||| 看來不是這個的關係 (怎麼樣?咬我呀!..) 0203 19:36
→ seanwu 說:見鬼了,不同的方法(dfs)秒數跟記憶體竟然一模一樣...||| 0203 20:15
→ sa072686 推:因為你改邪歸正了XDDD 0203 20:23
作者: zenixls2 at 07/02/05
> #include<iostream>
> #include<cstdlib>
> #include<string.h>//這打錯了
> using namespace std;
> int main(){
> long long a,b;
> char c[10];
> int k,i,j;
> cin>>k;
> while(k){
> a=0;b=1;j=0;
> for(i=0;i<=10;i++){c[i]=0;}
> cin>>c;
> long long pi=atol(c);
> 以下省略 ...............
> 能幫我除錯就幫吧!
> 這題我在VC++編譯沒問題,但傳到ACM上卻說我Compile Error。
> 不知為什麼,最近都很難Accept 唉~~
/////還是Compile Error`,不過我知道為什麼了
///strrev(字串反轉) 和 itoa(數字轉字串) 是很久以前的東西
///不知為什麼現在不能用了
///我想我真的得再買一本新的了,因為我哥的書都很舊了
窮啊!~~~~~~ 58004
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.104.177 (中滑一番)
→ sa072686 推:這不清楚…不過很多東西可以自己寫,像strrev 0205 00:21
→ drazil 推:印象中好像itoa可以用 strrev確定不行 0205 00:22
→ sa072686 推:自己寫其實也沒幾行XD 不用也沒關係 0205 02:26
作者: zenixls2 at 07/02/05
用Dev C++編譯
基本上沒問題
應該是ACM的編譯器太老舊了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 192.168.4.37 (台狼一中桑靈餓)
作者: Zero at 07/02/05
※ 引述《zenixls2 (zenix)》之銘言:
> 用Dev C++編譯
> 基本上沒問題
> 應該是ACM的編譯器太老舊了
以前可以查到資料,可是現在找不到
不過strrev應該本來就不是標準的函式...
像是
VS.net 2005中strrev被標記為deprecated
XCode 2.4.1之中的 g++ 4.0.1(Apple version) 的 string.h 也拿掉 strrev 了
所以應該是太新才沒有? XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Zero from 220.132.154.47 (傑洛的機器膠囊)
→ sa072686 推:同感,long long都能正常了,devC還是爛的…我指%lld 0205 18:38
→ gloompisces 推:每次碰到%lld我都直接轉cin了.. 0205 21:47
→ AikoSenoo 推:long long 在 DevC要用%I64d 0727 00:29
作者: seanwu at 07/02/05
好壯觀 http://0rz.tw/7d2mL
雖然名次是我的1/3 orz
//笑什麼,有過就好...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ pioneerlike 推:亮亮的 0205 22:26
→ sa072686 推:是18/59 0205 22:27
作者: sa072686 at 07/02/05
嗯…bfs題,其實不難,只是有些情形很陰…
小翻譯一下
給n*m的方格,機器人為半徑1.6的圓形,只面向東南西北
不能卡到障礙物,只能前進,一次可走一到三步,或左右轉90度
讀入的地圖是哪一格放障礙物,座標是指該格的左上那個交叉點,西北為0,0
問走到終點最少步數,走不到則輸出-1
起點不會不合法,終點有可能不合法,不能走在最邊緣且終點可能和起點重疊
以上這行很陰…然後小心一下跳牆就行
0.121sec AC,18/426
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ drazil 推:被陰了= = 0205 23:10
作者: rhodon at 07/02/05
中山98級小魚兒學妹報到~~
學長真是強大阿~~~~
還請學長多多指教這樣~~~
//板主好發........
--
★pioneerlike 愛睡的小魚>///<
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by rhodon from 220.139.24.106 (中滑一番)
→ sa072686 推:請多多指教~ 0205 23:02
→ lovemoonfish 推:發(逃~) 0205 23:06
作者: drazil at 07/02/05
嘎嘎啦啦
中一中97級
大弱者
報到
請多多指教
上次和這次的code承蒙寧您照顧了(鞠躬)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by drazil from 61.225.194.118 (中滑一番)
→ sa072686 推:很高興認識你~ 0205 23:57
→ Zero 推: 很高興認識你~ 以及版主 0205 23:59
作者: sa072686 at 07/02/06
DP題,和矩形相關的題目
感謝seanwu學弟
0.002sec AC,69/893
---- 分隔 ----
建表時對每一格都紀錄其往上延伸之最大長度
接著由每一格往左推,每往左推一格就找到最大長方形並算好有幾個
例:
01 那麼在最右下格會找到:1 四種情形,延伸後得:11 兩種
01 1 1 11 11
11 1 1 1
11 1 1 1 1
以此法每格皆推,不會有重覆的出現,故直接加總即可
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/07
嗯,的確是qsort+bfs,抓到訣竅其實也不難做
感謝seanwu學弟
重點只有一句,就是同長度才行
這樣就容易多了,sort時自然以長度優先
1.637 sec AC,110/309
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:>//////< 0207 23:19
作者: sa072686 at 07/02/08
※ 本文轉錄自 [seanwu] 看板
作者: seanwu (難到阿扁錯了咩?!) 站內: seanwu
標題: [筆記] max flow
時間: 2007/02/08 Thu 12:24:46
這是之前跟sa學長討論的OOXX
作者: seanwu (難到阿扁錯了咩?!)
標題: max flow
時間: 2007/02/08 Thu 12:21:00
嗯,我昨天提的並沒有錯(因為10330AC了0.143 100/436)
照我的做法重新整理一下:
給一個有向圖G=(V,E)每個E(u,v)上給值Wi為該邊的最大負載量
起點為S,終點為T
現在假設有一條路徑P: S,V1,V2…,T (等會再說怎麼找)
此路徑可以負載的最大流量即為P中的每一個邊中,負戴量最小的那個邊的值 w
現在把此路徑在G中的每一邊,都減掉 w。同時在反方向的邊上加上 w。
sum += w;
/*
我不太清楚為何要加上反向的邊...我覺的這是為了給這個圖有復原選擇的機會
假設一開始選的那條路徑是錯的,無法得到最佳解,然而其它的路徑可以透過
反向的輸送流量來達到還原的目地。(反向的輸送,即可回復之前正的輸送的)
*/
重覆的抓路徑,直到沒有路可從S到T為止,sum即為解
接著看怎麼找路徑
我是直接用BFS找S到T的最短路徑,先抓最短的路徑原因如下
看這個錯誤的例子(請自行畫圖或想像...)
S -> A 1000000
S -> B 1000000
A -> B 1
A -> T 1000000
B -> T 1000000
1.先 S A B T
S -> A 999999 S <- A 1
S -> B 1000000 S <- B 0
A -> B 0 A <- B 1
A -> T 1000000 A <- T 0
B -> T 999999 B <- T 1
2. S B A T
S -> A 999999 S <- A 1
S -> B 999999 S <- B 1
A -> B 1 A <- B 0
A -> T 999999 A <- T 1
B -> T 999999 B <- T 1
3. S A B T
S -> A 999998 S <- A 2
S -> B 999999 S <- B 1
A -> B 0 A <- B 1
A -> T 999999 A <- T 1
B -> T 999998 B <- T 2
4. S B A T
S -> A 999998 S <- A 2
S -> B 999998 S <- B 1
A -> B 1 A <- B 0
A -> T 999998 A <- T 1
B -> T 999998 B <- T 2
....很明顯的...你得做 2000000 次
或者你會選邊數最少的路徑
1. S A T
S -> A 0 S <- A 1000000
S -> B 1000000 S <- B 0
A -> B 0 A <- B 1
A -> T 1000000 A <- T 0
B -> T 0 B <- T 1000000
2. S B T
S -> A 0 S <- A 1000000
S -> B 0 S <- B 1000000
A -> B 0 A <- B 1
A -> T 0 A <- T 1000000
B -> T 0 B <- T 1000000
3. 沒路徑 Over
所以,可以用BFS找最少邊路徑,回溯回來減、加路徑便成。
還有另一種找路徑的方法,是找那條可以負載最多的
一樣的意思,也是為了早一點把流量用完。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ seanwu 說:請大家幫忙補充一下好了... 0208 12:27
→ sa072686 推:借轉 0208 12:33
φ sa072686 轉:從 [seanwu] 看板,于 2007/02/08 Thu 12:33:29
→ seanwu 推:話說,昨天用msn畫圖....真的是沈經餅 orz 0208 12:37
→ Zero 推:所以就乾脆用Max-Flow演算法就好了(茶) 0208 14:25
→ Zero 推:我的版上有用Relabel-to-front演算法寫的..10330 0208 14:26
→ Zero 說:可是我自己都寫不出第二次了(炸) 0208 14:26
→ sa072686 推:看到8sec就怕了XDDD 0208 17:41
→ sa072686 推:而且你都只有code沒想法啦,我是新手看不懂 0208 17:42
→ sa072686 推:嗯,既然學弟踹過bfs 那我就用Dijkstra吧(有無拼錯?) 0208 17:46
→ sa072686 推:慢著…看到那麼多點突然很想用warshall暴… 0208 17:49
→ Zero 推:我...我錯了orz 0208 19:03
→ sa072686 推:囧,開始無法理解昨天在做什麼了…回去後重co XDDD 0209 12:01
→ sa072686 推:明明不用warshall的… 0209 12:02
作者: Zero at 07/02/08
Relabel-To-Front的想法在這邊
http://en.wikipedia.org/wiki/Relabel-to-front_algorithm
基本上那個程式用iterator換過之後沒這麼差,
而且這算是Maximum flow有效率的演算法了QQ
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Zero from 220.132.154.47 (傑洛的機器膠囊)
→ Zero 推:600 GET! XDDD 0208 19:05
→ sa072686 推:XDDD 0208 19:17
作者: floatJ at 07/02/08
學長您好~
對不起現在才貼報到文 ( ̄ー ̄;)
小的是一串電研98級的笨蛋漂J
請學長多多指教 ^^
//學長是大強者喔! >///////<
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by floatJ from 222.250.38.62 (太陽神電信)
→ chensc 推:學長好∼ 0208 21:01
→ Zero 推: 學長好∼ 0208 22:51
→ hpttw 推: 學長好∼ 0208 23:48
→ sa072686 推:學弟好~ 0208 23:53
→ ben196888 推:學姊好∼ (逃) 0208 23:53
→ rhodon 推:樓上= ==(抓走~~)學長對不起呀~~我這個哥哥平時我對他 0209 08:42
→ rhodon 推:管教不周...所以才來這邊亂講話XDD"... 0209 08:42
→ floatJ 推:學姊好 >///< 0209 10:17
→ etetet91 推:原來sa是學姊 (筆記) 0209 10:34
→ pioneerlike 推:樓上是可愛學妹>///////< 0209 10:37
→ rhodon 推: 壹踢姐姐>///////< 0209 10:44
→ panda1990 推:sa是學姊阿(筆記) 0209 16:19
→ sa072686 推:sa學姊?在哪在哪?XDDD 0209 17:47
作者: sa072686 at 07/02/10
吃吃…
> 嗯,我昨天提的並沒有錯(因為10330AC了0.143 100/436)
> 照我的做法重新整理一下:
> 給一個有向圖G=(V,E)每個E(u,v)上給值Wi為該邊的最大負載量
> 起點為S,終點為T
> 現在假設有一條路徑P: S,V1,V2…,T (等會再說怎麼找)
> 此路徑可以負載的最大流量即為P中的每一個邊中,負戴量最小的那個邊的值 w
> 現在把此路徑在G中的每一邊,都減掉 w。同時在反方向的邊上加上 w。
> sum += w;
> /*
> 我不太清楚為何要加上反向的邊...我覺的這是為了給這個圖有復原選擇的機會
> 假設一開始選的那條路徑是錯的,無法得到最佳解,然而其它的路徑可以透過
> 反向的輸送流量來達到還原的目地。(反向的輸送,即可回復之前正的輸送的)
> */
> 重覆的抓路徑,直到沒有路可從S到T為止,sum即為解
> 接著看怎麼找路徑
> 我是直接用BFS找S到T的最短路徑,先抓最短的路徑原因如下
吃吃…
> 所以,可以用BFS找最少邊路徑,回溯回來減、加路徑便成。
> 還有另一種找路徑的方法,是找那條可以負載最多的
> 一樣的意思,也是為了早一點把流量用完。
bfs是尋找最少點的路徑,我用Dijkstra(不知道有無拼錯?多端最短路徑)過了
所以是尋找能負載最多的那條,直到沒路
0.090sec,12/438,memory還是minimum
方法一樣,把點視為邊,但正反向不論,所以直接存在路徑中
像path[i][j]=k代表i到j的流量最大為k的話,path[i][i]=k就表示i點容量
之前用warshall是把連到起點的所有點和到終點所有點的路都抓出來
但事實上把起、終點設為節點之一並建好連通道路後
用單端求起點到終點即可,容量和流量就開大點就好了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/10
大致把目前所有的文章都收錄完成了
不過只依題號分類,筆記類和社課類的也都放了
10330就拿max flow那篇文下去充數了XD
只是那張整理表太久沒動,加上太久沒更新,太多題目難以整理
開板前解而沒po的也還沒補齊,所以缺漏還很多
至於在精華區中本打算再另開一區將題目依題型分類
不過那會很麻煩,再加上舊文沒在第一行說明題型會更難整理
嗯,如果有人願意幫忙整理請告知
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/12
max flow題,還蠻單純的,感覺上比10330好解
翻譯一下
給任兩點間線路流量,求某兩點間最大流量,線路是雙向的
且兩點間可能有不只一條線路
用max flow配合Dijkstra找尋路徑
0.076sec AC,167/532
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (沒有故鄉)
作者: sa072686 at 07/02/12
配對題,可以max flow解決
由於是配對,所以在路徑找尋上未必要用BFS或Dijkstra解決
特殊情況下我用了比較特殊的方法,只能解決配對,卻快得多
感謝seanwu學弟提供了加速的方法,即距離不要開方
舊:0.193sec AC,224/819
用了學弟的的方法後:0.130sec左右,110名左右
在解說方法中靈光一閃下:0.094sec AC,67/819
至於方法嘛…請看後面,不知道怎麼和max flow扯上關係的也請看
---- 分隔線一:和max flow的關係 感謝seanwu學弟的圖 ----
首先我們可以把每隻地鼠和每個洞都視為不同的節點
節點間彼此的連通即該地鼠是否來得及躲進此洞
那麼便可以建成200 * 200的路徑表,流量可以設為1
之後以max flow即可解決
---- 分隔線二:max flow的做法 ----
基本的就不講了,只講它主要的精神:砍路和加反向路
不論如何,流量必為1(高興的話設100也行啦…統一就好)
過去後就把這條路斷了,並加上一條反向的路徑從鼠洞回到這隻地鼠
然後,萬一有別隻地鼠進來此洞,就可以將原本待著的地鼠逼回去看看
若逼回去後那隻地鼠還能找到另外的洞,那麼就維持這個情況
如果找不到,反正不管走哪隻地鼠都只算是一隻…這也是反向路徑的意義
不難理解,稍微想一下就知道為何這樣可以找到最佳策略而不會遺漏了
---- 分隔線三:這類題型專用路徑尋法 ----
不難發現路徑連通上鼠和鼠洞要分開,所以要開200 * 200
可實際上卻有許多路是廢掉的,鼠和鼠不連通,洞和洞不連通
況且一定是一個洞住一隻,所以反向路一個洞永遠只有一條
圖上也可發現路徑長不一定,但一定的是鼠->洞->鼠->洞->…
因為鼠鼠不連,洞洞不連(這啥鬼…)
重覆做相同的事,雖然是鼠、洞互換,但不難想到有種神奇的方法
沒錯,遞迴,這題還因為反向路必僅一條原理(?)還用不上間接遞迴
遞迴的方法也很簡單,用深度優先,且路徑連通只需開100 * 100
原因呢?很簡單,鼠(100)對洞(100)即可
用三種值,代表沒路、有正向路、有反向路即可
如果你想問洞對鼠呢?很簡單,找找看哪一條是反向路嘛
不過有更簡單的,建一張長度100的對應表就夠了
由於洞對鼠必只一條,用張表指向躲的那隻鼠的編號就夠了
夠簡單的吧?既好寫又省memory,不用頭痛怎麼用Dijkstra和BFS
因為這種題型比較難想
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (沒有故鄉)
作者: sa072686 at 07/02/12
也是max flow做配對
和10080幾乎相同,只是衣對人不再是一對一了
不過有幾乎一樣的解法,參考10080那篇文吧
0.008sec AC,2/249
若還變通不過來,再提示一下回來的路開陣列存
---- 分隔線 ----
不要開太大,六種size,每種最多六人,開6 * 6就足夠了
這樣開還比(30 + 36) * (30 + 36)小得多,人對size更少
30 * 2就夠用,方法改用間接遞迴
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (沒有故鄉)
→ sa072686 推:嘿嘿…經過一番優化後變0.006,第一名了 0212 14:08
→ sa072686 推:500多題,第一次拿到第一名耶~* 0212 14:09
作者: sa072686 at 07/02/13
多端最短路徑 Floyd - Warshall
※ 引述《gloompisces (執著)》之銘言:
> ACM 125 : Numbering Paths
> 給你幾個城市和一些單行道,請你把任一個城市到任一個城市不同的走法有幾條求出來
> 單行道j k表示從j到k有一條單行道,單行道不會重複,j也不等於k
> 若A城到B城有無窮多種路則輸出-1
> Input的第一個數字是n,代表有n條單行道
> 每條有兩個數字j,k
> 城市的編號從0到m,題目並沒有給出m,但你可以自己判斷
> (m其實就是所有j,k中最大的一個)
> 特殊I/O
> 6
> 0 1
> 0 2
> 1 2
> 2 3
> 3 2
> 3 4
> matrix for city 0
> 0 1 -1 -1 -1
> 0 0 -1 -1 -1
> 0 0 -1 -1 -1
> 0 0 -1 -1 -1
> 0 0 0 0 0
學長翻的比我漂亮,就不再翻了XD
嗯,感謝seanwu學弟陪我在南護站了一個小時…XD
討論了好久,對warshall也更了解了
所以歸納出一個簡單的warshall直接解題的方法
0.004sec AC,58/868
想看方法的請繼續看,不過只有提示就是了,其實都是warshall相關的東西
首先,要掌握以下幾點:
一、warshall的運行中是逐次以0、1、2、…、n-1做為中繼點
故兩點間在k = m那一圈不用擔心它已經經過過m+1而連通
二、循環代表自己走一走之後又可以走回自己
三、由於一個循環可以以任一點做為起點,故經過點最大為m時
可保證最慢在外圈k = m-1時會找到循環,不妨想想若m == n-1?
至於路有無循環的判定就容易了
那麼,就提示到這兒了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/14
南護C Sing…XDDD
順便紀念一下…其實該拍進板畫面的,線上0個人XD
【網友列表】 索尼小站 《尚未選定》
排列方式:[網友代號/全部] 站上人數:2 我的好友:0 與我為友:0 板伴:0
編號 代號 暱稱 故鄉 動態 閒置
> 1 sa072686 南一中九七級小教學~* 小護士高中電教 使用者名單 工友
2 Bruce Bruce 中滑一番 使用者名單
網友列表 (f)好友 (t)聊天 (q)查詢 (ad)交友 (m)寄信 (w)水球 (s)更新 (TAB)切換
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.71.102.5 (小護士高中電教)
作者: seanwu at 07/02/14
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 數獨題,先前考TOI培訓營炸掉的題目之一…嗯,雖然沒這麼複雜
> 這題用dfs配backtracking可以過,不會炸掉
> 題目…還是翻一下好了
> 給你一個數獨,試判斷其為不合法(行、列或3*3九宮格出現到重覆的)、
> 唯一解、多重解或是無解
> 嗯,dfs快速解決,加上判斷不合法還不會花太多時間
> 1.229sec AC,不過171/227似乎有點…嗯…
可以開3個陣列,紀錄某行、列、方格中某數是否可用
這樣做當三者皆成立時才可填該數
0.494 400 55/240
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 210.71.102.5 (小護士高中電教)
作者: sa072686 at 07/02/14
[去死節] 18:12 人數 40 我是 sa072686 銀 86M 金 5 [呼叫]開上
還是和往年一樣這樣…晚點寫幾題紀念一下,不過打CS打得好累(?)
也紀念一下剛好拿到特別的紀念物,沒有八
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/02/14
Problem:
Jill是個很容易自嗨的人。有一天她要騎自行車走一條有許多站牌的路,
而在站與站之間的路上會得到不同的不同的「嗨度」。然後她想知道在那一站
到哪一站之間,她可以擁有最大的「嗨度」,兩站之間的嗨度定義為這兩站之
間路徑的嗨度總合。
如果有兩組不同的起迄點,取兩站之間差的距離(站數)較多的那一組;
如果又相同,取起點較小者。
輸入第一行有一整數表示有幾組測資,每組測資的第一個數表示這條路有
幾站,其餘為兩站之間的嗨度,不會有嗨度等於 0。
如果最大的嗨度不大於 0,請輸出 has no nice parts
Example Input:
2
4
-2
-3
-4
4
-1
-2
1
Example Output:
Route 1 has no nice parts
The nicest part of route 2 is between stops 3 and 4
▲ seanwu 改@2007/02/14 Wed 20:44:03
→ seanwu 推:我變成蝜蝂了....所以po一下文... 0214 23:07
→ sa072686 推:Accepted…不過秒數從0.736飄到0.832 0214 23:27
→ sa072686 推:算是DP題,連續最大整數和 0214 23:28
作者: seanwu at 07/02/15
Problem:
有一個長度為 n,只由 U, L 組成,問其中含有連續三個 U 的字串有幾種?
例如:
n=1: 0
n=2: 0
n=3: UUU 1
n=4: UUUL LUUU UUUU 3
n=0 表示結束
Example Input:
2
4
5
0
Example Output:
0
3
8
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 210.71.102.5 (小護士高中電教)
作者: sa072686 at 07/02/15
http://ciswork.tfcis.org/~bbs/default.htm
宗旨:
鼓勵大家寫ACM,使題數少者加緊追趕,題數多者有個警剔
並體認人外有人、天外有天的事實,同時便於大家於連不上時有題目鏡象可看
有鑑於大家都不太清楚其中的功能或不會使用,特地做個說明書
功能計有:
一、排名:
排行榜依排序優先順序詳列如下:題數、PE數、紅題數、綠題數、藍題數
其中僅PE數是小者優先,其餘為大者優先,相等時才比較下一項
二、使用者狀態:
包含題數(作者很好心地將PE算進AC,並以括號表示PE數)及紅綠藍題數
另有ID(以索尼為準)及大致的介紹,幫助使用者對其它人有個大概的認識
同時保有 ACM使用者狀態的mirror供快速查閱
亦建有紅、綠及藍題一覽表,於排行榜下方,以顏色做區分
三、比較:
本程式會將榜上所有使用者與榜上其它人一一比對,以及總比對
因此可快速得知哪些題目是對方有寫、自己沒寫,或是有人寫過自己卻沒寫的
只要點選 ACM的ID即可查閱
四、題目狀態
所有題目都有記下其在榜上的AC率及解開這題的所有人
並保有題目mirror,只是沒有圖片,同時也有記下題目的列表
並在新題目出來時能夠自動抓取,有*號者點*號可快速查閱lucky貓的中譯
標有E者則有該題之AC Code所產生之執行檔供確認測資的正解用
執行檔的提供感謝seanwu學弟,另外不會提供code
五、開放源碼
本程式使用C語言產生靜態html網頁而成
輸入網址時將default.htm省去後即可下載原始碼供參考用
大體是我做的,但之後可能會有其它學弟的修改和新增功能
其中指標運用極多,記憶體也盡量以動態配置陣列調整過了
目前大部份源碼仍無註解,未來將會補上
眼尖的人或許會看到有部影片,但那和本程式毫無關聯
內容為某射擊遊戲的神奇影片,有興趣者可自行下載觀看,保證無毒
六、未來的可能
這程式將存活至有學弟能夠以較適合之語言,如php等做出更好的作品
否則將由歷屆的學弟接手,並著手於除錯及新功能的研發等等
目前seanwu學弟已計劃開發新功能,能清楚地表示出使用者被rejudge掉的題目
並持續到其再次AC為止
大致如此,如有任何錯誤或建議請聯絡
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:第六點好棒...XD 0215 20:57
→ seanwu 推:囧”我的意思是 我試試看... 0215 21:10
→ sa072686 推:踹吧 (茶) 0215 21:20
→ chensc 推:(踹) 0215 21:23
→ etetet91 推:(踢) 0215 21:28
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/03/06 Tue 12:42:04
作者: sa072686 at 07/02/16
DP題一題
0.000sec AC,529/856
補充一下,int保證裝得下,故n最大為31
想法如下:
以n == 3為起始,n < 3則以特例處理
n == 3只有UUU一種
接下來對每個n,必有n-1時所有符合情形的乘以2
由於n可以n-1加上U或L而來,可是已符合的不管加U或L都符合,故有兩種
接著是尾巴有兩個U的接上一個U即可,故可知這類型後三個元素必為LUU
而LUU前面必有n-4個元素,令m = n-4則這m個元素只要不符合連續三個UUU即可
故為m的所有組合數再減去m符合的數,因此得到公式
ans[n] = ans[n-1] * 2 - ans[n-4] + 2^(n-4)
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/16
嗯,DP題,不過測資很詭異…
感謝gloompisces學長的提示
0.023sec AC,145/634
wa的人若input不在1~13則直接輸出0
提示只有一行,不過很有用
若最矮者站在第一個時?站在最後一個時?或站中間時?
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/02/16 Fri 18:33:10
作者: gloompisces at 07/02/17
ACM 11158 : Elegant Permuted Sum
給你一個有N項的數列,你可以任意調整數字的位置
請求 "所有相鄰數字差的和" 的最大值
例如N=4,這個數列是<4 2 1 5>
此時和 = |4-2| + |2-1| + |1-5| = 7
但是你若調成<2 5 1 4>
則 |2-5| + |5-1| + |1-4| = 10
事實上,這也是最大值
1<=N<=51,且每個數列中的數都是不大於1000的非負整數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.113 (不失敗大學)
作者: sa072686 at 07/02/26
神奇的DFS題,配合Floyd Warshall做cut
先翻譯一下
計算從消防局(點1)到某特定地點之所有路徑及路徑數
神奇的是如果不加cut直接做會TLE
加了之後呢?神奇地,0.002sec…嗯,你沒看錯,正是0.002
0.002sec AC,174/465
以下是cut的方法,看討論板來的
-- 分隔線 --
首先,決定哪些點是走不到終點的,這些點即使走了也沒意義
決定的方法自然是方便的warshall,不用怕跑太慢
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/26
簡單的Floyd-Warshall練習題,非常地單純
翻譯一下
從一個國家攻打另一國家所必到之最少國家,即兩國相鄰時最小為1(目標國)
沒什麼好題的…簡單易寫
0.535sec AC,76/1190
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/26
列出所有符合條件之組合,有題幾乎一樣的,DFS輕鬆解
雖然傳的人極少(目前連次數都還沒破400)但其實不難寫
翻譯一下
給你所有會出現的字母及其出現之先後順序,格式請參照題目
列出所有符合條件之組合
簡單易寫,也沒什麼要注意的
0.000sec AC,73/117
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/26
極歡樂之白痴題,直接在submit上co都能過,當然是brute force
翻譯一下
給你兩數,輸出兩數之大小關係
0.000sec AC,112/229
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/26
如題目,Grey碼,觀察後輕鬆解
翻譯一下
求第n個m位之Grey碼代表之數字
0.740sec AC,52/165
做法嘛…
-- 分隔線 --
其實也不難,連遞迴都不用
觀察規律會發現:
以三位為例,從中間切半會發現上面的最左位皆為0,下面皆為1
再次切半後發現上半的上半中位皆為0,上半的下半中位皆為1
而下半的上半中位皆為1,下半的下半中位皆為0
之後得到一結論:一開始時上半為0,下半為1
之後每次切半後視上次切半決定上半和下半為0或1
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:我超好奇第一名那種速度的 code 是長怎樣... 0302 23:43
→ sa072686 推:好奇++ 0303 09:34
作者: sa072686 at 07/02/26
不錯的題目,合階乘、質因數分解及排列組合在其中
先翻譯一下
一排人排成一列,給你父子關係,一個兒子只能夠有至多一個父親
並且兒子只能排在父親後面
不好寫,陷阱也不少,我的方法效率也不是很好
3.227sec AC,42/52
大概提一下該注意的地方和我的爛方法吧
-- 分隔線 --
首先是公式,其實我是憑直覺猜中的,然後再慢慢想辦法解釋為什麼是這樣
當有n人時一定有n!種組合,其中若某父親有m個兒子
則我們只看這m+1個人時,只有一個能夠站在最前面
故得符合的情況只有m+1人取1,由於不管再插進多少人都一樣
故n!種組合再除以每個父親的兒子數再加1
不過光這樣還不夠,必須連孫子也算進去,所以最後的結果應該如下:
n! / 每人之子孫數 + 1
計算的方法我是把階乘直接因數分解回去,再把子孫數因數分解
然後把次方數相減處理後再乘回來,不過是個低效率的爛方法
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/27
白痴題一題,進位制的簡單轉換
翻譯一下
把數字從十進位轉成三進位
0.002sec AC,68/86
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:這題可是 World Final Warmup 耶 XDDDDDDDDDDDDDDDDDDD 0302 22:10
→ sa072686 推:超白痴的XDrz 不過比11172好多了 0302 22:16
作者: sa072686 at 07/02/27
不錯的DP題,其實還不難想
本來要拿來打發早自修的時光的(而且還是開學考當天的XDDD)
可是打發不到五分鐘…|||
切入正題…先翻譯吧
給你n,k,m求有n條、k組且每組至多m條的條碼共有幾種
連續相同的白或黑條碼為一組,必以白(還是黑?隨便,答案一樣)為第一組
DP方法還不難想啦…
0.012sec,後來加了一個小cut後變0.010了,126/386
如果想不到的請繼續往下看吧
-- 分隔線 --
先分析它,我們可以發現共m條並用n組所組成的方法數
可視為只使用n-1組再加上一組並湊成m條的方法數
故可用一個二維的表格dp[n][m]紀錄用n組來組成m條的方法數
接著可以推得:若一組最多k條,則用i組組成j條的方法數為:
Σ(x = j-k ~ j-1) dp[i-1][x]
即,用i組來組成j條的方法數為i-1組中從j-k到j-1所有方法數的和
因為一組最多k條,而本來只有i-1組的時候再加上一組時
新加的那組有1到k共k種選擇,所以共有k種方法可以組合出i組j條
把它們加起來就行了,對於一開始1組時從1條到k條則都只有一種情形
使用以上DP方法可快速解決這題
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/02/28
簡單的一題模擬題,直接暴力就能過了
翻譯一下
在一32*32的圖上以左下為(0,0)給定起始座標及一連串指令
依這指令可畫出一條線圈起一塊區域,請以最少方格包圍這區域
畫出之線不會交叉,方格不會超出邊界,並且一定會回到出發點
且一定是以逆時針方向,詳見題目所給的圖和敘述
0.000sec AC,279/1139
至於做法往下有個小提示,真的很小
-- 分隔線 --
重點只在逆時針方向,從逆時針方向便可決定方格位置了
只是座標系統和方格的轉換要花點功夫,不過也不難,邊看輸出的結果
邊調整到符合題目要求即可,也不用太花時間想,看結果調整比較快
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/02/28
請笑納 :)
http://w9.loxa.com/seanwu/ACM/bishop.doc
變成專題作業了...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/02/28
QuickSort 快速排序法
顧名思義,就是很快速的排序法
排序的原理很簡單,是運用分而治之法,很容易理解
假設目前我們有n個數要排序,我們先找到一個比對用的數m
一般來講為了方便,使用第一個或最後一個數
接著我們逐步地搜尋過所有的數,把比m小者放到m左邊
把比m大者放到m右邊,接著分別對左邊和右邊再做一次相同的事
最後即可完成排序
執行範例:(以第一個做為依據)
1 7 6 8 2 4 5 3
接著分成兩邊,由於都比1大…所以維持原樣
1 7 6 8 2 4 5 3
接著從1處分左右兩邊處理,左邊沒東西就略過,接著是右邊以7為基準
1 2 4 5 3 6 7 8
接著分成兩邊2 4 5 3 6和8,8就可以忽略了…由於都比2大所以也是維持
1 2 4 5 3 6 7 8
接著從2分會剩下4 5 3 6…
1 2 3 4 5 6 7 8
排序完成,可是這時還不會知道,所以會再分成3和5 6下去排,如此繼續
實做方法通常以遞迴來做,交換上通常是用兩個指標分別指在第二和最後一個
拿5 7 2 4 6 3 8 1做一次交換範例
5 7 2 4 6 3 8 1
i j
發現7>5,而1<5,故交換
5 1 2 4 6 3 8 7
i j
2<5而8>5所以不理它,讓i繼續跑,直到
5 1 2 4 6 3 8 7
i j
6>5了,可是8>5,所以讓j跑
5 1 2 4 6 3 8 7
i j
然後交換得到
5 1 2 4 3 6 8 7
j i
發現指標j<i,所以結束了,也得到了5的正確位置了,把5放到正確位置後
再遞迴呼叫處理左邊和右邊
它是個不穩定的排序法,即排序的數中有相等者則未必會依照輸入順序
而有變動的可能,故在某些特殊情況下請小心此特性可能造成錯誤的發生
最佳情形:每次都剛好分成左右相等的部份
最差情形:每次所有的數都分到同一邊
平均速度:O(n log n)
最差速度:n^2
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/02
窮舉法
事實上只是一個概念,所以沒有特定的演算法
觀念很簡單,就是把所有可能都試過一次
雖然效率極差,但卻能順利解決許多問題
亦有只能使用窮舉法解決的題目
若使用得好,效率未必會比較差,改善的方法就是刪去明顯不可能的選擇
很簡單的概念
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/02
貪婪,即greedy
同樣只是一個概念,也沒有特定的方法
就是每次都選擇對當前而言最有利的,或是未必有利卻必無害的
但是多數題目都不適用,或是適用但很難證明是正確的
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/02
轉自「算法藝術與信息學競賽」一書 (用詞部份有稍加修改,簡 => 繁)
題目:
在一條水平路邊,有n(2 <= n <= 25)個釣魚湖,從左到右編號為1、2、3、…
佳佳有h(1 <= h <= 16)個小時的空餘時間,他希望用這些時間釣到儘量多的魚
他從湖1出發,向右走,有選擇的在一些湖邊停留一定的時間釣魚
最後在某一個湖邊結束釣魚。佳佳測出從第i個湖到第i+1個湖需要走5*Ti分鐘的路
還測出在第i個湖邊停留,第一個5分鐘可以釣到魚F1,以後再每釣五分鐘魚
魚量減少Di。為了簡化問題,佳佳假定沒有其他人釣魚
也不會有其他因素影響他釣到期望數量的魚。請寫程式求出能釣最多魚的方案
分析:
為了敘述方便,把釣5分鐘魚稱為釣一次魚。首先窮舉佳佳需要走過的湖泊數X
即假設他從湖泊1走到湖泊X,則路上花去時間T=Σ(i=1~X-1) Ti
在這個前提下,可以認為佳佳能從一個湖「瞬間轉移」到另一個湖
即在任意一個時刻都可以從湖泊1到湖泊X中任選一個釣一次魚(想一想,為什麼?)
現在,採取貪婪策略,每次選一個魚最多的湖泊釣一次魚
對於每個湖泊來說,由於在任何時候魚的數目只和佳佳在該湖裡釣魚的次數有關
和釣魚總次數無關,所以這個策略是最優的(請讀者仔細想想)
假設一次共允許釣k次魚,那麼每次在N個湖泊中選擇魚最多的一個釣
選擇每次釣魚地點的時間複雜度為O(n),故總的時間複雜度為O(kn^2)
讀者可以嘗試用「優先佇列」來獲得一個時間複雜度為O(kn log n)的演算法
但即使用剛才講的普通方法,貪婪的時間效率和窮舉法相比已經是天壤之別了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ csftwpt 推:好強.. 那本我都看不懂.. 0302 23:44
→ sa072686 推:唔,才剛翻了十幾頁XDD 0303 00:22
→ sa072686 推:話說好久沒看到你了XDDD 消失好久 0303 00:22
→ drazil 推:我可以說我看完繁中板之後終於開悟了嗎XD 0303 00:45
→ sa072686 推:啊?XD 0303 09:38
→ drazil 推:就是SA強大的意思 0303 12:46
→ csftwpt 推: SA強大的意思 0303 13:17
→ sa072686 推:什麼鬼XDD 0303 14:22
→ rhodon 推:嘖嘖...釣我同類...... 0303 16:35
作者: sa072686 at 07/03/03
不難的暴力題,雖然長得像數學又一副TLE樣
1.111sec AC,1797/2732
以下是一點關於效率的小提示
-- 分隔線 --
在a^n mod n時可以輔以374(Big Mod)的技巧
但由於n < 65000,故有overflow的危險
因為過程中常會乘到a,可是a^2要用unsigned int才放得下
然而兩個int相乘的情況下不會變成unsigned int而是overflow
即使你沒用變數存起來,直接做運算也一樣,所以需將相關運算用到的變數
定義為unsigned int,如此即可避免overflow
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/03
質因數分解相關的數學題,需要推一下,解法偏向greedy
0.012sec AC,206/440
解法在以下有提示相關做法,這題陷阱也偏多,以下亦有提示陷阱部份
-- 分隔線 --
由於最小公倍數可視為將集合中的數全部轉為標準分解式後
再找質因數中分別的次數最大者並相乘得到
因此我們先將問題簡化至只有一種質因數n並假設有m次方,不難推得:
不論如何,不管n出現多少次、多少次方,只有次方數最大者影響最小公倍數
故以greedy的概念是直接取一個次方數最大者而不出現第二次
即,直接在集合上加上一個n^m並且其它數字不再含有質因數n
接著,每個質因數都可以這樣處理,但合併起來呢?將n^m當作一個元素
我們發現a + b至少不會比a * b差,故採用分別相加的方式而不使用乘法
因為不是要個數少,而是要總和少,以分別相加的方式為最佳解
WA者請繼續看:
需得小心比較特殊的測資,題目說集合中元素至少要有兩個
故只有一個質因數時,不管其幾次方,不管是什麼質因數
總是不會比1大,而1又不影響結果,故僅有一個時必選擇1
但有兩個後已不需補齊,加1反而有害
然而需小心輸入1的答案為2(1+1),輸入2則答案為3(1+2),8則為9(8+1)
至此仍需注意輸入可以大到2147483647(2^31 - 1),而這正好是int的極限
雖然儲存它沒什麼問題,我們也確定拆成因數再相加必比原本相乘要小
所以確定不會overflow,但仍須小心例外,即2147483647
其本身為一質數,故要加上第二個元素1,得到2147483648後便會overflow
請記得使用unsigned int,C語言使用者請使用%u或%lu才能輸出unsigned int
免得使用unsigned int或unsigned long後沒改輸出以致又一次WA
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/03
深度優先搜尋法(Depth First Search, DFS)
常用於圖形上的演算法,但泛用性極廣,為常見、常用又好學的演算法
優點是易學、易理解也易寫,不過為方便學習請將全域/區域變數弄懂
顧名思義,便是一個以深度為優先的搜尋法
在圖形的搜尋上便是先深入到最底端,再回溯至上一層找其它路
直至走訪完所有可能的路為止,故先找到的未必最佳,必須經過比較才知道
其回溯的原理便是常見的方法backtracking
而使用的方法通常是遞迴,或是使用堆疊的方法
其用途極廣,並不局限於圖形的搜索,同時可用來做許多問題
以下講解幾個範例,題目選自ACM
ACM 291
一筆畫問題,可以DFS求出所有可能之畫法,方法大概如下:
圖形固定,故先自行設定點和點之連通,接著遞迴求解
由於遞迴一直反覆呼叫,以致會先抵達最底層,並有結束條件以回溯回來
在找到道路後便立即走訪,並且記住該道路使得不會反覆往返
若能達到終點則此為一解,但請記得必須把走過的路記起來
請試著想想看這題如何找畫法使得出來便是由小自大而不用排序?
如何判斷是否走到終點?或是如何標記走過的路使得不會往返?
若此題完成後可試試解single source shortest path
ACM 441
樂透問題,給你一些號碼,你必須列出只任取六個號碼的所有組合
當然不含排列,且必須由小到大排序,不過題目很貼心給了排序後的數列
做法是用DFS搜索,將每個數字都視為一條路來走訪
請試著想想看如何使其一做出來便是自小到大排序?
為何給了排序後數列會很貼心?如何改寫才能使做出來直接是所有組合
而不是所有排列組合,還必須檢查並刪去重覆?
ACM 10098
排列組合問題,同樣可以DFS得到所有排列組合,方法如下:
所有排列組合方式可透過將字串中所有字都視為一條路
則從一開始便任意擇一點為起始點,並在每一層皆視所有字為一條路
只要沒有重覆便取出來,如此便可做出所有的排列組合情形
請試著想想看如何使其一做出來便是自小到大排序?
此題輸入有元素重覆之可能,例如sample第二組即有兩個b
若照一般寫法會有重覆的輸出,如何修改使找到者皆不重覆
而不用在列出來後再去擋重覆?
完成後可以試試ACM 124 && 872,這些題目有條件限制
即,某些字母彼此的出現順序受到限制
試著想想如何能夠在找的時候便處理先後順序問題?
其它亦有許多有趣的問題,例如ACM 10344(23 out of 5)、
ACM 167、750、11085 八皇后問題、ACM 574等等
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:借轉,謝謝。 0304 15:37
φ chensc 轉:到 [chensc] 看板,于 2007/03/04 Sun 15:37:45
→ hrs113355 推:可以借轉嗎:P 0304 16:27
φ hrs113355 轉:到 [hrs113355] 看板,于 2007/03/04 Sun 16:27:46
→ ben196888 推:借轉 謝謝 0304 23:40
φ ben196888 轉:到 [ben196888] 看板,于 2007/03/04 Sun 23:40:44
→ floatJ 推:可以借轉嗎? 謝謝學長囉^^ 0304 23:51
φ floatJ 轉:到 [floatJ] 看板,于 2007/03/04 Sun 23:51:47
作者: sa072686 at 07/03/04
公式題,不過不是一行那種…要用迴圈算
0.141sec AC,17/298
公式大概提一下
-- 分隔線 --
這題原可以寫作Σ(i=2~n-1) n / i * i - i,推一下就可以了解
至於為什麼i不會消掉是因為n/i會捨去小數點
但是input到八、九位數就開始慢了,十位數跑很久都出不來
我們慢慢觀察可以發現一件事:在n/2 + 1到n都是不可能的
從題意可知對i要成為因數n必須至少>=i*2,或由上式知n/i若==1則結果為0
接著發現從n/3 + 1到n/2這邊個數皆為1
從n/4 + 1到n/3這邊個數皆為2,推得n/(i+1) + 1到n/i這邊個數皆為i-1
以sample的100為例,51~100都不可能,34~50則各有一個,26~33則各有兩個
依此類推,從2開始做,順便從50~34做回來,正好i的部份可以共用
做到兩邊碰上就停止,就可以得到解答了
至於像50~34就善用梯公比較方便,也比較快,但用梯公要小心overflow的問題
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/04
很暴力的一題
給你n求1900/01/01到1900+n-1/12/31之間,星期一到日出現在每個月13號的次數
1900/01/01為星期一,4的倍數年份為閏年,但100的倍數年份不是
但400的倍數年份又是閏年,除4、6、9、11四個月只有30天、
2月在閏年為29天,其餘為28天外其餘皆為30天,輸出順序是星期6、日、1到5
沒什麼要注意的地方,閏年和起始年份弄好就好
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:哇∼你也知道USACO阿XD 0305 18:46
→ sa072686 推:剛知道 XDD 所以也著手翻了這樣 0305 19:14
作者: sa072686 at 07/03/05
很簡單的暴力題
給你兩個字串,依它們的字母編號(A為1,B為2,…,Z為26)分別相乘
若兩個字串的乘積 mod 47相等,則輸出GO,反之為STAY
也沒什麼好講的…應該不會有人乘到over flow吧?
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/03/05
卡好久的數學題…後來發現還蠻暴力的
0.293sec AC,373/2607
解法…嗯,在下面
-- 分隔線 --
設開始貓的高度為n,最後工作的貓有m隻
可知必存在i使得(i+1)^j == n,i^j == m
由此可知i必為m之因數且i<sqrt(m)或者特例,即i == m
否則無法找到j使得i^j == m,之後對可能的i做檢查
若可找到一j使得i^j == m則試試(i+1)^j是否等於n,如是則此i為正解
反之則繼續,想必若i和j找到後要求答案便不困難,故不再贄述
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/05
很難的數學題…不過得到公式後變白痴題
0.062sec AC,136/510
提示是一行文…感謝seanwu學弟
-- 分隔線 --
n! < 2 ^ (2^m)
兩邊同取log得:
log1 + log2 + … + log n < log2 * (2^m)
然後DP一下就行了…0.000的估計是先手動建表的?XD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/06
不難的暴力題,可是DP解就不那麼好想了…
翻譯一下
給你一條由紅、藍和白三種顏色珠子所組成的項鍊
現在你可以任取一點切斷並攤開它,然後從切斷點往左右兩邊取珠子
然後開始往兩邊取珠子,每次都要取相同顏色的,但兩邊可以不一樣
如果取到白色,可將其塗成紅色或藍色
是有暴力的n^2解,不過我有推出n的解法,和Analyze裡面的不太一樣
不過Analyze我還沒看XDDD
方法在下面
把同顏色的珠子算在一起,包括白色,然後再用一個暫存的變數
存下另一個顏色,然後碰到第二次顏色轉換時把目前同顏色的放進暫存
即,每次保留這次顏色總個數和上個顏色總個數,相加再算上白色即為解
由於白色可變為任意色,故要算進去又要避免重算
於是我們永遠把白色算在某顏色珠子的前面而不是後面,如此確定不會重覆
但又不會遺漏,因為假設如以下的情形:
wrwrrwbwr
最大者應為wrwrrwbw,我們把它切成wr、wrr、wb和w來看
那麼可以確定不遺漏任何w,在前的w只要另外加上去就行了
做法中有保留目前的w個數,所以沒問題
然後做完後只要回去從頭再做一次即可,不過做到換色就停
不用管重疊問題,只要最後檢查max值是否大於長度即可
因為若不大於長度則必不重疊
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.110 (台狼一中)
作者: sa072686 at 07/03/06
話說一看到它就想到CS…XDD
嗯,然後這篇其實不是題目這樣,而是講解…不過這篇也有一些題目
當然不是我講的,是譯自USACO這樣
翻譯如下
使用Complete Search是基於一個「讓它簡單、笨拙」的原則
比賽中不論它有無更快的解法,目標都只是在允許的時間內跑得完
Complete Search是使用暴力、直觀與嚐試所有可能的方式尋找答案
這幾乎是你考慮的第一個方法,如果它執行所需記憶體和時間允許
則使用它吧,既好寫又便於除錯。如此一來你會有更多時間可以花在
暴力解不掉的難題上面。使用時最好所要找的可能性小於100萬
題目:Party Lamps [IOI 98]
給你n個燈和四個按鍵,按鍵功能依次為開關所有燈、編號為偶數的燈、
編號為奇數的及3n+1(1、4、7、…)的,n < 10000
並告訴你共按了幾下按鍵,求所有的可能性?
很明顯地暴力時需要嚐試4^10000種可能性,即使你注意到按的先後不影響解
那也有10000^4種可能性,一樣不足以解開這題
但是若你注意到一個按鍵按兩下等於沒按時便只剩0和1兩種可能
如此一來解的範圍便縮小到剩下2^4 = 16種組合,暴力解便能在時間內完成
Problem 3: The Clocks [IOI 94]
有九個放在3*3方格內的時鐘,有指向3:00、6:00、9:00和12:00四種
現在要把所有時鐘調到12點,但不幸的是你只能透過九種不同的方法調整
每個方法會將一定的時鐘子集合順時針調整90度,請找出最少移動次數
若你從一步、兩步、…、一直找下去將有9^k種可能
若你發現調整的先後順序並不影響答案,則可減為k^9種,但仍太多
但若發現四步後等於沒有調整,所以調整將不超過三步,便只剩4^9種可能
而這只有262,072種組合,仍能在時間內完成
Sample Problems
Milking Cows [USACO 1996 Competition Round]
給你擠奶的時間表,求出至少有一隻牛被擠奶的最長時間間隔
以及沒半隻牛被擠奶的最長時間間隔
Perfect Cows & Perfect Cow Cousins [USACO 1995 Final Round]
一個完美的數即它本身所有不含自己的因數和等於自己
一個完美的數對表示扣除自身以外所有因數和分別等於彼此
一個完美的數集合表示從第一個開始,其自身外所有因數和相當於下一個數
直至有某數其自身外之因數和等於第一個數為止
給你牛隻編號(1 to 32000)請找出所有完美的牛和完美的牛堂(表)兄弟
完美的牛即本身編號為一完美的數,完美的牛堂(表)兄弟
即所有為堂(表)兄弟的牛,其編號恰能組成一完美的數集合
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/03/07
很陰的編碼(加解密)題,而且題目很難懂…是我英文爛嗎?
翻譯一下
給你數組字串,並以「快速棕狐跳過懶狗」為對照將其解密輸出
為了確定可回溯性,不會有兩個字母置換為同一字母
若能找到一組由「快速棕狐跳過懶狗」加密者則以其為對照表
若不能,則輸出No solution.
若有一組以上可對照回去,則使用第一組
0.000sec AC,29/607
方法大致如下,陰的地方也順便提一下
-- 分隔線 --
由於可回溯性,我們對於字母的對照原則是若i加密為k,j也加密為k就不行了
相同地若k可回到i也可回到j也不行,space的位置出差錯也不行
不過可以保證的是所有字母一定可以在對照表中找到
我們可以用長度來初步判斷某句是否為quick fox加密而來
若是則此題有解,並且不再判斷其它句子
若否則尋找下一解,而不是錯了一組就是No solution.
因為該句只不過不是從quick fox加密而來,卻可解密為其它句子
若找不到則無解,接著把所有句子依對照表解密回去再輸出即可
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.71 (台狼一中)
作者: chensc at 07/03/07
話說剛剛板主在我旁邊喊著:
「哇∼我的人氣超過web板了耶....」。
這…這…這…
我都不知道該說些什麼了 \(╯▽╰)/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 210.70.137.244 (台南一中繞一圈回來)
→ sa072686 推:還偷我副板的帳號m文…囧rz 0307 11:34
→ sa072686 推: 蝜蝂 0307 11:34
→ rhodon 推:原po跟副版都超發的~~~~~ 0307 12:34
→ Zero 推:發發∼ 0307 12:58
→ dust 發:恭喜發版(?)_ 0307 23:39
→ pioneerlike 推:XDrz 0307 23:45
→ ben196888 推:這年頭 五樓越來越中肯了 0307 23:47
→ sa072686 推:我這麼低調…因為副板發所以板才跟著發的(茶) 0308 09:47
→ chensc 推:==============以上都是發人============= 0308 09:53
→ sa072686 推:樓上是發人 0308 09:54
→ georgemouse 推:樓樓上是大發人 0308 12:52
作者: dust at 07/03/08
之前寫130(http://luckycat.kshs.kh.edu.tw/homework/q130.htm)
用靜態陣列成功過,後來嘗試用鏈結串列寫
試了很多次都Runtime Error(sighal 11)
看ACM寄來的信是Invalid memory reference
Before crash, it ran during 0.000 seconds.
找了很久都找不到原因,而且曾用過3台電腦(XP)測試都沒異常終止
故小弟前來請教SA學長
--------以下是程式碼---------
#include"stdio.h"
#include"stdlib.h"
typedef struct Node{
int no;
struct Node* next;
}node;
node *head,*now;
int n,k,const_n;
node* create(int data){ //建立節點
node* product;
product=(node*)malloc(sizeof(node));
product->no=data;
product->next=NULL;
return product;
}
void insert(node* target,int data){ //創造出一個節點並插在某節點前
node *ins=create(data),tmp;
ins->next=ins;
tmp=*ins;
*ins=*target;
*target=tmp;
}
void del(node* target){ //刪除節點
node* record=target->next;
*target=*record;
if(record==head){
head=target;
}
free(record);
}
int main(){
int i,step;
node* temp;
while(1){
scanf("%d %d",&n,&k);
if(n==0) break;
head=create(1);
temp=head;
for(i=2;i<=n;i++){
temp->next=create(i);
temp=temp->next;
}
temp->next=head;
const_n=n;
now=head;
while(n!=1){
for(step=1;step<k;step++){
now=now->next;
}
del(now);
temp=now;
for(step=1;step<k;step++){
now=now->next;
}
insert(temp,now->no);
del(now);
now=temp->next;
n--;
}
printf("%d\n",const_n-(head->no)+2>const_n?1:const_n-(head->no)+2);
free(head);
head=NULL;
}
}
----------
拜託學長了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dust from 210.60.107.237 (一串高中)
→ chensc 推:良心的建議,載標頭時用:#include <stdio.h> 會比較好... 0308 19:11
→ chensc 推:另外一個建議,用STL很方便...#inclue<list> 後就用爽爽XD 0308 19:12
→ chensc 說: ^^^^^^^ -> #include 0308 19:12
作者: sa072686 at 07/03/08
誠心地建議你不要用搬移該指標資料的方式來增減節點
直接將該筆資料前者指向該筆資料後者,然後釋放該筆資料
不知道為什麼devC跑起來相當地正常,但VC在執行時確實會爛
光是5 2這組就會爛了,因為del()函式的關係
首先我分析了一下insert()和del()運作的原理
在這組殺掉第三個人後,應該從環狀的1 => 3 => 4變成1 => 4
接著把1放在4的前面,不過在insert的時候
你的方法是建立一筆資料為1,然後指向自己,變成以下:1 => 4,1
然後把4那筆資料直接變成新資料的值,所以1從指向自己會變成:
1 => 1 => 1,而新的1會用原本4的資料蓋過變成:1 => 1 => 4
由於新的1指向自己那筆,所以原先4那筆拿到後就變成指向新的1那筆
新的那筆再用4那筆的資料得以指向舊的那個1,然後del()刪去原先的1
使得情況變成1 => 4,而原先指向4的temp因此變為指向1,now指向舊的1
乍看之下並無任何錯誤,但是…
del()函式使用的手法是將該筆資料轉變成它的下一筆資料,再將下一筆刪去
如此指標仍不會出錯,只是釋放的並非自己,而是下一筆
接著now = temp -> next
temp指向新建立的1,now則指向舊的1,依del(),now會將新的1那筆刪除
並以那筆的資料取代舊的1那筆,如此temp所指的新建立的1將會被釋放
而指向被free()釋放記憶體空間的temp自然在調用next函式時會出錯
這篇可能有點難理解,因為什麼時候只賦值而不更動記憶體位置
以致於指標的指向等等的並不好理解,所以建議是換個寫法吧…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:換 STL 最快了 ... (逃) 0309 00:10
→ dust 推:瞭解...謝謝學長>///< 下次我會改用雙向鍊結串列作的 0309 00:19
→ chensc 推:雙向鏈結串列:#include <deque> 0309 00:45
→ sa072686 推:重點不是雙向鍊結啊XDD 0311 01:24
→ sa072686 推:啊樓上上一直推廣STL是怎樣XDD 要推廣手爆啊~ 0311 01:25
作者: pioneerlike at 07/03/09
本篇可m可d啊\(╯▽╰)/
∮raepopo@ptt ▄
▍ ▅○
▆ ▄▅▄ ▆▄◥ ○▆▅◣◢▃◣ ▅ ▅
▂_ ▃▆███▅▃▂▃ ▎ ▍ ▍ ▄▊ ▃▄ ▅▍ ▊▋˙▎ ▊
◤ ▎  ̄ ◥▆▎▍ ▎▊ ▄▋▎ ▍▎ ▌ ▍◥▅◤ ▃ ▄▅
◤▍ raepopo@ptt ◥◣ ▍ ▆ ▅▆▄▅ ▅
▊ ▋▆ ◢ / / ▎ ◥▊ ▅ ▊
▊◤ ▊ __◤/◢ ◢█◢ ▌ \ ▋ ◥▆▅
◤ |-\█◤ ◤◤█◤▊ ▌◣▎▍
▊ / |\ ▍▉▂▃▄◤/◤▃◥█◤
/ / \▎█ ▇ -▇ ▎-▌ ▍
▊ ▍ ◣\\ █▍▇ ▇▍ ▊ ▎
◤ ▎ ◣\ ▊ _`. ▋▋ ▎
▊/ ▌ █◣ ◢ ▋ ▌▊
▌ ▏▉ ▇▄▃▅ __ ▊
▎/ ▋ ▁_╱ █▄▃ ▄-,╱ ▋\ ▍▊
▏ ▍/__ █ _\| \▎\
▏ ▊/ ▅| ◥ ▅ ▃| ◢▌ \▎
/ █_◤ /_ ▊▋ ◥ ▊| \▉
▏ █ ▅`ˇ ◥ ╲◥ / ◥◣ ▎
▍▏ ▌▎ ╲▏ ◥ ▊
▎▍ ▋ ╲ ▎█
▋▌ ▉ _ ▍ █
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by pioneerlike from 210.60.107.237 (一串高中)
→ sa072686 推:啊,真是太可愛了>\\\< 謝謝XDD 0311 10:40
作者: sa072686 at 07/03/10
整個都在玩魔法氣泡這樣…
希望這次不要再爆了XD
不然我就回不去了XDD
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.109.198 (台灣痴漢大學)
作者: sa072686 at 07/03/12
看似遞迴題,其實是腦殘題這樣
翻譯一下
給你一串(非中一中也)字串試判斷其為哪種類型
若為1、4、78則為+
若以35結尾則為-
若以9開頭、4結尾則為*
若以190開頭則為?
且沒有任何非以上四種情形者,並且不需要用遞迴判斷,直接判斷即可
另,若符合兩者以上請輸出前者
0.000sec AC,名次因為ACM爛了所以未知這樣
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.124 (台狼一中)
作者: sa072686 at 07/03/13
很麻煩的一題,尤其是字串處理,不過其實就BFS而已,同10959
翻譯一下
給你許多本書和其作者,求其和Erdos的關係
只要同樣出一本書,就算有直接的關係
和Erdos的關係是一個數字,代表其和Erdos的關係最少是透過幾層
如果完全沒有關係,就輸出infinity
0.211sec AC,12/454
做法參考10959做BFS,不過很單純,其它該注意的地方以下有提
---- 分隔線 ----
其實也不難發現每個名字都固定有兩個", ",所以…
由於最後一個名字有":",所以我們可以確定無法直接儲存名字
否則有的結尾":"有的", "就不太好解決了
故先以strtok()弄掉":",再以連續兩次strtok()讀", "就可以了
資結部份為了加速,所以使用了二元搜尋樹,名次實際上也不錯
然後一直wa的試著把表開大吧…讀入的string請儘量大
我在連通上開到單人最高直接連200人才過,150還會wa(真發…)
然後人數最高在一萬人左右,開九千還是爆掉
人名長不確定,我用指標動態malloc所以不知道
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.111 (台狼一中)
作者: sa072686 at 07/03/13
不難的一題,使用Floyd-Warshall可輕易解決(話說Floyd是CS某BOT…)
翻譯一下
給你一個數字n表示有n個點,接下來有許多行,第一個數字代表點的編號
接下來的數字代表和它連通的點,是單向的
若第一個數字為0表示結束,接著會給你一個數字代表以下有幾個起點
接著對每個起點輸出有幾個點是從這點出發連不到的,及這些是哪些點
2.543sec AC,289/802名
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.111 (台狼一中)
作者: sa072686 at 07/03/13
還蠻好寫的一題DFS,雖然有些苦工,不過善用排列組合就行了
翻譯一下
寫一個程式使其能輸出一pascal函式做排序用
輸出的函式不能夠一直做相同的比較,並且只能使用if、else if和else
詳見sample output
0.191sec AC,37/834名
詳細做法如下:
---- 分隔線 ----
有某題的影子,仔細看sample output會發現一件事:
輸出的東西,順序如下
abc
acb
cab
bac
bca
cba
那麼很容易發現切半後只有c的位置在變動,變動方式為從右往左移
並且a和b的位置固定不變,這和某排組題很像
所以只要以交換的方式生成排列組合就行了,遞迴方式大約是:
首先在深度n插入第n個字母在最後面,接著拿個指標指他
然後把它和隔壁的一直交換、交換…直到換回到第一個位置為止
每換一次位置就遞迴呼叫一次,如此便能順利生成所要輸出的東西,如圖
2 abc
↗3↓
1 ab acb
↗↓ 4↓
a ↓ cab
5↓
↓6 bac
↓↗7↓
ba bca
8↓
cba
那麼,比較的部份呢?再觀察嘛,我們可以發現如果在第n層
那麼,就是第n個字母 > 第n個字母的前一個字母,比方說c放在a前面就a < c
例如abc這組就是b < c,bac這組就是a < c,bca這組就是b < c
當然,當c前面沒有任何字母時便是else的部份了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.111 (台狼一中)
作者: sa072686 at 07/03/13
蠻好寫的BFS,正好是九七級留社考的加分題,感謝gloompisces學長的翻譯
不過之前有寫一個BFS版,現在被蓋掉了…200多名
後來用Dijkstra + heap做出了0.006sec,5/299名
和10044幾乎一模一樣的解法,用很純的BFS就可以解了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.111 (台狼一中)
作者: sa072686 at 07/03/13
動態看板上看到的…
◢◣ ◢◤ ◢◣ ◢◤
◢◤◥◢◤ 台中一中 龍夢紀元 ◢◤◥◢◤
◥◣◢◤◢◣ ◥◣◢◤◢◣
◥◤◢◤◥◣ 全年無休 ◥◤◢◤◥◣
◢◤◣◢◤ 誠摯的為您服務 ◢◤◣◢◤
◢◤ ◥◤ 歡迎您的光臨 ◢◤ ◥◤
telnet://tcfsh.twbbs.org/
左右都寫著dp耶 >///<
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.111 (台狼一中)
→ pioneerlike 推:其實這是老耿XDrz 0313 16:15
→ Zero 推:XDrz... 0313 17:41
→ R6 推: XDrz... 0313 18:50
→ dust 推:XDrz... 已經是Old pioneerlike了,但我都不知道耶~ 0313 18:52
→ chensc 推:= =+ 0313 22:48
→ ben196888 推:我還是不懂dp的意思= =||| 0313 23:01
→ etetet91 推:Define Pionnerlike…dp…XD 0313 23:05
→ ben196888 推:XDrz 0313 23:08
→ pioneerlike 推:七樓不專業┴─┴ ︵ ╰(‵□′╰) 0313 23:17
→ sa072686 推:Dynamic Programming,動態規劃這樣,通常是勝負關鍵 0314 08:26
作者: sa072686 at 07/03/14
幫忙搬電腦時順便紀念一下這樣
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from \231\164\190\230\156\131\231\167\145-dell745 (沒有故鄉)
▲ sa072686 改@2007/03/14 Wed 10:03:11
作者: sa072686 at 07/03/14
DP題
感謝seanwu學弟
翻譯一下
給你m * n的地圖,要在上面建b座橋且間隔要至少s單位,求最小花費?
每座橋的花費為橋的長度,必有一組解,必有兩岸且同一行不會有南岸在北岸上面
並且有可能在岸中出現湖泊
0.295sec AC,9/27名
大致講一下做法
---- 分隔線 ----
首先用dp建表把目前範圍內建n座橋時的最小花費記下來
然後比較在這格建橋時的花費是否有比其它格要低
由於存的都是目前為止最佳的,所以只要目前長度加上間隔那格就行了
比較要注意的是間隔為3的話,應該長度要減4才是…
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.124 (台狼一中)
▲ sa072686 改@2007/03/14 Wed 21:39:04
作者: sa072686 at 07/03/14
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.124 (台狼一中)
→ csftwpt 推:好發好發~~~ 0314 11:08
→ pioneerlike 推:... 0314 11:09
→ pioneerlike 推:我發現我忘記我的帳密了XDrz 0314 11:09
→ rhodon 推:呆了orz.....//罵樓上的.... 0314 12:16
→ sa072686 推:我還是第一天知道這樣 0314 15:28
→ drazil 推:+1 去玩玩看吧 0314 19:45
作者: sa072686 at 07/03/14
53320CZ
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.124 (台狼一中)
作者: sa072686 at 07/03/15
之前一直不敢動手的數學題…現在用暴力解了,不過秒數很難看…徵數學解
暴力n^2解法,即每次讀入就建表後排序
6.098sec AC,memory6000,639/898
暴力n^2一次建完,再依讀入取出排序
5.030sec AC,memory9000,592/898
徵求數學解,請高手們賜教
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.124 (台狼一中)
▲ sa072686 改@2007/03/15 Thu 14:19:11
▲ sa072686 改@2007/03/16 Fri 11:14:52
作者: sa072686 at 07/03/15
喇叭題,暴力苦工這樣
翻譯一下
給你一首歌,其長度不會超過200且只有do到si,以大、小寫cdefgab表示
所以總共只有十四種音,問一首歌演奏下來每根手指頭各按了幾次鍵
注意若兩個音用到同樣的按鍵則不必放,即只按一次的意思
原文題目有指法,請自行參閱
0.045sec AC,150/715名
給一個比較輕鬆的苦工法
---- 分隔線 ----
就建一張表,cdefgab剛好有連,所以很好判斷
然後那張表就看哪根手指該按和不該按,這樣就容易多了
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
▲ sa072686 改@2007/03/16 Fri 11:15:01
作者: sa072686 at 07/03/15
找出最大和,看似難以置信的簡單卻又真的腦殘到一個極致…
根本就是個腦殘題,事實上簡單的greedy就可以解了
翻譯一下
給你一個整數n代表這組測資有多少個數字,n為零時表示結束
每組測資會給你n個非負整數,請找出一個子集合使其總和為最大
若有多個子集合有相同的和,請輸出長度小者
若長度依然相同,則輸出最先出現者
並請注意,子集合必有至少一個元素才算
0.090sec AC,247/689
小提示,而且真的別想太多
---- 分隔線 ----
說到greedy大家會想到什麼呢?沒錯,真的是這麼簡單
由於長度要最小,所以沒有幫助的零就不要取,因為一定比較差
由於沒有要求連續,又是非負整數,所以只要不是零就都取,因為一定比較好
如果都沒有大於零者,那麼就依它要求的子集合至少要有一個元素
也就是輸出一個零就行了,因為零多了就一定是比較差的解
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.17 (台狼一中桑靈餓)
▲ sa072686 改@2007/03/16 Fri 11:15:10
作者: sa072686 at 07/03/16
暴力題,如果想通了其實還不難做,不過n^3可能會TLE這樣
0.020sec AC,124/555名
做法…其實可能小提示一下就知道怎麼做了
---- 分隔線 ----
把儲存的方法轉換一下,從儲存「第i個位置的數字為n」
改成「數字n的位置為i」,反正它一定是0到n-1這n個數字
然後對於每個可能的差值j若n、n+j、n+j+j的位置呈遞增則為一子序列
以此方法可以n^2完成
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.124 (台狼一中)
→ Robin 推:變低掉害羞了@@ 0316 20:11
→ sa072686 推:之前被盜帳號變成發這樣,所以我把它改中肯了 0316 20:17
作者: sa072686 at 07/03/17
>///<
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.48 (台灣痴漢大學)
作者: sa072686 at 07/03/17
數學題這樣…感謝PG學長
0.000sec AC,728/1018
解法應該算是數學吧…
---- 分隔線 ----
其實就是取 log 這樣…之後乘除就變加減,出來的數字可以推一下
其實就是表示是10的n次方嘛…所以位數就是n+1啦
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.48 (台灣痴漢大學)
→ PG 推:第一眼看還以為是控碼...|| 0317 17:49
作者: sa072686 at 07/03/17
不難的一題,進位制的換算而已
0.020sec AC,123/465
其實是個不難想的題目,而且也還蠻暴力的,看似苦工其實也還好這樣…
---- 分隔線 ----
由於我們要求的是把數字轉成i進位後,寫出來的花費,而每個位數都是獨立的
所以只要把每個位數的花費通通算完加起來即可,因此也無關於順序
直接在求的時候把花費加上去就好,連把換算後的數字列出來的必要都沒有
最後只要比較和建表儲存即可
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.48 (台灣痴漢大學)
→ PG 推:你覺得還好 但是對我來說有點接近苦工了 Orz 0317 17:50
→ sa072686 推:58 lines 其實不會太苦工這樣 0317 19:36
作者: sa072686 at 07/03/17
神奇的數學題,公式很簡單可是很難,討論板有網址,感謝seanwu學弟
21.811sec AC,87/352
解法於下:
---- 分隔線 ----
其實只要找它有幾個奇因數就行了,原因請見討論板(其實是我也不清楚這樣)
然後記得要建質數表,不然即使它有一百秒也是跑不完的
建表用一般的DP也可以在77秒左右跑完(至少我是這樣)
如果用篩法(感謝seanwu學弟提供)可以在23秒左右跑完
如果用線篩說不定更快吧,不過我忘掉了這樣
至於效率方面加上若n == 1就跳出迴圈會快個一兩秒左右
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.48 (台灣痴漢大學)
作者: sa072686 at 07/03/19
不好想的DP題,不過BFS會比較快
翻譯一下
給你每顆糖果的大小,將它們分給三人後最多者與最少者的差必須最小,求最小差值
0.496sec AC,68/313
解法如下:
---- 分隔線 ----
首先,將5置換成1+4不會比較好,因為1+4還可以再拆;將1+4拆成2+3也不會比較好
因為2和3的機動性更大,所以事先將其排序後只要數字相同便可略過
接著平分給三人時只要先分給兩人,自然剩下的便是第三人的
使用DP或BFS得到兩人分糖果之所有組合再一一比較即可,由於糖果最大20
所以重覆性會極高,若以此方法可以擋掉許多重覆的東西
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.149 (台灣痴漢大學)
作者: sa072686 at 07/03/19
也是不好想的一題,算是數學題
0.008sec AC,49/229
解法如下:
---- 分隔線 ----
後三位比較容易,使用374(Big Mod)的遞迴方式解就可以了
前三位要取log,由於log減去整數就等於原值除以10,不會影響前面的位數
所以只要想辦法將整數減去即可
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.149 (台灣痴漢大學)
作者: sa072686 at 07/03/22
一串有言:「這絕對不是盜帳號。」
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.190 (台灣痴漢大學)
→ sa072686 推:我m XD 0322 19:05
→ hsun 推: 我推XD 0322 19:10
→ sa072686 推:啊這… 0322 19:12
→ drazil 推:嘎嘎ˇXD 0322 19:12
→ floatJ 推:一串有言ˇXD 0322 20:52
→ R6 推: 絕非盜帳ˇXD 0322 21:26
→ panda1990 推:好發XD 0323 19:19
作者: sa072686 at 07/03/23
XDDDDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.98 (台灣痴漢大學)
→ R6 推:怎麼每天都被盜XDrz? 0323 19:53
→ chensc 推:盜sa的帳號這麼好玩? 0323 20:05
→ gloompisces 推:那我幫忙m一下好了XD 0323 22:18
→ georgemouse 推:大推樓上XDDD 0323 23:52
→ sa072686 推:ACM文欠了二十篇有,盜帳文倒是不少XDDD 0324 08:16
作者: sa072686 at 07/03/24
據說最高分是75…我爆掉了,才考45
第一題
給你一份蛋糕,長度為100,並且給你可切割的點和需要切割幾份
且必須使得切割的平均值最大。切割點是離左邊的位置,例如給你20
表示離最左邊20公分的地方可以切,切割的平均值有個公式如下:
- (Σ(1~s) Rs * log(Rs))
其中log為自然對數,Rs是每一段蛋糕所佔的比例,可切割點最多30個
第二題
有個魔術師要表演猜數字,它會拿出n+m個硬幣,然後開始猜
每猜錯一次就要損失掉n個硬幣其中一個,若猜的數字是高估的話
則連m個硬幣中也要被拿走一個,若n被拿完或m被拿完還高估就算失敗
給你n和m求一個k值使得魔術師在數字不大於k時一定不會失敗,m和n最大30
第三題
給你數個字串,每個字串都只包含大寫字母,並且字母分別代表不同數字
並且答案保證唯一解,求將其轉回運算式,Ex. AA + BB = CC可轉為11 + 22 = 33
第四題
求最小間距lcs,即對於兩個字串其距離要在定值內
例如abcc和addddddc應該lcs出來是ac,可是若限制間距2則addddddc間距過長
故只有a和c兩種情形,給你兩字串和間距求其最小間距lcs長度
並且一般m * n的做法會TLE
解法
第一題
暴搜會過,但據說可以DP
第二題
據說有遞迴式存在,DP也行
第三題
暴搜
第四題
不會解,也沒聽說過解法,某發人用lcs賽了兩組
我的解法是類似10949的解法,但要建表存間距,不過一組都沒過就是了…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
→ seanwu 推:好棒,借轉XD 0324 11:34
φ seanwu 轉:到 [seanwu] 看板,于 2007/03/24 Sat 11:34:46
▲ sa072686 改@2007/03/24 Sat 11:39:12
φ seanwu 轉:到 [seanwu] 看板,于 2007/03/24 Sat 11:39:52
→ silentvow 推:好棒,借轉XD 0324 11:53
φ silentvow 轉:到 [silentvow] 看板,于 2007/03/24 Sat 11:53:38
→ hrs113355 推:borrow turn XD 0324 14:25
φ hrs113355 轉:到 [某隱藏] 看板,于 2007/03/24 Sat 14:25:24
→ Zero 推:好棒,借轉XDDD 0325 16:51
φ Zero 轉:到 [Zero] 看板,于 2007/03/25 Sun 16:51:14
作者: sa072686 at 07/03/24
很難的一題,算是中國郵差問題(Chinese Postman Problem)
0.178sec AC,202/296
解法如下
---- 分隔線 ----
和尤拉路徑有關,由於路徑可以重覆走訪,但要走完所有的路
所以可以先以尤拉路徑判斷偶數點的部份,然後再判斷奇數點的部份
也就是將奇數點兩兩配對即可走完所有的路,所以只要求兩兩配對最小花費
再加上所有路徑的花費即可,兩點間的重覆路徑反正都是要走
所以直接加總起來就好,但為了兩兩配對的最小值,保留最小的那一條路徑
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
不難寫,是資結課上到Tree時的作業之一
0.000sec AC,537/784
翻譯一下
給你一個Tree,葉節點外同一深度的節點具有相同的值,並且走訪時依其值的不同
決定走左邊還是走右邊,給你每層的值及葉節點的值求走訪到的葉節點值
解法如下:
---- 分隔線 ----
其實這題很簡單可以看出一些東西:每一層的值相同,所以走的方向必相同
且基本上只會走單一的路徑,就是一直線到底,再仔細觀察會發現
把一路上的0和1看成二進位的值後就很容易知道要找的是哪個節點了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
也是Tree的作業,也很好寫,有點陰加有點暴力就是了
0.000sec AC,65/262
翻譯一下
給你一個用ASCII畫的Tree,必須將其轉成樹的一種表達形式
名詞不知道,請參考Sample Output,用括號表示那種
可以默認一節點非葉節點時在其正下方必有'|'並且底下有一些底線'_'
在底線之下的皆為其子樹,並保證不同節點其底線不會相交
節點為非' '、'#'、'|'和'_'以外的所有可顯示之字元
解法如下
---- 分隔線 ----
其實也不難做,我是使用DFS來「走訪」該ASCII Tree,如此直接輸出就是正解了
首先是觀察,發現一定是三列一循環:節點、'|'所在列和'_'所在列
所以遞迴就用深度加三來遞就行了,走訪時最好限定一下範圍
要小心的地方如下:
小心'_'雖保證包覆所有子節點,卻不保證不會有多餘的,尤其超出下一列長度的
小心限定範圍時限定到超出該列長度而使用到不正確的陣列索引
注意節點的ASCII碼並不一定是字母,也請注意輸入為一空樹的情形
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
不好推的一題,也是Tree的作業,把樹還原回去的
0.080sec AC,170/269
翻譯一下
給你一棵樹用DFS和BFS走訪的結果,求其原先的樹,樹不唯一但任一組都行
解法如下
---- 分隔線 ----
先觀察BFS和DFS做出來的特性,可以大略知道BFS總是一層一層來
再觀察發現DFS那邊子節點們一定都在父節點後面,除非碰上同層或上層的
那麼我們只要有辦法分出層次,就能透過DFS知道子孫節點
因此我們先想辦法分層,觀察得到若兩點在BFS順序和DFS順序不一樣時
則此兩點在不同層,雖然它會有例外,例如一棵樹在深度n時只有一個節點
且此節點在最右邊,則此點BFS和DFS順序一樣,但不同層,不過沒關係
因為這種情況可以認定它不管同不同層都是符合條件的
只是要小心這種寫法會造成深度小但廣度極大的可能,陣列要開大點
並且請注意若輸入為一空樹的時候
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
很難很難的一題,算是數學題吧?但要簡單也很簡單,原因見解法
0.000sec AC,63/96
翻譯一下
給你n個1*1的小正方形,求能組合出幾種圖案?翻轉算不同種,但旋轉算同一種
解法…直接講也無所謂了,反正我也不會解,因為很難很複雜又似乎沒公式
但是討論板給的連結直接列出數列,抄下來輸出就AC了這樣…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
難寫的大數題,不過公式和11174很接近
0.252sec AC,24/177,感謝gloompisces學長
說到這名次就很惆悵,本來該是第二名的,結果前面擺了20幾個建表的
因為數字不大,就有人建表後再傳上去然後0.002sec
翻譯一下
給一棵完整樹的分支數和深度,設有n個節點,將其節點標上1~n的數字
且子節點不得比父節點的值要大,求有幾種方法
完整樹(真正的名詞忘了)的定義是每個非葉節點其子節點數必相同
且葉節點必在同一層
解法如下:
---- 分隔線 ----
公式和11174很接近,應該說一樣了
就是純以父節點及其所有子節點來看,父節點必須拿到最大數
然而它拿到最大數的機率是1/(子節點數+1),擴充到子孫後亦同
故對有n個節點的樹而言所有可能組合為n!種,除掉每節點的子孫數+1後
得到的就是答案,並且因為是完整的樹,所以有很有特性可利用
它有些規律可觀察,以分支度2、深度d的樹來講
其葉節點數為2^(d+1),並且往上一層節點數直接加1後除以2就行了
並且子孫數+1會從1層加到3再層加到7,為2*n + 1
再觀察分支度3可將其擴充至所有分支度m而言
其葉節點為(m^(d+1) - 1) / (m-1),子孫數從1開始乘以m再加1即可
至於大數的做法我使用學長教的技巧
就是先建一張表使得ary[i] = i,然後對每個要除的數字
由於我可以確定必整除,所以將其因數分解後去和ary[]約掉就行了
例如我現在要約掉j,那就找ary[j]、ary[2j]、…直接約乾淨為止
最後再用大數乘小數將所有剩餘的全部乘起來,由於大數乘小數所以很快
而且沒有除法,要乘的東西也少,同時還可利用seanwu學弟的方法
就是原本是mod 10來模擬直式乘法,但其實也可以mod 10000使得記憶體更省
而且執行更快,因為乘法次數變少,同時因為數字不大所以可以做到六位數
但是用long long雖可以做到15位之多,卻不會比較快
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
數學題,光看那圖形就知道了
0.082sec AC,61/1267
解法如下,感謝seanwu學弟
---- 分隔線 ----
主要是先計算角度,再以正弦定理來解出比例即可
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
很難寫的DFS題,要加很多古怪的cut才不會TLE
1.004sec AC,71/212
解法如下,感謝silentvow(Peter)
---- 分隔線 ----
首先是儲存方式,由於不知道它到底有多少根木棍,但是長度最大只到50
所以我們使用長度來儲存,就是每個長度有幾段
接著使用一般的DFS加上cut即可,首先是分段的地方可以用因數分解來cut
用整除與否也可以先判斷可不可行,接著是若棍子長度整除長度和
由於棍子數必為整數,所以若可組合成n段棍子則可確定組出n-1段後必能組成n段
在放棍子的時候對每根棍子放的第一段棍子一定是目前所剩的最大棍子
若放不下或是放了找不到則表示接下來無解
接著若對某一根棍子在組合時恰有一段棍子放上去剛剛好,則放完後cut掉
因為如果放上去剛剛好時保證沒有一段長度小的棍子放上去後能得到更佳解
加上這些微妙的cut後就可以解了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
數學題,比較麻煩而已,只要會圓方程式和行列式解二元一次方程就輕鬆了
0.000 sec AC,1364/2216
解法其實都是數學的東西,所以也沒什麼好講的
圓方程就是利用三點到圓心等距而已
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: sa072686 at 07/03/24
非常難解的一題搜尋題,而且還很苦工(看翻轉就知道了)是搜尋課的作業
0.111sec AC,37/429
翻譯一下
給你一個玩具(詳見題目,有圖)給你初始盤面和目標盤面,求最佳解法
只有四種轉法,左盤和右盤的順、逆時針方向旋轉,不會超過16步
---- 分隔線 ----
技巧是使用雙向BFS再加上cut掉回頭路,可將盤面數從4 ^ 16
降至2 * (4 * 3^7),若兩邊能夠碰上就代表有解,並且保證先找到者為最佳解
若在八步內可完成,則會直接找到;若不行則從終點走回來八步
若有存在一解要12步,則在第四步就會找到了,因為第五步找到起點過來七步的情形時
也可以保證有第八步存在並會在第四步重疊,資結我使用二元搜尋樹擋重覆和搜尋
據說起點走九步、回來走七步會比較好,但或許是資結的關係對我而言比較差
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.148 (台灣痴漢大學)
作者: DarkKnight at 07/03/24
> 第四題
> 求最小間距lcs,即對於兩個字串其距離要在定值內
> 例如abcc和addddddc應該lcs出來是ac,可是若限制間距2則addddddc間距過長
> 故只有a和c兩種情形,給你兩字串和間距求其最小間距lcs長度
> 並且一般m * n的做法會TLE
n,m <= 1000.
間距(k)<=200.
> 第四題
> 不會解,也沒聽說過解法,某發人用lcs賽了兩組
> 我的解法是類似10949的解法,但要建表存間距,不過一組都沒過就是了…
你漏掉了一個很重要的東西,題目裡有提到 match 的數量 <= 500000。
abcbaabab
a* ** *
c *
b * * * *
a* ** *
a* ** *
b * * * *
如上,每個 * 表示一個 match。
以下
問題可以想成,任選一個 match 點開始走,
1)每次只能往右下走,
2)往右和往下的距離都不能超過 k,
最後走到任意一個點的最長路徑。
以下
abcbaabab
a* ** *
c *
b * * * *
a* *A *
a* ** *
b * * * *
如圖,例如 k = 3 時,綠色表示可以走到 A 的範圍。
遞迴式是
for(所有的點 i,從上到下)
for(可以走到 i 的範圍內的所有點 j)
if(最長路徑[j]+1>最長路徑[i])
最長路徑[i]=最長路徑[j]+1
接下來是找綠色範圍的方法。對每個點只要找 k*k 的綠色範圍就夠了,
最簡單的做法就是開 n*m 的陣列直接做,不過最大的 case 要用上 4GB 的 memory,
似乎不大可行。
比較好的做法是只存數量相對很少的 match 點
我的做法是把 match 點列出來,像這樣:
(0,0) (0,4) (0,5) (0,7) (1,2) (2,1) (2,3) (2,6) ....
這些是存在一維 array 裡的,不過當作很多一維接起來:
(0,0) (0,4) (0,5) (0,7)
(1,2)
(2,1) (2,3) (2,6) (2,8)
...
DP 的順序是從最上面開始,從左邊到右邊,然後再從下一條的左邊繼續。
最左邊的那個範圍就自己找,接下來的都可以參考前面的。
從左往右時,綠色範圍的左界和右界都是遞增的;從上到下時也是同理。
這樣時間複雜度就變成 O(Mk^2)。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DarkKnight from 140.122.109.201 (台灣痴漢大學)
→ sa072686 推:哇…講得好詳細,謝謝~ 0325 08:05
作者: zenixls2 at 07/03/28
提供另一種作法
用篩法先把2,3,5的倍數都指定為1
再把沒填到格子的(值為0)之倍數指定為2
到最後只要把剩下之值為1的挑出即可
這方法對越大的值跑的越快
不過蠻佔記憶體的
只是合做443之類的題目
136我是偷跑的
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 192.168.4.37 (台狼一中桑靈餓)
→ sa072686 推:嗯,這做法不錯,不過對memory太傷了點… 0328 17:09
作者: sa072686 at 07/03/28
嗯,55分…一和三有信心全對的,又搞爆了,尤其一很白痴
總分100,比學弟爛這樣…而且不知道會不會進囧
不過第二次感覺比較好考
第一題
邏輯問題,給你一個字母判斷它是否為真,且若p為真且p>q則q為真
後面會給你許多行,有兩種格式:i>j或i,若是i這種表示i為真
第二題
給你n個數(n<=100000),求F(n)和G(n)
F(n)的定義是將所有f(i,j)相加起來,1<=i,j<=n
G(n)的定義是將所有g(i,j)相加起來,1<=i,j<=n
f(i,j) = min{ary[i],ary[i+1],…,ary[j]}
g(i,j) = max{ary[i],ary[i+1],…,ary[j]}
然後我敗在int會overflow…
第三題
給你k台掃雷車,從X點出發,但是不能再走回X,且不同掃雷車不能走一樣的點
但一台掃雷車可以走重覆的點,問最少掃掉幾個地雷才能夠走完所有的點
第四題
給你n段水管分別是由山頂到山腳,並給你每段水管調整所需的價錢
以及每段水管所能上移和下移的上限,必須用最小的花費使得越近山頂的水管
高度要大於等於越接近山腳的水管
解法
第一題就用bfs暴搜或用Floyd-Warshall就過了,我是忘了判斷直接正確就爛一組
第二題據說是二分去做,我是用暴力但是overflow…
第三題就mst,不過還是爛一組,大概講一下做法,從X找一點最小的出去
然後把連到的全砍,再找,再連,再砍,直到連完後如果車子還有剩
就找丟進去解會變好的點把車子丟出去把解最佳化
第四題不會寫,就只用簡單的有無解的判斷凹一個測資而已
然後…如果大家有更好的解法歡迎討論
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.190 (台灣痴漢大學)
φ seanwu 轉:到 [seanwu] 看板,于 2007/03/28 Wed 17:55:10
→ silentvow 推:好棒,借轉XD 0328 17:56
φ silentvow 轉:到 [silentvow] 看板,于 2007/03/28 Wed 17:56:49
→ hrs113355 推:再度借轉^^ 0328 19:14
φ hrs113355 轉:到 [某隱藏] 看板,于 2007/03/28 Wed 19:14:36
作者: sa072686 at 07/03/29
• ▄ ▅ ▄◣
█▄︱ ▋ █◤▄ ◣ ˙ *
◥ ╲ ▍ █ ╱
▄◣▆▃ \▄◥ ︱ ◤ ◢
▄ ▄▄▂ ◣˙╱ ▄ ▅▄ ▁ 春 ████
◥ ◥█◣˙∴◤ ▎/▋ ▄◣ ▄ 日 █▇█◤
◣◤ √ι‥ ▅ ◣▄ ◢◤︱ ▊ . █◤ ◢
▃▆ ▄ ╱ ▄ ▄◣ ▂ ▍ ╱ ▅ 櫻 ███◤
▃╲◥ ▃ ︱ ▄▅ █◣ ▅◣▅▂▄ ▅▁▃▅▂ █�i
▅▇ ╱ ▄ ◥ ▃ ▅ ◥﹎▁▁ ˙∵▄▁▃▂ ◣ ◢█◤◢
▄ ◤▄ ▅ ▄ ▂▅√∴ ▅ ███◤
. ◥▆▅ ˙ ▄▆▁▄◤ ▅ ▇▅▄▆ ██
◥▆▄ ▄ ╱ ▄ |▆ █◤
▃▅◣▆▄ ▄▇▄ ▋ / ▍ ╲ ▄
▃ ▁▄▂▁ ◣ ◥▄ ▄▄◢ ▃ PTT.CC
▇▅▁▃▄▇╲ ▅▂▃▄ ▄ ▇ ▆
˙ * ╲﹎ ▃▃◤ . 批踢踢實業坊
φGillBar ╲ ▊
目前有[7777]使用者在線上
歡迎您第 125 度拜訪本站,上次您是從 140.122.61.148 連往本站,
我記得那天是 03/26/2007 18:42:24 Mon。
▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 請按 任意鍵 繼續 ▄▄▄▄▄▄▄ [^T 收錄暫存檔]
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.190 (台灣痴漢大學)
作者: sa072686 at 07/03/30
剛剛和學弟在玩PUYO限七消(七消內攻擊無效)…結果兩邊都七消相殺後沒打下來
然後速度又加到太快就只好GREEDY
經過二十四分鐘的激戰後終於由學弟開出七消大絕(其實是賽到的)
結果馬上六顆皇冠爆表,然後我想說這樣沒希望了,就跟著炸炸看
然後就看到一連、二連、三連、…,結果出現七連
馬上六顆皇冠全殺,跟著對面六顆皇冠壓下來…勝利 (茶)
原因:時間拖太久,加成太大以致六顆皇冠爆表
假設一百顆皇冠好了,壓過來會被限在最大值的六顆
然後我也用一百顆皇冠相殺,殺完剩下的九十四顆皇冠就打了回去
就爆表了…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.190 (台灣痴漢大學)
→ PG 推: SA的空白文章是出名的多... 0330 18:23
→ chensc 推: SA的空白文章是出名的多...//空這樣分明是要推齊 0330 19:03
→ PG 推: SA的空白文章是出名的多...//當然阿 XD" 0330 22:15
→ sa072686 推:接著連續三、四場的greedy都出七到八連鎖 0330 22:38
→ seanwu 推: SA的空白文章是出名的多...//什麼賽到...是實力! 0330 22:52
→ PG 推: SA的空白文章是出名的多...//樓上空白文也不少XD 0330 22:53
→ silentvow 推: SA的空白文章是出名的多...//XDDDDDDDDDDDDDDDD 0330 22:54
→ chensc 推: SA的空白文章是出名的多...//什麼實力...是心機! 0330 23:16
作者: silentvow at 07/03/30
> 692 sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 6 sa072686/glo
4077 ˇweb 個人 ● 感謝大家參加杜鵑花節電資團 6 web
人氣跟web板一樣發~*
--
╓───╖╓╖╓╖ 高中生 ─── 一種會全力作傻事的生物
║╓──╜║║║║ 而且很容易一頭熱,馬上又冷掉。
║╙──╖║║║║ ╖
╙──╖║║║║║ ╓─╖ ╖─╖ ╫─███ ▉ ▊ ▋ ▌ ▍ ▍ ▏
╓──╜║║║║╙──╖╟─╜ ║ ║ ║ ╖ ╓╓─╖╖╥╓
╙───╜╙╜╙───╜╙─╜ ╙ ╙ ╙╜ ╙─╜╙─╜╙╨╜
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 59.113.136.4 (中滑一番)
→ seanwu 推:7了... 0330 23:05
→ PG 推:8了 0330 23:05
→ seanwu 推:超過了... 0330 23:06
→ silentvow 推:發... 0330 23:07
→ ben196888 推:發... 0330 23:08
→ rhodon 推: 發... 0331 10:42
→ chensc 推: 發... 0331 10:45
作者: sa072686 at 07/04/02
四星題,算是搜尋…搜尋課的指定作業,一定要做出來那種
2.041sec AC,419/927
嗯,這裡大概講一下方法
---- 分隔線 ----
教授講的方法是把a+b+c=d換成a+b=d-c然後把a+b的表建出來,再去搜
結果我用了一堆cut才cut到2秒左右,學弟用雜湊跑比我快也0.6左右的樣子
後來有人用三層迴圈暴搜做出來0.3左右…
方法大致是三層迴圈跑d、a、b然後搜c
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/02
搜尋課的作業,算是加分題…不過沒比必做的10125難也和搜尋沒什麼關係囧
0.121sec AC,6/345
翻譯一下
給你許多堆prul,你必須去算出怎麼買prul能賺最多錢
對每一堆prul你必須從頂端開始買,一個prul可以賣10元
但每一堆都是獨立而互不影響的,輸出是利潤最高時可以買幾個
若有多重解則由小到大輸出,若超過十種則輸出前十種即可
大致提一下方法
---- 分隔線 ----
一般是先找出每一堆利潤最高是買幾個,然後以DP建表再抓前十個
我的方法比較麻煩,可是執行上比較快
首先對每一堆只保留有用的前十種可能,再去和前面可能的組合中
可能有用的前十種去湊,最多是100種,若以插入的方式做除了加cut外
還可以只使用兩個長度10的一維int陣列,效率上從排名第六也看得出來
這樣也有點DP的味道,拿前i堆組合出來的前十小的組合和第i-1堆去湊
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/02
四星題,不過lucky貓都有附解答了所以其實也還好
0.023sec AC,205/626
解法嘛…lucky貓附的是英文的,這裡翻譯一下
---- 分隔線 ----
以下假設都依速度排序,1最快,2次之,…依此類推
不難想的是四人以內的,一人和兩人都直接過去,三人就12過去,1回再來13過去
然後四人時有兩種情形,如下:
12過,1回;34過,2回。花費:1+2+2+4
13過,1回;14過,1回。花費:1+1+3+4
故只要2+2 < 1+3就選第一種,反之則選第二種,如此即可
兩種都是34過,12不影響
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/02
遞迴的好題目,展示河內塔操作的
0.057sec AC,129/233
做法如下
---- 分隔線 ----
先講一下河內塔,就是有三根柱子(左中右)和n個盤子放在最左邊,由大到小疊起來
目的是要把左柱所有盤子移到右柱,規則很簡單:
移動時一次只能搬動一個盤子,並且大盤子不得放在小盤子上面
其實也不難推,只是要先看過操作比較好…這裡展示一下
1
222
33333 0 0
這是初始狀態,我要把3放到右邊,所以要先把2拿走
可是2不能佔到3的目的地,又不能在3上面,所以一定拿到中間去
所以現在3的目標是右,2的目標是中
接著我要移動2,必須要先移動1…我要把2移動到中間去就必須讓1移開
可是又不能佔到2的目的地,所以只能拿到右去…變成
2的目標是中,1的目標是右
所以就變成這樣…
222
33333 0 1
然後2就可以拿過去了…
33333 222 1
然後由於我們是要把2「整個」移過去,所以也包含1在內
也就是說,還要把1拿上來放才算是移動完成
1
33333 222 0
接著把2完整地移過去了,3就可以移到目的地了
1
0 222 33333
但是光只有這樣還不完整,我們要的是把3「完整」地移過去,故要把2搬上來才完整
這時我們要移2到3上,可是要先移掉1;移掉1時不能佔到2的目的地
所以搬到左,變成如下:
2的目標是右,1的目標是左
就變成像這樣子:
1 222 33333
那2就可以放上去了
222
1 0 33333
然後1要拿回來才行…
1
222
0 0 33333
如果我們觀察它,可以知道有如下的規律
一開始要把3從左拿到右去,2就不能在左,因為會疊到3
也不能在右,因為那是目的地
然後把2移走後就可以把3移到目的地,再把2移上來
那麼,要將n移動到目的地(設有起點、目的和暫存)的遞迴式為
呼叫n-1(起點 => 暫存) => 把n移到目的 => 呼叫n-1(暫存 => 目的)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/02
Tree課的第二次作業…看起來很麻煩,不過其實也還好
0.004sec AC,233/944
解法如下
---- 分隔線 ----
要求的關係有五種:父(母)子、祖孫、旁系血親、兄弟姊妹、無任何關係
觀察一下這五種關係的判斷方式會發現
父子的話檢查彼此的父親是否為對方即可
祖孫的話檢查多層一點即可
兄弟姊妹的話看父親是否相同即可
旁系血親的話反正既是血親,必有共同的祖先
排除以上情形,無任何關係就是沒有共同祖先了
因為只要有關係必包含在旁系血親的定義內
反正不管怎樣都要看共同祖先嘛,那就記錄每人的父親往上推就行了
儲存形式就這麼簡單,不用擔心資結問題,0.004是用循序做出來的,測資也僅一組
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/02
不難的一題,也是Tree課的第二次作業,當時不知道誰發起的
一堆人在那邊衝名次,連輸出讀入和建表都出來了,簡直是不擇手段…
當然我因為沒有參與,沒辦法提供衝名次相關的做法,歡迎補充衝名次的大絕
0.842sec AC,35/227
前十名幾乎都是TOI的了…
翻譯一下
給你一個森林,輸出有幾棵樹和幾個點只有獨自一點而無法形成樹
解法如下,除了正常直覺解法外附上一個神奇的解法,感謝雄中的強者們
---- 分隔線 ----
嗯,一般正常的DFS或是union set都已足夠
另一個比較神奇的解法是利用定義,一棵n個節點的樹必有n-1條邊
所以先把單獨一點的全部找出來,之後剩下的就看邊數和節點數即可算出樹數
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/02
數學題…不太好寫,感謝seanwu學弟
0.742sec AC,434/1656
解法…見下一篇,或是精華區27 => 18
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/04/02 Mon 22:24:46
作者: drazil at 07/04/02
V13R4EL2GEL4CR8L8DL4EG>DC<L1AL2AL4>D<L8BAR4V10L8DEV13L4CR8L8EL4FGAR8L8FL2D
R2R4L4EGL8&GAV10GL4V13GL8V10AL2V13CL4EGL8>DCC<AL2&AL4&AR8L8FL2AL4DL8EFAL4G
L8V10AV13L4CL8<A>CL4FEL8DC<A>CL2CL4&CR4
V10L2DCL4CL8&CR8L2<A>DGL1FL2FGV13GV10R2CCL4CL8&CC<B>CL4DL2DCE<A>DL4GR2L8GF
L4FR4L2F<B>DR2L4CCL2<FL1E
V8<L2CEL4FGL2FCEL4FL8FGL2FL4DL8FAL2BBL4AEDEL2FL4G<L2GL8GG>L4CL8&CCL2EFL4FR8
L8<G>L4CL8&CCL4EEL2FL4FEDL8&DDL2FE<A>L4DE<L2G>L4CL8&CCL2C
--
★ben196888 ACM比較好玩XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by drazil from 61.225.193.253 (中滑一番)
→ pioneerlike 推:強大捏 0402 22:35
→ ducksteven 推:啥子? 0402 22:36
→ drazil 推:囧 因為音符數爆炸所以沒繼續寫下去 0402 22:36
→ pioneerlike 推:那就兩人合奏吧 0402 22:37
→ drazil 推:時間太難抓了啦 0402 22:38
→ pioneerlike 推:XD 0402 22:38
→ sa072686 推:還會彈錯這樣 囧rz 0402 22:58
→ R6 推:嗚嗚好宅(我輸了rz) 0402 23:02
→ drazil 推:這跟宅有關係嗎? 0402 23:09
作者: sa072686 at 07/04/02
嗯…又是歡樂猜公式題,標題寫河內塔,可是一點關係都沒有囧
0.000sec AC,268/1234
猜法…嗯,往下看吧
---- 分隔線 ----
還蠻容易的,先觀察…會發現在n根柱子時都在湊n^2的數字
然後如果n是偶數則最後一根會放(n^2) / 2,反之則放n^2
故在第n根時必是從1開始放,放到((n+1)^2) / 2 - 1,這就是公式了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ silentvow 推:猜公式犯規啦XDDDDD 0402 22:58
→ sa072686 推:猜比推歡樂啊XDDD 0402 23:07
作者: sa072686 at 07/04/02
TLE題,算是backtracking…討論板有人說一定會TLE所以要DP?
不過沒提做法,反倒被0.008sec的說不知道是對backtracking極度厭惡還是怎樣
真的有DP做法的話麻煩提供一下吧
0.008sec AC,30/500
大致提一下做法…不過像這種題目通常只要會cut就會過了
---- 分隔線 ----
當然免不掉先排序,由大到小,大的機動性低先放
用的cut其實和307還蠻類似的,我大概整理一下比較有用的
首先同樣的組合做一次就行,排列就不要做了
然後一樣是擋排組重覆的方式:同一個地方不要試兩次相同長度的棍子
(不是要你試三四次的意思啊囧)
做三根就好,三根做得起來第四根就沒問題
如果最長那段做為每一根第一段放不下去,就是失敗了
如果有一段放下去後恰湊成一根,那麼這裡做完後cut掉
因為即使再有其它兩段(或更多段)可以湊得起一根也不會比較好(較差也有可能)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/02
又一題backtracking,不過可以cut得蠻大的,而且很直觀
0.260sec AC,24/293
解法如下
---- 分隔線 ----
首先觀察可得:從任一點出發時,所能拿到的最高錢數是相等的
那麼不同的就是走進這點時所能拿到的錢數…從這點可以發現
可以使用backtracking走訪,且不用擋重覆,因為限制條件會擋掉重覆情形
並且只要記下每一點出發能得到的最高錢數,我們就可以直接回傳
所以每個點最多走訪一次,其它情形走訪時是直接回傳的
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/04/02
※ 引述《sa072686 (a week free again)》之銘言:
> 不難的一題,也是Tree課的第二次作業,當時不知道誰發起的
> 一堆人在那邊衝名次,連輸出讀入和建表都出來了,簡直是不擇手段…
> 當然我因為沒有參與,沒辦法提供衝名次相關的做法,歡迎補充衝名次的大絕
> 0.842sec AC,35/227
> 前十名幾乎都是TOI的了…
> 翻譯一下
> 給你一個森林,輸出有幾棵樹和幾個點只有獨自一點而無法形成樹
> 解法如下,除了正常直覺解法外附上一個神奇的解法,感謝雄中的強者們
> ---- 分隔線 ----
> 嗯,一般正常的DFS或是union set都已足夠
> 另一個比較神奇的解法是利用定義,一棵n個節點的樹必有n-1條邊
> 所以先把單獨一點的全部找出來,之後剩下的就看邊數和節點數即可算出樹數
即然這樣,那我就不客氣啦~
1. printf("%d") 這個%d太慢
把所有可能出現的答案建字串表存起來
還有字串長度表。
2. 使用fread + fwrite
buffer開6750000足夠,用fread一次讀入,
answer全部串接再一起,用fwrite一次輸出。
3. 一次輸出一Byte太慢....改用int裝4個Byte。
input 也是
另外寫個prog做轉換,注意int的位元組是由低到高排列
4. 當然,指標,register,位元運算一定是必要的啦..
-
Your C++ program has solved Ok the problem 599 (The Forrest for the Trees)
in 0.158 seconds using as much as 6988 kbytes of virtual memory.
-
#include <stdio.h>
#include <string.h>
char buf[6750000];
int num_table[128]={0,0,0,0,......0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,0,0};
int output_table[3780]={1919248468,1918967909,540024933,1701147252,539587368,
543452769,1667309616,678326895,170797427,4012800,1919248468,1918967909,
540090469,
......... (塞到int內)
1701147252,539587368,543452769,1667309616,678326895,170797427,4012800,
1919248468};
char str_len[378]={36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,37
,37,37,37,37,37,37,37,37,37,38,38,38,38,38,38,37,37,37,37,37,37,37,37,37,37
...........
,37,37,37,37,37,37,37,37,37,37,38,38,38,38,38,38,38,37,37,37,37,37,
37,37,37,37,37};
int main() {
char u[128];
register char *k,*l,*p,*q;
register int index;
register int output_len;
register int t,s,z,a;
fread((int*)(buf+2000),4,1687000,stdin);
p=buf+2000;
output_len=0;
t=0;
while(*p!='\n') t=t*10 + *(num_table+*(p++));
while(t--) {
u[65]=0;u[66]=0;u[67]=0;u[68]=0;u[69]=0;u[70]=0;u[71]=0;u[72]=0;u[73]=0;u[74]=0;u[75]=0;u[76]=0;u[77]=0;u[78]=0;u[79]=0;u[80]=0;u[81]=0;u[82]=0;u[83]=0;u[84]=0;
u[85]=0;u[86]=0;u[87]=0;u[88]=0;u[89]=0;u[90]=0;
z=0;
while(*(++p)!='*') {
++z;
u[*(++p)]=1;
p+=2;
u[*p]=1;
p+=2;
}
while(*(++p)=='*');
s=0;
a=0;
do {
++s;
a+=(1^u[*(++p)]);
}while(*(++p)!='\n');
s-=z;
index=s*(s+1)/2+a;
k=buf+output_len;
l=(char*)(output_table + index*10);
memcpy(k,l,*(str_len+index));
output_len += *(str_len+index);
}
a=output_len>>2;
fwrite((int*)buf,4,a,stdout);
fwrite(buf+(a<<2),1,output_len-(a<<2),stdout);
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ silentvow 推:好骯髒的code ... 0402 23:20
→ sa072686 推:醜爆了囧…不過跑很快倒是真的 0402 23:25
→ chensc 推:奇技淫巧又一例.... 0402 23:26
→ seanwu 推:什麼= == 這叫力與美的結合... 0402 23:26
→ chensc 推:宋七力跟許純美的結合…(大誤) 0403 00:02
→ silentvow 推:嘔 ... (狂吐) 0403 00:09
→ sa072686 推:嗯…(筆記) 0403 10:16
作者: sa072686 at 07/04/02
西洋棋的題目,推出規律就好,也沒有最難的主教
0.002sec AC,1192/1313
翻譯一下
給你棋盤大小,輸出在這棋盤上最多能放幾隻指定棋子使其不互相攻擊
棋子有皇后、國王、騎士和城堡
解法如下
---- 分隔線 ----
由於棋盤大小有限制在4*4以上,所以都有規律且無例外
城堡最簡單,它不能放超過行數也不能超過列數
國王也還好,每行可以放(n+1)/2隻,可以放(m+1)/2列
皇后也還好,一定不能超過行數和列數
騎士的話比較難,最佳放法是交錯如下:
EKEKEK
KEKEKE
EKEKEK
KEKEKE
EKEKEK
KEKEKE
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/02
蠻簡單的一題…暴力就行了,不過陷阱還不少,也蠻苦工的
0.600sec AC,38/689
翻譯一下
給你候選人和每個投票者喜好排名,投票者會投給還活著的候選人中他最喜歡的那位
如果有人得到超過50%的票數,那就當選;反之則把得票率最低的殺掉後再投一次
解法如下
---- 分隔線 ----
其實就暴力模擬就行了,注意陷阱就好
得票率最低者有許多時一次全殺
若大家得票率都相等,則大家都當選
然後投票者的部份,處理時小心一下就可以了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/03
很簡單的模擬題,看到撲克牌或許會嚇一下…不過它真的很簡單,連苦工都沒有
0.006sec AC,550/779
翻譯一下
給你許多種洗牌方法和一連串指令代表這次要用哪一種洗牌方法
洗牌方法的表示是給你52個數字,第i個數字表示第i個位置要放哪一個位置的牌
解法…就模擬吧
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/03
回溯法 backtracking
之前在提DFS時在做法上提的比較模糊一點,事實上可以參考回溯法的技巧
顧名思義,回溯法和深度優先搜尋法類似,都是先走到底後再回溯回來
然而做法上可能會比較難以想像,這邊通常使用堆疊或是遞迴來做
先提堆疊的做法,堆疊顧名思義是一種先進後出的資料結構
想像你把一堆東西疊起來後,先放的疊在下面,想拿出來的話
必須先把在它上面的東西先拿掉才行,這就是堆疊
所以我們可以建立一個堆疊,一層一層地把我們走過的路徑壓進去
假設我們現在有以下這個樹狀圖要走訪
C G
/ /
A -B -E -F I
\ \ /
D H
我們從A開始走,會先往下走到底,再回來走其它路,因此會先走到C
接下來就沒路了,所以走到B,再往下到G,發現又沒路,就再回去B
再走到E、F後再走到H,再走到I發現沒路,再走回去到H
H也沒其它路,就回到F,…,依此類推直到回到A又可以走D,之後沒路
再回到A發現沒路,所以走完了;走訪先後是
2 4
/ /
1 -3 -5 -6 8
\ \ /
9 7
先把A壓入堆疊,之後把C也壓進去,發現沒路之後
把C拿掉,再拿回A找另一條路B,把它壓入堆疊後又找到G,…依此類推
就是把深度大者一一壓入堆疊,到沒路之後再一一拿出來並檢查是否還有其它路
所以在檢查是否有其它的路可以走時,深度大的也會先檢查到
接著講講遞迴的寫法,遞迴就是一個函式反覆地呼叫自己,並且有一終止條件
以免造成無法脫出的情形,由於呼叫的時候雖然是呼叫自己
但是呼叫出來的新函式只是和自己長得一樣,卻是獨立的個體
所以會是原函式暫時凍結在呼叫的那一行,先執行新函式
故連續呼叫之下也像堆疊一樣一個一個函式疊在一起
和堆疊一樣的觀念,呼叫就是壓入堆疊,結束函式就是從堆疊中拿掉
做出來的堆疊大概像這個樣子
|深度 7| <= 現在在這裡,拿出來後找出下一條路,再壓回來,再壓入新的路
|深度 6|-
|深度 5| |
|深度 4| | => 這裡保留著先前選擇了哪一條路
|深度 3| |
|深度 2| |
|深度 1|-
▔▔▔
這樣就可以做出先深後廣的效果了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/03
廣度優先搜尋法 (Breadth First Search,BFS)
顧名思義和深度優先恰相反,是以廣度為優先的
由於以廣度優先,故常用於尋找最佳解,由於先廣的特性
使得其找到的第一個解通常便是最佳的解
使用的資料結構是佇列,佇列是種先進先出的資料結構,像是排隊一樣
例如走迷宮時
***E*
.*..*
...**
**S**
廣度優先的情形,我們會先找到近的點再擴充到遠的點去,像這樣子
***4*
4*23*
321**
**0**
上面的數字除了代表從起點出發所走的步數外,同時也代表了加入佇列的先後
一般我們會先把起點加進佇列,然後從佇列一直拿出來
並且將該點所能走但沒走過的點都放進佇列中
像以上的圖我們佇列會長成像這樣…當然應該是空的,不過過程放上去會比較清楚
01223344
這樣子也說明了先找到為最佳解的原因,光看佇列就可以了解
由於我們從0步開始拓展,可以確定找完0步時才會找到1步,這時可以確定
由於沒有0步的了,所以1步的一定已完全拓展完畢,接著抓到1步時便是拓展2步的開始了
但可以確定開始抓到2步時,2步的就已經拓展完要開始拓展3步了
所以可以保證加進佇列的東西,先加的步數一定<=後加的步數,故保證最少步數
這在多數情況下就是最佳解,因此通常找到一解後即可結束
常用於找尋最少步驟解,因為它不用像深度優先搜尋一定要走完所有可能情形
常見的例子像是迷宮問題,如ACM 532
或是騎士問題(馬的問題),如ACM 439
或是需填滿時使用,如ACM 785
或是倒水問題,如ACM 571
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/04/04
嗯…沒上
不過似乎比較有動力了,不像前幾天一副瀕死樣
看來除了得拼學測外,未必是件壞事?
等等來衝600和ITOA吧
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ silentvow 推:加油! 0404 10:31
→ Zero 推:已經是強者了>///< 0404 10:38
→ seanwu 推: 0404 13:06
→ chensc 推:一直打puyo叫做瀕死樣嗎?(誤) 0404 14:12
→ silentvow 推:大消小消連環爆XDDD 0404 14:13
→ chensc 推: 大發小發同心機 大消小消連環爆 //天啊我真強XD 0404 14:49
→ sa072686 推:回來後沒打了啊…沒人陪我打了 0404 15:54
作者: seanwu at 07/04/04
給河內塔的總層數和移動次數,問每根柱子上分別有幾個盤。
注意最多100層,移動2^100-1次...
所以當然不是硬去移啦...畢竟它只問你數量
不用管是怎麼移的以及是哪些 (好啦,其實是哪些盤可以順便算出來....)
提示:
1. 觀察盤號與移動方向的關係,三根柱子排成一行
會發現"奇數號皆往右移,偶數號皆往左移"
如果超過右端就跳至最左,超過左端時亦同。
2. 實際移動,發現依序移動的盤號為: (以4層為例)
1 2 1 3 1 2 1 (4) 1 2 1 3 1 2 1
移到 buf n 移到 goal
原因在於若要移動 n, 則必須先把其上的 n-1 個移到空閒不用的柱上(buf)
然後將 n 移到目標柱 (goal),最後再將 buf 上的 n-1 個移上 goal
首次移動盤i 是在第 2^i 步時,故若m>=2^i則i會被移動,否則不會。
這個程序可以讓 m,i 遞歸的進行下去直到 i==1。
解法:
以 (n,m) = (8,45) 為例
先把 45 轉二進制 00101101 ,不足 n 位補 0
則二進制第i位表盤i是否會被移動到
8 7 6 5 4 3 2 1
0 0 1 0 1 1 0 1
一開始全部在p=0柱子上。
從高位起,如果i不會移動到(0),就直接將 p 的計數++
否則:
若為偶號盤,i要向左移動,前提是在i上方的i-1個必須先移到 buf
所以p指到buf,並在goal++,因為i要移動到goal
奇數時亦同
注意p,buf,goal並非固定,河內塔是遞歸的。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ zenixls2 推:我想想看 0405 12:09
作者: drazil at 07/04/06
賽基(一人) 賽普(三人組隊被帶 = = )
死亡 0 1
獲得金錢 2700 2000
獲得捲軸數 7 2
經驗值 9.5% 10%
時間(層數) 2 3
以上為平均值
賽普的取樣數只有1
所以
參考吧
= =
有錢人真好
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by drazil from 125.233.244.199 (中滑一番)
→ sa072686 推:結論是三人衝賽普比較好?不過,賽初的話也太…囧rz 0406 11:42
→ sa072686 推:其實層數是這樣,實際清怪快好多吶… 0406 11:42
→ sa072686 推:而且一樣普到死,四至六刀和兩刀還是有差距在啊(茶) 0406 11:43
→ drazil 推:賽基比較好拉拉 0406 13:10
作者: zenixls2 at 07/04/06
稍微整理一下
可得2*k*k=n*(n+1)
但直接下去找會爆
改成k==n/k*(n-k+1)+(n-k)
再設 long float k=6,n=8;
輸出以cout<<setw(10)<<long(k)<<" "<<setw(10)<<long(n)<<"\n";
這樣就沒問題了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.111.120 (中滑一番)
作者: seanwu at 07/04/08
給幾個(<=20)國家的領土範圍和飛彈攻擊的座標,求「未被攻擊」的國家總面積
只有一組測資,先是國家範圍的座標,給n表有幾個點,當n==-1時結束
接著再給飛彈攻擊的座標。
給的國家的座標要先求凸包,才是國家的範圍,然後求面積。
飛彈落在國家的邊上「似乎」算落在內。
(說似乎是因為我加個'='就過了)
國家的領土範圍不會重疊
//幾何題通常滿麻煩的...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ sa072686 推:嘖…又是幾何…都沒連號的動力了 0408 17:59
→ csftwpt 推:去連八百嘛~ 0408 19:34
→ seanwu 推:連八百會死掉吧.... 0408 19:34
→ sa072686 推:連八百不如去連凸包算了… 0408 22:50
→ gloompisces 推:我凸包一直過不了orz 0408 22:59
→ seanwu 推:861那題有囧到... 0408 23:05
作者: sa072686 at 07/04/17
Greedy題,其實還不難解…把條件弄清楚即可
這題只為了兩條不相干的條件式先後順序錯誤導致WA
不過AC後發現是第二名 (茶)
0.094sec AC,2/166
解法如下
---- 分隔線 ----
Greedy,字典順序的特色是只要前面贏,就不看後面
所以自然是先以橫者字典順序小為先,再看下一列
那麼,就是不用顧慮全盤只需考慮當前最佳解了,因為當前優先
首先當然是去看每一格最好能填什麼,從A開始考慮
考慮時由於都要是正方形,所以和上、右相同就不行了
再考慮如果和左不相同就直接填上去,因為它必為最佳解
如果相同,就看看能不能和左邊組成正方形
如果可以,就把它和左邊合併形成大正方形,也就是記得別只填一塊
而是把左正方形的邊長加大
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: Ijs at 07/04/18
這個太數學了
我一整個嚇到 怕怕...
已知 ex = 1+x+(x2/2!)+ (x3/3!) +…for all real x。
請由鍵盤輸入 x and n,n>100,計算並輸出 ex 的值到第 n 項。
ex:e0=1,e1=2.718281,e2=7.389056.....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Ijs from 220.131.68.149 (中滑一番)
→ sa072686 推:啊…我數學也很糟糕耶…而且項數是到無窮大嗎… 0418 13:18
→ web 推:e^x是很神奇的東西 怎麼微都一樣XD 0418 16:47
作者: sa072686 at 07/04/19
有無限期休刊的可能。
我指我啦…因為某些原因
如果有人願意PO出來分享那還是會有的
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/04/21
這是加數字遊戲的一個變形
它會給你總合(目標)和一個含m個數的集合表一次可以加多少
每次遊戲都從0開始,由Stan先加
且Stan跟Ollie兩人絕不會常失誤,問最後誰贏
贏是先加到n,不是加超過n
提示分隔線
--
如果某數i可由A加到,則對於所有的
j=i+M 皆會被B加到 (M為在該數字集合中的元素)
故如果j是必須搶到的點(比方說j==n),i就一定不可以加到
於是依序檢查所有的 0<=i<=n 決定 i 點是否是該搶的
最後看Stan一開始的那一步是否可以走到可以贏的點即是
因為有n個點要檢查,且該點需對於m個數,故為O(mn)
我約7秒多,排名不佳
還有一些cut可用,例如從前往後加,如果一加到n即終止
sa學長約3秒多,69名
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ sa072686 推:不是給n個然後拿走嗎…還有我的做法比較像篩法 0421 20:25
→ seanwu 推:一樣,我說它是加數字的變形 0421 20:32
→ sa072686 推:是一樣…另外,篩法是可以忽略其中一種情形而不用拓展的 0421 21:39
作者: seanwu at 07/04/21
Q10267: 圖形編輯器
Problem
有個簡單的圖形編輯器能處理一個M*N畫板(1<=M,N<=250)。 畫板上的每個像素各有
自己的顏色。圖形則依此畫板上的圖案輸出。
請寫一個程式來模擬這個編輯器。
Input
輸入包含一些編輯器的指令,每個指令一列。每列指令以一個大寫英文字母開頭。如果
這個指令含有額外的參數,所有的參數皆會包含在這一列中且之間以空白分隔。
參數可能例如:
像素點的座標:含有兩個整數,第一個數界於1∼M之間,表該點的行座標;第二個數界
於1∼N之間,表該點的列座標。
顏色:以一個大寫的英文字母代表。
檔名:符合MSDOS 8.3 (主檔名最長8字元,附檔名最長3字元)。
編輯器需處理以下的指令
I M N 建立一張M*N的圖。所有的點皆塗成白色(O)。
C 清除這張圖。圖的大小不變,所有的點皆塗成白色(O)。
L X Y C 將點(X,Y)塗成顏色C。
V X Y1 Y2 C 將該垂直線段(在第X行在第Y1,Y2兩列之間)塗成顏色C。
H X1 X2 Y C 將該水平線段(在第Y列在第X1,X2兩行之間)塗成顏色C。
K X1 Y1 X2 Y2 C 將該長方形(以(X1,Y1)為左上角,(X2,Y2)為右下角)填成顏色C。
F X Y C 將該區域R填滿為顏色C。區域R的定義如下:
點(X,Y)屬於R。另外對於其它的點若且唯若該點與點(X,Y)有相同
的顏色且與某一屬於R的點有公共邊,則該點屬於R。
S Name 以檔名Name輸出這張圖。
X 結束編輯器程式。
Output
每當遇到 S Name 指令時,你應該輸出檔名Name,底下接著一列一列輸出畫板上的圖
形,每列包含畫板上該列的像素顏色,請參考Sample Output。
Errors
如果列首出現了I,C,L,V,H,K,F,S,X以外的字母,請忽略這一整列直接跳至下一列
指令。其它的例外況狀在本問題中不會出現。
Sample Input
I 5 6
L 2 3 A
S one.bmp
G 2 3 J
F 3 3 J
V 2 3 4 W
H 3 4 2 Z
S two.bmp
X
Sample Output
one.bmp
OOOOO
OOOOO
OAOOO
OOOOO
OOOOO
OOOOO
two.bmp
JJJJJ
JJZZJ
JWJJJ
JWJJJ
JJJJJ
JJJJJ
-
這裡是提示
1. F不能用dfs做flood-fill...250*250保證會爛(RE)..請愛用bfs
2. 問題請仔細閱讀....不要把X,Y弄反之類的...|||
3. 例外Error不要忘記
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ seanwu 說:翻譯完才發現自己太閒...||| 0421 18:41
→ seanwu 說:嗯..還有點樣子http://w9.loxa.com/seanwu/ACM/q10267.htm 0421 19:13
→ sa072686 推:翻得不錯呀 投稿Lucky貓吧XDD 但討論板有人提到 0421 20:26
→ sa072686 推:用floodfill是不會爛的…不過未證實 0421 20:26
作者: seanwu at 07/04/26
給一份"誰要負責打電話給誰"的名單
將所有人依"Cycle"分群
Cycle:
由x打出去,最後回到x
例如
A->B->C->D->A,
A->B->A等
注意 如果兩個Cycle之間有共同的人時,這兩個Cycle合為同一個
Example
5 6
A B A←──D←─→E
B C │ ↑
C D │ │
D A ↓ │
D E B──→C
E D
為一個Cycle
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.192 (台灣痴漢大學)
→ sa072686 推:只花九分鐘 coding 算秒殺嗎? 0505 13:55
作者: seanwu at 07/04/26
給兩張圖,問圖二要對在圖一的哪個位置會最合
合度的計算為:
將兩張圖疊好後,計算所有相疊像素的乘積的總合
輸出合度最大時圖二(0,0)疊在圖一上的座標(x,y)
若合度相同選y較小再選x
圖二必比圖一小,且對位置時圖二需完全落在圖一裡
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.192 (台灣痴漢大學)
作者: sa072686 at 07/04/27
• ▄ ▅ ▄◣
█▄︱ ▋ █◤▄ ◣ ˙ *
◥ ╲ ▍ █ ╱
▄◣▆▃ \▄◥ ︱ ◤ ◢
▄ ▄▄▂ ◣˙╱ ▄ ▅▄ ▁ 春 ████
◥ ◥█◣˙∴◤ ▎/▋ ▄◣ ▄ 日 █▇█◤
◣◤ √ι‥ ▅ ◣▄ ◢◤︱ ▊ . █◤ ◢
▃▆ ▄ ╱ ▄ ▄◣ ▂ ▍ ╱ ▅ 櫻 ███◤
▃╲◥ ▃ ︱ ▄▅ █◣ ▅◣▅▂▄ ▅▁▃▅▂ █�i
▅▇ ╱ ▄ ◥ ▃ ▅ ◥﹎▁▁ ˙∵▄▁▃▂ ◣ ◢█◤◢
▄ ◤▄ ▅ ▄ ▂▅√∴ ▅ ███◤
. ◥▆▅ ˙ ▄▆▁▄◤ ▅ ▇▅▄▆ ██
◥▆▄ ▄ ╱ ▄ |▆ █◤
▃▅◣▆▄ ▄▇▄ ▋ / ▍ ╲ ▄
▃ ▁▄▂▁ ◣ ◥▄ ▄▄◢ ▃ PTT.CC
▇▅▁▃▄▇╲ ▅▂▃▄ ▄ ▇ ▆
˙ * ╲﹎ ▃▃◤ . 批踢踢實業坊
φGillBar ╲ ▊
目前有[0]使用者在線上
請輸入代號,或以[guest]參觀,以[new]註冊:
PTT學堂:免費下載《第五項修練》彼得聖吉座談會談領導力! http://myoops.org/ptt
禁止利用本站販賣或廣告菸品及酒類 http://www.ptt.cc/news.9.html
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (沒有故鄉)
作者: seanwu at 07/04/28
總共有n個人,任兩人之間的關係,不是朋友就是敵人
敵友關係有反身性a~b<=>b~a
朋友的朋友也是朋友
朋友的敵人是敵人
敵人的敵人是朋友
敵人的朋友是敵人
然後給一些指令c x y,以0 0 0結束
c=1 設定這兩人為朋友
2 設定這兩人為敵人
3 問這兩人是否為朋友
4 問這兩人是否為敵人
其中,如果在設定關係時若發生矛盾則輸出 -1,並忽略這一組
問題的答案正確則輸出1,否則為0,如果還無法確定也視為否
Hint--
還滿有深度的一題..
基本上是disjoint set,但要做一些變形
將同是朋友的人定義為一集合
很容易知道一個集合最多只與一個集合為敵人
(若兩個集合的敵人則這兩個之間的關係因"敵人的敵人是朋友"矛盾)
因此對每個集合紀錄它的敵人集合
合併為朋友時
兩集合合併,兩集合的敵人合併 (朋友的敵人是敵人)
加入為敵方關係時
兩集合分別與對方的敵人合併 (敵人的敵人是朋友)
即:將其中一集合的敵人與另一集合合併
尋找時往父節點回溯找出所屬集合
若同屬一集合為朋友,若為對方集合的敵人則為敵人
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.82 (台灣痴漢大學)
作者: seanwu at 07/04/28
給數字盤15-puzzle,請輸出50步以內的解法(不一定要最佳)
測資的最佳解最大為45
若無解則輸出 This puzzle is not solvable.
Hint--
要用A*或IDA* (廢話...)
等一下再PO一篇講IDA*
用IDA*但TLE的請用一個重要的cut... (感謝DarkKnight)
即"不要往回走",這一步走了U下一步就不要走D這樣
如果是A*就不會有這個問題,但IDA*的H()不保証能cut掉這樣的case
H()請用方塊到正確位置的block距離總合做
還有,因為不一定要最佳解,所以一開始的限深dmax可以設稍大一點,
會比較容易找到解 (但不要超過50...)
每次的dmax++就可以了
至於判斷有無解的部分goo到的是這樣:
1 2 3 4
5 6 7 8
9 10 11 12 這是位置順序
13 14 15 16
對每個方塊,計算該方塊位置之前比該方塊大的方塊有幾個,
全部加起來再加上空格是由上往下數的第幾列(1~4)
為偶數則有解,例如
2 3 4
1 5 7 8
9 6 10 12
13 14 11 15
2(0) 3(0) 4(0) 1(3) 5(0) 7(0) 8(0) 9(0) 6(3) 10(0) 12(0) 13(0) 14(0)
11(3) 15(0) + row(1)
= 10 (solvable)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.82 (台灣痴漢大學)
▲ seanwu 改@2007/04/28 Sat 16:54:52
作者: seanwu at 07/04/28
給一個數1<=n<=1000,問用1,2,3,4組成的序列加起來為n的序列有幾種
其中請將4的值視為1,但例如 24, 21兩者值皆為3但視為不同的組合
Example
n=2: 5種
11, 14, 41, 44, 2
n=1000:
7804866167757385351726298167749579946964405850225254539132682472794
3719759221999623132848668787773024035239648904056006752339594072503
2347381821276352346246557755312444384371182535422553659234862212531
9283985689116139597563337647696143005496252287734941893682019406515
6196888404012323608367622686235341588128664511779358463927985309566
586714種
所以...請用大數
Hint--
用DP,c[i]表加成i的組合種數
則因為i可以由 i-1,i-2,i-3後面加上 (1,4), 2, 3 求得,故種數為
c[i] = c[i-1]+c[i-1]+c[i-2]+c[i-3]
c[i-1] 有兩次是因為有1,4兩種值皆為1
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.82 (台灣痴漢大學)
作者: seanwu at 07/04/28
給三維座標點求所有點中兩點之間的最大block距離是多少
block距離為兩點x,y,z差的絕對值的總合
提示 必需做到 O(4n)
參考解法---
有兩點P(x,y,z), P'(x',y',z'),且空間中必可找到一點P0(x0,y0,z0)使得
dx=x-x', dy=y-y', dz=z-z' 同號,且 |dx+dy+dz| 即為block距離
=> 此兩點之間的block距離可寫成:
block = | (x-x0)-(x'-x0) + (y-y0)-(y'-y0) + (z-z0)-(z'-z0) |
易發現若要使block極大,則 P-P0, P'-P0 要極大極小
找四個參考點做為P0 (∞,∞,∞) (∞,∞,-∞) (∞,-∞,-∞) (∞,-∞,∞)
對所有的點其中必有一個為正確的參考點使dx,dy,dz同號
找對此參考點的P-P0極大極小相減即為對此P0的block極大值
若對某點非正確參考點則其值必<=block_max,故不影響答案
分別做四個找極大值,為 O(4n)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.82 (台灣痴漢大學)
作者: seanwu at 07/04/28
給一個圖G求其 second-best MST
second-best MST為一個weight_sum最小
且不全等於(完全相同的邊) MST的spanning tree
提示--
比較簡單的方法是先生成MST,從圖G拿掉一條屬於MST的邊
對剩下的圖形做MST'(second),因MST共有(V-1)個邊,故需做V-1次
這些MST'中最小的即是 second-best MST
用Kruskal為 O(VE lgE) => O(V^3 lgV)
用這個就可以過,而且名次不差
我推得的較佳方法為(因為懶,沒做)
1. 生成 MST O(ElgV)
2. 做出任兩點之間,沿著MST的路徑,會走到的最大邊max_weight[i][j]
這可以對每個點以BFS往外推出,BFS為O(V)
共為 O(V^2)
3. 在G上找一不屬於MST的邊uv,若要在MST中加上這個邊,
則u,v必需不連通要切斷,而切掉的值越大則這樣生成的MST'最小
故選擇切掉在 2. 求得的 max_weight[u][v]
MST' 的成本即為 MST的成本 + uv_weight - max_weight[i][j]
試每個邊選出最小者即為second-best MST的成本
共為 O(E)
總時間為 O(ElgV+V^2+E) => O(V^2 lgV)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.82 (台灣痴漢大學)
作者: seanwu at 07/04/28
給實數座標點,求最短的兩點間距離
如果任2點間的距離都>10000,請輸出 INFINITY
Hint--
簡單的方法,因為測資爛所不會TLE而且很快 (感謝silentvow)
將所有點依X座標排序,將最小值 dmin初始為 distance(point[0],point[1])
從左邊往右做,當做點P時只要跟X座標與P的差距<dmin的點比就可以了,
超過的話dist必>=dmin,如果距離較小隨時更新dmin
且因為X座標排序過,很容易找
但最差有可能到O(n^2),不過測資沒有這樣,否則會TLE
底下是我的做法,跟上面差不多,但每次找來比較的點,
範圍是落在px-dmin,py+=min的長方形區塊內,同理超出此區則不會<dmin
要搜尋這個區域內的點,用二維空間搜尋樹
一般的搜尋樹將一段分為二,二維樹以一個點將空間分為左上、右上、右下、左下
順便利用排序過的X二分建樹,可以使這棵樹較平衡
搜尋時丟入一個範圍,即可看樹根是否落在此範圍內
樹根所劃分出的空間可能會切割這個範圍,則將此範圍分割分別丟
入樹根所分出的四棵子樹(如果有的話),遞歸下去找。
另外,不難理解此範圍內除了本身最多只有五個點,即全部放在邊上
若有第六個點則會有兩點間距離<dmin,與dmin是之前找過的最小值矛盾
故只有五個點為常數,每搜一個點為 5lgN
總共為 O(NlgN)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.82 (台灣痴漢大學)
作者: seanwu at 07/04/29
四柱河內塔,有0<=n<=10000個圓盤問達成問標需要幾步
數字會很大,請用大數(<60位)
Example
N
0 0
1 1
2 3
3 5
10000 374931278650296101567069263458900577819295745
Hint--
這題的公式,我是硬算答案然後猜出來的
假設你要把第n個圓盤移到目標(A->D),上面的n-1個就必需移到B或C
猜測最好的話應該是k個移到B,然後n-1-k個移到C這樣的型式(1<=k<=n)
k個移到B時有四根柱子可以用,但n-1-k個移到C時因為B被佔了只剩三根
令解法步數為C[n],則C[n] = min{ (C[n-k]+2^(n-k-1))*2+1 }
更正為:min{ 2*C[k]+2^(n-k)-1 }
為將k個移到B,再將n-k-1個移到C,移n到D,移C的n-k-1個到D,移B的k個到D
當然...這樣的公式不會過的....
所以你用這種方法跑一些出來,然後看看兩兩之間的差就猜到公式了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.192 (台灣痴漢大學)
→ zenixls2 推:可是我自己推出來是C[n]=C[k]+2^(n-k)-1耶 0520 21:50
→ zenixls2 說:C[k]改成2*C[k] 0520 21:57
→ seanwu 推:嗯對,應該是 C[n]=min{ 2*C[k]+2^(n-k)-1 } 0520 22:57
▲ seanwu 改@2007/05/20 Sun 22:59:19
作者: Tommy at 07/04/30
中文有翻譯......嗯
然後這很明顯就是在說 配對問題
題目會直接給cap[][]陣列,所以自己做個sink,source拿去flow應該就可以了
那這題該用哪種配對的演算法去作呢???
我用了 BFS 去作然後就 TLE 身亡了... XDDDDDDDDDDDDDDDDDDD
_______________________________________________________
後記:
我第一次到學長的板發文...
我是雄中的學弟..嘎嘎(=.=)"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.146.210 (中滑一番)
▲ Tommy 改@2007/04/30 Mon 18:55:29
→ sa072686 推:我也不知道啊…沒寫過…試著用Dijkstra或遞歸吧 0430 19:46
→ sa072686 推:唔,其實我還記得你XDD 0430 19:46
→ Tommy 推:我就是用Dijkstra阿= =,那我試試看遞歸好了 0501 12:12
→ Tommy 推:學長還記得我, 好感動QQ 0501 12:12
→ sa072686 推:啊?你不是說用BFS…之前用遞歸做出了一題配對,第一名 0501 12:38
→ Tommy 推:其實是用BFS找出source到sink的路徑= = 0501 12:40
→ sa072686 推:Dijkstra通常比較快XDD 0501 12:42
作者: seanwu at 07/05/03
之前那篇漏了重要的東西
給你一些貨物的價值和重量,和每個人可以負的重量,
問這群人可以運送的最高總價值是多少。
貨物可以重覆"被"拿,但一個人不能重覆拿同一個貨物(不同的可以)
Input
第一行為測資組數,接下來每組測資的第一行為貨物的數量n
緊接的n行每行有兩個數字為價值和重量。
接下來有個整數m為有幾個人,m行各為每人所能負的重量。
其中n<=1000,m<=100,每個貨物的重量和人所能負的重量皆<=30
Output
請輸出這群人最多可以運送的貨物總價值
Hint--
DP with O(max_weight*N) => O(30n) => O(n)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.192 (台灣痴漢大學)
→ chensc 推:黃色的那行不是排組的題目嗎?(茶) 0503 13:16
→ sa072686 推:排組很多DP題啊 (茶) 0503 18:55
→ sa072686 推:結果差這行就瞬間 AC 了 (茶) 0503 20:09
作者: Zero at 07/05/06
版主不理我了QQ
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Zero from 59.117.123.41 (中滑一番)
→ sa072686 推:抱歉@@ 最近掛網居多… 0506 23:30
作者: seanwu at 07/05/07
這是劉邦峰老師上課用的講義:
Introduction.ppt
Programming Style in C.ppt
Debugging.ppt
Greedy Method.ppt
Divide and Conquer.ptt
Dynamic programming.ppt
Graph Algorithms I.ppt / Graph Algorithms II.ppt
Search.ppt
Advanced Data Structure.ppt
Hard Problems.ppt
然後請自重,這些講義請不要任意的修改抄襲...
老師他(我也是)不希望最後在某些奇妙的場合
看到這份講義卻掛上別人的名字.....
(雖然我好像早就不知道在什麼地方看過了...
不管啦...反正我是盡我的義務就好....)
其實這份講義原本是給自己看的,不應該流出來...
但是當我把它們全部轉成pdf後卻發現裡面精彩的動畫會全爛(廢話...)
所以...想看的人請寫信跟我拿
並請注明你的真實身份(雖然我這麼發應該都認識 ︿( ̄︶ ̄)︿ ...誤)
如果想大略知道那一份投影片在講什麼,請推文,我會在推文中回覆
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ seanwu 推:http://w9.loxa.com/seanwu/Advanced_Data_Structure.mdi 0507 22:49
→ seanwu 說:這份沒動畫,來個預覽用的好了,可能不少人看過? 0507 22:50
→ chensc 推:(低調伸) 0507 22:53
→ Zero 推:好像 hil 發生過這種事情...xd 0507 23:15
→ seanwu 推:hil是啥?? 0508 12:28
→ sa072686 推:隨機客嗎? 0508 12:52
作者: seanwu at 07/05/07
http://www.cs.rmit.edu.au/AI-Search/Courseware/Slides1/
應該算很齊全的了,不過是原文
段考完再來po文記啟發式搜索吧...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/05/09
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.26 (台狼一中桑靈餓)
→ chensc 推:by seanwu 0509 12:45
→ hrs113355 推:原po 真原po 樓上 都好發 0510 17:37
→ chensc 推:我很低調,不過我很西斯(茶) 0510 23:02
→ seanwu 推:其實我比較發(茶) 0510 23:31
→ sa072686 推:我懷疑樓上和樓樓上同一人 0510 23:57
作者: seanwu at 07/05/10
完了....
我用卡N大強者學長的隨機演算法過了....|||
0.297AC 第三名...
真糟糕....
沒辦法呀...正解就一直WA嘛....
-----
正解是抓每一點做中心點往旁邊掃一圈,存下斜率
同樣斜率的就代表在一直線上,可以用bst或qsort排完後來數
是O(N*NlgN),用hash的話可以到O(N*N)
可是我一直WA....
話說...你看到這題的第一個簡單想法...應該是抓兩個點畫直線
再看看有幾個點在上面,但很不幸的,這樣是 O(N^3),過不了
但是如果有很多點在同一條線上,你只要隨便抓這條線上的任兩點就好了
並且如果這條線上點越多,它就越可能是答案....
同時,也因為這條線上的點很多....你抓中它的機率就越大...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/05/14 Mon 18:39:35
作者: seanwu at 07/05/12
格子點的範圍是 (1~99)*(1~99) 的整數座標,
現在給你一個三角形的三頂點座標(實數),
問這個三角形裡面有幾個格子點,
如果落在邊上或頂點上也算在內部。
好吧...我承我低估它了....
直接爆過所有99*99個點看有沒有落在三角形內會TLE....
<Hint>
可用垂直線由左到右掃描,計算每一條垂直線上有幾個點的方式來做
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ gloompisces 推:那樣做不會TLE,不過算面積和絕對不能用海龍 0512 23:14
→ seanwu 推:嗯?我用的是行列式來算結果爆了@@...方便伸一下code嗎? 0512 23:25
→ gloompisces 推:我有先把大概範圍算出來,像如果三個點的x坐標都<50 0512 23:34
→ gloompisces 推:我就不處理x>=50的情況了,還有如果(27,37),(27,38) 0512 23:35
→ gloompisces 推:都在三角形內,但(27,39)沒有,(27,40)以後也不可能�0512 23:36
→ seanwu 推:嗯,謝謝 0513 14:22
作者: seanwu at 07/05/13
很有趣的一題:
在一個大小固定的正方形房間(0,0)-(10,10)中,有一些牆(1~18個)
每道牆上有兩扇門,問從(0,5)走到(10,5)的最短距離是多少?
每組測資第一行為有幾道牆,接下來每行代表一道牆
每行中第一個數是牆的X座標,接下來兩組分別是兩扇門的下界和上界
(請對照例圖和Sample的第二組)
牆和門的座標皆經過排序
<Hint 請按大E>
可知最短的路徑一定是切過門邊的折線,據此做最短路徑即得
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/13
給M組人及每一組的人數,N張桌及每一桌可容納的人數
其中同組的人不能坐在同一桌上,問是否可達成,
另外,若可達成則再輸出分配方法
每組每個人各獨立的配一張桌子,
很直觀的可用max-flow,但請做pre-push (很困擾...|||)
否則會TLE...|| (因為邊數太多了)
其實以這題的特性來說不用flow
<Hint 請按大E>
Greedy,每組都配全部的桌子...是個完全圖
也就是說只要有得配就配,不管配給誰
而要保證有得配的方法就是先把人數多的配完...如果多的都配不完,
少的就更不用說了,故先排序後直接配就可以了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/14
有一塊長L寬W的草地,上面有一些灑水器,以灑水器的X座標和灑水半徑來表示,
問最少要使用幾個灑水器才能澆灌整塊草皮?
當無法達成時請輸出 -1
<Hint 請按大E>
Greedy,從左邊起,在沒有草皮被遺漏的前提之下,選擇右邊界儘量靠右的灑水器
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/14
※ 引述《Tommy (Tommy)》之銘言:
> 中文有翻譯......嗯
> 然後這很明顯就是在說 配對問題
> 題目會直接給cap[][]陣列,所以自己做個sink,source拿去flow應該就可以了
> 那這題該用哪種配對的演算法去作呢???
> 我用了 BFS 去作然後就 TLE 身亡了... XDDDDDDDDDDDDDDDDDDD
> _______________________________________________________
> 後記:
> 我第一次到學長的板發文...
> 我是雄中的學弟..嘎嘎(=.=)"
以N個點的純量二分圖配對(每條邊都是1)來說...
因為每條邊都是1且最多N組配對,所以最多流N次
每次找路徑都用DFS亂爆的話...每個點都過一次,找一條擴增路徑最多只要N^2
所以總共是O(N^3)...吧 @_@?
這邊是從共匪書《算法藝術与信息學競賽》中斷章取義出來的...
一般的max-flow中用最少邊擴增總共是O(N^5) => Dijkstra會好一些
允許邊標號的話是O(N^4)
最高標號預流(preflow)的話是O(N^3)
把這些亂七八糟的東東用在純量二分圖上,你就會得到一個O(N^2)的演算法...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/14
請輸出大小為N的Dragon Curve
要做出這種曲線,你可以拿一紙條,每次都由右往左對折,做N次
然後...原本對折是折180度,但現在一步一步打開
(注意最底下那層黏在桌面上不要動)
打開時打開90度就好,如下以N==3為例
_ _ _ _ _ _ _ _
對折1
_ _ _ _
對折2
_ _
對折3
_
打開3
_|
打開2
|_
_|
打開1
_
|_| |_
_|
<Hint 請按大E>
可用遞歸,但我覺得不太好直接寫...改成觀察由最底下邊出發,轉左右方向的規律
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:幾乎都是該共匪書的題目嘛 (茶) 0514 23:21
作者: seanwu at 07/05/17
就是這一題啦...
每一組測資是先給n,下一行是h,再下一行是F[i]共n個數,
再下一行是D[i]共n個數,最後一行是T[i]共n-1個數
///修了幾個字詞/////////////////////////////////////////////////////////
作者: sa072686 (NULL) 站內: sa072686
標題: [題目] 釣魚
時間: 2007/03/02 Fri 23:27:19
轉自「算法藝術與信息學競賽」一書 (用詞部份有稍加修改,簡 => 繁)
題目:
在一條水平路邊,有n(2 <= n <= 25)個釣魚湖,從左到右編號為1、2、3、…
佳佳有h(1 <= h <= 16)個小時的空餘時間,他希望用這些時間釣到儘量多的魚
他從湖1出發,向右走,有選擇的在一些湖邊停留一定的時間釣魚
最後在某一個湖邊結束釣魚。佳佳測出從第i個湖到第i+1個湖需要走5*T[i]分鐘的路
還測出在第i個湖邊停留,第一個5分鐘可以釣到魚F[i],以後再每釣五分鐘魚
魚量減少D[i]。為了簡化問題,佳佳假定沒有其他人釣魚
也不會有其他因素影響他釣到期望數量的魚。請寫程式求出能釣最多魚的方案
分析:
為了敘述方便,把釣5分鐘魚稱為釣一次魚。首先窮舉佳佳需要走過的湖泊數X
即假設他從湖泊1走到湖泊X,則路上花去時間T=ΣT[i] (i=1~X-1)
在這個前提下,可以認為佳佳能從一個湖「瞬間轉移」到另一個湖
即在任意一個時刻都可以從湖泊1到湖泊X中任選一個釣一次魚(想一想,為什麼?)
現在,採取貪婪策略,每次選一個魚最多的湖泊釣一次魚
對於每個湖泊來說,由於在任何時候魚的數目只和佳佳在該湖裡釣魚的次數有關
和釣魚總次數無關,所以這個策略是最優的(請讀者仔細想想)
假設一次共允許釣k次魚,那麼每次在N個湖泊中選擇魚最多的一個釣
選擇每次釣魚地點的時間複雜度為O(n),故總的時間複雜度為O(kn^2)
讀者可以嘗試用「優先佇列」來獲得一個時間複雜度為O(kn log n)的演算法
但即使用剛才講的普通方法,貪婪的時間效率和窮舉法相比已經是天壤之別了
//////////////////////////////////////////////////////////////////////
用偽heap....每次Insert直接qsort跑 1.303
改 2-heap 後為 0.334
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/17
做法還滿簡單的一題...難得volume8會有白爛題...
在棋盤方格地圖上的某些格子點座標有住人
他們要去地圖上的某個地點吃午餐,請找出一個點
使得每個人走到這個點的總距離最小
這裡的距離是block距離,就是 (X座標的差的絕對值+Y座標的差的絕對值)
<Hint 請按大E>
就中位數啊...因為太懶直接qsort還是會過的
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/05/17 Thu 17:58:28
→ seanwu 推:不過用qsort硬爆的話排名不太好...倒數了... 0517 18:02
→ sa072686 推:用 counting 在前10% (37名) 0518 19:31
→ sa072686 推:O(n) 的東西還是比 O(nlgn) 快得多啊 (茶) 0518 19:34
→ seanwu 推:嗯,地圖滿小的應該要用 0519 20:17
作者: seanwu at 07/05/17
給一個複數(a+bi),其中a,b為整數
問這個複數的最少幾次方會是一個整數(0次方不算)
且這個整數的絕對值不大於2^30,如果找不到這樣的數,
請輸出 TOO COMPLICATED
<Hint 請按大E>
暴力乘乘看就好
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:那以i-1為底求a+bi表示法那題呢…? 0518 19:13
→ seanwu 推:再說吧....這兩題無關.. 0519 20:22
作者: seanwu at 07/05/17
看題目給的圖,給你a,b,c三個實數求d
如果不合法(例如d<0或d無限大)請輸出 Poor King!
ACM_board上有些測資可用,但那種會造成浮點數誤差的不用理它
<Hint 請按大E>
就...面積比比一下嘛....我也不會講...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/17
給你一個只含有加減號的等式
加減號的位置不能移動,你只能改變數字的位置
請找出任意一組正確的解,無解則輸出no solution
<Hint 請按大E>
DFS with 2^16
注意你可以先對等式移項或其它處理,會好寫很多
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/17
Problem:
TimeString 用Excel自己做了一個解題狀況表, 100 101 102 103 104 105 ...
200 201 202 203 204 205 ...
以記錄自己解了哪些題目,當他某一題AC的時候,他 300 301 302 303 304 305 ...
400 401 402 403 404 405 ...
會把表格中的那一格標上記號。 500 501 502 503 504 505 ...
600 601 602 603 604 605 ...
就這樣,寫了多年的ACM後,就在歡樂TOI的某一 700 701 702 703 704 705 ...
天,空虛的他發現不少標記是連在一起的,但整個表格上的標記還是分裂成好幾塊。
於是,他決定再多寫一些題目,使得整個表格上的標記連成一整塊。但由於題目有難
易度的分別,他寫每一題所要花的時間也不一樣,而他希望能以最少的時間完成一統
天下的任務。現在,給你他目前答題的狀態表以及他寫每一題所需要的時間(不要問
我這個時間是怎麼出來的....),請問他最少需要多少時間來完成,並且他又該寫哪
些題目?
Input
請以http://acm.uva.es/problemset/usersnew.php?user=63069做為解題狀況,
以該題的AC率d,(1-d)^2*120分鐘做為解該題所需花的時間。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ chensc 推:= ==" 0517 23:38
→ dust 推: = ==" 0518 12:58
→ seanwu 推:什麼= =="...這是好題目耶... 0518 14:23
→ georgemouse 推:看不太懂 @@ 全部都做所花的時間不是一樣嗎? 0518 15:20
→ seanwu 推:噢,不是全部都要做,只要做部分題目讓標記連起來,例如 0518 19:53
→ seanwu 說:所附的表格只要做205,501,600,703這幾題,就會連成一塊了 0518 19:54
→ seanwu 說:^題目中 0518 19:55
→ georgemouse 推:原來如此 謝謝 0519 02:24
作者: seanwu at 07/05/18
大白爛一枚...
題目大意是說不同的系統儲存數字的時候方法不一樣,有些是先放高位元組,
有些是先放低位元組,要你把輸入給你的數字做轉換,例如:
1 2 3 4
123456789 00000111 01011011 11001101 00010101
=> 4 3 2 1
365779719 00010101 11001101 01011011 00000111
給你一個數 -2147483648≦n<2147483647 ,做這樣的轉換然後輸出。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/18
嗯...有趣的一題...共匪書有翻譯 p.308 [例題1]
地圖上有一些城市(<80),現在有兩個人A跟B分別在兩地,他們要回到城X的家去
然而走過兩個城市之間的道路需要過路費,而且B要求A要請客 (...|||)
請客的地點是在選在某個城市,在每個城市請客的價錢不一樣,然後[ ]
的B要求A請客的地點必需是A回家的路上(含A和X)最貴的那一個城市,
也就是說A回家的花費是路徑上過路費的總和,再加上路上最貴城市的價錢
現在給你地圖(一張),以及A所在的城市編號、X城的編號(會問很多次),
請計算A回家所需的最小花費是多少(對每一次問題分別輸出答案)?
(注意,這不是僅僅求最短路徑,因為它有可能通過一個花費特別高的城市,
而使總花費劇增)
<Hint 請按大E>
問題在於必需使得請客的城市路徑上最大的,因此可以窮舉每個城市當做
請客地點,為了保證這個城市是路徑上最貴的,因此把地圖中比這個城市
更貴的刪掉,這樣可以使的找出來的路徑上沒有更費的城市。
由於會有多個問題,記得先把答案存下來。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: chensc at 07/05/19
有空去看一下留社考的程設題目。
我有多一題 bonus,在最下面。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.216.249 (中滑一番)
→ sa072686 推:喔 用cs或strnc 0519 20:04
作者: seanwu at 07/05/19
給一個點光源的座標,及N個圓的座標及半徑,請求出這N個圓在直線y=0
投射出的陰影,請用一段陰影的左右兩端點x座標來表示它,並將每一段陰影
依x座標排序由左到右輸出。
(記得陰影會重疊)
<Hint 請按大E>
嗯...用幾何的方法求出每個圓在y=0上投影出的線段(我不會講...抱歉...)
把這些線段依左端點排序,由左到右掃描
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: chensc at 07/05/19
※ 引述《chensc (南一資訊99級正派陳鈧)》之銘言:
> 有空去看一下留社考的程設題目。
> 我有多一題 bonus,在最下面。
又多一題了。
這麼一來除非是強者,
不然要破台的話...
科科 XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.216.249 (中滑一番)
→ seanwu 推:那不如來10題大數如何XD 0519 22:06
→ silentvow 推: 10題苦工 //有考的都死了了.s 0519 22:30
→ chensc 推:喔,這些都是精緻的題目啊 XD 0519 22:59
→ sa072686 推:AC嘛就算了吧,BONUS我打算先翻ACM喔 0521 19:07
作者: seanwu at 07/05/20
在一塊無邊界限制的蛋糕上切了N刀,以這一刀的兩端點來表示,
每一刀一定是水平或垂直,問總共在蛋糕上切下了幾個洞?
注意它是問切下了幾個洞...不是切成幾塊...看錯題意WA了一次...
可以看看題目的例圖,由左到右分別是 2, 2, 1, 1
<Hint 請按大E>
先對題目給的切痕做離散化,以離散化後的座標建個圖
在這個圖上做BFS或flood-fill即可
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/21
簡單題
馬雅有兩種曆法,一種叫做Haab,另一種叫做Tzolkin,要你把Haab轉成Tzolkin
Haab,一年有365天,19個月,每個月有名稱
{"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol",
"chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax",
"koyab", "cumhu", "uayet"};
//幫你把字串準備好了 XD..
其中1~18月各有20天,以數字0~19表示,第19月只有5天,以0~5表示
格式為: 日期. 月份 年份 ==> 10. zac 1995
Tzolkin,有點像天干地支運作的方式,我說天干變成20個各有名稱
{"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik",
"lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib",
"caban", "eznab", "canac", "ahau"};
地支變成13個為數字 1~13,兩者同時輪,輪一圈回來後是一甲子,像這樣
1 imix, 2 ik, 3 akbal, 4 kan, 5 chicchan, 6 cimi, 7 manik, 8 lamat,
9 muluk, 10 ok, 11 chuen, 12 eb, 13 ben, 1 ix, 2 mem, 3 cib, 4 caban,
5 eznab, 6 canac, 7 ahau, and again in the next period 8 imix, 9 ik ...
格式為: 地支 天干 甲子
世界的第0天為
Haab: 0. pop 0
Tzolkin: 1 imix 0
<Hint 請按大E>
換成世界的第幾天後再轉換
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 說:噢...記得輸出項數... 0521 19:03
→ sa072686 推:有chen耶…(sc好發)還有ik XDDD 0521 19:10
→ etetet91 說:還有ik耶…科科 0524 00:03
作者: seanwu at 07/05/21
給一個字串,把這個字串圈成環形,再從某個字元當做頭打開
問從(原字串的)第幾個字元打開可以使它的字典順序最小?
如果字典順序一樣請輸出數字較小者
最長有10000字元,小心TLE,O(n^2)絕對不會過
給個大略的提示:O(n^2)的比較加上一個類似KMP的cut
==> 平均將近O(n)...吧?我是從實際比較次數估的
<Hint 原PO偷懶...明天補...而且我也得整理一下想法和證明...>
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 說:再加一個未經證明的猜測又加快了XD 0.121 46/186 0521 23:06
作者: seanwu at 07/05/22
有中譯,DP題...很幸運的瞬秒了它XD
共匪書DP的部分剛讀到一半,寫一下當做是練習DP
^^^^^^
我覺的有差...常見模型的分析,頗有用
喔...Up to Down忘記做記錄TLE了一次...
<Hint 請按大E>
因為剩下的數字一定是連續區段,從第p個到第q個數字,故共O(n^2)種
令c[p][q]為這個區段由某人X先拿,為所拿的和減掉剩下的數換對方拿的和
故窮舉X可用的拿法(從左端或右端拿一些),減掉每個拿法剩下換對方拿的值
取最大者即是c[p][q]的極大值,依此遞歸下去,並改寫成DP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:還沒看Hint…直覺告訴我是矩陣相乘? 0522 21:57
→ seanwu 推:嗯...有點像吧? 也不算是 0522 22:05
→ sa072686 推:沒洗memory結果迴圈計數給錯初始值就毀了…有洗就沒差 0522 23:13
→ sa072686 推:這樣styhihs算完成了(茶) // 接下來是喬治鼠學長耶~ 0522 23:14
作者: seanwu at 07/05/22
簡單題...
有一長方形紙,要你折出四隻紙鶴....重點在於你得從這張紙上裁下四張大小一樣的
正方形紙。現在給你N張長方形紙,問這N張紙中你可以用哪一張紙折出最大紙鶴,大
小一樣時請輸出數字小者。
<Hint 請按大E>
切四張有兩種裁法: 1*4 和 2*2
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:這題我開int wa過…後來開double就過了||| 0522 23:05
作者: seanwu at 07/05/22
給如圖中的地圖,問從上走到下有幾種走法?
<Hint 請按大E>
每一格都是一進一出...不用搜尋! 對上方的每一個起點出發走走看就好
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/05/22 Tue 23:09:37
→ seanwu 推:一行文...耶... 0522 23:10
→ sa072686 推:有跟沒有一樣嘛,圖呢? 0522 23:15
→ seanwu 推:題目裡... 0523 12:17
作者: sa072686 at 07/05/22
和去年NPSC那題好像XDDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/05/22
雖然是三天前的事了XDDD
要是再慢點po要變四天了(茶)
順便紀念今天摳了五題XDDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ silentvow 推:阿 ... 好閃 (遮) 0522 23:55
→ sa072686 推:更正,po完文後又摳了一題 (茶) 0523 12:36
→ dust 推: 啊......更閃了 (戴) 0524 16:15
作者: seanwu at 07/05/23
給有N個點M條邊的圖,現在要在保持各點連通的前提下,從圖上拿掉盡量多的邊
在拿掉這些邊後剩下的圖中,會有一個最小邊,
問這個最小邊最大可以是多少 (最小邊的值會依拿法不同而不同)
<Hint 請按大E>
可以確定拿掉盡量多的邊後剩下的圖是一棵生成樹
所以問題就變成,求生成樹使得生成樹的最小邊的值最大
"生成樹的最小邊"即生成樹中的邊都比它大,即圖中比它小的邊都不能使用
故由大到小試過所有的邊,看可否形成生成樹,而有生成樹的充要條件為
圖形是連通的。所以,由大到小加入邊直到圖形變為連通(用disjoint set)
加入的那條邊即是最小邊的可能最大值
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:什麼!!原來這題是這樣解的… 0523 23:37
→ sa072686 推:我很單純地用 Floyd-Warshall 做最長路徑再抓最小者 0523 23:38
作者: seanwu at 07/05/24
唔...題意很明顯,給有N個點,M條邊(雙向)的圖,邊上有權重
問從點S走到點T的最小成本是多少?
20000個點,50000個邊。另外測出每個點相連出的邊不超過70
嗯,聽(新紅DarkKnight板:331)說Dijkstra若用O(n^2)會TLE
<Hint 呃...>
還是Dijkstra啊...不過要用heap加速就是了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:咳…汝之Hint… 0525 12:53
→ seanwu 推:不然要說什麼= ==....這題的重點在於資結和演算法, 0525 13:09
→ seanwu 說:不是一些精彩的想法或神妙的cut,而Dijkstra+heap在任何 0525 13:10
→ seanwu 說:一本有點深度的書都找的到,網路上也有,所以我認為在這裡 0525 13:11
→ seanwu 說:沒有這個價值來研究它 0525 13:12
→ sa072686 推:我是說忘了隱藏… 0525 13:20
→ seanwu 推:沒差了,知道的原本就會,不知道的看了還是要查做法 0525 13:53
→ sa072686 推:喔XD 0525 14:33
→ seanwu 推:XD 0525 14:37
→ sa072686 推:1.094 with 9104 mem, rank 13 XDDD 0525 16:38
→ sa072686 推:話說wa了十餘次竟是因weight使用short存之 0525 19:06
→ sa072686 推:0<=w<=10000 是騙人的啊啊啊啊 0525 19:07
→ seanwu 推:樓上...最短路總合是10000*19999當然會超過啊... 0525 19:10
→ sa072686 推:單一邊的權重啦…除非又是int+short出了什麼烏龍 0525 22:03
→ seanwu 說:噢.. 0609 18:55
作者: seanwu at 07/05/25
phi(n)是說1~n中與n互質的正整數個數(1也算互質)
現在定義depthphi(n)...
phi(13)=12 ...... step 1
phi(12)=4 ...... step 2
phi(4)=2 ...... step 3
phi(2)=1 ...... step 4
要做4次才結束,所以depthphi(13) = 4
問SODF(m,n) = depthphi(m) + depthphi(m+1) +....+ depthphi(n)的總和
底下是解法
首先,我們知道當 n=(p1^x1) * (p2^x2) .... (pk^xk) ,
每個pi都是質數,xi是說幾次方,有
phi(n) = n/(p1*p2...pk) * (p1-1) * (p2-1) ... (pk-1) (1)
1.當 m = n*p ,p是質數,n是不包含p的數,有
phi(m) = (n*p)/(p1*p2...pk * p) * (p1-1) * (p2-1) ... (pk-1) * (p-1) (2)
從(2)中提出(1)
phi(m) = phi(n) * (p/p) * (p-1) (2.1)
= phi(n) * (p-1)
2.當 m = n*p ,p是質數,n是包含p的數,有
phi(m) = (n*p)/(p1*p2...pk) * (p1-1) * (p2-1) ... (pk-1) (3)
從(3)中提出(1)
phi(m) = phi(n) * p (3.1)
解法:
1.先用篩法,做出每個n含有的質數p (任意一個)
2.再由(2.1),(3.1)做DP,n = m/p,先檢查n是否可以被p整除,再決定要用哪一個
3.接著depthphi(n) = depthphi(phi(n))+1
4.做F(n) = F(n-1) + depthphi(n)
令SODF(m,n) = F(n) - F(m-1),即得
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:在站之下 0526 11:25
作者: seanwu at 07/05/26
給你一個圖,和數個問題問你任兩點之間的次短路徑
次短路徑的長度要「大於」最短路徑的長度才算
而且邊或點都可以重覆走
AC了但想法...還不是很清楚,底下先給幾組嚴格一點的測資
Input----
4 4
0 1 1
0 2 1
1 3 1
2 3 1
3
0 3
0 1
0 0
4 3
0 1 2
0 3 1
2 3 2
3
0 2
1 3
0 1
Output---
Set #1
4
3
2
Set #2
5
5
4
---------
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:腦殘了一下漏了給新連通兩點設定不重覆次短路徑 0526 15:55
作者: sa072686 at 07/05/26
An N-based number R is divisible by (N-1) if and
only if the sum of its digits is divisible by (N-1)
這是討論板寫的…不過不知道為什麼
大意是以n為底之數整除n-1的條件為僅當各位數字之和整除n-1之時
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:是整除,還整除以?? 0526 12:25
→ sa072686 推:啊不然你看原文嘛 囧rz 0526 14:00
→ gloompisces 推:要判斷一個整數是不是9的倍數,只要看他的各位數字和 0526 14:53
→ gloompisces 說:是不是9的倍數就好了 0526 14:54
→ sa072686 推:對呀…不過推廣到所有進位制的話… 0526 15:00
→ gloompisces 推:你可以試著證明為什麼對十進位可以這樣用 0526 15:06
→ sa072686 推:還是不知道…囧 0527 11:24
作者: sa072686 at 07/05/26
AC了,0.146sec,25名
據某s姓學弟說要用兩次warshall,我是只用一次啦囧
就談一下我的方法好了,學弟的就自己po吧XDDD
首先抓不重覆走的最短路徑和次短路徑
再拿最短路徑上所有點去重覆走看看
已知走出去後繞一圈再回來不會比較好,反正是雙向道路
所以一定可以直接回來,這是最佳策略,故取路上所有點
出去回來最短者為最佳,此為必重覆走之最短路徑
比較不重覆走與必重覆走之次短路徑即可
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:註:若有兩條以上相同之不重覆最短路徑,取必重覆最佳者 0526 15:54
作者: gloompisces at 07/05/27
※ 引述《sa072686 (sa~*)》之銘言:
> An N-based number R is divisible by (N-1) if and
> only if the sum of its digits is divisible by (N-1)
> 這是討論板寫的…不過不知道為什麼
> 大意是以n為底之數整除n-1的條件為僅當各位數字之和整除n-1之時
先討論十進制的情況
要怎麼判斷60是不是9的倍數呢?
注意 10≡1 (mod 9)
所以60 = 6*10 ≡ 6 (mod 9)
至於更高位數則利用 1 ≡ 10 ≡ 100 ≡ 1000 ...... (mod 9)
例如 2147483647 = 2*1000000000 + 1*100000000 + 4*10000000 + ... + 4*10 + 7
≡ 2*1 + 1*1 + 4*1 + ...... + 4*1 + 7
= 2 + 1 + 4 + 7 + 4 + 8 + 3 + 6 + 4 + 7 (mod 9)
( 因為1000000000 ≡ 100000000 ≡ ...... ≡ 10 ≡ 1 (mod 9) )
所以對於10進位的整數,判斷是否是9的倍數
只要把各個數字加起來以後,看和是不是9的倍數就好了
至於N進位也是一樣,因為 1 ≡ N ≡ N^2 ≡ N^3 ..... (mod N-1)
所以可以用和上面一樣的方法證明
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.34 (不失敗大學)
→ sa072686 推:三條線那個符號是? 0527 17:32
→ seanwu 推:同餘..是說mod x的值一樣 0527 17:57
作者: seanwu at 07/05/31
Lucky貓有中譯,這裡就不再多說了...
<Hint PageDown>
首先,先找出遞迴關係式,令計算f(n)所需呼叫的次數為c(n),
則因為計算f(n)時需計算f(n-1),f(n-2),還有自己被叫用也算一次,故有
c(n) = c(n-1)+c(n-2)+1
基本上如果數字小直接DP就可以了,但是這題的n可以到2^63-1,所以你會需要一個
O(logN)的算法。回憶一下以O(logN)計算費氏數列的方法,我們使用了一個矩陣,計算它
的n次方來求f(n),而且計算一個矩陣的n次方可以用Divide來做在O(logN)的時間算出。
(說明一下...我忘記矩陣是列乘行還是行乘列了orz...如果相反了不要計較....)
現在我們考慮底下這個矩陣:
┌ 1 1 1 ┐
X = │ 1 0 0 │
└ 0 0 1 ┘
當某個矩陣被乘上它時,比方說是:
┌ A 0 0 ┐ ┌ 1 1 1 ┐ ┌ A+B+1 0 0 ┐
│ B 0 0 │ * │ 1 0 0 │ = │ A 0 0 │
└ 1 0 0 ┘ └ 0 0 1 ┘ └ 1 0 0 ┘
或者說把A,B換成c(n),c(n-1)
┌ c(n) 0 0 ┐ ┌ 1 1 1 ┐ ┌ c(n)+c(n-1)+1 1 0 ┐ ┌ c(n+1) 0 0 ┐
│ c(n-1) 0 0 │ * │ 1 0 0 │ = │ c(n) 0 0 │ = │ c(n) 0 0 │
└ 1 0 0 ┘ └ 0 0 1 ┘ └ 1 0 0 ┘ └ 1 0 0 ┘
於是,我們可以用這個矩陣X來計算c(n),我們先計算X^(n-1),最後再乘在
┌ 1 0 0 ┐
Ans =│ 1 0 0 │* ( X^(n-1) )
└ 1 0 0 ┘
矩陣Ans[0][0]的值就是c(n)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/31
最小樹形圖,你可以把它視為有向圖上的最小生成樹
在有向圖上尋找一MST,Prim或Kruskal將不適用,因為當你選了某個邊後,
有可能導致圖形部分不連通,使greedy的做法失敗。
底下說明找最小樹形圖的演算法:
1.對圖上的每個點i,找出指入它的最小邊in[i],當做連回樹中的父節點的邊。
2.如果所有的最小邊沒有形成環圈,則目前找到的樹就是最小樹。
3.如果有環圈,那麼把這個環圈收縮成一個點new,且等價於原來的圖。
方法是對於每一條指入環圈中任一點v的邊<u,v>,改成指向收縮成的新點new,
並把這個邊的值減去in[v]值。從環圈中指出的邊<u,v>改為從新點new指出,值不變。
指入環圈的邊: <u,v>,(w) ==> <u,new>,(w-in[v])
指出環圈的邊: <u,v>,(w) ==> <new,v>,(w)
4.縮掉環圈後,回到1.繼續,可能又出現環圈,就繼續重做縮圈直到沒圈為止。
底下我的實作方法是給沒有固定樹根的。如果想要固定樹根,就把所有指入根的邊拿
掉,這樣它就非得是樹根不可了。
0.初始化每個點的set[i]=i表它屬於哪個環圈集合,exist[i]=1表它存在否。
set[i]=i是將一開始的每個點視為一個獨立的環圈。
1.設每個點入邊in[i]=∞,並設最小入邊來源pre[i]=i,即假設為一個只含自己的環。
掃過所有的邊<u,v>,(w),來尋找每個點的最小入邊。如果v還沒有入邊或者w<in[v],
就更新它,並來源點設為pre[v]=u。
2.檢查每個點的in[i],如果超過一個點的in[i]==∞,這是說沒有邊可以指入它,意即
必須有超過一個的樹根,即最小樹形圖不存在。
計算每個點的out-degree,這可以用對每個點pre[i]的out-degree++來達成
3.將每個點的cycle[i]初始化為1,用來表示它是否在環圈中。掃過每個點,
如果有out-degree==0的點,它一定不屬於圈,把它設為非環圈cycle[i]=0
4.掃過每個點,如果它cycle[i]==1則往它的pre回溯每個點p,把這些點的set[p]
設為i代表屬於i這個圈(當然,已做過被抓進set[i]的點就不要重覆做了)。
5.掃過每條邊<u,v>,w,如果這條邊set[u]==set[v]表示它該被縮進一個點中,
就不要再管這個邊了。否則把這條邊的w,w=w-in[v],減掉進入點的入邊值,
並重設u=set[u],v=set[v],為了將環圈縮成一個點後重邊要重新指向。
6.檢查所有的點如果set[i]!=i,就表示它被縮到環圈裡面,把它的exist[i]=0清除它,
回到1.繼續。
底下是虛擬碼:
//virtual-code for directed-MST without decided root
//input : a directed-graph (by a set of edge)
//output: the cost of the directed-MST
sum = 0
for each vertex v
v.set := v
v.exist := true
do
for each exist vertex v
v.pre := i
v.in := ∞
for each edge e <u,v>,w
if w < v.in then
v.in := w
v.pre := v
if there are more than one vertex's v.in = ∞ then
no solution
for each exist vertex v
if v.cycle = true and v.out-degree = 0 then
do backtracing to its pre-vertex
v.out-degree := v.out-degree - 1
v.cycle := false
until v.out-degree != 0
for each exist vertex v
if v.cycle = true and v.set = v then
// "v.set = v" makes others vertex in
// the same cycle will not be found again
do backtracing to its pre-vertex to find all vertex t in the cycle
t.set := i
//that is. if a vertex has been found, its set would not be same
//as its index. next time when the vertex be scan, this "v.set = v"
//will check it for sure.
sum := sum + t.in
//these vertex will be contract, you shold add their cost
if cycle_count = 1 then
it has been a directed-MST, don't forget to add the cost of each
in-edge in this tree.
for each edge e <u,v>,w
if u.set = v.set then
delete the edge
//to delete the edge in an array, you may exchange the egde with
//the last edge, and delete the last one
otherwise
if v.cycle = true then
w := w - v.in
u = u.set
v = v.set
for each exist vertex v
if v.set != v then
v.exist = false
until done
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/05/31
嗯,Lucky貓有翻譯。
簡單的說...或者說一看就知道是類似MST的東西...然後還有方向性...
就是最小樹形圖啦...
Hint? 沒有,有了也沒用...
後話,樹形圖真是一種有趣的東西...即使你學了半天學會了,也只能寫11183這題...
ACM好像也沒有別題了...比賽也不太可能出現...專考這種畸形的演算法會被揍吧...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/01
題目:
在格子座標系上,一開始的位置在(0,0),現在每一步都只能往右上或右下走,
走到(2n,0),且這條路徑上必須恰有r座高度為k的「山」(有其它高度的山無妨,
只有其中剛好有r座高度為k的就可以),問有幾種走法?
「山」的定義:有點(x,y)、(x-1,y-1)、(x+1,y-1),其中(x,y)即是一座高度為y的山
輸入為三個數 n,r,k
Sample Input: Sample Output:
3 1 2 2
這2種分別為
1. 2.
▕ ▕
▕ ▕
▕ ╱╲ ▕ ╱╲
▕ ╱ ╲ ▕ ╱ ╲
▕╱╲╱ ╲ ▕╱ ╲╱╲
0 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄n2 ̄ ̄ 0 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄n2 ̄ ̄
<Hint E>
DP with O(N^3),狀態為:d[x,y,a,{up,down}]
表示由(0,0)到(x,y)有a座山,前一步是往{up,down}走的路徑數
<Solution PageDown>
DP with O(N^3),狀態為:d[x,y,a] 表示由(0,0)到(x,y)有a座山的路徑數
初使所有d為0
d[0,0,0,1] = 1
對每個d
d[x,y,a,up] = d[x-1,y-1,a,up] + d[x-1,y-1,a,down]
d[x,y,a,down] =
if(y+1==k) {
d[x-1,y+1,a-1,up] + d[x-1,y+1,a,down]
}else {
d[x-1,y+1,a,up] + d[x-1,y+1,a,down]
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.30 (台狼一中桑靈餓)
作者: seanwu at 07/06/01
題目:
假設我們要將一個圖的頂點著色,相鄰的頂點顏色不可以相同。
而我們使用一種greedy的著色方法,它需要先給定一個塗頂點的順序,依照這個順序
選擇每個頂點的顏色,選的是可以塗的顏色中編號最小的那一個。
這樣的塗色方法不一定是最佳的,它可能會需要K種顏色才有辦法塗完。
現在,反過來給你K,請你輸出一個圖和塗色順序,而它至少要花K種顏色才能塗完。
符合下面這些限制的圖都可以:
1.每個頂點最多有K-1條邊
2.最多只能有N=2^(K-1)個點
3.頂點請編號為1..N
請先輸出這個圖有N個點M條邊,再來是M條邊以兩端點表示,最後一行輸出著色順序。
<Hint E>
遞歸倒推,假設要塗顏色X,在塗它之前必須先有相鄰的點
分別為1..X-1,接著才有可能塗到X,故分別建立這些點,再遞歸下去
建出來後你會發現是棵二項式樹,恰好有2^(K-1)個點
至於塗色順序只要把遞歸倒回來就可以了
最後,你可能會看出編號之間的規律,可以直接用兩層迴圈解決掉它
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ DJWS 推:提示的部份應該是兩個迴圈 而非兩層迴圈 :) 0531 22:21
→ DJWS 推:這一題的題意似乎不是你說的這樣複雜...我用K-1條邊就解決了 0531 22:26
作者: sa072686 at 07/06/02
圓滿完成 (笑)
不過跑得好累,而且…
看著學弟一次又一次地wa(應該不少人有破十次)真是不知道該哭該笑
該哭的是「哎呀…怎麼又錯了呢?都錯好多遍了」
該笑的是「弗弗弗…該踩的陷阱都踩了」
但是所有的心機幾乎都有人中,真是成功的測資 (茶)
第三題submit過的人中不到30%是全對的吧…嘿嘿嘿,本考最心機
第四題一堆人扣最小值時都扣負數,嘿嘿嘿…
總之,真是成功。唯一的遺憾是第二題
「題目明講了,答案必在signed int的範圍內嘛…可是運算過程呢?嘿嘿…」
「不行啦,那可是送分題呢!」
就沒放了這樣…好想放啊 (打滾)
然後第八題的測資,sample output壞掉了這樣
而且第二組input其實應該修掉…
第八題的敘述、第十題的講解應該要再明白一點
算是瑕玼蠻多的XDrz
不過…大部份測資都相當精緻啊(茶)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:哩金心機! 0602 21:46
→ seanwu 推:XD 0602 21:49
→ dust 推: 哩金心機! XDD 0602 21:50
→ sa072686 推:那是測資精緻好嗎XD 並且能夠準確地測出正確與否這樣 0602 22:00
→ seanwu 推:[ ]....明明就只是比細心(機)而已.... 0602 22:11
→ gloompisces 推:樓上似乎感受頗深 0602 23:29
→ sa072686 推:因為樓上上也被心機到了(茶) 沒關係 大家都有份很公平 0603 01:40
→ zenixls2 推:我最不會做心機題了...因為要花很久時間debug還不一定AC 0603 12:29
→ sa072686 推:這樣很容易被心機的啊…不過沒關係,ACM寫多會自然免疫 0603 12:43
→ seanwu 推:[ ],ACM的題目一般(嗯,一般)來說都會寫的夠清楚吧... 0603 14:01
→ sa072686 推:我承認我表達能力不好 XD 不過這邊的題目有修過 0603 14:28
→ sa072686 推:如果還是不清楚再講,我再修XD 0603 14:28
→ seanwu 推:其實也還好...可能是故事太長就腦殘了吧,大概... 0603 17:34
→ sa072686 推:要寫那麼長也是很累的XD 0603 17:44
作者: seanwu at 07/06/02
計算機使用7條LED燈用暗或亮的方式來顯示數字,但實際上你會發現根本不需要
這麼多,即使壞掉數條你還是能區分0~9的數字,要使每個數字都不一樣,最多還可以
壞2條,你只需要其中的5條就夠了。
現在,某種機器有p條LED燈,n種顯示狀態,問你最少需要多少條,才能正確的分出
這n種狀態?
這題不會太難,不要想太多....我想了5天怎麼用flow來達到O(Poly~).....
(結果還是失敗= =....似乎不行?)
<Hint E>
用DFS爆過所有的好邊組合就好了...另外,我用位元運算加速,也比
較好寫,還有一個小cut就是當目前的好邊數已大於最小好邊數就cut
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ DarkKnight 推:我想都沒想就直接暴力了@ @ 0604 22:34
→ seanwu 推:嗯...暴力美學... 0604 22:40
作者: sa072686 at 07/06/03
請到 http://jor.orez.us
感謝大強者傑洛 >///<
外校的或當天沒空來的可以寫寫看
不過第八題目前測資從缺中,等我自己寫完它我再重生測資放上去
另外晚點會將AC的Code公佈在板上並附註解及想法
不過至於使用其它方法的版本就…再說吧XDDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/06/04
很糟的數學題@@...借一下卡恩的翻譯
有n個小方塊,把它們排起來使得:
1.每個小方塊之間以邊相鄰
2.同一橫列中的方塊是連續的
3.組合起來的圖形是連通的(一整塊)
可以看看原題目附的圖。另外,n(1<=n<=1000000000).....
所以數字會很大...輸出未四位就好了
(好吧,我承認我解不出來orz,今天一整個下午在跟同學討論,
最後是在討論板爬到的,那條遞回式真的很機....
不過有了遞回式再回頭想原因就....呃,稍微好一些)
<Hint PageDown>
遞回式: c[n] = c[n-1]*4 + c[n-2]*(-3) + Σc[1..(n-3)]
你看,我就說很畸形吧...
有了遞回式一切就好辦了,寫成矩陣變下面這樣:
| 1 0 0 | | 4 -3 1 | ^ (n-3)
| 2 0 0 | * | 1 0 0 |
| 6 0 0 | | 0 1 1 |
嗯...請仔細體會一下這個距陣進行了什麼動作(跟原遞回式等價)
然後再用O(logN)的時間算出它吧
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/05
最近的新題 (話說這題解的人數6/7,那個1就是我..T^T)
先WA了幾次,然後這題是黃勾,並且有辦法自己判斷答案是對還是錯,
所以我把判斷的這段加入code裡,如果答案是錯就讓它RTE
可是...出來的結果還是WA...(意思是說依我的想法code沒寫錯)
所以我想確認一下我對題目的理解有沒有錯:
要為W,J各找一條路徑,路徑上沒有重覆的點,且這兩條路徑除了最後一點要共點之外,
沒有重疊的點。只要符合這樣條件的路徑都可以,沒有限制要最短。
另外圖的邊是雙向的,W,J不相等。
或者解法正不正確 <PageDown>
<我把想法修掉了,因為那是對的而且AC了>
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/06/05 Tue 20:17:54
▲ seanwu 改@2007/06/05 Tue 20:18:15
→ seanwu 推:糟了...我現在開始無法確定它是不是要求最短的了.... 0605 20:21
→ seanwu 推:喔 s**t!....真的是要找最小的.... 0605 20:26
→ seanwu 說:白白耗了一個下午 = =.... 0605 20:28
▲ seanwu 改@2007/06/05 Tue 20:28:58
作者: seanwu at 07/06/05
有兩個人W和J,他們想要儘快見面(所以如果情況允許的話路徑要儘量短),
他們各自沿著一條路徑走到一個城市見面,但路徑有些條件:
1.每個人走的點不能重覆
2.兩個人走的路徑不能有重疊的點 (最後碰面的那點除外)
3.兩個人走的路徑要一樣長
給你一個圖有n個點,m條邊 (0<n<201, 0<m<3n/2),每條邊的權重1<=d<=10
W,J起始的城市不會相同,圖形是連通的且保証有解
<Hint E>
因為圖形很稀疏,所以用DFS直接從W走到J,一邊記錄由W走到路徑上
各點i的距離dis[i],走到J後看dis[J]是否為偶數,如果是則檢查路徑上
有沒有點X使dis[X]==dis[i]/2,如果有,則W->X,J->X即為所求。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/11/26 Mon 14:58:20
作者: seanwu at 07/06/07
給你一個上面標有一些'X'的棋盤,請你在棋盤上擺皇后,
問最少要用幾隻皇后才能攻擊到所有的'X'?
棋盤n*m,1<n,m<10
(皇后沒有限定要擺在'X'上,任何地方都可以擺,也沒有規定不能互相攻擊)
時間限制: 20秒
<Sol pagedown>
暴搜,但如果做得太爛還是有可能會TLE
我的沒有加任何神奇的cut (希望有,或者greedy的,或用IDA*不知道行不行)
我用限深的DFS加上一些細部的優化
限深DFS是說限制每次搜索的深度(放置的棋數),如果找到解就是最佳解,
如果找不到,則將深度+1後再重做一次。
看起來似乎會重覆做很多工作(實際上也是),但因為每次拓展的節點很多,
所以之前所做過的總工作量跟這一回做的比起來,是微不足道的,這使得限深發生效力。
細部的優化,比方說每次判斷攻擊,是很花時間的,不如一開始先建個表來記錄兩點
間會不會互相攻擊。另外,我一開始直接把座標(x,y)換成(x*m+y),比較快也好寫。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ DarkKnight 推:搜四層就好 四層搜不到就輸出 5 0607 21:12
→ seanwu 推:啊對....差點忘了...||| 0607 22:05
→ seanwu 說:嗯...快了大約1秒左右,可見這種測資並不多. 0607 22:07
作者: seanwu at 07/06/07
現在有一個圖,你要將這個圖以不超過四種顏色上色,相鄰的兩塊區域之間不能同色
每種顏色以一個數值代表,你必須使得任兩相鄰區域數值差平方的總合最大
給n,m,c1~c4表n個區域,及c1~c4四種顏色,底下m列每列兩個數表此兩區域相鄰
(n<=20,答案不會超過signed-int)
<Hint pagedown>
DFS with(4^n) 暴搜,但要邊搜邊算總和,否則疑似會TLE
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:非疑似也,乃必然也 // 吾已身受其害… 0607 19:39
作者: seanwu at 07/06/07
簡單題
現在有9個人,還有一些把3個人分成一組的分法,以及這個分法可以得到的分數
問把這9個人分成3組(一組3人)可以得到的總分最高是多少?
如果分不出來請輸出 -1
<Sol PageDown>
用三層迴圈選三種分法,看是否這三組裡面9個人都出現,
如果是則可以分,然後記錄最大值
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: sa072686 at 07/06/07
麻將耶XDDD
這不是一行文~ 這不是一行文~
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:題目中還夾雜著簡中的「麻將」 真有趣XD 0607 20:10
→ seanwu 推:ACM一般來說是紙牌,換劉汝佳出題就變這樣了...orz 0607 22:11
→ seanwu 說:喔耶! 我看到 發發發 了... 0607 22:32
→ Tommy 推:嗯~發 0608 17:57
→ chensc 推:劉魯卡。XD 0608 18:36
作者: seanwu at 07/06/09
Lucky貓有中譯
看完題目就直接用O((n^2)*m)的DP爆下去...
結果好慢...||
差點就要TLE了,名次目前是倒數第2
應該有更好的DP...吧? (廢話...)
<Sol pagedown>
DP為:dp[i][j]表在第j天走到第i個營地的解
將起點視為dp[0][0],終點為dp[n+1][m+1]
則dp[i][j]為min{ 所有k<=i的營 max{在j-1天走到的解,從k走到i的路徑長} }
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/06/09 Sat 11:32:24
→ DarkKnight 推:DP 可以到 O(nm),用 Binary Search 最快 0609 13:15
→ DarkKnight 說:參考二階第二次第一題 0609 13:16
→ seanwu 推:二階第二次第一題是...遮陽傘那題嗎?...還是不會寫..(炸) 0609 19:07
作者: DarkKnight at 07/06/09
忘了講
其實只要寫簡單的 BFS 就可以過了
XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DarkKnight from 140.122.61.81 (台灣痴漢大學)
→ seanwu 推:(炸) 圖形還滿稀的,倒是可以... 0609 18:54
→ seanwu 說:啊...故鄉亮亮的.... 0609 18:55
→ Tommy 推:可是當初DK叫我BFS和Dijkstra都寫= = 0610 10:49
→ seanwu 推:...XD 0610 12:06
→ seanwu 推:噢...一樓是在推什麼東西啊 0612 23:01
→ seanwu 說:這題的圖形根本沒有一定的密度差別啊....(腦殘...) 0612 23:02
作者: seanwu at 07/06/09
某博物館有1<=N<=1000個房間,每個房間以通道相連,
並且任兩個房間之間只有唯一一條"路徑"可到達對方
現在要在數個房間設置逃生出口,但必須:
1. 若此房間沒有出口,則與此房間相鄰(以通道直接連接)的房間中至少有一個有出口
2. 任一通道之兩端至少有一個出口
問最少要設置幾個逃生出口?
<Sol pagedown>
其實條件1.已經包含在2.裡面了,所以不用管它
由於兩房間之間只有一條通路,所以這個圖其實是一棵樹
現在隨便找個點當樹根,求各點到樹根的距離,利用此距離是奇是偶,
可以將這棵樹的點分為奇點或偶點
"奇點只和偶點相連,偶點只和奇點相連" ==> 得到一個二分圖
另外我們要使"每個邊上至少取一點"做逃生出口,故這個問題轉化為
此二分圖的最小覆蓋數 (每邊上至少有一個點,總共最少幾個點?)
可以搜尋一下最小覆蓋數或者等我PO下一篇...可以證得
二分圖最小覆蓋數 == 二分圖最大匹配數
但匹配用的flow得做的有效率,到 O(N^2)
匹配圖是單位容量網路 ==> 用增廣路最多流O(N)次
用相鄰串列表示法 ==> 用DFS找一條增廣路花費O(N)
==> 總共是O(N^2)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 推:用DP還是做不出來 (弱~ = =) 0609 23:31
→ seanwu 說:用DP不知道是多少,我猜還是O(N^2),但會比較快 0609 23:32
→ seanwu 推:噢,忘了心機測資 n=1 0610 13:30
→ seanwu 推:補一下,用DFS找增廣路花費O(N)是因為原圖是一棵樹 0610 17:24
作者: seanwu at 07/06/10
二分圖的最小覆蓋數:
在這個圖中找一個點集,要讓這個圖中的每條邊都至少有一點屬於這個點集,
問這個點集最少需含有幾個點?
底下是共匪書的證明:
二分圖的最小覆蓋數等於最大匹配數
proof: 令最大匹配數是M、該點集是V則:
1. M是足夠的,若有一條邊e兩端點皆不屬於V則e是一個新的匹配邊,矛盾。
2. M是必須的,因所有匹配邊的兩端點皆不共點,故至少需M點。
說明一下好了,不然共匪書寫得有點奧義...:
1. 如果有一條邊兩端點皆不屬於V,則這條邊的兩端點皆沒有被覆蓋到,即
這條邊的兩端點是空著的,於是你可以把這條邊的兩端點變成一個新的匹配,
得到了一個更大的匹配,但這麼一來就會和原先"最大"匹配的定義矛盾了,
故不可能有一條邊兩端點皆不屬於V,也就是M就夠了。
2. 現在我們有了一個最大匹配邊集,如果我們從這個邊集中拿掉一個邊e,則因為
所有的匹配邊之間沒有共點,e的兩端不會被其它的匹配邊覆蓋到,故e這個邊
就不符合問題的要求了(每條邊都至少有一點被覆蓋到),所以我們無法從匹配
集中拿掉任何一個邊,所以至少需要M個。
//就這樣...希望寫得還算清楚...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/10
Lucky貓有中譯
<Hint E>
DFS,每一步都往前檢查有沒有出現triple
真是夠了...亂爆亂寫一副要TLE的樣子結果一傳就第5名了...||
補一下測資
30 ******************************
Case 1: 230800
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ silentvow 推:好閃 XD 0610 14:45
→ seanwu 推:是很扯...真的是亂寫...(一時還忘記要怎麼只取組合...|||) 0610 14:52
▲ seanwu 改@2007/06/10 Sun 14:53:00
→ seanwu 推:等一下...我一直到今天才發現()那一段是腦殘推錯的...(炸) 0612 22:59
→ seanwu 說:那是別題...很簡單的輸出排列的題目...|| 0612 23:00
作者: seanwu at 07/06/12
在方格地圖上,有一隻松鼠(以'L'表示),還有一些松果(以'#'表示)
問這隻松鼠從起點L出發,收集完所有松果後再回到起點,所走的路徑最短是多少?
另外,牠可以直、橫、斜著走。
<Hint E>
很標準的TSP問題,但用DFS with O(N!)會爆(應該,沒爆就是測資太弱..)
需使用DP with O((N^2)*(2^N))
~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/12
最小漢米頓圈,又稱旅行商問題(Traveling Salesman Problem):
給一個圖,從某一起點出發後,經過所有的點再回到起點。除了起點以外,走過
的點不能重覆走。符合這樣條件的路徑中,求花費最小的路徑?
這個問題是NP。
一種解法是用DFS試過所有可能是路徑組合,這麼一來是O(N!),一般來說在N不算太
大的時候還算可以接受,但比方說當N=20時,大概就不太好了。
但另一種方法使用了DP,雖然仍是指數時間複雜度O((N^2) * (2^N)),但跟暴力做法
比起來已經好太多了。首先,我們設起點為s,將DP狀態表示為:
dp[x][U] 表示由點x出發,遍歷所有在點集合U內的點,再走到s的最小花費
則有遞迴關係為:
dp[x][U] = min{ dis[x][i] + dp[i][U-i] } (i為任一屬於U的點)
即表示:(由x過U再到s的花費)
= (由x到U中的某一點i,再從i走過U剩下的點,最後走到s的最小花費)
直接用Up-to-down的方式感覺比較好寫,而且也不慢,在1.8G上跑N=22大約17sec
最後,還是要視題目情況使用DFS或DP,我實測在N<=10下DFS比較快。
Problem list: 216(DFS) 10944(DP)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/13
數學味很重的題目...但不是數學題(好啦...有那麼一點點不是..)
給你n,求出一個由0~(n-1)組成的排列c[],
並且沒有任何的i<j<k會使c[i],c[j],c[k]呈等差
<sol pagedown>
這是我的做法....當然可能有不同的方法,如果方法不同歡迎提供
先初使化c[i] = i,接下來做遞歸:
對於區間[a,b]將c[a]~c[b]重排為
(c[a+1],c[a+3],c[a+5]...),c[a],(c[a+2],c[a+4],c[a+6]...)
再分別對兩邊括號內部分做遞歸
看一下實際的例子N=6:
0 1 2 3 4 5
0 1 2 3 4 5
1 3 5 0 2 4
1 3 5 0 2 4
1 3 5 0 2 4
3 1 5 0 2 4
3 1 5 0 2 4
3 1 5 0 2 4
3 1 5 0 4 2
3 1 5 0 2 4
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/06/13 Wed 18:24:25
作者: seanwu at 07/06/15
這題Lucky貓有中譯
<Hint E>
DP with O(KN)
<Sol pagedown>
先: k=k+8....這樣比較清楚
題目要求的是A<=B<=C,且(A-B)^2和要最小
可知A,B一定是兩根相鄰的筷子,不相鄰一定不是最佳解
所以變成我們要選出k對相鄰的AB,並且在每一對之後(比它大的)都至少要有一支C
因為還得保證在接下來的序列中還得找得到C,由小到大正著做變得比較複雜
所以我們先將input反過來排列為a[],變成由大到小,然後由大到小的找C,B,A
DP的狀態dp[i][j]則為:
第i個人,可以使用到編號從1到j支的筷子,的最佳解
dp[i][j] = (a[j]-a[j-1])^2 + dp[i-1][j-2]
以j當A,j-1當B的成本 拿j-1當B,則第i-1個人的A只能拿到(j-2)
因為每個人拿三支,要保證B,A之前還有C,只要j>=i*3就可以了,
於是dp[i][j]從j=i*3開始計算,dp[i][i*3] = (成本) + dp[i-1][i*3-2]
最後,dp[1000][5000]會MLE,請開兩排陣列dp[2][5000]交替使用
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/15
(懶了...借一下卡恩的翻譯)
你有n種顏色的彈珠(n<=4),你想要將它們排成一列。
相鄰的同色彈珠被歸類於同一個群組,每一組彈珠可以包含1~3顆彈珠。
相鄰的彈珠群組其顏色、個數都不一樣,而且第一組和最後一組顏色和個數也都不同。
給定 n以及 n種顏色的彈珠個數,請問有多少種排列方法?
最多有3000個 Input,每組測資當中的每種顏色的彈珠個數介於0~7之間。
<Sol pagedown>
DP,但狀態有點可怕...
int dp[c1][c2][c3][c4][h][p][t][q];
c1~c4分別為顏色1~4的彈珠各用了幾個
h為排列中第一個群組的顏色,p為其長度
t為排列中最後一個群組的顏色,q為其長度
則有遞迴關係: (抱歉寫得這麼複雜,可是我很難說得明白...直接看應該比較容易懂)
t=1 : dp[c1][c2][c3][c4] =
if(c1>=q) sum{ dp[c1-q][c2][c3][c4][h][p][x][y] | x=(1~4)!=t, y=(1~3)!=q }
else 0
t=2: dp[c1][c2][c3][c4] =
if(c2>=q) sum{ dp[c1][c2-q][c3][c4][h][p][x][y] | x=(1~4)!=t, y=(1~3)!=q }
else 0
t=3: dp[c1][c2][c3][c4] =
if(c3>=q) sum{ dp[c1][c2][c3-q][c4][h][p][x][y] | x=(1~4)!=t, y=(1~3)!=q }
else 0
t=4: dp[c1][c2][c3][c4] =
if(c4>=q) sum{ dp[c1][c2][c3][c4-q][h][p][x][y] | x=(1~4)!=t, y=(1~3)!=q }
else 0
另外當c1~c4中只有一個cx不是0時:
if(x==h==t && cx==p==q) dp[...] = 1
else dp[...] = 0
這樣,求出來的是任何以指定的彈珠數排成的排列,以及它們所擁有的頭尾
於是對於 Input c1,c2,c3,c4,答案為所有以這些彈珠排成且頭尾顏色及數目皆不相等者
sum{ dp[c1][c2][c3][c4][x1][y1][x2][y2] | x1,x2=1~4 y1,y2=1~3 x1!=x2 y1!=y2 }
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/16
作者 tmt514 (tomato) 看板 EverydayACM
183 Bit Maps
由 0和1組成的二維圖片,有兩種表示方法
"B"代表由上至下,由左而右的把每個bit顯示出來;
"D"的表示方法則很類似四分樹,若某個範圍內都是0或1則只要輸出0或1,
否則輸出D,然後把圖片平均分成四個區域,以同樣方法處理之。
給你某一種表示法,請轉換成另一種。
※輸出格式與輸入格式必須相同!
───────────────────────────────────────
輸入時一個圖會含有多行,每行50個字元(最後一行若沒補滿則例外)
注意輸出時每行50個字元,超過必須換行(最後一行例外)
寬高兩個數字的長度各為4
還有分割時,邊長若是奇數:
3 4 5 5 1 5 1 1 4 6
■■□□ ■■■□□ ■■■□□ ■ ■■■□□□
■■□□ ■■■□□ ■■■□□□
□□■■ ■■■□□ □□□■■■
□□□■■ □□□■■■ ....等
□□□■■
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/16
給一個 N*N的棋盤,上面 W代表白子,B代表黑子,U代表空格
如果白棋可以從左邊連到右邊,則白棋勝
如果點棋可以從上邊連到下邊,則黑棋勝
另外,如果白棋(或黑棋)再下一子就能獲勝,輸出這種情況
只有空格才能下子
輸出的順序為:白勝、黑勝、白下一子後勝、黑下一子後勝、以上皆非
(題外話:快要跟不上卡恩po文的速度了ˊˋ)
<Sol pagedown>
用flood-fill
從左邊開始把 W填成 L,在右邊檢查有沒有 L(白勝),若無則從右邊找 W填成 R
從上邊開始把 B填成 T,在下邊檢查有沒有 T(黑勝),若無則從下邊找 B填成 D
接著檢查是否有任一空格周圍的 L,R數量皆大於0,若是則白下此格會使白相連
接著檢查是否有任一空格周圍的 T,D數量皆大於0,若是則黑下此格會使黑相連
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/16
給一個大小為1*12的棋盤,上面有一些棋子,以孔明棋的規則來玩
孔明棋的移動方法:跳過一個棋子進到空格,並把被跳過的棋子吃掉
問在此盤形,移動數次(不限)後,最少會剩幾個?
<Hint E>
DP,因為所有的盤形只有2^12=4096種,直接用DFS+DP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/20
細胞自動機的遊戲:
一列排成環形的「細胞」群,由二元的0,1表示在此時刻下每個細胞的生死狀態
01000111010 (頭尾是相接的)
它會依照某些規則「演化」,每個細胞在下一刻的生死由
在目前狀態下左邊、自身、右邊的這三個細胞的生死狀態來決定,例如
左 中 右 下一刻
0 0 0 0 0 注意最左欄的0~7恰好是左中右三位的二進位值,共八種可能
1 0 0 1 1
2 0 1 0 0 所以,我們可以把這個自動機模式以一個<256的數值直接表示
3 0 1 1 1
4 1 0 0 1 7 6 5 4 3 2 1 0
5 1 0 1 0 0 1 0 1 1 0 1 0 => 01011010 => 90 (以此數值來表示)
6 1 1 0 1
7 1 1 1 0
現在給你自動機模式、細胞總數、每個細胞的目前狀態,請問
是否存在一細胞群可以演化成Input中給的該狀態?
是則"REACHABLE",否則"GARDEN OF EDEN",例如:
90 5 10110 => GARDEN OF EDEN
90 5 10001 => REACHABLE (可以從 01010 而來)
<Hint E>
以每個細胞x做中心來看,左中右可以有8種情況,有些是可以變成x的
又每種(可變為x的)情況僅和旁邊兩細胞有關,以此做DP O(kn)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: sa072686 at 07/06/21
※ 本文轉錄自 [chensc] 看板
作者: chensc (南一資訊99級正派陳鈧) 站內: chensc
標題: [轉貼] 教育部 96 年「全國校園軟體設計創意競賽」
時間: 2007/06/20 Wed 22:04:55
※ 本文轉錄自 [TFcis] 看板
發信人: chitsaou.bbs@bbs.tnfsh.tn.edu.tw (-_-ˊ) 看板: TFcis
標 題: [轉貼] 教育部 96 年「全國校園軟體設計創意競賽」
發信站: 與南共舞 (2007/06/20 Wed 20:53:49)
http://csc.pro.edu.tw/
咱們資訊社要來玩玩嗎? :p
: ------------------------------------
競賽方式
(一)初賽:
1.初賽採線上評選方式,參賽團隊須於規定期限內上傳作品各項資料,期限截止後不
得增、刪、修各項資料及變更程式執行結果。
2.參賽隊伍應於報名確認後至96年7月25日以前,上傳作品簡介資訊至活動網站,作
品簡介資訊包含:
(1)團隊隊名(參賽團隊隊名須以中文命名,且不得超過8個字,名稱若有不宜,
相關單位得要求更改。)
(2)團隊任務分工、團隊可公開之連絡資訊
(3)軟體簡介
A.創作背景(至少100字,不可超過300字)
B.軟體功能簡介(至少100字,不可超過300字)
C.預期達成之效益(至少100字,不可超過300字
(4)軟體需求規格書(須包含目的、軟體名稱、功能描述、程式及系統架構、開
發與執行環境以及預期效益等)
3. 應於 作品基本資料上傳完畢後 至 96 年 8 月 15 日 以前 內上傳相關物件至活
動網站,相關物件包含:
(1)軟體執行畫面,圖檔需為JPEG格式檔案(點陣圖至少300dpi以上)
(2)程式及軟體架構、程式使用流程。
(3)原始程式碼、安裝執行檔
(4)軟體使用手冊(須包含安裝說明、系統使用說明以及軟體取得合法性說明等
。)
4.本競賽鼓勵但不限定使用自由軟體,唯須說明使用軟體合法性。
5.除原始程式碼及安裝執行檔需壓縮成一個壓縮檔外,各文件附檔須以PDF格式上傳
。
(二)決賽(現場簡報):
1.入圍參賽團隊須於決賽前兩天,上傳當日使用之簡報檔,並應自行籌備簡報當日所
需之各項軟硬體設備。
2.入圍參賽團隊應於決賽當日攜帶規定份數之文件及備份之簡報檔,至指定場地現場
簡報、展示作品及回覆評審之提問,各隊約有20分鐘之簡報時間;指導教授不得
為簡報主講人,若有必要,僅得在評審委員同意下做補充說明;任一團隊成員不
得代替其他成員回覆評審之提問。
3.各團隊可於規定時間內提早到場準備及測試,若有更新簡報檔亦於現場補繳。
4.若未完成簡報義務,視為棄權,唯已簽署文件不得撤回,已繳所有物件不予退回。
評選辦法:
(一)初賽:實用性30%、創意表現30%、功能與整合性20%、程式及系統架構10%、使
用自由軟體比重10%
( 二)決賽:實用性 20%、創作背景及目的為有助於校外中小學(高中職至國小)
之需求 15% 、創意表現20%、功能與整合性10%、使用自由軟體比重10%、團隊合
作模式與精神10%、簡報技巧10%、團隊成員簡報日出席率5%
--
_十_ ﹋ ╯ 作者 chitsaou 來自 220-142-33-182.dynamic.hinet.net
╯羊╰▂▂▂ 台南一中˙與南共舞 [TNFSH.Wolf.BBS] @ bbs.tnfsh.tn.edu.tw
→ chitsaou +:使用自由軟體有加分喲 科科 07/06/20
φ ducksteven 轉:到 [chitsaou] 看板,于 2007/06/20 Wed 21:04:49
→ chensc 推:csc >///< 借轉 0620 22:04
φ chensc 轉:從 [TFcis] 看板,于 2007/06/20 Wed 22:04:55
→ ducksteven 推:衝一發 衝一發 衝一發 應屆畢業也可以 XD 0620 22:06
→ chensc 推:明天找 sa 看他要不要玩好了 0620 22:53
→ sa072686 推:我太弱了XD 光介面就爆了啊~ 頂多協助解決問題吧? 0620 23:15
→ chensc 推:哪有,如果我們兩個組一隊的話 嘿嘿XD 0620 23:21
→ ducksteven 推:含老師最多可以 5 人...顆顆 0620 23:24
→ ducksteven 說:有限定 web 介面或 GUI 嗎? 0620 23:24
φ Zero 轉:到 [Zero] 看板,于 2007/06/21 Thu 00:00:16
→ ming1053 推:看起來好好玩... 0621 13:26
→ seanwu 推:汙走.. 0621 18:47
φ seanwu 轉:到 [seanwu] 看板,于 2007/06/21 Thu 18:47:45
→ sa072686 推:衝一發看看好了…看來該來學介面了 0621 20:30
→ sa072686 推:這篇我要了 0621 21:28
φ sa072686 轉:從 [chensc] 看板,于 2007/06/21 Thu 21:28:32
作者: seanwu at 07/06/21
by tmt514(tomato)
10307 Killing Aliens in Borg Maze
(化簡過的題目)
一個地圖上有一些外星人A,你所帶領的小隊從S出發,
每個移動可以往前、後、左、右移動一步(一格)
目的是接觸所有的外星人並且感化(消滅?)他們。
每接觸一個外星人並感化完之後、以及一開始,
你可以將隊伍細分成兩個或更多個隊伍,分開行動。
所有行動的花費就是各個隊伍分開前的步數與分開後個別的步數總和。
例如你的隊伍一開始走了5步之後分成兩個小隊各走了3步(不管分開之後路徑有無重複)
那麼總花費就是 5+3+3=11
你所帶領的小隊人數保證超過100人,
外星人最多只有100隻。地圖大小最大50*50,且最外圍一定有圍牆,
你可以從S到達所有外星人的位置。
<Hint E>
將S視為A,以bfs做出所有A之間的距離,然後做MST
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: sa072686 at 07/06/23
我好發發發~~~
發發發的ACM魔人~~~
發
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.28 (台狼一中桑靈餓)
→ lovemoonfish 推:嗯嗯嗯~~~~ 0623 12:49
→ chensc 推:本日最台肯。 0623 12:49
→ Ijs 推:本版最中肯 0626 12:20
作者: seanwu at 07/06/29
lucky貓有中譯
<Sol PageDown>
那個 1 <= n < 1000000000,又是矩陣了 XD
因為每一列可擺的方法數只跟前兩列有關,於是記錄這兩列的狀態做DP
要計算每一組(相鄰兩列)的方法數,為前一組(與這一組有共一列)的擺法中
與這一組所擺之間的關係是合法(沒有衝棋、中間一列擺的一樣)的總數
任兩列的組合(用四層迴圈跑一下就有了)共有69種
把這69種組合與它種之間的關係算出(二層迴圈+很長的if),丟到矩陣裡記錄起來
以O(lgN)的矩陣冪算法計算。
寫得不是很好(距陣裡面有太多0),硬做下 8.643
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/06/29
http://w9.loxa.com/seanwu/safa.JPG
真發
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:沙發? 0629 21:57
作者: sa072686 at 07/06/30
就你的來說就是 /home/sa072686/public_html/RoR/test
然後打 ./script/generate controller [folder] [file]
[folder] 是打資料夾名,也就是 controller 名
然後 [file] 是打 .rhtml 檔名,也就是 controller 裡 function 的名字
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:囧" 整段貼過來.....XD" 0630 12:31
作者: seanwu at 07/06/30
對於所有的 n>d有這樣的遞迴關係
f(n) = a1*f(n-1) + a2*f(n-2) + a3*f(n-3) + ... + ad*f(n-d)
現在給你 d,n,m,a1~ad,f(1)~f(d)要你求 f(n) % m的值
1<= d<=15, 1<= n<= 2147483647, 1<= m<= 46340
(注意它給的 n有可能小於等於 d)
<Sol PageDown>
用矩陣:
a1 a2 a3 ... a(d-1) ad
1 0 0 ... 0 0
0 1 0 ... 0 0
0 0 1 ... 0 0
... ... ...
0 0 0 ... 1 0
的 (n-d)次方去乘上
f1 0 0 0 0
f2 0 0 ... 0 0
f3 0 0 0 0
... ... ...
fd 0 0 ... 0 0
則乘完的結果的左上角那格就是答案
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: zenixls2 at 07/06/30
雖然除錯除了一個晚上卻還是WA
討論版上的測資都試過了
All pass
不知誰可以幫忙debug
按大E以debug
#include<iostream>
using namespace std;
int main()
{
int a,i,j,k=0;
bool check;
char b[1001],c[1001],d[1001];
while(1)
{
cin>>a;
if(cin.fail()||a==0)break;
k++;
for(i=0;i<a;i++)cin>>b[i];
cout<<"Game "<<k<<":\n";
while(1)
{
for(i=0;i<a;i++)d[i]=0;
check=1;
for(i=0;i<a;i++)
{
cin>>c[i];
if(c[i]!=48)check=0;
}
if(check==1)break;
for(i=0;i<a;i++)
{
if(b[i]==c[i]){d[i]=1;}
else for(j=0;j<a;j++)
{
if(b[i]==c[j]&&d[j]==0)
{
d[j]=2;break;
}
}
}
int ka=0,kb=0;
for(i=0;i<a;i++)
{
if(d[i]==1)ka++;
else if(d[i]==2)kb++;
}
cout<<" ("<<ka<<","<<kb<<")\n";
}
}
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.111.234 (中滑一番)
▲ zenixls2 改@2007/06/30 Sat 20:34:00
→ seanwu 推:控制碼不能多行使用啦 0630 20:46
→ seanwu 說:呃...為什麼有else for這種寫法咧...XD 0630 20:53
→ sa072686 推:else for.. 那只是沒換行下的產物罷了XD 0630 21:02
→ sa072686 推:(話說大E真能debug嗎…|||) 0630 21:03
→ silentvow 推:<-- 還蠻常用else for的 XD 0701 11:04
→ chensc 推:else for 很噁心,你的 programming style 哪裡去了? 0701 21:42
→ sa072686 推:else for 這就是啦XD 0702 01:22
作者: sa072686 at 07/06/30
※ 引述《zenixls2 (惡靈退散)》之銘言:
雖然除錯除了一個晚上卻還是WA
討論版上的測資都試過了
All pass
不知誰可以幫忙debug
按大E以debug
#include<iostream>
using namespace std;
int main()
{
int a,i,j,k=0;
bool check;
char b[1001],c[1001],d[1001];
while(1)
{
cin>>a;
if(cin.fail()||a==0)break;
k++;
for(i=0;i<a;i++)cin>>b[i];
cout<<"Game "<<k<<":\n";
while(1)
{
for(i=0;i<a;i++)d[i]=0;
check=1;
for(i=0;i<a;i++)
{
cin>>c[i];
if(c[i]!=48)check=0;
}
if(check==1)break;
for(i=0;i<a;i++)
{
if(b[i]==c[i]){d[i]=1;}
else for(j=0;j<a;j++)
^^^^^^^^^^^^^^^^^^^^^
應該是這裡錯了…不是因為else for這種詭異的寫法
而是你在找對應的時候,是找第一個出現的…但是A又有高優先,所以像是
答案:11232
猜的:12236
應為3A1B,但就我的推論(沒測過…純推論)
在第二個數字時由於1 != 2,所以2會往後找看看有沒有2
然而答案中第一個2出現位置是在第3個數字,因此d[2] = 2
可是在第三個數字由於2 == 2,所以會將d[2]覆蓋為1,即d[2] = 1
那麼,最後是不是就少一個B了呢?所以推論你的程式會回答3A0B
不過不確定啦,沒執行下去實測,有錯請鞭…
{
if(b[i]==c[j]&&d[j]==0)
{
d[j]=2;break;
}
}
}
int ka=0,kb=0;
for(i=0;i<a;i++)
{
if(d[i]==1)ka++;
else if(d[i]==2)kb++;
}
cout<<" ("<<ka<<","<<kb<<")\n";
}
}
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.111.234 (中滑一番)
▲ zenixls2 改@2007/06/30 Sat 20:34:00
→ seanwu 推:控制碼不能多行使用啦 0630 20:46
→ seanwu 說:呃...為什麼有else for這種寫法咧...XD 0630 20:53
→ sa072686 推:else for.. 那只是沒換行下的產物罷了XD 0630 21:02
→ sa072686 推:(話說大E真能debug嗎…|||) 0630 21:03
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:3 0630 21:20
→ seanwu 說:1 1 2 0630 21:20
→ seanwu 說:2 1 1 0630 21:20
→ seanwu 推:嗯,文章裡面說的沒錯,不可以AB一起找,要先找完A再找B 0630 21:22
→ zenixls2 推:原本是想讓要幫我debug的人按下去才能看到原始碼 0630 23:26
→ zenixls2 說:但因程式碼太長才不需要 0630 23:27
→ zenixls2 推:沒以上之問題,要是有,早就測出來了 0701 10:59
→ seanwu 推:可是我拿你的code跑上面那一組是錯的喔... 0701 11:59
→ sa072686 推:我也是…剛改到AC了,腦殘爛了三次才過… 0701 12:10
→ sa072686 推:話說這篇是800耶 XDDD 0701 12:28
作者: sa072686 at 07/07/01
0.010 v.s. 0.059
用完全一樣的 code 改編,不同的是一個是 n ,而不是 n^2
n^2 的話 B 要另外計算然後再和A一起數, n 的方法還可以在做 A 時記錄個數
然後數 B 時和 A 一起數,每個只用 O(1) ,只需 40 bytes 的額外記憶體空間
code還比較短,基本上改code後行數是減少的,效率是更高的…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ silentvow 推:xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 0701 12:36
作者: seanwu at 07/07/01
Lucky貓有中譯
....
喂,公假社你們跑那什麼秒數...= =
八成又是亂七八糟的暴搜或之類的...願意提供一下嗎?
(你們跑這種秒數,是逼我把測資測出來...嗯,15個<1200的數,多乎哉?不多也)
<Sol PageDown>
用DP (慢慢的..)
首先,因為每台車送到目地後又得回總部裝水,與其它的點無關,
因此可以把圖改成星狀的....總部到各點的距離為原圖上的最短距離
接著,每個點的需求量不一樣....這太困擾了,把需求量為N的點拆成N個需求量為1的點
於是,化約成了最小結束時間問題,你要決定每個(拆開過的)點該由哪一輛車來送
而結束時間是三台車的結束時間最大者,並且可知結束時間不超過1200
關於這種問題,可以參考ACM10482的做法
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/07/01 Sun 13:09:29
→ Tommy 推:那秒數很漂亮OK 0701 15:59
→ seanwu 推:... 我一定要去測測資... 0701 17:12
→ godgunman 推:討論區DK有PO文 .. 一整個台灣人暴快XDDD 0701 18:16
作者: seanwu at 07/07/01
在數線上,給一個區域[0,M]和一些線段(以兩端座標L,R表示,L<R)
問最少需要幾條線段才能覆蓋整塊區域
<Hint E>
Greedy,見10382
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/01
因為這題太空虛了,借卡恩的翻譯..
作者 tmt514 (tomato) 看板 EverydayACM
標題 [ACM★☆☆☆] 10264-The Most Potent Corner
時間 Thu Jun 21 15:03:18 2007
───────────────────────────────────────
10264 The Most Potent Corner
一個N(1<N<15)個維度的cube當中的每個角落(corner)都有一個權重,
我們說兩個corner相鄰若且唯若這兩個corner有一條邊連接。
每一個corner都有一個力量值(potency),這個corner的potency取決於
該corner的所有鄰居的權重總和。
請你找出兩個相鄰的corner它們的potency總和最大。
<...>
Xor with 2^i
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: Tommy at 07/07/02
※ 引述《Ijs ([wish] 你平安)》之銘言:
> 這個太數學了
> 我一整個嚇到 怕怕...
> 已知 ex = 1+x+(x2/2!)+ (x3/3!) +…for all real x。
> 請由鍵盤輸入 x and n,n>100,計算並輸出 ex 的值到第 n 項。
> ex:e0=1,e1=2.718281,e2=7.389056.....
這哪題呀= =
這分明就是e^x的泰勒展開式嘛.....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.148.173 (中滑一番)
→ sa072686 推:這好深呢…一整個看不懂 0702 11:28
→ Tommy 推:f(x)=e^x其中 e為自然對數的底數... 0702 11:49
→ chensc 推:泰勒展開式...我們以前都叫他泰勞展開式XDD" 0702 12:02
→ sa072686 推:我數學弱到不行…XD 0702 16:12
→ zenixls2 推:這東西...好像高一上教多項式時蔡仲彬教過...我都忘了 0702 21:17
→ sa072686 推:高一…數理資憂班有威到… 0702 22:06
→ dust 說:聽過但不認識 (?) 0707 10:30
作者: seanwu at 07/07/02
有 N個人,互相把錢給來給去,
請你用<N次給錢操作,把他們的收支平衡回來
<Hint E>
Greedy,先將淨收入排序,再由最大的去補最小的
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/02
給一個圖及圖上兩個點S,T
請你找出"兩條"路徑,且不能有重疊的邊
使得這兩條路徑長總和最小
問總和是多少,若找不到請輸出"Back to jail"
<Sol PageDown>
不錯的題目,跟mincost-flow有關,如果不清楚的話...要講解得從頭講起
這太困擾了...可能需要一整篇講mincost-flow的文章...那又更困擾了...
...先放著好了...(逃)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/02
Lucky貓有中譯
<Sol E>
從頭、從尾各做一次LIS,然後以某數X為中心的Wavio數列長度
等於從頭、尾做LIS到X兩者較小者*2+1,再找最長的Wavio數列
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ Tommy 推:Hint錯了吧= =是2*max-1 不是2*max+1 0703 12:57
→ seanwu 推:No~No~ 其實max是陣列索引~ 0703 13:18
→ seanwu 說:好啦...如果是lis長的話就是2*max-1 0703 13:19
→ Tommy 推:嗯...我說的就是lis長啦XDDD 0703 13:34
→ seanwu 推:唉呀...隨便啦...意思到了就好...(誤) 0703 14:03
作者: seanwu at 07/07/03
Lucky貓有中譯
<Sol PageDown>
n<14時DFS直接爆,另外把n=14的盤面(<370000組)全部紀錄下來,要用時直接調
不然八成會TLE,我的光跑n=14空盤就要2秒多了(1.8G)...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ sa072686 推:新 server 光跑 n=14 空盤就 910,記錄後從TLE變1010 0916 13:49
→ b821213 推:雖然年代久遠 還是補充一下 請使用 bitmask 1004 19:58
作者: seanwu at 07/07/03
櫃子裡有r支紅襪、b支黑襪,2<=r+b,=50000
告訴你任拿兩支襪子皆是紅襪的機率為p/q,問r、b
若有多組解,輸出r+b最小者
(小心邊界的特例)
<Sol PageDown>
經計算得 C(r,2) / C(r+b,2) = [r*(r-1)] / [(r+b)*(r+b-1)] = p/q
=> p*r*(r-1) = q*(r+b)*(r+b-1)
如果 左<右 則r++,左<右 則b++,若相等則已找到解,這樣去逼近它
至於為何若有解則保證能找到,可考慮f(r,b)在座標系上,
形成的曲面對r,b分量都是嚴格遞增(減)的,故每次的調整皆會更逼近解(如果解存在)
還有一些邊界測資:
p=q : 2 0 p/q=100%
p=0 : 0 2 這個有點奇怪...照理來說 1 1應該也可以,但我傳後是WA
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/05
Lucky貓有中譯
<Sol PageDown>
一個排序的問題,直接看例子:
5 3 4 1 2 => 5 4 3 2 1
5 3 4 1 2
5 3 4 1 2
5 3 4 1 2 反了
5 4 1 2 3 丟到最後面
5 4 1 2 3 反了
5 4 1 3 2 丟到最後面
5 4 1 3 2 反了
5 4 3 2 1 丟到最後面
5 4 3 2 1
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/05
你在一個R*C的森林中,要從(1,1)走到(R,C)
但有些點是block,不能走
有些點住了奇怪的不明物體,放大絕使半徑為L的圓形內(含邊)皆不能靠近
問你最少要走幾步,走不到請輸出"Impossible."
<Hint E>
把所有不能走的點標掉,再做BFS,注意起點或終點不能走的特例
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ Tommy 推:其實那些不明物體叫做胖丁... 0706 10:48
→ seanwu 推:really? 0706 11:25
→ Tommy 推:看完整個題目就知道了= = 0706 11:26
作者: seanwu at 07/07/06
在N*N的格子上,給你每一列 i上一段必需走的範圍 (Li,Ri)
所有的點均可重覆走,問從 (1,1)走到 (N,N)最少要幾步?
<Hint E>
DP,記錄走"完"該列到L,R的最小成本
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/06
Lucky貓有中譯
數學題,不難算,不過測資太[ ]了..
會有浮點數誤差,解決方式是在每個輸出的數都加上 0.0000001
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/07
有 1<=N<=1000000 台主機,有 1<=M<=N(N-1)條可使用線路,
目前使用了 N-1條線路把它們連起來,而且花費的成本是最小的。
現在多了 1<=K<=10條可用的線路,問連接這些主機的最小成本變為多少?
請輸出目前的成本以及加入 K條線路後的成本
Sample Input
5 --N
1 2 5 \
1 3 5 |目前用的 N-1 條線路
1 4 5 |
1 5 5 /
1 --K
2 3 2 --新加入的 K 條線路
6 --M
1 2 5 \
1 3 5 |
1 4 5 |目前可用的 M 條線路
1 5 5 |
3 4 8 |
4 5 8 /
<Sol PageDown>
題目一開始給的是從 M條邊內所取的MST
現在考慮新加入的某條邊 (u,v)
則加入後會形成cycle: 由MST內的u->v路徑和 (u,v)所組成
於是,必須從cycle內拿掉一個邊破壞cycle,
且為了使Tree的成本最小,拿掉的邊必須是cycle內最大者
故對於每個加入的(u,v),以DFS找出cycle內最大的邊
成本 = (原成本)+(u,v)-(max_weight_edge)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 推:噢...lucky貓有翻譯了,只是ACMA還沒更新 0707 16:01
→ Tommy 推:這題是我翻譯的喔~~ 0707 16:02
→ Tommy 推:其實有另一做法...就是連新加入的邊一起去重作MST= = 0707 16:04
→ seanwu 推:how to? 1000000個點? 0707 17:14
→ chensc 推:哎呀...這麼麻煩幹嘛呢?用Wireless就好啦...(逃走) 0707 22:25
→ DarkKnight 呱:無視題目給的 MST 所有的邊攪在一起 Kuskal 就行了 0708 12:50
→ seanwu 推:可是要排序耶... 0708 13:37
→ Tommy 推:請愛用STL... 0708 20:21
→ chensc 推:樓上也是STL的愛好者嗎?XDD 0708 22:37
→ seanwu 推:不是啦...我是說 O(mlogm) 那 m很大時怎麼辦? 0708 22:46
→ Tommy 推:那個m那麼大是騙人的... 0709 12:32
→ seanwu 推:...... 0709 20:25
作者: seanwu at 07/07/08
Lucky貓有中譯
//這題想了好久...後來是在ACP讀到類似的題目(free tree)才想到的
<Sol PageDown>
考慮有 N個邊的串連網路個數An,所謂串連網路是指最後一步合併由串連AB形成的
為了避免各個串連單位的交換造成重覆,因此我們改為計算取數個「並聯」單位
的組合數,因為取的是並聯單位,所以單位與單位之內無法交換,也就不會重覆
設有 N個邊的並聯網路個數Bn,令取了 j1個有 1條邊的並聯網路、j2個有 2條邊的...
j(n-1)個有 n-1條邊的並聯網路,則因為總邊數等於 N,有
j1 + 2*j2 + 3*j3 +...+ (n-1)*j(n-1) = N
另外由 Bi取 ji個的組合數為
Xi = C(Bi+ji-1,ji)
因此,N個邊的串連網路個數為
An = Σ[X1*X2...X(n-1)] (Σ[i*ji] = N for i=1 to n-1)
最後,可以注意到 An = Bn
這個的生成函數是可以解得出來的,可參閱ACP該書的生成函數或這邊的資料
http://www.research.att.com/~njas/sequences/A000669
不過我不會解,所以直接暴搜,枚舉可能的ji從i=(n-1) to 1會快很多
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/08
Lucky貓有中譯
又是歡樂DP題了.. zz
不過有點慢,不知道是因為用up-to-down的方式還是DP的不夠好的..
<Sol PageDown>
考慮長度x、最後一個字元可取的範圍為1..a的字串、總合為s,則有
dp[x][a][s] =
+dp[x-1][a-1][s-a] 設最後一個字元為a,此為扣除a以後,長度-1、總合-a
因為需嚴格遞增,所以前一個字元的範圍只有 1..(a-1)
+dp[x][a-1][s] 再加上最後一個字元為 1..(a-1)的值
dp[x][a][s] = dp[x][a-1][s] + dp[x-1][a-1][s-a] (s>=a)
dp[0][a][0] = 1 (a=0..26)
然後,當L>26或S>351時就輸出0...一定無解
嗯,有更好的DP嗎?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/08
Lucky貓有中譯
找零錢的變形
<Hint E>
做限制數量的最小錢數到n*4一次c[i],做不限的到n*4一次r[i]
再考慮 給的錢數-找的錢數 = c[i]-r[i] 的最小值
好混的hint... 呃,點到為止
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/09
有M輛車,要搭船過河到對岸,船一次只能載N輛車,單程到對岸花時間T分鐘
給你N,T,M及非遞減排序的車輛到達時間,問讓全部的車都過河的最少時間?
<Hint E>
Greedy
依到的順序分組來送為 M%N,N,N,N,N,N,...,N
如果每次送的時候車先到,則time = time+T*2;
否則time = 車到時間 + T*2,
最後time = time-T,因為只要單程
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/10
Lucky 貓有中譯
這題實在是太亂七八糟了...
<Hint E>
用篩法把質數全部做出來,但是char table[100000000]太大了開不起來..會Compile Err
要開100000000/8,然後用bits操作來記錄..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 210.60.36.66 (~資訊暑訓(☆_☆)~)
→ Tommy 推:我只開到20萬而已... 0710 12:47
→ seanwu 推:那大概又是另一種奧義了.. 0710 15:40
→ DarkKnight 呱:95 MB 當然開不起來 開起來也會 MLE 0710 17:43
→ seanwu 推:關於記憶體的一個問題...見我版16 ACM10961 開超大可是ok 0710 22:06
→ seanwu 說:我轉過來好了 0710 22:07
作者: sa072686 at 07/07/10
暑訓。>///<
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.60.36.66 (~資訊暑訓(☆_☆)~)
作者: seanwu at 07/07/10
※ 本文轉錄自 [seanwu] 看板
作者: seanwu (Blindest) 站內: seanwu
標題: [ACM] 10961
時間: 2006/11/04 Sat 16:29:46
(有中譯)
用空間換取時間
開兩陣列[100000000]存每一步的座標(最多100個點,每次最多1000000步)
再用回圈讓兩個人走
看是否有哪一步會疊到
逃跑的那人最後一步不用走,因為就算撞到也沒差
或是追兵走完後也可跳掉了(第一次傳的時候沒加就WA了,應是因陣列裡的拉機)
0.000 AC(P.E.) 排名22
不過,為何 Memory = 64 呀,我不是開了超大的陣列嗎...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.192.45.69 (嘉南藥理科大)
→ seanwu 推:請問 ACM 的 Memory 是怎麼算的呢? 1104 22:37
→ sa072686 推:經驗來說…題目不一樣就不太一樣 1105 00:50
→ sa072686 推:64算是minimum,所以應該是看超出他題目所限的最小值 1105 00:50
→ sa072686 說:超出多少來計算…我覺得是這樣啦 1105 00:51
φ seanwu 轉:從 [seanwu] 看板,于 2007/07/10 Tue 22:08:01
→ DarkKnight 推:要這樣做的話 標準的方法是離散化.. 0710 22:17
作者: PG at 07/07/10
當秒數少於一定值的時候
ACM系統來不及計算你的記憶體使用量 程式就AC了
所以好像<0.01的時候 記憶體使用量永遠是64
//是不是0.01..不確定 很久沒寫ACM了
--
放學後 我坐在靜謐的教室裡讀書 晚風輕拂 攪亂了一池春水 捲起了幾張散落桌上的考卷
即使黑板上的數字正不斷減少 指考步步逼近 竹園岡的夜晚卻依然是神秘中夾雜幾許清麗
當我們在CS的雪地上廝殺時 滿地的血漬 班黃脫落的噴漆 和雪地的潔白形成強烈的對比
當我們思索著泡泡的奧妙時 咀嚼著19連鎖的技術 一邊讚嘆 一邊對學弟的心機低迴不已
我們是否還記得 當初穿上嶄新的一中制服時 心中那股夾雜著狂喜的澎湃悸動
我們如何去憑弔 那逐漸逝去的熱血和年輕時的真誠 http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.128.213 (福爾摩沙固網)
→ PG 推:等大學確定之後就要來開始一天一題ACM了 (炸) 0710 22:12
作者: PG at 07/07/10
有一個很簡單的方法可以驗證
就是隨便拿一個0.000AC的程式開一個接近MLE的陣列
這樣就可以確定是扣掉最小值還是程式來不及計算了
--
放學後 我坐在靜謐的教室裡讀書 晚風輕拂 攪亂了一池春水 捲起了幾張散落桌上的考卷
即使黑板上的數字正不斷減少 指考步步逼近 竹園岡的夜晚卻依然是神秘中夾雜幾許清麗
當我們在CS的雪地上廝殺時 滿地的血漬 班黃脫落的噴漆 和雪地的潔白形成強烈的對比
當我們思索著泡泡的奧妙時 咀嚼著19連鎖的技術 一邊讚嘆 一邊對學弟的心機低迴不已
我們是否還記得 當初穿上嶄新的一中制服時 心中那股夾雜著狂喜的澎湃悸動
我們如何去憑弔 那逐漸逝去的熱血和年輕時的真誠 http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.128.213 (福爾摩沙固網)
作者: gloompisces at 07/07/12
2007/2008 ACM International Collegiate Programming Contest
University of Ulm Local Contest(題號11230~11238)
Problem A: Annoying painting tool (11230)
給你一個 n*m 的長方形,每次你能將 r*c 的小長方形換顏色 (0->1 1->0)
( 1<=r<=n<=100 , 1<=c<=m<=100 )
求從全部都是0換成題目要求之圖形最少的步數,或者輸出-1表示無法做到
Problem B: Black and white painting (11231)
給你一個 n*m 的棋盤 (8<=m,n<=40000),第三個數字為右下角是黑色(0)或白色(1)
問棋盤中有多少個8*8,右下角為白色的棋盤
Problem C: Cylinder (11232)
給你一張 w*h 的紙 (1<=w<=h<=100),你必須把他切成兩片(切口和w平行)
其中一片裁出一個圓形,另一片裁出一個圓柱的側面(和那個圓形要合得起來)
求合起來後這個圓柱的最大體積
Problem D: Deli Deli (11233)
你必須把一些單數名詞換成複數,優先順序如下
(1) 如果字典有這個字,以字典為準
(2) 若結尾是子音+y,去y+ies
(3) 若結尾是"o", "s", "ch", "sh" 或 "x",加es
(4) 其他情況+s
input 的第一行有兩個整數 L 和 N (0 <= L <= 20, 1 <= N <= 100)
代表字典裡單字的個數和input的個數,另外單字完全是由小寫字母組成
Problem E: Expressions (11234)
你必須把一棵樹表示出來
input是一串長度<=10000的字串,小寫字母表示頂點,大寫字母連結兩個元素
ex: xyPzwIM M abcABdefgCDEF F
/ \ / \
P I B E
/ \ / \ / \ / \
x y z w a A d D
/ \ / \
b c e C
輸出順序似乎是由右到左,由下到上 / \
f g
Problem F: Frequent values (11235)
每組測資以兩個正整數 n,q 開頭(n,q<=100000)
第二行是n個數,絕對值都<=100000,並且已經排成遞增數列
接下來有q行,每行有兩個數i和j,問從第i個數到第j個數中,出現最多次的數出現幾次
Problem G: Grocery store (11236)
有一家雜貨店賣的東西都是0.01的倍數,求所有的四個價錢,他們的和<=20.00
且他們的積=他們的和,求所有符合條件的價錢 (只是價錢順序調換算同一組)
你可以以任意的順序輸出所有符合的價錢組
Problem H: Halloween treats (11237)
有c個小孩和n戶人家 (1<=c<=n<=100000),第二行的n個數是每戶人家給小孩的糖果數
問小孩要去哪幾家才能得到可以讓他們平分的糖果
輸出任一組解即可,若做不到輸出 "no sweets"
Problem I: Innumerous bowling games (11238)
在這裡,譯者假設你知道保齡球的計分規則。
題目會給一些整數(0<=n<=300),求出打完一場比賽剛好得到n分有幾種情況
當n=-1時結束,答案都可以用 long long int 表示
--
一個人踏上不能攜帶地圖的旅行
開始太過好奇忘了還有恐懼
然後路變曲折夜變漫長到不了也回不去
堅持著不聽別人甚至自己的懷疑
終於來到寬得能狂奔的草地
有人誇我勇敢一直都在微笑的我忽然流下淚滴
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.144.74 (不失敗大學)
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/07/12 Thu 08:57:23
▲ gloompisces 改@2007/07/12 Thu 15:48:06
作者: gloompisces at 07/07/12
※ 引述《seanwu (Blindest)》之銘言:
> 煩呀!
> 別看那張圖還有中譯....囉哩八唆的
> 基本上就是問:在ΔBNM中的NM邊上取一點A,而AB為定值
> 問最長的NM是多少,其中∠BNM, ∠NBM, ∠NMB為定值
> 令 α=∠BNM, β=∠NMB, γ=∠NBM, θ=∠ABN
> 用正弦律,可得
> y=NM=AB×〔sinθ/sinα+sin(γ-θ)/sinβ〕
> 求極大值令dy/dθ=0,解得 (好啦,我用微分硬幹...)
> θ=arctan〔(sinβ/sinα-cosγ)/sinγ〕
> 代回y,即得。
> 我很疑惑為何要用數學符號整死自己
> 其實,一切原於 LaTeX 的真傳呀!
微分...我的天
提供另一個比較平易近人的解法
設AB長為x (用x1,y1,x2,y2可輕鬆求得x之值),α=∠BNM, β=∠NMB, θ=∠BAN
由於MAN共線,所以∠BAM=180-θ
根據正弦定理得 BN / sinθ = AB / sinα
所以 BN = AB * sinθ / sinα ....(1)
再用一次正弦定理 MN / sin(180-α-β) = BN / sinβ
所以 MN = BN * sin(180-α-β) / sinβ
代入(1),MN = AB * sinθ * sin(180-α-β) / ( sinα * sinβ )
右邊那些除了 sinθ 外都是定值,所以為了讓MN最大,sinθ也要最大,即sinθ=1
所以θ=90
MN = AM + AN = AB*cotα + AB*cotβ = x*(cotα + cotβ)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.47 (不失敗大學)
作者: seanwu at 07/07/13
給定一個序列e1<e2<e3....,將它們建成二元搜尋樹
而對於每個e有它出現的頻率f(e),每個e在樹中的深度(到樹根距離)為d
則對此搜尋樹做搜尋的成本為 sum{f(e)*d} (for each e)
問此樹的最小成本為多少?
//Hint: O(n^3)的DP是很容易的,O(N^2)如何?
<sol pagedown>
不難想到O(N^3)的DP:枚舉[i..j]之間的點p做為此區間的樹根
dp[i][j] = min{dp[i][p-1]+dp[p+1][j]}+sum[i to j]
但另外,Knuth證明了 root[i][j-1]<=root[i][j]<=root[i+1][j]
(詳細的證明請自行搜尋相關資料..)
所以可以只枚舉root[i][j-1]<=p<=root[i+1][j]
(再經過一些blabla..於是複雜度成了O(N^2))
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/14
數學題,不過暴力也可以..
在座標平面上種樹,(x,y)上種的樹必須可以看到原點
問在 |x|<=a, |y|<=b 且不算(0,0) 的範圍內有種樹的比例是多少?
(1≦a≦2000, 1≦b≦2000000)
<Sol pagedown>
不會算,所以直接暴力...有些慢
a的範圍明顯的比b小很多,故從x下手
考慮gcd(x,y)=1,則 y=p+x*i ( gcd(p,x)=1, i為非負整數 )
於是枚舉所有的數組 (x,p) ,計算 [(b-p)/x]+1 的總數即可
2000*2000應該是可以接受的...嗯..徵正解?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/15
這類的題目好像還不少,目前找到662, 714
都只做到O(n^3)的DP
→ DarkKnight 推:DP 可以到 O(nm),用 Binary Search 最快
嗯..討論版上似乎也有提到,但還是不太清楚..
O(nm)的DP要怎麼做? 還有Binary Search是要greedy嗎?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 推:..用binary search後變成O(N^2*logN)了 = =+ 0715 17:20
→ seanwu 說:應該不是這樣攪的吧 orz 0715 17:20
→ godgunman 推:這題不是暴搜噢 .. 我寫了一個暴搜很短又很快 XD 0719 17:53
作者: seanwu at 07/07/15
給一些城市的座標,你要在這些城市之間修路將它們連接起來。
屬於同一個州的城市之間修築道路,不同州的城市之間築鐵路,
而兩個城市的距離如果不大於r,則說它們屬於同一個州,反之則否
問總共有幾個州? 修了多長的道路? 修了多長的鐵路? (後兩個問題請四捨五入)
簡單有趣的MST..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/16
※ 引述《seanwu (海恩無)》之銘言:
> 這類的題目好像還不少,目前找到662, 714
> 都只做到O(n^3)的DP
> → DarkKnight 推:DP 可以到 O(nm),用 Binary Search 最快
> 嗯..討論版上似乎也有提到,但還是不太清楚..
> O(nm)的DP要怎麼做? 還有Binary Search是要greedy嗎?
又自問自答了 = = (昨晚睡不著..)
考慮狀態 dp[i][j]為第i天在第j個點的解
有dp[i][j] = min{ max{dp[i-1][k],sum[k to j]} } (for k<j)
直接做是 O(n*m^2)
注意到 f(k)=dp[i-1][k]是遞增,g(k)=sum[k to j]是遞減
故minmax落在f(k)與g(k)的交點
令g'(k) = sum[k to j+1] = g(k)+dis(j to j+1)
因g'(k) = g(k)+ΔH 故f(k)與g'(k)的交點必落在f(k)與g(k)交點的右側
於是每個k只被考慮一次,故為 O(nm)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.29 (台狼一中桑靈餓)
▲ seanwu 改@2007/07/16 Mon 16:13:23
作者: seanwu at 07/07/16
N*N的棋盤上有N支城堡,每支城堡有各自的擺放範圍(一個矩形範圍)
請找出任一種擺法讓每支城堡互不攻擊,若無請輸出IMPOSSIBLE
<Sol pagedown>
x,y分開做,用Greedy,時間複雜度...不明...大概接近O(n) :
假設每一支棋的範圍左界(簡稱L,右界為R)皆不相同,則很明顯的每支棋都擺在L就好
但如果兩支棋子A,B的A[L]=B[L],則須將它們錯開,方法是將其中一支的L++
考慮兩者的右界大小,若A[R]>B[R],則選擇將A[L]++,反之亦然
如果導致A[L]>A[R],則表示無解
證: 設A[R]>B[R],則A的長度>B的長度。考慮A[L]++,如果會導致縮短後的A無解,
則因為A涵蓋了B,即使當初改成B[L]++也必無解,並不影響整體結果。
反之,若B[L]++後導致無解,並不表示B[L]會無解,不難找到反例: 當B的長度為1時。
因此,選擇縮短長度較長者。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/16
給m本書,分給k個人來印,而且每個人所印的書編號必須是連續的
每本書的頁數不同,其中有印的頁數最多者,讓他印的儘量少
(就是給你個長度為m的序列,切成k段使max{每一段總和}最小啦..)
如果有多種切法,請輸出第一人最少的分法,再來是第二人最少,依此類推
<Sol pagedown>
(DP o(mk)) or (Greedy+Binary Search)
我用後者,前者見ACM907
做法是以二分搜尋查找可能的最大者M,決定M之後,
可以greedy O(m)的方法判定是否可容下所有的書(每個人最多印M頁)
M越大,所需的人越少,反之亦然,故可二分查找
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ DarkKnight 推:二分查找......中共匪毒了... 0716 21:53
→ sa072686 推:看他身邊總不忘帶本共匪書就知道了… 0716 21:58
→ seanwu 推:... 0716 22:19
→ seanwu 說:可是我現在覺得簡中翻的比較漂亮耶...簡潔有力的樣子.. 0716 22:21
→ csftwpt 推:二分查找......中共匪毒了... 0718 21:28
→ godgunman 推:二分查找......共匪中毒了... 0719 22:13
作者: sa072686 at 07/07/17
發人在此 請勿作亂
我好發XDDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.27 (台狼一中桑靈餓)
→ Tommy 推:發到瘋掉了XDDDDDDDDD 0717 11:53
→ godgunman 推:被盜帳號 XD 0717 22:24
→ zenixls2 推:中肯 0718 12:06
作者: seanwu at 07/07/17
有N個人要參加NPSC,每個人有它的強度值
三個人組一隊,總和需>=20,問最多可分幾隊
<Hint E>
限深DFS+cut:limit_max=min{sum/20,N/3}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.28 (台狼一中桑靈餓)
→ godgunman 推:XDDDDDD 翻譯好好笑 0717 22:23
→ Tommy 推:TLE= = 0718 16:08
→ seanwu 推:這是奧義 0719 16:02
→ Tommy 推:這題其實可以用一點sort加暴力就可以AC了... 0719 16:03
作者: gloompisces at 07/07/17
ACM 11239~11243
Problem A: Open Source (11239)
在一間大學裡,有m個學生和n種作業 (m<=10000,n<=100)
(大寫字母之字串為作業,小寫字母之字串為學生名字)
給你一個表,在作業名稱下方的為要作那份作業的學生名字
but,有些學生可能因太過興奮而在那份作業下寫了兩次以上他的名字,請算一次就好
也有的學生在兩份以上的作業寫下他的名字,但是學校規定每人只能選一份
所以這個學生選的將全部不算
你必須輸出所有的作業和選他的人數
從最多人選的開始輸出,若兩份作業有同樣多人選則依據字母順序輸出
Problem B: Antimonotonicity (11240)
有n個數(n<=30000),你必須找出最長的子序列,使得 a[1] > a[2] < a[3] > a[4] < ..
輸出子序列的長度即可
Problem C: Humidex (11241)
T(溫度) D(水氣凝結溫度) H(濕度)
H = T + h
h = (0.5555)*(e - 10.0)
e = 6.11 * 2.718281828 ^ [5417.7530 * ((1/273.16) - (1/(D+273.16)))]
給你其中兩個,請求出第三個的值
Problem D: Tour de France (11242)
自行車有前輪和後輪,每個輪子中有<=10個齒輪,每個齒輪的齒數在10到100間
drive ratios 為後輪一齒輪之齒數/前輪一齒輪之齒數
設前輪有a個齒輪,後輪有b個齒輪,你可以得到a*b個 drive ratios
你可以將他們依大小排好順序,然後算相鄰兩個的商
問最大的商是多少
Problem E: Texas Trip (11243)
給你n個點(n<=500)
你要用一張正方形紙把他們全都蓋起來,求正方形的最小邊長
註:本題誤差可到正負0.1
--
☆╓努力越過風暴,向著未來飄╖☆
│▁▂▃▄▅ ◎ ▅▄▃▂▁│
☆╙我們才會遇到,感動的擁抱╜☆
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.87 (不失敗大學)
→ seanwu 推:最後一題好難 >"< 0718 22:32
→ gloompisces 推:一起來研究吧... 0718 22:45
→ sa072686 推:如果正方形還可以斜著放就惆悵了… 0718 23:17
→ gloompisces 推:如果不能斜著放就是一星題了... 0718 23:21
→ sa072686 推:依照誤差容忍度計算誤差範圍,然後以此踹每個角度? 0718 23:26
→ gloompisces 推:100000000可以過 0719 01:02
→ seanwu 推:wow good 0719 12:10
作者: Tommy at 07/07/19
※ 引述《seanwu (海恩無)》之銘言:
> 有N個人要參加NPSC,每個人有它的強度值
> 三個人組一隊,總和需>=20,問最多可分幾隊
> <Hint E>
> 限深DFS+cut:limit_max=min{sum/20,N/3}
Alternative Solve method:
把n個人排序(小to大),如果n%3,把0..n%3-1都拿掉
用剩下的跑3-nested for-loop brute force
即可AC
//話說我DFS會TLE耶= =
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.140.47 (中滑一番)
▲ Tommy 改@2007/07/19 Thu 16:40:02
→ seanwu 推:我的是限深裡面放 for^3 0719 16:59
→ godgunman 推:排序後限深dfs, 第一人拿最大, 二三從後面拿, 就過了 0719 20:10
→ godgunman 推:我寫法原本跟一樓一樣, 但是後來太醜就改掉 XDDD 0719 20:11
→ seanwu 推:我排序後會變慢 = = 0719 20:17
→ Tommy 推:蝦米是現身DFS/ 0720 11:01
→ sa072686 推:顧名思義一下就知道了XD 0720 11:14
→ Tommy 推:好吧...好深奧= = 0720 12:17
→ godgunman 推:誰叫你上課在睡覺 0720 19:26
→ Tommy 推:噢~你不說我還忘記我上課在睡覺耶XDDDDD 0721 12:26
→ Tommy 推:其實我已經想出來了啦XDD 0721 12:26
作者: seanwu at 07/07/20
這題怎麼做比較好?
我的DP是O(N^4)的,然後似乎慢了些
做法是枚舉中心,然後去DP兩邊的相同的子序列數量
長度為偶數時也類似,枚舉中心兩個(要相同),然後再算
名次倒數了..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ gloompisces 推:好像有O(N^2)的做法 0720 22:16
→ seanwu 推:噢,了解了...|| 0720 22:41
→ sa072686 推:wa了… 0720 22:52
→ seanwu 推:嗯,O(N^4)比O(N^2)想難想...雖然都沒花多久 0720 23:08
→ seanwu 說: 還 0720 23:10
→ sa072686 推:AC…就差long long 0720 23:10
→ seanwu 推:不過n太小了,就直接寫了,沒再想別的方法.. 0720 23:11
→ Tommy 推:請到ggm的精華區 0721 12:27
→ sa072686 推:這題害我破戒 po 了一篇 XD 0722 20:29
作者: sa072686 at 07/07/20
好久沒po了…也好久沒動ACM了XD
翻譯的部份其實我也不太懂題目在寫啥…
似乎是從給定字串中有幾種方法使得取走其中幾個字後,餘下者會成為迴文
當然,亦可不取走任何一字
解法:
----
其實不會太難想,字串長度為n者其可組成之迴文數為0..n-1 + 1..n - 1..n-1
故可建一n*n大小之表(雖然我只用一半)對於dp[i][j]表示從i到j有幾種取得法
然後將這表建完即可。迴文可表為 字元i + 迴文 + 字元i 的形式
故若s[i] == s[j]時則加上dp[i+1][j-1]+1(空字串也是迴文)
若非則無視之,然後再加上兩邊非s[i]與s[j]的部份,即dp[i+1][j]和dp[i][j-1]
最後再扣去重覆的dp[i+1][j-1]即可得到答案
至於順序方面,隨便吧,我是從11、22、12、33、23、13、44、34、24、…這樣
基本上開心的話應該還有很多種順序可以用
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 07/07/22
126 - The Errant Physicist
覺得自己耐力過人的可以試試XD
這題簡單的來說,就是要將兩個二元多項式乘開
其中x以降冪,y以升冪
要比較清楚一點就看 sample I/O 吧XD http://acm.uva.es/p/v1/126.html
讀入請小心不要漏項
輸出注意1: 輸出的第一個數如果係數是負號,'-' 要和係數連在一起
2: 沒有 1x^4 或 -1x^3 這種東西,請改成 x^4 或 -x^3
3: x^1 請改成 x,x^0 勿輸出
4: 輸出的兩行須一樣長,所以請把短的補上space直到一樣長
5: 如果答案什麼都沒有請記得輸出0
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.60 (不失敗大學)
→ seanwu 推:上回看過到現在連碰都沒碰過...= = 0722 16:38
→ Tommy 推:黃以文之前用了快200行的code把他AC了 0723 11:05
→ gloompisces 推:黃以文也有在玩資訊喔XD 0723 12:11
→ Tommy 推:他都500多題了阿... 0723 14:56
→ gloompisces 推:難怪今年和我一樣沒進數奧選訓.. 0723 23:31
→ godgunman 推:他其實是考暴 .. 不然他很想去 (小聲0 0723 23:57
作者: chensc at 07/07/23
※ 本文轉錄自 [chensc] 看板
作者: chensc (不顧課業的高山蔘) 看板: chensc
標題: [筆記] 在 RoR 裡使用 utf-8
時間: 2007/07/23 Mon 09:12:14
Rails中文問題解決(UTF-8)
[資料庫亂碼]
於database.yml內的三個資料庫都加入
encoding: utf8
[字串裁切問題]
如果使用像是user.name[0,10],最後一個中文字有極大的可能備裁切失誤而亂碼
environment.rb
第一行加入
$KCODE = 'u'
(效果等同於Ruby -Ku的執行方式)
之後將user.name[0,10]改成user.name.chars[0,10]
可喜可賀可喜可賀
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 192.168.4.14 (台狼一中桑靈餓)
φ chensc 轉:從 [chensc] 看板,于 2007/07/23 Mon 09:12:53
φ sa072686 轉:到 [某隱藏] 看板,于 2007/07/23 Mon 09:20:56
作者: gloompisces at 07/07/23
Jack 想要用 ██ 形狀的磁磚來鋪他家的長方形廚房
█
他希望廚房的長在 L1 到 L2,寬在 R1 和 R2 間 (>=1 && <=1000)
問有幾種廚房符合他的要求? (A*B 和 B*A 視為相異)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.223 (不失敗大學)
→ seanwu 推:orz,L1可以>L2... 0725 17:00
作者: Tommy at 07/07/24
你跑的慢的原因該不會是每讀一次測資就一次DP吧..(這個應該不可能)
我是先把3-nested for loop DP跑完後
每次讀測資先判斷l,s有沒有解那些東東
有的話就印出dp[l][26][s]...
0.025s阿...你怎麼弄到3.9秒的阿...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.148.95 (中滑一番)
→ seanwu 推:嗯...年代久遠,忘了... 0724 11:46
→ seanwu 推:剛剛去查了一下...好像是耶...|| 0724 23:26
→ Tommy 推:= =||| 0725 10:59
作者: seanwu at 07/07/24
Lucky貓有中譯 http://luckycat.kshs.kh.edu.tw/homework/q10911.htm
嗯...這種問題(多點、mincost、匹配)好像可以用flow是不是?
但聽說好像很複雜...不過如果有參考資料我想研究一下 (伸?)
目前用DP O(2^(n*2))做,但看其它人的秒數感覺dfs直接爆好像會比較快...
<Hint E>
這DP跟TSP的做法(版上某篇)有點像,不過改成從點集中拿掉一組點(邊)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ gloompisces 推:dfs 應該會 TLE 0724 22:20
→ seanwu 推:...不過學長你的code真快.. 0724 22:27
→ gloompisces 推:我的好像是O(2^n * n) 0724 22:32
→ seanwu 推:喔,了解 0724 22:38
→ Tommy 推:不...DFS不會TLE... 0725 10:54
→ Tommy 推:不過跑了8.613s... 0725 11:00
→ gloompisces 推:那看來是我的DFS比較弱XD 0725 15:06
→ Tommy 推:現在的值如果>已經找到的min就cut掉....就會過了吧 0725 15:51
作者: seanwu at 07/07/24
給n,back,問原題目程式碼中的trib(n,back)遞迴函式會被呼叫幾次?
題目中的數據有錯,是N<61不是N<=61,另外當N>60時程式結束
//Hint: 小心特例....
<Hint E>
Input中疑似有n<0,back<0,用DP時別忘了n<0時不要去塞陣列...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ Tommy 推:這我昨天才剛寫過= = 0725 11:42
→ Tommy 推:其實只要用紀錄式DFS就秒殺AC了...//完全沒有顧慮特例 0725 11:43
→ seanwu 推:嗯...裡面有個n-i不小心會<0 0725 11:51
作者: seanwu at 07/07/24
嗯...有點白爛...
a(i,j) = http://acm.uva.es/p/v105/p10520.gif
給你 n,a(n,1),請求出a(1,n)
//看起來滿糟的....其實不會啦...
<Hint E>
直接用遞迴算+一邊記錄a(i,j)值做DP就可以了..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ gloompisces 推:我那天推公式推了兩小時沒結果 0724 23:30
→ gloompisces 說:後來直接做只花了半小時... 0724 23:30
→ seanwu 推:XDD 0724 23:33
→ sa072686 推:直接做 de 了好久的 bug(汗)而且要用 long long… 0907 13:52
作者: gloompisces at 07/07/24
10923 - Seven Seas
有一種遊戲叫做 seven seas (我家電腦以前好像有..)
就是在一個9*8的棋盤上,有1艘你的船(S)和<=9艘海盜船(E)
另外有一些障礙物(#),任何船撞到就死
現在你先走一步(8個方向皆可)
然後海盜船會同時走一步(也是8個方向皆可)
海盜船是愚笨的,他們會盡量接近你,就算會死也在所不惜
兩艘船相撞會同時沉沒,船難處也會變成一個障礙物
問:你是否能在<=9步讓所有海盜船沉沒並且你自己活著
可以請輸出 I'm the king of the Seven Seas!
不能請輸出 Oh no! I'm a dead man!
(註:第三組 sample input 在我家電腦跑了4秒... 然後竟然還AC,且此題TLE人數極少)
--
一個人踏上不能攜帶地圖的旅行
開始太過好奇忘了還有恐懼
然後路變曲折夜變漫長到不了也回不去
堅持著不聽別人甚至自己的懷疑
終於來到寬得能狂奔的草地
有人誇我勇敢一直都在微笑的我忽然流下淚滴
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.199 (不失敗大學)
作者: gloompisces at 07/07/25
(20070724) Most probably WE WILL MIGRATE by Thursday 26th and the submission
here will be disabled forever. Then, after a few hours, you will allowed to
submit to the new server. Be mindful, and make your registration there (if
haven't yet done).
嗯,我不確定我有沒有會錯意
但他的意思好像是他們會在7/26把所有的東西搬到新網頁
舊網頁中所有的資料將會永遠失效
他們要還沒在新網站註冊的使用者注意
我不確定沒去註冊是不是代表你的所有解題紀錄將被歸零,但是大家還是去註冊一下吧
網址:http://icpcres.ecs.baylor.edu/onlinejudge/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.43 (不失敗大學)
→ sa072686 推:收不到信…囧rz 0725 23:04
→ seanwu 推:我也是 = = 0725 23:15
→ etetet91 推:註冊信? 為什麼我收的到…囧" 0725 23:31
作者: seanwu at 07/07/25
呃...頗白爛的題目..
第一行N表接下來有幾組測資
某人想要住在鄰居盡量少的地方,
每組測資第一個數P代表有幾個可選擇的地點,接下來有P行,
每行中記錄與該地點相鄰的鄰居有哪些
問他可以住在哪些地方?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: gloompisces at 07/07/25
10927 - Bright lights
有N根柱子,被放在N個座標(X,Y)上,高度為Z
(-100000<=X<=100000,0<=Y<=10000,0<=Z<=10000)
沒有柱子在(0,0)上,也沒有兩根柱子在同一個座標上
現在你站在(0,0),問你看不到幾根柱子
若兩根柱子從(0,0)看過去重疊且後面的長度<=前面,則看不到後面的
輸出所有看不到的柱子,依照X座標升序排列,X座標相同則依照Y座標升序排列
詳細I/O請見題目
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.43 (不失敗大學)
作者: gloompisces at 07/07/25
嗯,我剛剛寄信去問了
他的回覆是就算現在沒有註冊,以後還是可以的
因為他覺得刪除全部資料是一件不公平的事情
不過再也不能用原系統傳題目就是了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.43 (不失敗大學)
→ sa072686 推:那就不急了… 0725 23:30
→ etetet91 推:嗯,畢竟現在新系統裡面也沒什麼… 0725 23:32
→ Zero 推:就可以改用JudgeOnRails (誤) 0726 23:08
→ sa072686 推:不要,裡面的題目不知道誰出的,太心機了。 0727 07:23
→ Zero 推:對阿,都不知道誰出的.... 0727 17:30
作者: seanwu at 07/07/26
呃...給兩張用四分樹表示的32*32的圖,把它們疊起來,問有幾個pixels是黑的
p表示分割,f表示塗黑,e表示塗白
分割的順序為
┌─┬─┐
│2│1│
├─┼─┤
│3│4│
└─┴─┘
關於四分樹見版上 ACM183
(這題比183還簡單...)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: gloompisces at 07/07/27
有一個N*N的棋盤 (N<=75)
在棋盤的每一格上都有一個整數,你要從(1,1)走到(N,N)
覺得太簡單嗎? 太好了,我決定多加幾條規則
1. 只能往左,往右或往下 ((1,1)在左上,(N,N)在右下)
2. 你不能走到棋盤外
3. 你不能走到任何一格超過一次
4. 你走過的路徑上各個格子的和必須是你能走的最大值
5. 我會另外給你一個整數k (k<=5),在這段路程中你最多只能經過k個負數
請輸出最大值,或者 impossible 表示做不到
--
我始終帶著你愛的微笑
一路上尋找我遺失的美好
不小心當淚滑過嘴角
就用你握過的手抹掉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.50 (不失敗大學)
→ Tommy 推:DP? 0727 11:07
→ PG 推:我沒寫過 不過我也認為是DP 0727 11:13
→ gloompisces 推:嗯,DP 0727 12:46
→ sa072686 推:用k * n^3 果然相當慢,只在1/2左右… 0727 17:06
→ seanwu 推:orz,0.059是我的極限了... 0727 19:46
→ seanwu 說:我可以問怎麼做0.057嗎 XD 0727 22:57
→ gloompisces 推:我也不知道耶orz 0727 22:58
→ gloompisces 說:改成 short int 試試 0727 22:58
作者: AikoSenoo at 07/07/27
是說、這應該是喜格馬平方相加?
除了n=1&n=2的時候
其他的就是帶公式
n*(n+1)*(2*n+1)/6
又帶進去的是n-1
所以最後變成(n-1)*(n)*(2*(n-1)+1)/6
然後n==1||n==2時數值=n
可是我怎麼改就都改不出來Orz
麻煩sa同學幫忙看一下了<(_ _)>
//BTW,我原本用等比XD 今天早上睡一睡想到就六點跳起來了XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by AikoSenoo from 220.132.136.186 (中滑一番)
▲ AikoSenoo 改@2007/07/27 Fri 06:55:07
▲ AikoSenoo 改@2007/07/27 Fri 06:55:51
→ sa072686 推:這題喔…有公式啊XD 0727 07:25
→ sa072686 推:請參考 10223 && 10303 這兩篇文 不過原因我也不知道XD 0727 07:30
→ sa072686 推:也可以參考 474 篇,我從學弟那兒轉來的文 0727 07:31
→ Tommy 推:Catalan Numbers... 0727 11:08
→ AikoSenoo 推:這樣啊XD" 感謝<(_ _)> 0727 12:29
→ Tommy 推:不過這題不用大數 0727 14:33
作者: gloompisces at 07/07/27
10914 - Abundance and Perfect Numbers
有一種數叫做 "almost odd prime",是指那些是偶數但只有一個奇因數的數 (不包括1)
6 和 12 都是這種數,但 18 就不是了
對於任一個 "almost odd prime" n,定義 α(n) = n的所有正因數和
又定義另一個函數 abun(n) = Σ(α(i)-2i)
i為所有<=n的almost odd prime
給你n,(1<=n<=10000000),請問abun(n)=?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 192.168.4.17 (台狼一中桑靈餓)
作者: seanwu at 07/07/27
有一種叫NAND(|)的運算子,其真值表為
x y x|y (就是Not And啦)
0 0 1
0 1 1
1 0 1
1 1 0
給你N表示要將兩個N位的二進位整數相加,這兩個數可表為
AN,A(N-1), ..Ai.. ,A1,A0 i表示第幾位
BN,B(N-1), ..Bi.. ,B1,B0
問相加後的結果,第N+1位是多少,請用A0,A1,..B0,B1...等,及 '|' 表示出來
ex.
N=1
((A0|B0)|(A0|B0))
N=2
((A1|B1)|(((A0|B0)|(A0|B0))|((A1|A1)|(B1|B1))))
噢..頗好玩的一題
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.27 (台狼一中桑靈餓)
作者: sa072686 at 07/07/27
> 10 sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 發 sa072686/glo
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/07/27
> 10 sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 發 sa072686/glo
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/07/27
> 10 sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 爆 sa072686/glo
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: PG at 07/07/27
以前一直搞不懂的問題
在二下學會排列組合之後就變簡單多了
在這裡提供一下 hint
從"排列之前"觀察 可以歸納出
如果排列a < 排列b
則 a[0]<b[0]
或者是 a[0]==b[0] , substr(a[1~n]) < substr(b[1~n])
要求出一個string有幾個排列很簡單 可以用公式算出
因此 這個問題可以表達成遞迴式
舉個例子
caba 之前的排列 =
a開頭 abc的排列數
+ b開頭 aac的排列數
+ c開頭 aba之前的排列 的排列數
aba之前的排列 =
a開頭 ab之前的排列 的排列數
ab之前的排列 =
a開頭 b之前的排列 的排列數
寫成遞迴應該不難
--
放學後 我坐在靜謐的教室裡讀書 晚風輕拂 攪亂了一池春水 捲起了幾張散落桌上的考卷
即使黑板上的數字正不斷減少 指考步步逼近 竹園岡的夜晚卻依然是神秘中夾雜幾許清麗
當我們在CS的雪地上廝殺時 滿地的血漬 班黃脫落的噴漆 和雪地的潔白形成強烈的對比
當我們思索著泡泡的奧妙時 咀嚼著19連鎖的技術 一邊讚嘆 一邊對學弟的心機低迴不已
我們是否還記得 當初穿上嶄新的一中制服時 心中那股夾雜著狂喜的澎湃悸動
我們如何去憑弔 那逐漸逝去的熱血和年輕時的真誠 http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 192.168.4.55 (台狼一中桑靈餓)
→ Tommy 推:用for也可以吧? 0727 16:25
→ PG 推:也可以 不過我比較喜歡用遞迴 Orz 0727 16:32
作者: PG at 07/07/27
這題還有一個小細節要注意
就是題目保證不會超過2^31-1
但是運算過程中可能會超過
例如說 算aaaaaaaaaaaaaaaaaaabb (a*19 b*2)
算式是 21! / (19!*2!)
但是算出21!會爆
所以請自行約分這樣..
--
放學後 我坐在靜謐的教室裡讀書 晚風輕拂 攪亂了一池春水 捲起了幾張散落桌上的考卷
即使黑板上的數字正不斷減少 指考步步逼近 竹園岡的夜晚卻依然是神秘中夾雜幾許清麗
當我們在CS的雪地上廝殺時 滿地的血漬 班黃脫落的噴漆 和雪地的潔白形成強烈的對比
當我們思索著泡泡的奧妙時 咀嚼著19連鎖的技術 一邊讚嘆 一邊對學弟的心機低迴不已
我們是否還記得 當初穿上嶄新的一中制服時 心中那股夾雜著狂喜的澎湃悸動
我們如何去憑弔 那逐漸逝去的熱血和年輕時的真誠 http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 192.168.4.55 (台狼一中桑靈餓)
▲ PG 改@2007/07/27 Fri 16:17:04
→ Tommy 推:也可以用double 0727 16:26
→ gloompisces 推:long long int 也可以,也不用怕誤差 0728 17:35
作者: AikoSenoo at 07/07/27
嗯嘿
發現自己還沒報到過=w="
正式報到一下
sa同學你好∼
我是北一資研97級學術阿南
昨天承蒙幫忙了<(_ _)>
以後還請多多照顧\( ̄▽ ̄\)﹏﹏
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by AikoSenoo from 61.228.188.216 (中滑一番)
→ sa072686 推:妳好 XD 以後也請多照顧~ 0727 20:17
作者: sa072686 at 07/07/27
喔不,我好像向某人承諾了如果得獎要穿「我要上台大」服領獎…XDDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: silentvow at 07/07/27
※ 引述《sa072686 (公假中的老人)》之銘言:
> 喔不,我好像向某人承諾了如果得獎要穿「我要上台大」服領獎…XDDD
沒在怕的, 大不了再跟cs借一件讓發學弟陪你一起穿 XDDD
//記得轉身.
--
╓───╖╓╖╓╖ 高中生 ─── 一種會全力作傻事的生物
║╓──╜║║║║ 而且很容易一頭熱,馬上又冷掉。
║╙──╖║║║║ ╖
╙──╖║║║║║ ╓─╖ ╖─╖ ╫─███ ▉ ▊ ▋ ▌ ▍ ▍ ▏
╓──╜║║║║╙──╖╟─╜ ║ ║ ║ ╖ ╓╓─╖╖╥╓
╙───╜╙╜╙───╜╙─╜ ╙ ╙ ╙╜ ╙─╜╙─╜╙╨╜
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 219.70.28.127 (和信超沒品)
→ sa072686 推:喔,那也不錯…不過不要排擠陳鈧,再來一件好了XDDD 0727 22:11
→ silentvow 推:這個嘛 ... 我不知道有沒有他的尺寸 XDDD (誤) 0727 22:49
作者: seanwu at 07/07/28
10998 Flipping colors
給你一個黑色的寬H*高V的矩形,以及兩個實數0<h,v<1
你要將這個矩形以下面的方式著色 (原點在左下角)
1.將矩形以h:1-h的比例分成左、右兩塊
2.將矩形以v:1-v的比例分成下、上兩塊
3.左上塊和右下塊顏色保持不變
4.將左下塊和右上塊的顏色反白
5.把左下塊和右上塊重新以這整個程序劃分、上色 (無限次的分割下去)
現在,給你點(x,y),且這個點保證不會落在任何矩形邊上,
問你矩形上在點(x,y)的顏色?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/28
10739 String to Palindrome
給你一個字串,問最少要幾步才能將它變成迴文?
你可以在任何地方增加、刪除、修改任意一個字元,這被視為一次操作
//這題好眼熟...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/28
※ 引述《seanwu (海恩無)》之銘言:
> 10739 String to Palindrome
> 給你一個字串,問最少要幾步才能將它變成迴文?
> 你可以在任何地方增加、刪除、修改任意一個字元,這被視為一次操作
> //這題好眼熟...
我想起來了,在共匪書動態規劃章的第一題... = =
題目: 給一個由[、]、(、) 組成的括號序列,你可以增加、刪除任何括號
問最少要幾次操作才能將它修成正確的括號序列?
正確的ex: 'empty'、[]、()、[()]、[[]()]([])、((()))[[]]....等等
那麼,解法..
令目前的括號字串為 S,將S 修成正確需要 c[S]
1. S = 'empty',則 c[S] = 0
2. 如果 S = (S') 或 [S'],則 c[S] = c[S']
3. S = S') 或 (S' 或 S'] 或 [S',則 c[S] = c[S']+1
4. S = AB ,則 c[S] = c[A]+c[B]
據此做DP,為O(N^3)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/07/28 Sat 13:21:58
→ Tommy 推:可是10739只要O(n^2)而已吧... 0728 14:30
→ seanwu 推:嗯對,這題多了第4.所以多乘一個N 0728 14:44
→ PG 推:這題名百好像有 0728 14:51
→ Tommy 推:喔~~ 0728 14:58
→ Tommy 推:所以其實這題很簡單嘛... 0729 11:18
→ seanwu 推:嗯,不難 0729 11:18
→ Tommy 推:就類似10739的DP完 再用矩陣相乘的O(n^3) DP吧 0729 13:01
作者: zenixls2 at 07/07/28
2007-07-28 07:20:38 Accepted 1.592 504 zenixls2 C++ 498 - Polly the
Polynomial
Compile Error好幾次....
不難,但記得兩次輸入都要判斷eof
寫了這題就去寫10268吧!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.106.246 (中滑一番)
→ Tommy 推:P.S.10268要用Horner's Rule計算多項式..不然會overflow 0728 15:58
→ zenixls2 推:解釋一下什麼是horner's rule? 0728 16:14
→ Tommy 推:請上wiki 0729 11:18
作者: seanwu at 07/07/28
好難,為什麼N要偷偷改成10000... >"<
有沒有什麼cut可以用?
IDFS可以輕易的將<200的秒掉,
加了一個很弱的估計的IDA*變成有些數跑的出來,有些不行(ex.9982...)
嗯...試問一下hint?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/07/28
strcmp的傳回值不是-1,0,1,是<0,0,>0
不要再被騙了...我已經遇上兩個人中標了...(而且還是同一題)
我覺得應該是編譯器的問題,不然平常做應該早就出事了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ Tommy 推:其中一個就是我XDDDDD 0728 16:01
→ gloompisces 推:然後我是另一個XD 0728 16:02
→ sa072686 推:我都用<0和>0 (茶) 0728 17:04
作者: zenixls2 at 07/07/28
2007-07-28 08:12:42 Accepted 0.119 3368 zenixls2 C++ 10268 - 498
-bis
純粹暴力解題
記得陣列開大一點
此外,兩次輸入都要判斷eof,否則會WA
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.106.246 (中滑一番)
作者: seanwu at 07/07/28
10690 Expression Again
給你N+M 個數(-50~50),將這些數分成兩組:一組N個,另一組M個
問這兩組數和的乘積,最大最小值分別是多少?
順便請教這題的正解....
<請按大E觀賞亂七八糟做法...名次還不差耶@@>
我是單純的用O((N+M)*N*5000)的DP,
加上一些平行運算的技巧做到O((N+M)*5000)
嗯...N<=50 而且 long long 有 64-bits...就這樣
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ gloompisces 推:我想問為什麼要 long long.. 0729 00:23
→ seanwu 推:因為..50<64,每個bit存一個,然後dp[j] |= (dp[j+x]<<1) 0729 11:15
→ seanwu 說:原本應該是用一個迴圈去跑它,但我用一個'<<'全部一起算 0729 11:16
→ gloompisces 推:果然比我的O((N+M)*N*5000)強XD 0729 12:35
→ seanwu 推:可是我覺得這是歪解... 0729 20:58
作者: seanwu at 07/07/28
10453 Make Palindrome
給一個字串,你可以在任何位置插入字元
求最少需要插入幾個字元,才可以讓這個字串變成迴文,並輸出這個迴文
//也滿眼熟的嘛...(誤)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ Tommy 推:DP完 再追蹤... 0729 13:00
作者: zenixls2 at 07/07/29
TLE啊
不知為什麼
#include<iostream>
#include<math.h>
using namespace std;
bool p[100000]={0};
int k[10000]={0};
int i,j,t=0;
int main()
{
for(i=2;i<=1000;i++){if(p[i]==0)for(j=i*i;j<100000;j+=i)p[j]=1;}
for(i=2;i<100000;i++)if(p[i]==0){k[t]=i;t++;}
while(1)
{
long/* long*/ a,su=1;
cin>>a;
if(a==1){cout<<"0\n";continue;}
if(a==0)break;
j=0;
for(i=0;k[i]<=sqrt(a)&&i<t;i++)
if(a%k[i]==0)
{
a/=k[i];
while(a%k[i]==0)
{
a/=k[i];
su*=k[i];
}
su*=k[i]-1;
}
su*=a-1;
cout<<su<<"\n";
}
return 0;
}
↑AC code
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.101.47 (中滑一番)
▲ zenixls2 改@2007/07/29 Sun 11:32:39
▲ zenixls2 改@2007/07/29 Sun 11:51:31
作者: gloompisces at 07/07/29
時間: 即刻起到凌晨4點
有人要玩嗎XD
Problem A: 給你一個 r*c (>0 & <101) 的格子
找出有幾個'*'沒有和其他的'*'相鄰 (8個方向都算相鄰)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.56 (不失敗大學)
→ PG 推:可惡 我超過(大約)11點後就不能上網 XDD 0729 13:07
→ PG 說:要不然我也很想玩這個 線上即時比賽超好玩 XD" 0729 13:07
▲ gloompisces 改@2007/08/06 Mon 14:22:26
作者: gloompisces at 07/07/29
Problem B: 給你p和n,你要求出一個 anti-arithmetic 數列的第n項
anti-arithmetic是嚴格遞增數列,他的前p-1項是1,2,3,...,p-1
再來你要一個一個加入元素,新加入的元素要盡量小
但加入後不能產生p項的等差數列
3<=p<=30 1<=n<=2000000000 .....
有難度了XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.56 (不失敗大學)
▲ gloompisces 改@2007/07/29 Sun 00:50:36
→ gloompisces 推:注意,題目騙人,請用 long long int 讀 n 0729 14:56
作者: sa072686 at 07/07/29
AC了…加了很多很多 cut 才過…
想想看吧XD,建表夠快(0.006)但找的部份還待加強
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 07/07/29
Problem C : 給你 n (1<=n<=1000000000) , k(2<=k<=100)
問你最到可以從1到n中取出幾個數,使任一個不是另一個的k倍
//我竟然因為白痴錯誤TLE兩次= =
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.56 (不失敗大學)
作者: gloompisces at 07/07/29
Problem D : 如果薪水超過m元就要被扣x%的稅
所以若m=2000,p=10 A賺2050元,B賺1950元
則A實得1845元,B實得1950元,A反而少了
現在A賺的比B多,但拿的比B少,請問A的最高薪資是多少?
若不可能則輸出 Not found
你可以假設所有人的薪水都是正整數,但x為0~100間的整數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.56 (不失敗大學)
▲ gloompisces 改@2007/07/29 Sun 14:26:28
▲ gloompisces 改@2007/07/29 Sun 15:45:07
作者: zenixls2 at 07/07/29
2007-07-29 03:42:12 Accepted 3.793 592 zenixls2 C++ 10299 - Relativ
es
輸入1要回答0
然後,我原本的演算法有錯,導致TLE
總而言之,就是犯了智障的錯誤
不�這題有人可以做到0.1以內的嗎?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.118.214 (中滑一番)
→ Tommy 推:1.609秒... 0729 12:16
→ gloompisces 推:http://acm.uva.es/p/problemstatnew.php?prob=10299 0729 12:25
→ sa072686 推:喔,我拿你的 code 加的 cut 是跑 2.9 0729 13:26
→ sa072686 推:換 scanf 和 printf 說不定就在 2 秒內了 (茶) 0729 13:26
→ Tommy 推:這要怎麼cut呀? 0729 14:58
→ sa072686 推:例如把該因數除掉發現變成1,或是變成質數等等 0729 16:40
→ Tommy 推:我沒cut就變1.609秒了= = 0729 17:03
作者: seanwu at 07/07/29
682 Whoever-pick-the-last-one-lose
一些石頭放在5x5大小的棋盤上,每格最多放一個,
現在兩個人輪流拿石頭,
每次可以拿同一行或同一列連續格子上的幾個石頭
(石頭也要連續)
拿到最後一個石頭的人輸.
請問對於現在的盤面來說,先手會贏還是會輸?
(假設兩人都很厲害,如果有機會贏,那麼一定會贏)
-Translated by tmt514 form EverydayACM-
<Hint E>
標準的對抗式搜索,加上DP就可以了,另外記憶體直接開會MLE,
請用bit 來儲存,還有先把150 種拿法預先算出來(25*bit)要用時直接調,
速度上會快很多而且也比較好寫
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ Tommy 推:Alpha-Beta Prunning...(我來亂的) 0729 14:58
→ seanwu 推:不用啦...= =+ 0729 15:06
→ seanwu 推:我好像還沒有寫過題目要用α-β剪枝的,硬要用反而變慢orz 0729 23:02
作者: gloompisces at 07/07/29
Problem G : 1<=m,n<=1000000000
n m 1
請求出 Σ Σ --------------------------------------
j=1 i=1 i(i+1)(i+2)(i+3)j(j+1)(j+2)(j+3)
答案用分數表示
math + bignumber.....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.113 (不失敗大學)
作者: zenixls2 at 07/07/29
真是[ ]的難除錯
2007-07-29 09:35:23 Accepted 0.027 Minimum zenixls2 C++ 120 - Stacks of
Flapjacks
首先要排序
並紀錄之前輸入的順序,一一和排序後的對應
再由最大之元素開始排
然後情形可分為以下三者
1.轉兩次:原本不在最左邊者,轉至最左,再轉至應排到的地方
2.不需轉:skip
3.轉一次:直接轉至應排到的地方
另外,輸入請注意一下
(相對SA學長的C,這是C++版)
cin>>[int *n];cin>>[char *c];
if(c=='\n')結束輸入;
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.106.104 (中滑一番)
作者: PG at 07/07/29
提供一下這題的Hint
把Sample的數字寫出來 即可觀察到規律
遞迴or迴圈都可...
--
放學後 我坐在靜謐的教室裡讀書 晚風輕拂 攪亂了一池春水 捲起了幾張散落桌上的考卷
即使黑板上的數字正不斷減少 指考步步逼近 竹園岡的夜晚卻依然是神秘中夾雜幾許清麗
當我們在CS的雪地上廝殺時 滿地的血漬 班黃脫落的噴漆 和雪地的潔白形成強烈的對比
當我們思索著泡泡的奧妙時 咀嚼著19連鎖的技術 一邊讚嘆 一邊對學弟的心機低迴不已
我們是否還記得 當初穿上嶄新的一中制服時 心中那股夾雜著狂喜的澎湃悸動
我們如何去憑弔 那逐漸逝去的熱血和年輕時的真誠 http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.132.80 (福爾摩沙固網)
→ gloompisces 推:這題和11245都是math 0729 20:21
作者: PG at 07/07/29
如果x==100 我要如何輸出?
Not found?
--
放學後 我坐在靜謐的教室裡讀書 晚風輕拂 攪亂了一池春水 捲起了幾張散落桌上的考卷
即使黑板上的數字正不斷減少 指考步步逼近 竹園岡的夜晚卻依然是神秘中夾雜幾許清麗
當我們在CS的雪地上廝殺時 滿地的血漬 班黃脫落的噴漆 和雪地的潔白形成強烈的對比
當我們思索著泡泡的奧妙時 咀嚼著19連鎖的技術 一邊讚嘆 一邊對學弟的心機低迴不已
我們是否還記得 當初穿上嶄新的一中制服時 心中那股夾雜著狂喜的澎湃悸動
我們如何去憑弔 那逐漸逝去的熱血和年輕時的真誠 http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.132.80 (福爾摩沙固網)
→ gloompisces 推:Yes 0729 20:21
→ PG 推:RE變成WA了 XD 0729 22:17
→ gloompisces 推:討論版看看吧 0729 22:18
→ PG 推:嗯 謝謝 0729 22:20
作者: seanwu at 07/07/29
突然有個想法(但不管用,因為n太大了XD)
我只是覺得這樣還滿有趣的,而且可以做為不錯的例子
---
這題可以用flow匹配來做耶...XD
考慮一個以1~n 做為頂點的圖,如果i=j*k則i,j之間有邊
於是變成求這個圖的最大獨立集的頂點個數
(獨立集: 圖的一個頂點子集,兩兩之間無邊相連。最大獨立集即頂點個數最多的)
並且,每個頂點只有兩條邊 (一個連向x/k、一個向x*k)
所以這是個二分圖,利用二分圖匹配,求最大獨立集頂點個數
個數 = 總點數 - 最大匹配數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 推:最後,由"只有兩條邊"這個非常特殊的性質, 0729 21:30
→ seanwu 說:應該就可以得到數學解了 0729 21:30
→ PG 推:Orez... 0729 21:42
→ DarkKnight 呱:何必把事情弄得這麼複雜呢 XD 0730 23:12
→ seanwu 推:這樣比較帥 XDD 0730 23:33
作者: gloompisces at 07/07/29
Problem F : Game
A 和 B 在玩遊戲,這個遊戲有以下規則
* 有兩堆石頭,第一堆有a個,第二堆有b個
* 兩人每次可選擇兩個動作中的一樣 (1) 拿其中一堆石頭,個數任意
(2) 兩堆都拿,但是拿的個數的絕對值差必須<=k
* 拿到最後一個石頭的為贏家
其中1<=a,b<=100000,1<=k<=20
你必須輸出在正確的策略下,先拿的那個人會贏還是會輸
Special thanks of translate : littlecan
<<Hint E>>
這又是一題math,組合題,難度大概是全國能力數學競賽等級以上
大部分的狀況都會贏,可以先求前幾個輸的狀況推論
但是不要太早下定結論,不然就和討論版那位一樣了
如果要進一步的 hint 可以推文在下面或者寄站內信
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.113 (不失敗大學)
→ seanwu 推:拿的個數差的絕對值 0730 20:16
→ seanwu 推:嗯,可以拿DP跑出一些結果,再找關係 0730 21:58
→ seanwu 說:然後...結果還滿巧妙的,雖然我還是推不出來,是猜的XD 0730 21:59
▲ gloompisces 改@2007/07/30 Mon 22:14:07
作者: sa072686 at 07/07/30
要是當時我會的話就破台了…
題目是給一串四則運算式,要輸出正確答案
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[1001];
FILE *file;
while(gets(str)) /* 讀入四則運算式 */
{
file = fopen("C:\123.c", "w"); /* 開啟一原始碼檔案 */
fprintf(file, "#include <stdio.h>\n\n"); /* 寫入程式碼 */
fprintf(file, "int main() {\n"); /* 使其輸出該四則運算式 */
fprintf(file, " printf(\"%%d\", %s);\n", str); /* 的答案 */
fprintf(file, "}\n");
fclose(file);
system("gcc -o C:\123.exe C:\123.c"); /* 編譯它 */
system("C:\123.exe"); /* 執行它 */
printf("\n");
}
return 0;
}
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
→ chensc 推:科科XD 0730 10:27
→ PG 推:借轉!! 這解法好歡樂 0730 11:16
φ PG 轉:到 [PG] 看板,于 2007/07/30 Mon 11:16:55
→ Tommy 推:這會有什麼效果嗎? 0730 12:39
→ sa072686 推:這會跑出正確答案 0730 12:49
→ devilqxect 推:這.....好歡樂的解法XDD 0730 13:31
→ Tommy 推:這真的跑的出來嗎?.... 0730 14:31
→ Zero 推:當然會阿,程式沒寫錯當然就會跑出結果阿~ 0730 14:57
→ Tommy 推:為什麼要編譯他阿...直接print不就好了嗎.. 0730 15:17
→ PG 推:去年的題目 是要求出四則運算的結果 0730 15:19
→ PG 說:例如說1+2*3 要輸出 7 0730 15:19
→ PG 推:因此 這程式就是把1+2*3算式編譯成執行檔之後 執行 0730 15:20
→ PG 說:你直接printf沒辦法得到答案... 0730 15:20
→ Tommy 推:為什麼呀= = 0730 15:21
→ PG 推:JavaScript有eval可以直接執行 不過/C++ru.4ao6104z83xk7 0730 15:21
→ PG 推:C/C++就沒辦法了 (修正樓上錯字) 0730 15:21
→ Tommy 推:可是這個不能印出小數耶.... 0730 15:21
→ Tommy 推:改一下應該就可以了 0730 15:25
→ Tommy 推:可惜這不能用來解ACM那題QQ...沒弄錯的話應該會Res...func 0730 15:26
→ hrs113355 推:太酷了 借轉XD" 0730 15:44
φ hrs113355 轉:到 [hrs113355] 看板,于 2007/07/30 Mon 15:44:44
→ seanwu 推:..我記得VB有個Run("算式")耶... 0730 16:07
→ AikoSenoo 推:好帥! 0730 21:39
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/07/30 Mon 22:47:57
→ pioneerlike 推:噢,相見恨晚XDDDDDDDDDDDD 太酷了 0730 23:37
作者: seanwu at 07/07/31
※ 引述《gloompisces (瞬間和永遠)》之銘言:
> Problem B: 給你p和n,你要求出一個 anti-arithmetic 數列的第n項
> anti-arithmetic是嚴格遞增數列,他的前p-1項是1,2,3,...,p-1
> 再來你要一個一個加入元素,新加入的元素要盡量小
> 但加入後不能產生p項的等差數列
> 3<=p<=30 1<=n<=2000000000 .....
> 有難度了XD
你沒有說p是質數 = =
我想了兩天後仔細看了原文題目
發現p是個質數後就了結了
....
(非質數的話會有一堆例外...應該說沒有規則可循)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ gloompisces 推:非質數會有例外喔XD,我不知道耶 0731 21:55
→ seanwu 推:喔喔,所以非質數也有規則? 0731 22:25
→ gloompisces 推:我不確定耶..你是怎麼做的? 0731 22:30
→ gloompisces 推:沒錯要質數才行XD 0731 23:58
作者: gloompisces at 07/08/01
10207 - The Unreal Tournament
有一天,有兩個人A和B在比賽,A只要再拿i場勝利就贏了,B則要再拿j場勝利就贏了
(0<=i,j<=1000),在每一場比賽中A的勝率是p,B的勝率是q (q當然=1-p)
A可以贏的機率可以用以下函式表示
Function P(i,j)
if i = 0 then return 1
else if j = 0 then return 0
else return pP(i-1,j) + qP(i,j-1)
Input中有數組測資,每組第一行有一個浮點數p和一個正整數N (N<=1000),N=0代表結束
底下N行每行有兩個整數i,j
對於每個i,j,請輸出A贏的機率和你呼叫這個函式的次數
(如果i和j都=0,則輸出-1.00000和0)
<Hint 1> (Pagedown)
不要和我一樣笨到直接去跑那個函式,不然就算 timelimit 設一天應該還是會TLE
這題偏向math但不是很純粹的math,前面那個浮點數(應該)比較好做
公式推出來後用不會 overflow 的方法做
後面那個 BigInt 比較麻煩,最大答案在600位左右,直接建表DP理論上會MLE
我是把前幾項弄出來找規律,不過找了一個下午orz
後面的東西大概會剝奪你思考的樂趣XD,要繼續看下去的就按E吧XD
<Hint 2> (E)
對於那個浮點數我是用log,詳細公式我忘了...
誤差..應該不用擔心 (真的碰到了再說吧orz)
不過如果有用到log(m)和m轉來轉去的要小心double的overflow
對了電腦的log好像是用e為底 (e大約是2.7182818284)
那個BigInt我也是偶然發現的,先寫好一個巴斯卡三角形
轉45度,再把每個數先減1再乘2,似乎就得到題目要的
然後強者seanwu說巴斯卡三角形的每一項好像都可以寫成C幾取幾
利用這個加上BigInt就可以求出答案了
以上..有問題再推文或回文討論吧
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
▲ gloompisces 改@2007/08/01 Wed 17:38:31
作者: gloompisces at 07/08/01
這個contest的日期是國際標準時間8/4(六)早上6:00到11:00
換成台灣時間是下午2:00到晚上7:00
有興趣的人可以考慮一下 (難得不是在深夜XD)
只要在ACM新網站註冊成功,用那裡的帳號登入就可以加入比賽了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.137 (不失敗大學)
作者: seanwu at 07/08/01
※ 引述《sa072686 (南一中97級小教學~*)》之銘言:
> 這題似乎有改測試資料
> 目前AC人數少掉很多,AC率好像剩7.6%
> 我之前有AC過,現在也不見了
> 題數也少掉一題,舊CODE上傳也失敗了
> 等有空再重解看看…
> 舊的那篇為考慮文章篇數的關係就不刪掉,但應該沒用了
這題怎麼做?
現在還是靠平行演算法打天下 >"<
我跟10690的做法一樣...
如果哪天N>128怎麼辦....|||
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ Tommy 推:平行演算法是蝦米??? 0802 13:47
→ gloompisces 推:我的書上有..但我看不懂 0802 14:06
→ seanwu 推:沒那麼深奧啦...只是一些作弊的技巧.. 0803 17:13
作者: sa072686 at 07/08/01
相當好…7.x秒,1463/1475這樣,memory還吃到12000…
這題到底怎麼解好呢?我是先用篩法,建起質數表後
再以三層迴圈掃過一遍,最後一個拿篩法的表去篩
原本TLE,加了一堆怪怪的cut後勉強過了這樣…
看到前百名跑的速度就覺得很惆悵 囧rz
請各位強者指點一下,謝謝
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:每個大於6的偶數都可以表成兩個奇質數的和 0801 22:41
→ seanwu 推:是Goldbach耶... 0801 23:38
作者: zenixls2 at 07/08/01
還是TLE
這證明其測資字串重複性高
誰可以告訴我怎麼在運算過程中踢掉不合(重複)?
#include<iostream>
#include<string.h>
using namespace std;
int i,d=0,x[123]={0};
char t[2001]={0},g[2001]={0},no[2001]={0};
bool f[2001];
void dfs(int k)
{
int j;
for(j=0;t[j]!='\0';j++)
{
if(f[j]==0)//檢查走過沒
{
g[k]=t[j];
f[j]=1;
dfs(k+1);
f[j]=0;
}
}
if(k==d)//compare(錯了)
{
for(j=k;j>=0;j--)
if(g[j]!=no[j])
{
for(j=0;j<=k;j++)
{
cout<<g[j];
no[j]=g[j];
}
cout<<"\n";
break;
}
}
}
int main()
{
for(i='A';i<='Z';i++)//建表
{
x[i]=d;
x[i+32]=d+1;
d+=2;
}
int n;
int j;
cin>>n;
cin.get();
while(n)
{
cin.getline(t,2000);
d=strlen(t)-1;
for(i=1;i<=d;i++)
for(j=i;j>=0;j--)
{
if(x[t[j]]<x[t[j-1]])t[j]^=t[j-1]^=t[j]^=t[j-1];
else break;
}//bubble sort
for(i=0;i<2001;i++){f[i]=0;g[i]=0;}
dfs(0);
n--;
}
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.106.216 (中滑一番)
▲ zenixls2 改@2007/08/01 Wed 23:05:52
→ PG 推:檢查一下你的CODE有沒有BUG 0801 23:19
→ PG 說:因為這題不需要特殊技巧就可以輕鬆AC 0801 23:19
▲ zenixls2 改@2007/08/01 Wed 23:30:35
→ gloompisces 推:這個有過sample I/O嗎? 0801 23:53
▲ zenixls2 改@2007/08/02 Thu 13:17:20
作者: PG at 07/08/01
還有 我建議PO CODE的時候
最好一併附上想法
要不然別人很難知道你在寫什麼
//除非你的CODE寫的很漂亮..
剛剛稍微看了一下
你跑一下
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc
看一下你程式要跑多久..回報一下
--
放學後 我坐在靜謐的教室裡讀書 晚風輕拂 攪亂了一池春水 捲起了幾張散落桌上的考卷
即使黑板上的數字正不斷減少 指考步步逼近 竹園岡的夜晚卻依然是神秘中夾雜幾許清麗
當我們在CS的雪地上廝殺時 滿地的血漬 班黃脫落的噴漆 和雪地的潔白形成強烈的對比
當我們思索著泡泡的奧妙時 咀嚼著19連鎖的技術 一邊讚嘆 一邊對學弟的心機低迴不已
我們是否還記得 當初穿上嶄新的一中制服時 心中那股夾雜著狂喜的澎湃悸動
我們如何去憑弔 那逐漸逝去的熱血和年輕時的真誠 http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.135.89 (福爾摩沙固網)
→ zenixls2 推:TLE啊~ 0801 23:27
→ PG 推:Orz 那就是你寫法有問題了 0801 23:28
→ PG 推:寫法正確的話應該不用一秒 0801 23:29
→ PG 推:你明天去社部請教一下很發的SA學長好了~ 0801 23:31
→ sa072686 推:沒有很發的SA學長耶 只有很低調的SA學長 0801 23:45
→ PG 推:今天的五樓一點都不中肯 0802 00:08
→ silentvow 推:咩錯 0802 19:56
作者: sa072686 at 07/08/01
※ 引述《zenixls2 (丁丁叮叮)》之銘言:
> 還是TLE
> 這證明其測資字串重複性高
> 誰可以告訴我怎麼在運算過程中踢掉不合(重複)?
我直接告訴你想法好了,code就先不看了…
通常是方法對但寫壞了才看code除錯
重覆的情形其實很好抓,看個例子 ABCC
那麼我們會得到ABC1C2、ABC2C1、AC1BC2、AC2BC1、…
重覆得相當大,不過我們為它加上編號後應該會發現它出現了什麼問題
那就是前面如果放C1,後面就會放C2;但若前面放C2,後面就會再放C1
再看個例子 ABCCC
我們會得到ABC1C2C3、ABC1C3C2、ABC2C1C3、ABC2C3C1、ABC3C1C2、ABC3C2C1、…
我想,加上編號後應該就好理解多了…如何找到方法使其不產生重覆呢?
應該想得到了吧。想不到的話底下有方法之一的HINT,當然,不是唯一方法
結論:讓相同物的編號呈嚴格遞增便可避免
CODE 吃吃吃…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: gloompisces at 07/08/02
根據我目前的了解
Signal 11 是陣列太小
Signal 8 是除以0
那 Signal 25 有人知道是什麼嗎..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.137 (不失敗大學)
→ seanwu 推:orz... 0802 15:27
作者: seanwu at 07/08/02
11149 Power of Matrix
給你N,k以及一個N*N的矩陣A,求出 A + A^2 + A^3 + ... + A^k
-感謝 gloompisces-
<Hint E>
if(k%2=0) A^1+..A^k=(A^1+...A^(k/2))*(A^(k/2)+I) I是等矩陣
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: gba356 at 07/08/02
※ 引述《gloompisces (瞬間和永遠)》之銘言:
> 根據我目前的了解
> Signal 11 是陣列太小
> Signal 8 是除以0
> 那 Signal 25 有人知道是什麼嗎..
SIGXFSZ的值就是二十五,也就是俗稱的Signal 25,代表File size limit exceeded∼
這樣讀吧:SIGnal-eXceeded-File-SiZe,有時候Signal 31也是。
順便來報到一下,註冊單才剛過XDD(人家真的在搬家嘛......)
大家好∼我是建中電研27屆的低調學術,瑪利歐∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 218.161.127.60 (中滑一番)
→ sa072686 推:你好,很高興認識你~ 0802 22:41
→ gloompisces 推:多謝強者回答 0802 22:43
→ gba356 推:請學長多多指教∼ 0802 22:43
作者: seanwu at 07/08/02
Lucky貓有中譯...不過重點不是這個
有一種常用的.. bisection method
求解 f(x)=c,而且f(x)是遞增或遞減的
那麼可以用二分搜尋來解它(底下的例子f(x)是遞增的)
while(Right-Left<0.00001) {
Mid = (Right+Left)*0.5
if( f(Mid)>c ) {
Right = Mid
}else {
Left = Mid
}
}
還有 11247 也是
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 推:還有10341,10668....喔,這一係列的題目太歡了樂了... 0802 23:11
→ PG 推:樓上的口氣真情洋溢 XD" 0802 23:12
→ PG 說:話說 這方法的確很歡樂 0802 23:12
→ seanwu 說:一樓錯字 0804 21:26
作者: sa072686 at 07/08/02
最近剛生的這樣
http://zion.tfcis.org:1557/
拿來試玩 XML 的實驗作,大概不會做什麼功能
/* XML 是在慢怎樣,要跑到四五秒…直接分析字串根本完全無延遲… */
目前已為預定最終版(沒意外不會再更新)
花費時間是半天不到
程式碼在百行內(好吧,加上 views 是在 120 行上下)
沒有即時更新功能(怕哪天會有腦殘們把它當成點點點大戰)
題目頁是連結 ACMA
資料來源是 ACMA 提供的 XML (感謝陳鈧)
已有功能:
比對解題差異
顯示所有人之紅綠藍題
不過,速度可以說是相當快就是了
當然犧牲品就是版面…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/08/02 Thu 23:16:49
作者: seanwu at 07/08/02
10341 Solve It
給你如原題目中美妙無比的那條方程式...
p*[e^(-x)] + q*sin(x) + r*cos(x) + s*tan(x) + t*(x^2) + u = 0
解出x來,無解請輸出 No solution
喔對了,題目中的sin,cos..等等都是用徑度量
<Hint E>
沒人要你解啦...這是個函數在[0,1]遞減,用板上ACM 10566的方法
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/08/02 Thu 23:08:03
作者: seanwu at 07/08/02
誰m了文然後沒收精華...
這樣會漏掉耶...
所以我建議是先收完才m
然後其實也不忙著po完馬上收
或許推文或討論串裡面可以有不錯的東西
附記一下合成一系列文章到一篇精華
1. 一樣,先定錨
2. 在要收的文章上按t,前面會多一個星號,表示標記起來了
3. 按g,然後就照指示做了
(其實我是覺得同一篇名出現3,4篇有點礙眼啦..)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ gloompisces 推:哈哈..不是我,因為被SA教訓過了XD 0802 23:35
→ gloompisces 說:不過你說不要馬上收到是真的,我下次會注意 0802 23:36
→ sa072686 推:不重要的文我都立刻收,例如樓上的ACMSA 0802 23:46
作者: sa072686 at 07/08/02
應觀眾要求,追加打上題號就能飛到該題之原文頁之功能
沒有很嚴謹,只擋非數字
可以亂打,但也只會找不到網頁罷了…
不過版面看起來一整個不搭調 XDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Tommy 推:建議background可以改成fixed... 0804 14:34
作者: gloompisces at 07/08/04
Problem B - Consecutive Integers
把一個正整數n寫成一些連續正整數的和 (n<=10^9)
如果有不只一種分法,請輸出能分成最多個正整數的分法
n=-1時代表測試資料結束
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.119 (不失敗大學)
→ Tommy 推:我怎麼看到這種都會想到暴搜= =... 0805 10:56
→ seanwu 推:樓上要發瘋了... 0805 12:27
→ Tommy 推:其實這有數學解的... 0805 12:53
→ Tommy 推:其實是數學+回圈解 0805 12:53
作者: gloompisces at 07/08/04
Problem D - Repetitive Multiple
有一種數叫repetitive,是指他是某一個數複製好幾次
ex: 11 , 123123 , 45 都是repetitive
給你一個正整數n (n<=10^9),請找出一個最小的repetitive,他是n的倍數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.119 (不失敗大學)
作者: gloompisces at 07/08/04
Problem E - New Marketing Plan
給你一個凸多邊形 (已排序完)
有一個圓,它完全在這個凸多邊形中
問這個圓的最大半徑是多少?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.119 (不失敗大學)
作者: seanwu at 07/08/04
11253 Prob A: Fractal
我們定義: s[r] = s[r-1] + 1 + (s[r-1]前後倒轉,然後0變1,1變0)
s[0] = 1
s[1] = 110
s[2] = 1101100
s[3] = 110110011100100
…
現在有隻機器人,第0秒時在起始點(0,0)面向東方,並以每秒1單位的速度移動
在第t秒時它會轉彎:如果在s[31]中的第t個字元是1,則它會左轉,反之則右轉
給你t,問此機器人在第t秒時的座標
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/08/04
11255 Problem C – Necklace
有三種顏色的珠子各 a,b,c顆,將它們串成環狀,
旋轉、翻轉視為相同,問有幾種串法?
3<=a+b+c<=40
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: gloompisces at 07/08/04
Problem G - Coin Changing Again
你有四種錢幣,面額是c1,c2,c3,c4,分別有d1,d2,d3,d4個
現在你要用他們來買一個v元的東西,問有幾種付錢方法?
測資的第一行有一個正整數 N(<=100),代表有N組測資
每組的第一行有5個數,代表 c1,c2,c3,c4,q (1<=c1<c2<c3<c4<=1000,q<=100)
再下去的q行有5個數,分別是 d1,d2,d3,d4,v (皆<=100000)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.119 (不失敗大學)
→ gloompisces 推:use long long int to avoid Wrong Answer 0812 00:22
作者: seanwu at 07/08/04
11258 Problem F – String Partition
給一個完全由數字組成的字串,你必需將它分段,
使每一段都是 32-bit有號整數 ( <=2147483647)
並且除了0以外,每一段數字皆不能以0開頭
問所有段的總和最大可以是多少?
(原字串長度<=200)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: gloompisces at 07/08/04
剛剛落幕了XD
"TFcis"排名第25
結論:seanwu是強者,大家快拜吧XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.119 (不失敗大學)
→ sa072686 推: seanwu是強者,大家快拜吧XD 0804 19:03
→ devilqxect 推: sesagl是強者,大家快拜吧XD 0804 21:01
作者: sa072686 at 07/08/04
好久沒 po 了,來一篇…
這個看起來像 backtracking 的東西…目前 DFS TLE 中,用大暴力寫倒是不慢
翻譯一下
給你數字 n 代表原本有 n 個數字,現在給你一數列,為原數列之兩兩之和組成
故總數為 n * (n-1) / 2 個,請以不遞減順序輸出原數列,若不可能請輸出 Impossible
0.000 sec AC,84/469
---- 防雷線 ----
方法如下
在面對數列時,會想到比起盲目地搜尋或分解,不如讓它們排得有規律些
因此想到先對它排序,之後觀察看看…我們假設原數列已排序過,以a1、a2、…表示
那麼,我們可以試著去假設一些數字出來…例如我們不難想到:數列中最小者
必是以原數列中最小之兩者相加而來,最大者則必為原數列中最大之兩者相加而來
進一步發現:若a1 + a2 = b1,且a1 < a2 < a3 < …,則得知a2 + a3 > a1 + a3
那麼我們同時確定了b2必為a1 + a3,之後發現一個規則:
ai + aj < a(i+1) + aj
故,a1 + a3 必在 a2 + a3 之前出現,故若 a1 + a4 出現,則只有兩種情形
不是a1 + a4 在 a1 + a3 後出現,便是 a2 + a3 後出現,因為 a2 + a4 > a1 + a4
而 a2 + a3 則最早在 a1 + a3 之後出現,最晚 a1 + an 之後出現
況且只要得知 a1 + a2、a2 + a3、a1 + a3 則得到 a1、a2、a3
因為將其相加恰得 a1、a2、a3 各兩個的結果,扣去已知 a1 + a2 即得 a3,依此類推
因此我們最多花 n-2 次的嘗試,可以得到 a1、a2、a3,再花兩次嘗試可得 a4
接著,往下 a5 不好求,但我們發現數列尾的情況和數列頭是一樣的
故我們可輕易得知 an、a(n-1)、a(n-2)、a(n-3)
那麼即使最大的測資,也只剩下 a5 不知道,只要拿原數列總和扣去已知的八者
亦可得知,每嘗試一組原數列便試著去湊出所有兩兩之和,再比較即可
如此最大測資、最差情形是 ((n-2) * 2)^2 * n(n-1) / 2
以9代入也不過 196 * 36 連一萬都不到,比起 backtracking 要好上太多了
壞處是挺暴力的,298行…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/08/04 Sat 19:07:53
作者: sa072686 at 07/08/04
※ 引述《gloompisces (瞬間和永遠)》之銘言:
> 剛剛落幕了XD
> "TFcis"排名第25
> 結論:seanwu是強者,大家快拜吧XD
我0題耶,比到一半覺得精神太差就跑去睡了(其實只過一小時半,也不到一半)
睡醒都快結束了,就算了 XDDD,以後再去寫比賽題就好
比到一半放棄逃逸真不是個好榜樣 XDrz 乖孩子們別學啊
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/04
※ 引述《gloompisces (瞬間和永遠)》之銘言:
> 剛剛落幕了XD
> "TFcis"排名第25
> 結論:seanwu是強者,大家快拜吧XD
我的..
第一題是 F String Partition ,DP O(N^2)直接秒了
然後是 A Fractal,遞歸然後加一點亂七八糟的東西...
再來 C Necklace寫了超過一個半小時...因為邊翻共匪書學Polya計數
現學現賣這樣...然後發現(a+b+c)!/(a!*b!*c!)不會算,跑去跟韋名學長拿code...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 推:更正一下,Prob F 是 O(N)... 0805 21:56
→ gloompisces 推:真的假的.. 0805 21:59
→ seanwu 推:因為我發現開了 dp[a][b]但b根本不會跳... 0805 22:01
→ seanwu 說:實際上應該說是 O(10*N) 0805 22:01
→ seanwu 說: ^^ 這是 32-bit的位數上限 0805 22:02
作者: seanwu at 07/08/04
1. 置換群
大概像這樣 (天啊夠難看的..)
╭ 1 2 3 4 ╮
╰ 3 1 2 4 ╯
它的意思差不多是:
有編號1~4的四個物品放在1~4的位置上,上面的那個"置換"代表了
將物品1移到位置3,物品2移到位置1,3=>2,4=>4
╭ 1 2 3 4 ╮
│ ↓ ↓ ↓ ↓ │
╰ 3 1 2 4 ╯
然後置換群也可以表示為輪換的循環 (注意右式每組括號中與左式中的關係)
╭ 1 2 3 4 5 6 ╮
╰ 3 5 6 4 2 1 ╯ => (136)(25)(4)
它有三個循環節,長度分別為3、2、1
2. 著色問題與Burnside引理
假設我們有一個點集合,我們要對每個頂點著色,有幾種方法? 另外,給一個置換群,
如果一個著色方案可以經由這個群變換到另一個方案,則說這兩個方案是等價的
舉個例子: 我們要為底下的2x2方格著色,旋轉視為同一種,問有幾種著色方案?
不計旋轉的話有2^4=16種:
1 2 3 4 5 6 7 8
□□ ■■ □■ ■□ □□ □□ ■□ □■
□□ ■■ □□ □□ ■□ □■ ■■ ■■
9 10 11 12 13 14 15 16
■■ ■■ □■ ■□ □■ ■■ ■□ □□
□■ ■□ ■□ □■ □■ □□ ■□ ■■
因為旋轉後相同者視為同一種,因此實際上只有6種
□■ ■□ ■□ □■ □□ ■■
□□ ■■ □■ □■ □□ ■■
先將方格編號
□□ 1 2
□□ => 4 3
旋轉的動作可以視為置換群
轉0 度 f1 = (1)(2)(3)(4)
轉90度 f2 = (1234)
180度 f3 = (13)(24)
270度 f4 = (1432)
現在Burnside定理說:
著色方案的數量為 對每個置換,在該置換上經變換後等於自身者總數的平均值
變換後等於自身的方案(見上面的16種) 個數
f1 (1)(2)(3)(4) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 16
f2 (1234) 1 2 2
f3 (13)(24) 1 2 11 12 4
f4 (1432) 1 2 2
總共有4個置換,平均數 = (16+2+4+2)/4 = 6種(著色方案)
3. Polya定理
沿續之前Burnside引理的結論,Polya定理的一般形式:
以k種顏色對n個點著色的方案數 = (k^每個置換的循環數量)的平均值
以之前的2x2方格為例,著以黑白兩色,有f1~f4四個置換
循環數量(有幾組括號)
f1 (1)(2)(3)(4) 4
f2 (1234) 1
f3 (13)(24) 2
f4 (1432) 1
有兩種顏色k=2,平均數為 [(2^4)+(2^1)+(2^2)+(2^1)]/4 = (16+2+4+2)/4 = 6
仍可算出有6種著色方案
好啦,到此為止,應用和ACM 11255下回分曉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2009/08/28 Fri 10:20:46
▲ seanwu 改@2009/08/28 Fri 10:22:22
▲ seanwu 改@2009/08/28 Fri 10:23:18
作者: sa072686 at 07/08/05
明顯的 union set,很氣人的一題…因為 input 太詭異,錯了好多好多次…
然後跑出來和第一名的 0.002 一樣,卻怎麼優化都到不了 0.000
0.002 sec AC,21/255
翻譯一下
蘿密歐和茱麗葉要辦結婚典禮,但他們家族是世仇…所以沒辦法邀請所有人
現在有一份名單,上面寫著可以邀請的人以及他們的敵人。
而邀請的人僅於他所有朋友均被邀請,但沒有任何敵人被邀請時才會出席
那麼,婚禮當天最多能有幾個人參加?
判斷朋友與敵人除了列表上還有其它情形:
敵人的敵人是朋友,敵人的朋友是敵人,朋友的朋友是朋友,朋友的敵人是敵人
即使不在列表上或互不認識,依此規則仍有可能成為朋友或敵人
輸入第一個數字為測資數,接下來每組測資有數字 n 代表列表上的人數
接下來的 n 列開頭有個數字 m 代表第 n 個人的敵人數,接下來 m 個數是敵人
---- 以下是題目沒講的 ----
請注意:給你的敵人編號有可能比 n 大,例如最多 200 人
但可能有人和編號 7268 的人有仇…這種情形請忽略它…
我就因為這個 WA 了數次…並且請注意第三組測資
1 和 2、3 是敵人,而 2、3 又互為敵人
此時,1 和 2 為敵,而 2 和 3 為敵,則 1 和 3 為朋友,但 1 和 3 又是敵人
1 和 3 為敵,而 2 和 3 為敵,則 1 和 2 為朋友,但 1 和 2 又是敵人
2 和 1 為敵,而 1 和 3 為敵,則 2 和 3 為朋友,但 2 和 3 又是敵人
故,若邀請 1 則必須邀請 1 的朋友 2、3,但又不得邀請 1 的敵人 2、3
若邀請 2 則必須邀請 2 的朋友 1、3,但又不得邀請 2 的敵人 1、3
若邀請 3 則必須邀請 3 的朋友 1、2,但又不得邀請 3 的敵人 1、2
因此這組測試資料能夠邀請的人數為:0
---- 防爆分隔線 ----
提示
我們可以透過指定一個 parent 來確定兩者是否在同一集合中
即,同一集合中的人在透過遞迴指到最上層後,應該會得到同一個 parent
這樣要擴充也容易,合併也容易,尋找也不慢,邊遞迴還可以邊降低深度
這題有 enemy,但只要讓 parent 記錄 enemy 就可以了
…
如果兩個人都沒有敵人,那麼兩人就互為敵人,這很直觀
如果兩個人其中僅一方有敵人,那麼也容易
為了建立「敵人的敵人是朋友」這條關係,我們讓沒有敵人那方與敵人的敵人結盟
這時發現同時也擁有了共同的敵人了
如果雙方都有敵人,我們可以畫個簡圖:
a <=> b
c <=> d
若 a 和 c 敵對,則:
a <=> b
^
|
v
c <=> d
a族群既要和 c 敵對、也要和 b 敵對,不好記錄;c 亦同。
但是若我們先建立同盟,再來同仇敵愾一下,就不會有兩個敵人的問題了
因為,一個同盟只會有一個敵人;而敵人若先建立同盟,我就只要和那同盟敵對就行
也就沒有兩個敵人的煩惱了
意即:先讓 b、c 結盟,a、d 結盟,然後讓 a、c 敵對,便可解決
接著是特殊情況處理
當 a 和 b、c 敵對時,b、c 為朋友;但若 b、c 敵對,則三人互為敵人和朋友關係
那麼,後來我們判斷時,因為要朋友全來,所以要邀所有朋友,但又不能邀敵人
因此,我們就判斷我們的朋友與敵人有沒有重疊身份;也就是說
我們記錄時是有可能我們的朋友中有些既在敵人列表中,又在朋友列表中
但不管它在哪裡,他的朋友列表依然不變;也就是說,我們看敵人所在的集合
是否也和自己同一集合,若是,則這個集合不能邀請
若無敵人,則可全部邀請;若單純雙方敵對,則我們邀請人多的一方,這就不難理解
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:好複雜... 0805 18:11
→ sa072686 推:這題邏輯很重… 0805 18:16
作者: sa072686 at 07/08/05
可能又要開始生產了這樣
嗯…因為某些原因吧
而且我覺得目前的理由似乎不是理由…
嗯,反正就這樣
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/05
11071 Permutation Representation
給一個置換群...
╭ 1 2 3 4 5 .... N ╮
│ │
╰ a1 a2 a3 a4 a5 ....aN ╯
用 (1)^x1 * (12)^x2 * (123)^x3 * (1234)^x4 * ... * (12345...N)^xN 來表示它
O(N^2)是不會過的...你該用[ 線段樹(or BST) 做到 O(NlogN) ]
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/08/05
10819 Problem F: Trouble of 13-Dots
你有M元,有N種東西可以買,給你每種東西的價格以及「喜好度」
問你可以得到的喜好度總和最大是多少?
另外,因為你是用信用卡付帳,如果你總共買了「超過(>)」2000元,
你就可以多獲得200元的回饋。
(信用卡是先買後付喔..所以即使你目前沒那麼多錢,還是可以買,只要月底不透支就行)
<Hint E>
DP跑兩次,一次M,一次M+200
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ DJWS 推:跑一次M+200的就夠了...答案全都在表格裡面 0606 20:48
作者: seanwu at 07/08/05
10860 Many a Little makes a Mickle
給你一個長字串以及一些短字串 (短字串長度不一定小於長字串,這只是個名詞)
要用短字串或它的倒轉去組成長字串,一個短字串使用的次數不限
問最少需要用幾次短字串,組不出來請輸出 Not possible
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: sa072686 at 07/08/06
腦殘暴力題這樣,雖然還是挖一次才過…不過那是我搞錯了 囧rz
0.002sec AC,244/347 (都 0.002 排這樣我也沒辦法…)
翻譯一下
給你現在的日期,以及出生的日期,請確認以下:(詳見 sample io)
如果未出生,請輸出 invalid
如果已出生,但超過 130 歲,請輸出 check
如果已出生,但不足 130 歲,請輸出實際年齡(0 ~ 130)
嗯,請注意到生日就算多一歲這樣 <== 因為這個 WA 掉一次…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/06
11162 Independent Attacking Zones
在一個圓上有共N個(N為3的倍數)紅點和黑點,將它們三個一組分成三角形
每個三角形最多只能有一個紅點,三角形之間不能交叉
問有幾種分法?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.27 (台狼一中桑靈餓)
作者: gloompisces at 07/08/06
10061 - How many zeros and how many digits?
給你兩個數 N (0 <= N <= 2^20) , B (2 <= B <= 800)
請問在B進位中,N!有幾個0在尾巴,以及它是幾位數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.18 (不失敗大學)
作者: sa072686 at 07/08/06
嗯,不難的質數題,不過名次相當爛…
2.166 sec (2512 memory) AC,154/191
翻譯一下
一個數只會有一個唯一的標準分解式,例如 4 = 2 * 2; 6 = 2 * 3; 5 = 5;…
定義一個函式 f(x) 為 x 之標準分解式的和,例如 f(4) = 2 + 2 = 4;
f(6) = 2 + 3 = 5; f(5) = 5;…
其中,像 f(8) 的答案 2 + 2 + 2 = 6,而 f(6) = 2 + 3 = 5,而 f(5) = 5,…
接著就一直持續循環而不會再變動,會呈一數列 8 6 5 5 5 5 5 5 5 …
那麼,我們說它經過三個數後開始循環,也就是 8 的長度為 3
給你數字 n 到 m,求這範圍中長度最長是多少
---- 防雷分隔線 ----
提示
很簡單可以得知:碰到質數一定會循環
然而,也可以得知質數以外的例外,只有 4 = 2 * 2 = 2 + 2
其它情形,標準分解式的和必小於本身
因此,它必漸漸變小,直到碰到質數為止;因為除了 4 本身沒有任一數能回到 4
基本上我是用 DP 來解,也就是說;如果本身不是質數(4 例外)
那麼,它就可以是 length(f(n)) + 1,而因為這函數值會漸漸變小
所以 length(f(n)) 的值必可於表中找到,如此可加快些速度
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
→ seanwu 推:喔,DP做得完全的話...0.141 Rank: 5/193 0806 19:02
→ seanwu 說:對了,試過用RMQ,反而變慢...測資不夠強大 XD 0806 19:03
→ sa072686 推:RMQ是啥鬼?(差好多,那我等等來修一下) 0806 19:54
→ sa072686 推:嗯,0.145…差不多,不過把擋 n > m 的拿掉似乎就wa了 0806 22:14
→ seanwu 推:RMQ是一種平均在O(NlogN)的前置處理後,在O(1)的時間內 0806 22:23
→ seanwu 說:回答在[n,m]之間最大的數是多少 0806 22:23
→ seanwu 說:所以如果詢問沒有很多,效果顯現不出來的 0806 22:28
→ sa072686 推:嗯…還蠻神奇的… 0806 23:05
作者: seanwu at 07/08/06
然後,看看11255吧...
要用黑、灰、白三種顏色為圓環上色,而且限制數量(a,b,c , N=a+b+c)
考慮對圓環的置換群,旋轉、翻轉皆視為等價,所以有以下的置換群:
一、旋轉置換
旋轉i(0<=i<n)格
循環節數量為 w=gcd(i,n),長度為 L=n/gcd(i,n) <= (嗯..好問題,不難想...吧)
為了使圓環在旋轉後保持不變,
第1格顏色=第1+w格顏色=第1+2w格顏色...
第2格顏色=第2+w格顏色=第2+2w格顏色... (各L個)
第3格顏色=第3+w格顏色=第3+2w格顏色...
...
第w格顏色=第w+w格顏色=第w+2w格顏色...
為了達成這樣的條件,每種顏色皆須能被分成數組每組L個,於是
L|a 且 L|b 且 L|c
至於置換後等於自身的數量為
以a/L,b/L,c/L排列1~w格的方法數,因為只要排好 1~w格,剩下的就可以照樣排
## 尋找可以符合 L=n/gcd(i,n)使 L|a,L|b,L|c的i,
計算[(a+b+c)/L)]!/(a/L)!/(b/L)!/(c/L)!
//還沒完...還有翻轉.....
二、翻轉置換
分別就N的奇偶性討論
1. N為奇數
只有一種情況,即一個單節,剩下的兩兩配對
枚舉放在該單節的顏色,剩下的為 a',b',c' (a'=a-1或b'=b-1或c'=c-1)
因為要兩兩配對,所以前提是 2|a', 2|b', 2|c',類似於之前旋轉方案數的算法,
在此置換上的不變方案數有 [(a'+b'+c')/2]!/(a'/2)!/(b'/2)!/(c'/2)!
最後,因為若以通每個點做為對稱軸,總共有N個不同的置換,於是總方案數再乘上N
2. N為偶數
有兩種情況
(i) 兩個單節,剩下的全為兩兩對稱 (對稱軸通過兩頂點) 有N/2個
枚舉放在兩個點中的顏色 (可以同色也可不同色),剩下的為a',b',c'
在 2|a', 2|b', 2|c' 的前提下
方案數為 [(a'+b'+c')/2]!/(a'/2)!/(b'/2)!/(c'/2)!
(ii) 全部的皆兩兩配對 (對稱軸切過兩點之間) 有N/2個
在 2|a, 2|b, 2|c 的前提下
方案數為 [(a+b+c)/2]!/(a/2)!/(b/2)!/(c/2)!
最後,在每個置換上不動方案數(經置換後不變)的總和取平均值,
即除以置換數量 2*N,就是答案了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/08/06 Mon 20:12:24
→ seanwu 推:喔,討論版有人把公式貼出來 = =+++ 0806 20:13
→ seanwu 說:很漂亮...不過我比較想知道原因... 0806 20:15
→ Tommy 推:其實我一開始就想說這題要用DP解會不會成功... 0808 16:35
→ seanwu 推:嗯...結果...? DP我還想不出來 0808 18:59
▲ seanwu 改@2009/08/28 Fri 10:23:05
作者: gloompisces at 07/08/06
10036 - Divisibility
先給你兩個數字N(<=10000)和K(<=100)
再給你N個整數 a1,a2,..,an
判斷能不能寫成 x1*a1 + x2*a2 + ... + xn*an 是K的倍數
其中 x1,x2,...,xn 為1或-1
<Hint E>
[ DFS ] (SA說的..) or 加上很多cut的 [ DP ]
注意: 測試資料中極可能含有以下類型的東西
N=10000 , K=2 , a1=0 , a2=a3=..=an=1,請先cut掉這種東西,不然容易TLE
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.143.18 (不失敗大學)
→ seanwu 推:DP可,不過比較慢 (如果[ ]的cut做得好) 0806 20:17
→ sa072686 推:等等等等…等一下,我用的是DP啊 囧rz 0806 20:19
→ sa072686 推:O(mk) 的DP這樣… 0806 20:20
→ gloompisces 推:是喔,我怎麼聽成DFS XD 0806 22:15
→ sa072686 推:話說我DP沒cut,還以為你寫反了…XD 0806 22:17
→ gloompisces 推:真的喔,我cut得不夠就TLE耶XD 0806 22:18
→ gloompisces 說:不用cut就pass..強者!! 0806 22:18
作者: sa072686 at 07/08/06
歡樂題,flood fill?BFS?不用,暴力掃就會過
0.033 sec AC,58/169
翻譯一下
給你一張圖,上面有些格子可能是空的('.')或有東西('*')
我們要數數看上面有幾顆星星。由於星星很小,所以不會佔超過一個格子
並且,不會有兩個星星連在一起。例如:
*.. 這樣子,圖上的四個點都是連在一起的;由於星星不會相鄰
.**
..* 所以它們可能是更大的物件,例如月亮、太陽、…
---- 防雷分隔線 ----
星星不會相鄰,且必只有一格大小,所以只要找到單獨的一格就行了
將整個圖掃過一遍(O(mn))判斷每個點周圍是否有另一個點,就可以了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:嘔雪特 身體反射讓我很衝動的直接開BFS.. 0806 22:26
→ Tommy 推:我也是直接就開floodfill了... 0807 13:04
作者: sa072686 at 07/08/06
好吧,因為蠻好玩的,補齊一下翻譯…
※ 引述《seanwu (海恩吳)》之銘言:
> 你在一個R*C的森林中,要從(1,1)走到(R,C)
你是有名的神奇寶貝訓練師,名為Ash。為了成為最強的神奇寶貝訓練師
必須透過挑戰道館來取得徽章,並打進神奇寶貝大聯盟(名詞忘了…)
憑著訓練得極佳的皮卡丘、傑尼龜、妙娃種子
現在已經有六個徽章了,接著要走 Enchanted Forest(名詞…呃…|||)
但是這裡有強大的神奇寶貝…嗯,雖然不是巨大的龍
> 但有些點是block,不能走
> 有些點住了奇怪的不明物體,放大絕使半徑為L的圓形內(含邊)皆不能靠近
圓圓的,唱歌會使人睡著,胖丁嘛
> 問你最少要走幾步,走不到請輸出"Impossible."
> <Hint E>
把所有不能走的點標掉,再做BFS,注意起點或終點不能走的特例
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:(2,2)和(3,3)的距離是根號2... 0806 23:37
→ sa072686 推:這樣說是「半徑為L的圓形內」並沒有問題… 0806 23:48
→ AikoSenoo 推:皮卡丘傑尼龜和妙蛙種子XD 0807 21:46
→ sa072686 推:原來 XD 0807 21:59
▲ sa072686 改@2007/08/07 Tue 21:59:21
作者: seanwu at 07/08/06
866 Intersecting line segments
給一些線段的座標,這些線段在座標平面上互相截切,一條線段切開後變兩條
問總共有幾條線段?
<Hint E>
注意三點共線,還有如果你用座標解法,小心誤差
或者你也可以只需要一個能判斷兩線段是否交叉的函式,O(N^3)可以過
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: sa072686 at 07/08/07
嗯,因為速度實在差太多了…
目前是 0.145 sec 這樣…所以來貼一下方法
---- 防雷分隔線 ----
質數用篩法會快很多很多,我之前的方法是每個質因數都除除看,順便相加
也順便從中間找到新的質數這樣,不過感謝 seanwu 學弟提供的方法
使用篩法,在篩掉非質數的數時,由於可以確定篩到的數必含有目前的質因數
比如說:12 在篩掉 2 和 3 的倍數時都會篩到
那麼,我們可以透過 DP 的方式,使用之前得到的答案來得到解答
除了存放解答的表外,再另開一張表存下:目前這數字標準分解式加總的值
比如說 dp[6] = 5
那麼我們在篩 2 的倍數,篩到 12 的時候,就說 12 是 2 的倍數,存起來
之後找到 12 的時候,我們可以知道它是 2 的倍數,所以必整除 2
因此,可以確定:它的標準分解式的值為 f(12/2) + 2
然而,之前已有建表存入 6 的值為 5,所以可以直接得知 12 的值為 5 + 2 = 7
這樣既可以使用速度快的篩法,取得解答的速度也會加快許多
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: gloompisces at 07/08/07
10947 - Bear with me, again..
這世界上到處都有熊,事實上,看看你的四周,搞不好你會發現一隻!
好啦,或許沒有。
以下是(被嚴重簡略過的)題目故事
Larry 他很想從這座島上逃出去,於是他建造了一艘船
由於嚴重缺乏工具,這艘船只能在海上連續航行K天,而且每天的最多只能航行M公里
但是如果中途有靠岸,他就可以把船修復成原本的樣子
題目會先給你兩個x,y,r,分別是起點島和終點島的x座標,y座標,半徑(這些島都是圓形的)
接著給你一個非負整數N (<=100),代表還有N座其他的島
接下來N行是每座島的x,y,r
沒有兩座島會重疊,所有的x,y,r皆<=200
請輸出他們是否可以從起點島逃到終點島。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.249 (不失敗大學)
→ Tommy 推:好困難......BFS? 0807 14:37
→ gloompisces 推:我是用BFS,不過DFS應該也可以 0807 15:11
→ Tommy 推:然後我就莫名其妙的WA了... 0807 15:12
→ seanwu 推:floyd也可以喔....3.783 sec 0807 18:18
→ seanwu 推:disjoint-set 0.164 sec 0807 18:24
→ sa072686 推:唔?暴力亂掃 0.111 sec 9/324 0807 19:40
作者: sa072686 at 07/08/07
防爆防爆…
---- 啦啦啦啦 歡樂解法分隔線 ----
嗯…上一篇文的推文提供了不少解法…這邊是暴力亂掃,不喜熱血暴力者請回這樣
反正,我就先檢查起點與終點有無相連嘛…
然後,開始用暴力(n^2)的方式掃蕩,類似 Dijkstra 但只看相不相連
若相連,就馬上加進集合、更新對外相連列表;若剛好連到終點就直接打掉
嗯,暴力亂掃第九名,嗯…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:講太快XD 這樣最差情況與 Dijkstra 一樣 0807 20:38
→ sa072686 推:但因為一次可抓相當多點 所以掃的次數可以少很大 0807 20:39
作者: seanwu at 07/08/07
10733 The Colored Cubes
有一個正立方體,要將它上色,每一面各塗一色 (顏色可以相同)
共有n種顏色可以使用,問有幾種不同的塗色方式?
(經旋轉後相同視為相同的方式)
<Hint E>
標準的Polya定理! 比較麻煩的反倒是那24個置換群....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/08/07
10601 Cubes
有12條塗有顏色的短棍(顏色可能相同),你要將它們組成一個正立方體,
問有幾種組法,旋轉後相同視為相同
(還沒寫啦...想到24個置換群就有點煩....orz)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 推:嗯,ok啦 算出所有的群後分類,分別做 0808 18:55
作者: sa072686 at 07/08/07
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (sa072686)
標題: [ACM#] 11241 (fwd)
時間: 2007/08/07 Tue 23:28:37
作者: sa072686 (sa072686)
標題: [ACM#] 11241 (fwd)
時間: 2007/08/07 Tue 23:28:18
※ 引述《AikoSenoo (阿南─目標設定,衝吧!)》之銘言:
http://acm.uva.es/p/v112/11241.html
幫忙中譯一下...
簡單的來說 就是要算T(溫度) D(露點溫度) H(溼度)
給其中兩個求第三個
不難吧?只要會簡單的數學式就好
humidex = temperature + h
h = (0.5555)*(e - 10.0)
e = 6.11 * exp [5417.7530 * ((1/273.16) - (1/(dewpoint+273.16)))]
這是濕度的算法
其中exp是自然指數
其反函數在程式中是log()
給T跟D求H還有給D跟H求T都很簡單
只要代公式就好
至於給T跟H求D就需要移項
移項方法...E
從humidex = temperature + h
可得humidex -temperature = h
又h = (0.5555)*(e - 10.0)
所以e=(h/0.5555)+10.0
最後這個最麻煩 牽扯到了exp的關係
由e = 6.11 * exp [5417.7530 * ((1/273.16) - (1/(dewpoint+273.16)))]
可以得到e / 6.11 = exp [5417.7530 * ((1/273.16) - (1/(dewpoint+273.16)))]
兩邊開log 便可得到exp裡面的那段數字
即log(e / 6.11)=5417.7530 * ((1/273.16) - (1/(dewpoint+273.16)))
再把簡單的數字移過去...
log(e / 6.11)/5417.7530-(1/273.16)=- (1/(dewpoint+273.16))
我在這裡用一個變數k存放log(e / 6.11)/5417.7530-(1/273.16)
而dewpoint(D)的值就是k倒數然後*-1,再減掉273.16
D=-1*pow(k,-1)-273.16
這樣子=w=/
這邊是比較數學的部份 如果解釋比較深的話要記得自己導導看∼
--
「要快點回來啊,笨蛋。」
「嗯,我會的呢,因為我們約好了(笑)。」
──流著淚也好,如果還能夠笑,就一定有能夠幸福的,理由。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_220.132.136.186(HiNet)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2007/08/07 Tue 23:28:54
▲ sa072686 改@2007/08/07 Tue 23:34:38
▲ sa072686 改@2007/08/07 Tue 23:37:50
作者: gloompisces at 07/08/08
給你三角形的三條中線長度,問你三角形的面積
若不存在此三角形請輸出 -1.000
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.249 (不失敗大學)
→ suhorng 推:對! 我也是被puts("-1");表到WA一次XDrz 1028 09:27
作者: sa072686 at 07/08/08
有點像數學又不太像的…和 270 有點相似
0.004 sec AC,1/133,感謝 seanwu 學弟的指導
翻譯一下(好啦,我承認我換了講法…原主角職業似乎是說好不提這樣)
現在你拿了一群不會動的肉靶子準備練狙擊,但你不想浪費珍貴的子彈
因此給你肉靶子的座標,靠著狙擊的貫穿性請算出最多、最多一槍可以打死幾個
---- 防爆分隔線 ----
首先,請小心浮點數誤差(為了方便,可以轉 int 運算)
先提正解吧…n^3 的方式,對每個點兩兩取出決定一直線,並掃過每個點判斷
有多少點在直線上,這樣就可以解了,0.037 sec(43/133)
(不過應該是我做爛了,強者某p說 n^3 他做 0.016 sec)
但如果用隨機的方式決定每條直線是否要做判斷,並且限定下限
就可以加快非常多,因為如果那條線上的點特別多,那被抓到的機率就會特別高
所以大概有一定機率後,就可以抓得到了
談一下用 int 做的方式:
讀入後先乘上 100 使其成為整數,接著直接使用整數儲存
並且在做斜率的時候,記錄 x 座標與 y 座標的差值,然後透過移項
使用乘法運算,例:a/b = c/d => a*d = b*c
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: gloompisces at 07/08/08
10093 - An Easy Problem!
(譯者註 : 此題目前的AC率是 17.1% / 58.7%)
給你一個數R (可能包含0~9,A~Z,a~z,這些是62進位的62個符號)
他是N進位並且被N-1整除 (2≦N≦62),你必須找出最小的N是多少
若找不到請輸出 such number is impossible!
something useful:
Input:
-5896
+42jy
-0000
f g44 4 0 r
- 1 2 345 6789A B CDE FGH I JKL MN
Output:
15
such number is impossible!
2
such number is impossible!
24
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.125 (不失敗大學)
▲ gloompisces 改@2007/08/08 Wed 12:52:26
作者: sa072686 at 07/08/08
數學題…不怎麼好推的題目,不過知道方法就可以用迴圈跑了
0.324 sec AC,2/266
嗯,我也很懷疑為什麼我的名次會在第 2 …
---- 防雷分隔線 ----
嗯…首先,如果我們在每一個內切圓中間畫一條水平線連接兩腰
就可以發現有一個三角形其兩腰恰與原三角形重合,而底與內切圓相切
並且這三角形中亦同樣有一三角形,其兩腰與其重合、底與內切圓相切,…
因此一定彼此間存在著固定的關係,也就是等比的關係
詳細的推導過程由於 ascii 圖難以呈現…在此附上我推導公式時所畫的圖
http://zion.tfcis.org/~sa072686/ACM/Pic/375.JPG
最後推得:設腰長為 x,半底長為 b 則得公比為 (x - b) / (x + b)
而原三角形內切圓半徑為 b * h / (b + x)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
▲ sa072686 改@2007/08/08 Wed 14:04:08
→ sa072686 推:啊存成jpg怎麼破壞那麼大…||| 不過原版的圖也沒了… 0808 14:05
→ gloompisces 推:最近一直被SA嗆orz 0808 14:30
→ sa072686 推:我也一直被二樓閃呢… 0808 14:34
→ gloompisces 推:是你閃我還是我閃你? 0808 14:35
→ sa072686 推:10977好惆悵啊…不過10947、11227和這題就科科了點 0808 14:41
→ chensc 推:一閃一閃亮晶晶 0808 16:12
▲ sa072686 改@2007/08/24 Fri 17:20:03
▲ sa072686 改@2007/08/26 Sun 22:28:02
作者: seanwu at 07/08/09
10103 Karpovich blocks
有一個由R,G,B三種顏色的1*1*1小立方體組成的N*N*N立方體,同顏色的必相連成一塊
因此整個N*N*N立方體被依三種顏色分成三大塊R,G,B
在這三大塊不可損毀的前提下,問有哪些塊可以被拿出來
請輸出R,G,B來表示,若無請輸出 NO
(好像有點模糊哪...)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ seanwu 推:雖然AC率頗低,不過很有趣的一題,可以試試 0809 18:51
→ sa072686 推:才剛要玩呢 你就AC啦… 所以到底有無僅二色或單色之情形 0809 19:54
→ sa072686 推:呢? 0809 19:54
→ gloompisces 推:沒有,必都為三色 0809 19:55
→ sa072686 推:好,開工… 0809 19:56
→ sa072686 推:不過 原來你們都過了…(我才剛要寫…) 0809 20:03
→ seanwu 推:XD" 不過這題真的不難,不知道AC率為什麼低到這樣的地步.. 0809 20:04
→ gloompisces 推:主要是WA率太高 0809 20:10
→ sa072686 推:0.002 sec AC…3/34(其實和第一名秒數一樣,衝衝看) 0809 22:07
→ gloompisces 推:結果我又一次被兩個強者學弟嗆了XD 0809 22:13
→ seanwu 推:呼~搞定了 0809 22:51
→ sa072686 推:那我懶得衝了XD 扔在第四吧 0809 22:56
作者: sa072686 at 07/08/09
嗯…真的是 AC 率低得可以的一題
0.002sec AC,4/34(原本是第 3 名且和第 1 名一樣快…後來被 seanwu 吃掉
0.000 後就懶得衝了)
解法蠻奇妙的…感謝 gloompisces 學長和 seanwu 學弟
---- 防爆分隔線 ----
首先,不難想到:如果可以分離到兩個或以上,就是 RGB
其它,如果都分離不到就一定是 NO,否則就試著再分離看看,只是方法要改
分離的方法很簡單,基本上只要能夠移動就表示可以分離
並且,觀察一下移動的圖形:
RR.. .RR.
.RR. => ..RR
RR.. .RR.
可以發現:對某一格而言,如果它要移動的目的地是空的,則它可以移動
並且如果它移動的目的地,顏色和自己一樣,那麼只要整塊是可以移動的
則前一塊必會移走,自己就可以移上去
接著,利用這個概念解決:如果我拿掉一種顏色後,可能有另一種顏色可以拿掉的情形
那麼,不難想到如果可以分離,則這種情況下是剩下的隨便哪一種顏色都可以做的
當然如果要高效率可以挑個數少的來做
接著,我是使用 BFS 來做移動,如果能夠整個都移出去就是可以,否則不行
這裡就是重點了…怎麼使用 BFS 比較有效率?
如果每走一步就存一次目前的盤面,會太沒效率,額外的記憶體花費也相當可觀
但也沒辦法一次存一大塊東西的座標之類的…,也很難擋重覆
我就想,這塊東西一開始在原地,然後就是四處移動…
因此我就想說:記錄偏移的座標好了…因此原本是 0,0,0
反正這題 n 最大才 9,再怎麼偏移也只要 19 * 19 * 19 就可以建表擋重覆
因為偏移最大就 -9 到 9…然後得到偏移座標就可以假設那一塊東西
每一格都已偏移掉多少,就可以去找到它們四周圍的東西
並且也不怕它們跑出去要加大圖形存放,或是超出就砍掉之類的
反正,前面我有記錄每種顏色的顆數來判斷哪種顏色顆數少
因此,只要把偏移後超出邊界的顆數和該顏色總顆數比較,就知道是否已成功移出
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:BFS:DFS 0.002:0.053 = = 0809 23:53
→ sa072686 推:可能後面我只記錄偏移 效率有差? 0809 23:54
→ sa072686 推:19^3擋重覆 1000*3的queue 沒了… 0809 23:55
→ seanwu 推:我的方法太dirty 0809 23:56
→ seanwu 說:兒童不宜 0809 23:56
→ gloompisces 推:我也是只記錄偏移,大概我沒有用高效率飢aXD 0809 23:57
→ sa072686 推:高效率飢a是…? 不過 DFS沒擋到重覆可能也有差啦 0809 23:58
→ sa072686 推:話說 五樓你原本的正常方法是? 0809 23:58
→ gloompisces 說:最後那個是"吧"= = 0810 00:00
作者: seanwu at 07/08/10
833 Water Falls
有一些線段斜坡(斜的,不會水平)以(x1,y1,x2,y2)表示,以及一些出水點(x,y)
問每個出水點漏出的水,沿著斜坡往下流,最後流到地面上後的x座標?
(不會有出水點的位置在斜坡邊緣的正上方...不然題意不清)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
作者: sa072686 at 07/08/11
很科科的一題,光理解題目就花不下於一小時了…
特殊情形也很科科這樣…不過如果方法對就很好解
0.080 sec AC(36/58),Array Size: 1000 (with Quick Sort)
0.057 sec AC(21/58),Array Size: 9 (with Insertion Sort)
Insertion Sort 大勝 (舉)
翻譯一下
是時候游泳了,你應該幫助 Gustavo 在世界盃中拿下好成績。
這比賽分成兩個階段,在預賽中取前八名進入決賽。在決賽中,參賽者彼此競爭
以決定誰才是最佳的游泳者。在比賽開始前,每個參賽者會依能力先做個排名:
最強的是第一名,再來第二,…
Gustavo 想進到決賽,並於決賽中拿下前三名以獲得獎牌;但他不想花太多體力
在預賽中。事實上,他想游得儘可能的慢,只要能夠進入決賽並獲得獎牌即可。
當決賽即將開始時,將依據預賽名次分配水道給選手們,最強的會在第四道,
也就是最佳的跑道;次強的則在第五道;第三強在第三道;第四強在第六道;
第五強在第二道;第六強在第七道;第七強在第七道;最弱的則在最差的水道,
也就是第八道。
在決賽中,Gustavo 相信如果對手的名次比自己弱,或是自己的水道比對方好,
則一定能贏過對手。你的工作是判斷 Gustavo 在預賽中能夠進入決賽,而且
能在決賽中獲得前三名的最差的名次;同時你也必須判斷出他在決賽中的名次。
Input
輸入的第一行會給予一整數 T(1 <= T <= 120)代表有幾組測試資料,
之後在第一組測試資料前會有一個空白列。每組測試資料第一行
會有一整數 n(8 <= n <= 1000),代表參賽者的數目。下一行包含一數字 r
代表著 Gustavo 的排名。接下來的 n-1 行,每行都有一個數字 R 代表該參賽者
的排名,以及一格式為 MM:SS:DD 的時間,表示他初賽時游的時間。
第一個區域表示分鐘,00 <= MM <= 09,第二個區域表示秒數,00 <= SS <= 59
最後一個區域表示百分之一秒,00 <= DD <= 99。如果參賽者們游的時間一樣,
那麼比賽將認定名次比較前面的獲勝。
參賽者們最快只能游 00:01:00,只有 Gustavo 可以游得更快而已。
請注意若兩位參賽者游的時間不一樣的話,那麼一定至少差了百分之一秒。同時,
兩組測試資料間會有一空白列。
Output
每組測試資料輸出兩行:第一行包含這是第幾組測試資料(詳見 Sample I/O)
且第二行包含如下的訊息(詳見 Sample I/O)
---- 防雷分隔線 ----
解題提示:
這實在是很陰、很陰、很陰的一題啊…
看似容易,但…由於時間上如果相同,就會依排名決定實際名次
並且如果要時間不同,則至少要差百分之一秒。所以請注意平手的情況
以及注意必至少差百分之一秒,這樣…
---- 如果你還不打算看詳解,請離開,以下將嚴重破壞思考樂趣 ----
解題方法:
名次只要超過八,就進不了決賽;所以至少要拿第八名
並且不能因為平手或其它原因被擠出第八,或者擠到更後面的名次導致拿不了決賽前三
但同時有可能會因平手等等原因被擠到更前面去,拿到更好的名次
一開始可能會想說:我先判斷到底會落在第幾名是最差情形,然後特殊情形再擠回來
可是這樣不僅麻煩、例外多,也很難得到正確結果。
但是,我們可以先分析名次看看:只要決定預賽名次,就能得知決賽名次
並且,決賽中名次差的一定贏不了,所以不用理他們,讓他們預賽贏也無所謂
但是若有人名次較佳,預賽又贏,那決賽名次就會掉一名
因為,水道沒有比較好的情形下是贏不了名次更佳的了…
因此得知:最多、最多可以輸兩個名次比自己好的,並且名次要在前八名
超過就可以不用理它,不可能是答案的
然而要取得某一名次,可能條件如下:
一、秒數和前一名相等,且名次較前一名為差
二、秒數與後一名相等,且名次較後一名為佳
三、秒數介於前一名與後一名間
因此,若像以下情形:前一名與後一名秒數相差百分之一,但我名次較前一名為佳
又名次較後一名為差,而秒數又一定至少要相差百分之一,因此這種情形
Gustavo 是拿不到該名次的。但不管如何,名次最多只有八種可能
所以判斷八種名次中,哪些是有可能達成的,再取最差者即為所求
即使再不利的情形,由於參賽者再強,最快也只能游一秒,然而 Gustavo 不在此限
就只要游小於一秒,拿下第一名並在決賽拿下第一名即可得牌,此為最差的解。
如果沒有這個限制,那麼如果參賽者都游在百分之一秒或以內,那麼 Gustavo
就算再強也沒辦法拉開百分之一秒的差距,就有可能無解;
因此,在重重限制下是可以保證此題有解的。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/08/11 Sat 14:29:37
→ sa072686 推:補上名次這樣 Insertion Sort 大好! (姆指) 0811 14:30
作者: seanwu at 07/08/11
837 Light and Transparencies
空中懸著幾塊遮光片,每個遮光片有著不同的遮光比率,
地面上一個區段的總光度為在其上方每塊遮光片比率的積,
問地面上每區段的光度為何?
(經實測,不會有任兩點有著相同的X座標)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
作者: seanwu at 07/08/11
844 Pousse
有一種叫Pousse的遊戲:
在一個N*N個棋盤上,兩個人X,O輪流下子,下子的方法是從四個邊上的任一個位置,
推進一個棋子,如果推進方向已有棋子,則會跟著被往前推(最後一個有可能被推出盤外)
如果X在棋盤上連成水平或垂直一直線(N個)數量,大於O連成一線的數量,
則稱X WINS,反之亦然。如果一直到遊戲結束還不能分出勝負則為平手。
給你棋盤的大小及每次下的位置(輪流下,而且X一定先下),問此局的勝負?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
作者: seanwu at 07/08/11
11008 Antimatter Ray Clearcutting
有N(<=16)棵樹,你要用雷射轟掉至總少M(<=N)棵樹,問最少需要幾發?
雷射是直線前進的,另外你可以站在任何地方發射
呃...就算[ DP ],沒做好也會TLE的
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
作者: seanwu at 07/08/11
11201 The Problem of the Crazy Linguist
現在定義一種字串w=x1,x2,x3...xn,
它的第奇數個字元一定是子音,第偶數個字元一定是母音
定義SBC(w) = sum[ i*P(xi) ] (i=1..n)
其中P(x)中的x代表某個字元,P(x)的值來自題目中所附的表
現在給你一個字串s=x1,x2,x3...,xn,你可以算出它的SBC(s)的值
問它比 「所有以x1開頭、長度為n、符合上述定義」的字串SBC的平均值 大或小
例如給 s=ba 它的SBC(s)=26.480,符合的字串有
ba,be,bi,bo,bu
其平圴值為 19.448,26.480>19.448 因此輸出 "above or equal"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ gloompisces 推:謝謝 0811 22:37
→ seanwu 推:喔對了,此題DP 0813 11:59
作者: sa072686 at 07/08/11
剛剛突然想到 O(n^3) 的做法就跑去踹了一下
嗯,耗時才十幾分鐘,code 只有原本的一半上下呢
---- 這不是分隔線∼這不是分隔線∼ ----
記錄從 rect[i][0] 到 rect[i][j] 即可快速取得 rect[i][x] 到 rect[i][y] 的值
對任一段 x 到 y 做最大連續整數和,這樣取 pair x,y 要 n^2
最大連續整數和是 n,所以只用 n^3
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/11
不難想的一題,不過細部上的調整倒是蠻麻煩的…
0.535 sec AC,45/158
翻譯一下
或許你很好奇何謂「麻煩的繪圖軟體」?首先,我們所談到的軟體只支援黑白兩色。
因此,一張圖片將包含許多由黑或白的點組成的矩形;再者,它只有一種操作可以改變
圖片的顏色。
選擇一個大小為 r * c 且包含在圖形中的矩形,這個操作將會把這矩形中
所有的點由黑色轉為白色,或白色轉為黑色。
一開始,整張圖片都是白色的。你必須透過多次上述的操作來繪製圖片,
你…行嗎?
Input
輸入中包含多組測試資料。每一組測試資料第一行有四個整數 n、m、r、c
(1 <= n,m,r,c <= 100),接下來的 n 列為你想畫的圖形。第 i 列
所包含的 m 個字元代表著完成它們所需的顏色('0'表示白色,'1'則表示黑色)。
最後一組測試資料為四個零。
Output
對於每一組測試資料,假如無解則輸出 -1,否則請輸出最小操作次數
---- 防雷分隔線 ----
這題其實和房間開燈的解法蠻類似的。
不難想到,像最左上角那格,只有一種方法可以改變到它的顏色
這時,我們如果要達成所要求的圖形,就必須先遷就它
遷就完後,自然不再針對這塊區域改變顏色;在這情況下,似乎會有某些格子
在此前提下會變成只有一種方法可以改變它的顏色,這時也必須先遷就於它
之後會發現在不斷遷就之後,便沒有任何操作方法能夠不去破壞之前的圖形了
這時,只要檢查沒被遷就到的格子是否和所求相等即可。
這樣,掃過 n * m,若需要改變顏色便是 r * c,最差情形就 n * m * r * c
但因為 r * c 越大,所需要檢查的個數就會越少,所以其實不會那麼恐怖
再加上很多情形可以直接 cut 掉,所以不用太擔心會 TLE
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:其實翻譯早就有了,只是是超級簡略版XD 0811 22:57
→ sa072686 推:啊我怎麼沒搜到?(話說這是拿來練英文…XDD) 0811 23:09
→ gloompisces 推:看來我以後不要把好幾題塞在同一篇好了XDD 0811 23:25
→ sa072686 推:喔,原來是大合集裡面的…沒搜到就翻了這樣 0811 23:53
作者: sa072686 at 07/08/11
一整個腦殘的題目…
0.002 sec AC,145/192 /* 這名次是怎樣…||| */
翻譯一下
你正參觀著 Centre Pompidou,一個有著許多近代畫的地方。你突然發現
其中有一幅畫上面畫著許許多多的、單獨的黑白方塊,他們相間著的排列就像是
西洋棋棋盤一般(也就是,沒有兩塊同顏色的方塊會相鄰著出現)。題外話,
該畫的作者並沒有使用 ACM 11231 裡所提到的那個工具。
在你很無聊的時候,你開始想著有幾種方式可以將一個西洋棋棋盤
嵌入這幅畫中。請注意:棋盤的最右下角那格一定是白色的。
Input
輸入包含多組測試資料。每組測試資料由包含三個整數 n、m、c 的一列組成,
並且 0 <= n,m <= 40000,n 代表該幅畫的列數,m 則代表行數。c 的值
總是 0 和 1,0 代表這幅畫最右下角是黑色的,1 則代表這幅畫最右下角是白色的。
最後一組測試資料會跟著包含三個零的一列。
Output
對於每一組測試資料,輸出可嵌入西洋棋棋盤的方法數。
---- 防雷分隔線 ----
如果我們拿棋盤的右下角去對應畫的某一白色的格子,若棋盤放得下則為方法之一
這部份不難想到,不過要怎麼計算呢?
我們可以試著去計算:合法的白色格子數,就知道答案了。
那麼,合法的白色格子數怎麼算呢?由於棋盤大小限制的關係,在畫上必須從
(8,8)這格開始往下或往右的白色點才有可能
那麼,我們就計算這一塊方形區域有幾個白色點就可以了
計算的方式其實很簡單,我們觀察一下西洋棋棋盤
@#@ @#@#
#@# #@#@
@#@ @#@#
#@#@
以上是 3 * 3 和 4 * 4 的示意圖,基本上觀察後會發現邊長的奇偶會影響答案
那就分奇偶討論;然而實際上…先看 3 * 3 的棋盤
第一列是兩個 @ 和一個 #,第二列則是一個 @ 和兩個 #,第三列又同第一列,…
因此只要看兩列就好了,觀察下發現第一列中,@ 和 # 的個數會相差一
但在第二列會補回來,所以…兩種個數不是相等,就是差一
偶數情況下,怎麼算都是一樣的…從這裡可以推出公式
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/11
11229 Improved tic-tac-toe
玩OOXX,但下子是否成功則有一定的機率...
如果成功了,則該格設為自己的棋子
如果失敗了,則該格設為對方的棋子
分別給你O,X兩人在棋盤上某一格下子成功的機率,
先手是O,問O贏的機率是多少?
勝負的判定跟一般的OOXX一樣,但如果和局,則視為X贏
<Hint E>
DFS+DP做搜索,每次所下的位置為獲勝機率最高的那一格
某一格的獲勝機率為 下子成功機率*(1-成功後對方輸的機率) +
(1-下子成功機率)*(1-失敗後對方輸的機率)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ gloompisces 推:天啊你做出來了.. 0811 22:39
→ sa072686 推:我也做出來了,不過比學弟慢了些 0812 15:26
→ sa072686 推:AC後看hint發現方法一樣耶XD 英雄所見略同? 0812 15:26
→ sa072686 推:話說本來要開九維的 XDDD 0812 15:27
→ seanwu 推:沒這回事...|| 這本來就是正解.. 0812 18:06
作者: sa072686 at 07/08/11
難得的心情文,嗯…雖然我知道它不該出現在學術化的板上…
之前有一段時間對不起大家,真的很抱歉
但這次我不會再退縮、也不會再妥協了
我希望我能夠變得比任何人都強,但也希望大家能一起變強
而不是祈禱其它人都變得比我弱,然後一帆風順
感謝支持我的人們,感謝你們支持我,讓我有力量繼續做下去
除非我停止寫 ACM,否則不再因任何原因停止發文了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ AikoSenoo 推:加油:) 0811 22:56
→ silentvow 推:加油 //明年TOI見 0811 22:58
→ tong20212 推:加油:) 學長你很厲害的 0811 22:59
→ pioneerlike 推:加油 :) 0811 23:22
→ PG 推: 加油:) 0812 00:17
→ veriw 推: 加油:) //我的程設還要請教學長哩XD 0812 01:02
→ devilqxect 推:+油:) //明年國手隊見 0812 01:21
→ Tommy 推: 加油:) //我的程設還要請教小聖哩XD 0812 15:58
→ gba356 推:加油加油∼ 0814 00:34
作者: gloompisces at 07/08/12
11073 - Euler's Totient Function
φ(n)=x。
記得什麼是φ(n)嗎?
給你一個正整數n,φ(n)就是所有小於n且和n互質正整數的個數
所以這題是給n求x? 不不,那個在10179和10299你已經充分練習過了
這題比較刺激一點:給你x (x≦1000000000),請求出所有的n
<Hint1> 答案有可能超出 int 的範圍,但是我測出一定比 10000000000 小
<Hint2> 583925760 有 19639 個答案,958003200 有 79971 個答案。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.224 (不失敗大學)
作者: Tommy at 07/08/12
※ 引述《seanwu ( )》之銘言:
> 完了....
> 我用卡N大強者學長的隨機演算法過了....|||
> 0.297AC 第三名...
> 真糟糕....
> 沒辦法呀...正解就一直WA嘛....
> -----
> 正解是抓每一點做中心點往旁邊掃一圈,存下斜率
> 同樣斜率的就代表在一直線上,可以用bst或qsort排完後來數
> 是O(N*NlgN),用hash的話可以到O(N*N)
> 可是我一直WA....
> 話說...你看到這題的第一個簡單想法...應該是抓兩個點畫直線
> 再看看有幾個點在上面,但很不幸的,這樣是 O(N^3),過不了
> 但是如果有很多點在同一條線上,你只要隨便抓這條線上的任兩點就好了
> 並且如果這條線上點越多,它就越可能是答案....
> 同時,也因為這條線上的點很多....你抓中它的機率就越大...
這題不用隨機演算吧= =
我用個O(n^2)的迴圈就過了
名次還不錯 0.328s 第7名
會WA的應該是因為浮點數誤差吧(請用fabs())
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.149.38 (中滑一番)
→ seanwu 推:喔..? 怎麼做O(N^2) ? 0812 14:38
→ gloompisces 推:我也想問這個問題XD 0812 14:40
→ Tommy 推:我一看到這題 直覺就是n平方= = 我也不太會說 0812 15:10
作者: seanwu at 07/08/12
835 Square of Primes
有一個5*5方陣:
每一行、每一列、兩條對角線的和皆為M,左上角數字為N
每一行由上往下、每一列由左往右、對角線左下到右上、左上到右下,
皆是質數,且字首不為0
給你M,N,輸出所有符合條件的方陣
---
好難 >"< ... CPU: 9.992 AC
可見這是一個爛方法 orz...所以Hint就不給了
不過應該是暴搜沒錯,至於怎麼搜就是另一種藝術了...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ sa072686 推:要9.992也蠻威的…變相的搶不下的第一名 0812 14:51
→ gloompisces 推:我好像有一題也是9.992XD 0812 14:52
→ sa072686 推:我都沒有 XDrz 之前最大連續整數和那題也洗掉了XDrz 0812 15:01
→ gloompisces 推:寫完了..但連Sample I/O 都跑了20秒然後答案還錯orz 0812 18:15
→ seanwu 推:XDrz 0813 15:07
作者: Tommy at 07/08/12
※ 引述《Tommy (雄中電資98級公關湯米)》之銘言:
> ※ 引述《seanwu ( )》之銘言:
> > 完了....
> > 我用卡N大強者學長的隨機演算法過了....|||
> > 0.297AC 第三名...
> > 真糟糕....
> > 沒辦法呀...正解就一直WA嘛....
> > -----
> > 正解是抓每一點做中心點往旁邊掃一圈,存下斜率
> > 同樣斜率的就代表在一直線上,可以用bst或qsort排完後來數
> > 是O(N*NlgN),用hash的話可以到O(N*N)
> > 可是我一直WA....
> > 話說...你看到這題的第一個簡單想法...應該是抓兩個點畫直線
> > 再看看有幾個點在上面,但很不幸的,這樣是 O(N^3),過不了
> > 但是如果有很多點在同一條線上,你只要隨便抓這條線上的任兩點就好了
> > 並且如果這條線上點越多,它就越可能是答案....
> > 同時,也因為這條線上的點很多....你抓中它的機率就越大...
> 這題不用隨機演算吧= =
> 我用個O(n^2)的迴圈就過了
> 名次還不錯 0.328s 第7名
> 會WA的應該是因為浮點數誤差吧(請用fabs())
我大概說一下好了
ans:=2
for i:=0 to n-1
count:=1
slope:=(y[i+1]-y[i])/(x[i+1]-x[i])
for j:=0 to n
count:=count+1 if fabs((y[j]-y[i])/(x[j]-x[i])-slope)<1e-7
ans:=max(ans,count)
output ans
就這樣而已= =
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.139.162 (中滑一番)
▲ Tommy 改@2007/08/12 Sun 17:02:20
→ seanwu 推:這是歪解吧...= =? 0812 20:07
→ Tommy 推:阿ˊ?這是很正常的解吧= = 0813 09:13
→ seanwu 推:那你求相鄰兩斜率的意義是...? 0813 10:39
→ seanwu 說:我的意思是,你如何保證解的直線一定通過相鄰兩點? 0813 10:41
→ Tommy 推:我也不會說= = 被你一問也不知道怎麼解釋XD 0813 12:56
→ seanwu 推:根本就是喇賽 (一︿一+)@m (誤) 0813 13:17
→ Tommy 推:........... 0813 14:33
作者: seanwu at 07/08/12
818 Cutting Chains
你挖到了N個金環,這些金環有些是連在一起的 (1<=N<=15)
你現在要把這些金環串成一個直鍊,問最少需要切開幾個金環?
/*
舉例來說..如果有兩個獨立的環,將它們串在一起最少需要切開其中一個
又如果有一些金環串成一個圈,至少要切開一個把它們打開
*/
<Hint Pagedown>
DP with O(N*N*(2^N))
每個環要不就已被切開,要不就是完整的,有2^N個不同的狀態
如果這個狀態中,剩下完整的環的是連成數條直練,且可以利用斷環把它們接起來
所需額外切開的金環數量為 0
反之,則枚舉「從完整的環中切開一個」,則此狀態就變成另一個狀態了
所需切開的金環數量為「改變後狀態後數量」+1,枚舉被切開的環,取最小者
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
▲ seanwu 改@2007/08/12 Sun 18:22:19
作者: seanwu at 07/08/12
我覺得這題跟11243有異曲同工之妙...orz
而且可能更糟..100個點,求最大最小
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ gloompisces 推:WA..... 0813 10:57
→ seanwu 推:現在看來11243真的很簡單... 0813 15:25
→ seanwu 推:唉呀我想起來了,要用傳說中的旋轉卡殼... 0813 15:29
→ seanwu 說:大意是說外框的每邊一定要接觸到點,且至少一邊接觸兩點 0813 15:33
→ seanwu 說:因為題目給的已經是凸包了,所以枚舉凸包的每個邊就好了 0813 15:35
→ seanwu 推:該死的浮點數誤差...= =+++ 0813 17:35
→ seanwu 說:題目給的不是凸包.. 0813 17:36
→ gloompisces 推:我的做法沒差.. 0813 22:09
作者: seanwu at 07/08/12
879 Circuit Nets
給你N表示晶片上的針腳數,接下來有兩兩一組的數組表示某兩針腳相連
問晶片上有幾個分立區塊?
(N<100000)
另外測資的讀入要處理好,除了測資跟測資之間有空白行外,
其它的格式似乎是不定的...
<Hint E>
disjoint-set 見 10608
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
▲ seanwu 改@2007/08/12 Sun 20:34:20
作者: seanwu at 07/08/12
10228 A Star not a Tree
平面上有N個點,請找出一個點(不一定在這些點內)
使得這個點到其它點的總距離和最小
輸出總距離四捨五入到整數
<Hint E>
二分搜尋=> 四分搜尋,例如把一個矩形範圍切成10*10份,找到最小點後
再把這個點附近做一個矩形範圍(比原來小但不要太小),一直切下去
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
作者: zenixls2 at 07/08/12
Debug還是de不出來
(de了4天了)
於是,我重寫了函式
程式碼簡短多了
而且一次AC
2007-08-12 14:43:45 Accepted 0.002 Minimum zenixls2--China is a county of
Taiwan C++ 497 - Strategic Defense Initiative
這題要用O(n log n)的LIS做才會過
搭配回溯
到最後只會用到最後一個
還有,要是debug不出來,或是太難debug
可以考慮將有問題的地方重寫一遍
通常會比較快解決
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.98.136 (中滑一番)
→ sa072686 推:重練是好方法 XD 0812 22:54
→ Tommy 推:囧 這O(n^2)就可以了呀!! 0813 09:11
→ sa072686 推:好像是?我的O(n^2)跑很多秒但會過 0813 10:29
→ zenixls2 推:真的嗎??我傳過O(n^2)TLE啊!!! 0813 12:27
→ zenixls2 說:不過沒差,也算有練習到了 0813 12:28
→ sa072686 推:要用不正常的n^2 XD 0813 12:32
→ Tommy 推:囧 我的O(n^2) 只用了0.021s = = 0813 12:49
→ sa072686 推:我比較弱啊 XD 0813 13:52
→ zenixls2 推:Tommy借我code!! 0817 19:24
作者: seanwu at 07/08/13
※ 引述《seanwu (海恩無)》之銘言:
> 11201 The Problem of the Crazy Linguist
> 現在定義一種字串w=x1,x2,x3...xn,
> 它的第奇數個字元一定是子音,第偶數個字元一定是母音
> 定義SBC(w) = sum[ i*P(xi) ] (i=1..n)
> 其中P(x)中的x代表某個字元,P(x)的值來自題目中所附的表
> 現在給你一個字串s=x1,x2,x3...,xn,你可以算出它的SBC(s)的值
> 問它比 「所有以x1開頭、長度為n、符合上述定義」的字串SBC的平均值 大或小
> 例如給 s=ba 它的SBC(s)=26.480,符合的字串有
> ba,be,bi,bo,bu
> 其平圴值為 19.448,26.480>19.448 因此輸出 "above or equal"
喔...忽視「存在xi=xj=xk」這回事會很好寫喔...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ gloompisces 推:但也有被rejudged掉的機會.. 0813 17:17
作者: seanwu at 07/08/13
819 Gifts Large and Small
給你一些點,找一個矩形把它框起來,這個矩形的面積最大最小各是多少?
(最大當然不是無限大...矩形的四個邊一定要能碰到點)
<Hint E>
最大的矩形可以用二分搜尋搜矩形的旋轉角度來做
最小的矩形一定有至少一個邊接觸到兩點(原因:嗄? 呃,畫圖看看好了)
隨便找兩個點的連線設矩形邊與之平行,再算算這個矩形的面積,O(N^3)可以
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
▲ seanwu 改@2009/01/22 Thu 00:04:24
作者: seanwu at 07/08/14
用RMQ的解法 (RMQ是什麼以後再說,先google一下吧)
看個例子,假設現在是
1 1 1 1 2 2 2 2 2 3 3 3 4 4 4 5 6 6 7 7 7 7 7 7 8 8 9 9 9 9 9 9 9
問你這個區間 [ ] 的解
1 1 1 1 2 2 2 [2 2 3 3 3 4 4 4 5 6 6 7 7 7 7 7 7 8 8 9 9 9 9] 9 9 9
一開始先做預處理,先將原數列轉成以連續數量來表示
(1 1 1 1)(2 2 2 2 2)(3 3 3)(4 4 4)(5)(6 6)(7 7 7 7 7 7)(8 8)(9 9 9 9 9 9 9)
=> 4 5 3 3 1 2 6 2 7
4 5 3 3 1 2 6 2 7
先在這個數列上做好RMQ,如果題目問你某個區間,
你就可以直接從這個數列裡面對應的區間問RMQ來做啦
很不幸的,題目所問的區間可能會切在連續段中間,所以要另外做
1 1 1 1 2 2 2 [2 2 3 3 3 4 4 4 5 6 6 7 7 7 7 7 7 8 8 9 9 9 9] 9 9 9
^^^^^^^^^^ ^^^^^^^^^^^^^^
這兩個段落被切開了,要另外算,長度分別是 2 和 4
至於中間剩下的
1 1 1 1 2 2 2 2 2 [3 3 3 4 4 4 5 6 6 7 7 7 7 7 7 8 8] 9 9 9 9 9 9 9
對應於原本預處理的位置
(1 1 1 1)(2 2 2 2 2)[(3 3 3)(4 4 4)(5)(6 6)(7 7 7 7 7 7)(8 8)](9 9 9 9 9 9 9)
=> 4 5 3 3 1 2 6 2 7
=> 4 5 [3 3 1 2 6] 2 7
以RMQ詢問的結果是 6,意思是說這個範圍內的最大連續長度是6
還有剛剛另外算的 2 和 4,Max(2,4,6) = 6 為此數列在該區間的最大連續數量
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ gloompisces 推:比我得亂七八糟做法快多了XD 0814 22:51
→ sa072686 推:但是我寫得亂七八糟的 還RE XD 0814 23:02
作者: seanwu at 07/08/14
10755 Garbage Heap
給一個三維的數字方陣,求子方陣的最大和?
(就是ACM 108的三維版本啦)
<Hint E>
參考ACM 108的做法,先將三維變成O(N^2)個二維,
再以ACM108的做法來做,總共是 O(N^2)*O(N^3) => O(N^5)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
作者: seanwu at 07/08/14
10888 Warehouse
給一個地圖,上面有B代表箱子,X代表目標
你要把全部的箱子都移動到X上,並不限定哪一個箱子對應哪一個目標
最少需要幾步? 箱子跟目標的數量一定相等且<=15
(另外...這很像但不是搬運工...不要管那個工人死到哪裡去...箱子隨便你移)
<Sol pagedown>
首先,並沒有箱子的移動順序的問題,而且你可以假設箱子可以互相穿越
原因在於,當兩個箱子相碰時,你可以視這兩個箱子「交換身分」
因為最後是哪個箱子走到某個X,並沒有影響,
所以你可以讓交換身分後的箱子照原定路線繼續移動,換句話說就是可以穿越
所以預先將每個箱子做為起點做bfs,找出它到每個X的最短路長
再來就是決定每個箱子該對應到哪個目標,我們有
B1 B2 B3 ..... BN
X1 X2 X3 ..... XN
一對一配起來,讓總長度最短 (這個可以用很複雜的flow變形來做,不過別理它..)
呃..雖然才15個點,但暴搜聽說是不行的...DP它吧 (糟糕..又是那種簡單但難講的DP..)
假設我們現在有一些X已經配對了、有些還沒,這可以用一個 1001...1100 來表示
如果我們從B1,B2,...依序配下去,那麼已經配到哪個了,可以從已經配了幾個X得知
所以給你一個 100..010, 你可以知道現在要抓哪一個B進來配
抓這個B進來後,與每個還沒配對的Xi配對看看,
配對Xi後將原本 101..010 集合中代表Xi的刪掉,遞歸下去做... O(N*(2^N))
(喔該死的....誰講的比較好趕快幫補一篇筆記...類似TSP的那種DP,用集合做的)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
作者: seanwu at 07/08/14
818 Cutting Chains
11008 Antimatter Ray Clearcutting
10888 Warehouse
10911 Forming Quiz Teams
10944 Nuts for nuts..
這類的DP都是長的像O(2^N)的那種...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ Tommy 推:10911 ... 暴搜吧!!!!!!!!!! 0815 12:37
作者: sa072686 at 07/08/15
終於 AC 了…細部調整了很久很久
嗯,還是來問一下 RMQ 相關的處理方式好了
像是:建表時,假設從 i 開始長度為 j^2 的一段…
如果 j^2 這一段超出邊界呢…?我好像額外花了 n 的記憶體才弄好
因為,常常會抓不到某一段的 j-1 的值…尤其是它很接近、很接近邊界時
那,它可能只記錄到長度 1、2 左右的一段而已
另外是關於這題,處理邊界被切掉部份的方法…?
寫得蠻暴力、蠻醜的…用了一大堆判斷式還 wa 很多、很多次這樣
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/15
※ 引述《sa072686 (不再迷惘 奮力向前)》之銘言:
> 終於 AC 了…細部調整了很久很久
> 嗯,還是來問一下 RMQ 相關的處理方式好了
> 像是:建表時,假設從 i 開始長度為 j^2 的一段…
> 如果 j^2 這一段超出邊界呢…?我好像額外花了 n 的記憶體才弄好
> 因為,常常會抓不到某一段的 j-1 的值…尤其是它很接近、很接近邊界時
> 那,它可能只記錄到長度 1、2 左右的一段而已
> 另外是關於這題,處理邊界被切掉部份的方法…?
> 寫得蠻暴力、蠻醜的…用了一大堆判斷式還 wa 很多、很多次這樣
我的..
你是說這個嗎?
for( i=2; i<=n; i*=2 ) {
for( j=0; j<n-i; j++ ) {
RMQ[j,i] = max{ RMQ[j,i-1], RMQ[j+2^(i-1),i-1] }
}
}
然後問[a,b]時
w = log_2{b-a};
max{ RMQ[a,w], RMQ[b-2^w,w] }
至於處理邊界
記錄每個段落的起點及長度,用二分搜尋找它
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 220.141.128.85 (中滑一番)
→ sa072686 推:感謝…不過i*=2好像怪怪的? 0815 20:42
→ seanwu 推:喔,錯了,不過...就是那個意思 0815 21:01
作者: seanwu at 07/08/15
10707 2D-Nim
給你兩張圖,判斷兩張圖是否相同
兩張圖相同的條件是每個圖上的連通單元(上下左右相鄰)
可以經旋轉、翻轉、平移一對一對應於另一個圖上的某個連通單元
(原題目圖中的A,B,C,D...沒有意義,無關順序)
<Hint E>
找出每個連通單元,然後暴力判斷...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 220.141.128.85 (中滑一番)
▲ seanwu 改@2007/08/15 Wed 23:56:19
作者: seanwu at 07/08/16
10717 Mint
有個[ ]想用錢幣來疊成桌子的四根桌腳...
每根桌腳長度相同,且只能使用單一一種硬幣,而且四根桌腳使用的硬幣皆不相同
給你4<=N<=50種硬幣和他們的厚度,底下有1<=t<=10個問題
每個問題給你想要疊的桌子的高度,問使用硬幣疊起的桌腳,
不大於目標高度的最大可能高度,以及不小於目標高度的最小可能高度
<Hint E>
最多C(50,4)種組合,算出每一種組合的LCM,就可以求最接近的高度
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 220.141.128.85 (中滑一番)
作者: seanwu at 07/08/16
10777 God! Save me
你被困在一個房間裡,有N扇門
當你走入一扇門後,這扇門或者會在Xi的時間內帶你離開這裡
或者在Xi的時間內你又回到房間內
給你每扇門的Xi,大於0表會代你離開,反之則會回到原地
以及你會去走該扇門的機率
問你平均而言需要多少時間(就是期望值啦..)才能離開這個鬼地方
如果你一定走不出去,請輸出"God! Save me"
<Hint E>
令期望值為S,畫個樹狀圖,列出S的關係式,然後解它
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 220.141.128.85 (中滑一番)
作者: sa072686 at 07/08/16
不難寫的一題…如果有想到方法的話。我是瞬間想完啦XD
不過如果沒 lucky 貓的最後一組 sample 大概會 wa 到瘋掉吧?
0.002sec AC,237/406
---- 防雷分隔線 ----
把聽到哪些樹、沒聽到哪些樹建成字串(格式請看心情決定)
sort 之後開始比較相鄰兩人,出現不同就表示有一種新觀點,秒殺
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/08/16 Thu 21:58:23
作者: sa072686 at 07/08/16
嗯,不是說很難寫的一題
0.557sec AC,36/579
---- 防雷分隔線 ----
兩次 LIS,一次從頭到尾,一次從尾到頭,解決
小心交錯掉就好了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/16
10787 Modular Equations
給你 a,b,c的範圍,求出在此範圍中有幾組(a,b,c)
使得 (a+b)%m = (a-b)%m
<Hint E>
把a提出來,你會發現a是非關的
於是只要枚舉m,計算有幾個b使得(+b)%m=(-b)%m,再乘上a的數量
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 220.141.128.85 (中滑一番)
→ PG 推:787.. 0816 23:05
→ PG 推:老人的回憶 時代的眼淚 0816 23:05
→ seanwu 推:....||| 0816 23:06
→ sa072686 推:老人的回憶 時代的眼淚+1… 0816 23:06
→ sa072686 推:淚推二樓 0816 23:07
→ PG 推:我以前很低調 都沒被787 78到 0816 23:09
→ PG 說:被78到的人大概就不會這樣緬懷他了 XD 0816 23:09
→ sa072686 推:那題我有被刁難過啊XDD 印象相當深刻 0816 23:12
→ gloompisces 推:"787" 應該不是只ACM題號吧orz 0816 23:16
→ PG 推:樓樓上裝傻 0816 23:24
→ sa072686 推:樓樓上裝傻+1 0816 23:47
作者: sa072686 at 07/08/17
簡單的 DP
0.510sec AC,63/546
---- 防雷分隔線 ----
O(n^2 * t) 就會過了
做每一步的 DP,也就是用表 dp[i][j] 記錄第i個城市第j次旅行時賺的最多的錢
然後每個城市第 j+1 次旅行賺的最多的錢,就是從每個城市第 j 次旅行所賺的
最多的錢,再加上到該城市的錢的最大值,這樣就可以過了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/17
雖然,我很不想在板上砍文…即使被玩帳號等等原因,還是會留下來做個紀念
不過,我被玩沒關係,但這篇文怕會帶給其它人困擾
因此斬之…亦希望不要再有這種會帶給其它人困擾的文出現了
以上
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:XDrz 0817 11:19
→ Zero 說:已經被我看到了._. 0817 11:20
→ PG 推:看到的自首=.=/ 0817 11:21
→ sa072686 推:針對我的沒關係,扯到別人就不太好了… 0817 11:21
作者: sa072686 at 07/08/17
可以不用再猜或再問了,線民是我,這樣…
雖然 duck 學長說不是 TFcis 的成員,但消息來源是我
只是,不是我直接跟 duck 學長說的,這樣
不好意思,引起了很大、很大的騷動,同時也要向被舉發的人致歉
我知道你沒有什麼惡意,否則不會讓其它人知道
只是這種事,可能很難讓別人接受這樣…
而 duck 學長的處理方式,對於你也比較傷
破壞了你的形象和人際關係,真的很抱歉,但我希望你別怪罪他
我知道你對索尼的付出,真的很對不起…
也希望大家別再詢問直接和 duck 學長說的是哪一位
猜到的也請低調,並且怕引起困擾,希望大家別去打擾,這樣…
如果有什麼問題,或者要鞭,請找我,謝謝
另外也向所有索尼的使用者致歉,可能因此少掉了一位有能力又肯做事的站務
來為我們服務,對於其它站務,很抱歉,你們可能會更加辛苦
對於使用者們,很抱歉…服務你們的站務少了一位
在此真心地向大家說:對不起…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/08/17 Fri 17:04:19
→ chensc 說:幹嘛,要找我的直接找就好,有什麼問題我直接回答啊..ok的 0817 17:23
→ sa072686 推:主要是針對找線民的 0817 17:31
作者: seanwu at 07/08/17
10704 Traffic!
某種益智遊戲:
在一個大小為6*6的地圖上,有長度為3的貨車、長度為2的汽車、
和你自己的車,長度為2且東西向。你的任務是將你的車移動出右邊界
每一輛車都只能前進或後退 (不能側向移動),每次移動不限步數
問達成目標最少需要移動幾次?
<Hint E>
A* or [BFS+(Hash or BST)] 可以解,狀態的記錄可以壓到long long內
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ seanwu 推:學術,始終如一 0817 22:50
→ gloompisces 推:我還以為只有貨車和汽車各一輛,想說怎麼那麼簡單= = 0817 22:51
→ seanwu 推:不是...||| 0817 22:51
→ PG 推:這遊戲我國小的時候超喜歡玩 XD 0818 09:48
作者: sa072686 at 07/08/18
嗯…DP 題,雖然 lucky 貓說記錄式暴搜也是可以
為了補 DP 這個大洞還是用 DP 寫了 XD
0.006sec AC,20/332
---- 防雷分隔線 ----
不難想到絕對不能拿長度做…
因為在某一長度,並不能確定它們的結尾是什麼字母
由於嚴格遞增的要求,所以加上去的字母必須大於最後一個字母
因此,從上一句可以想到:如果我們針對結尾字母依序來做的話,就可以解決這個問題。
使用長度 n-1 與值 m-c 的所有情形皆可湊出,這個不難想到
之後枚舉所有字母 c,並確定所有結尾字母 < c 者的情形
皆可於後串接一個 c 使得長度多 1,值多 c 出來,因此可得此關係式
dp[c][n][m] = Σ(i=1 to c-1)dp[i][n-1][m-c]
之後將所有長度 n、值 m 的情形數全部加總起來便可得解
如此,設字母數 n 及值 m 則得時間複雜度為 n^3 * m
但這樣,還要枚舉 < c 的所有字母太麻煩了,其中重覆子問題也不多
再加上:我們枚舉的也只有結尾字母 < c 者的情形
而我們針對結尾字母依序做的話,在前面找出來的所有解也都符合結尾字母 < c
這個條件,因此我們會想說:或許我們並不需要記錄結尾字母
反正記不記錄,枚舉到下一個字母去的時候,還是每個情形都可以串接
因此,我們只要記錄 dp[n][m] 代表所有長度 n、值 m 的情形
在枚舉到字母 c 的時候,由於 dp[n][m] 已是不分結尾字母通通攪在一起的情形
因此,直接取其情形數即可,這樣枚舉所有字母為 O(n),再枚舉長度 n 和 m
因此只要 O(n^2 * m),顯然比前一種方法快得多
再者我們不難想到:嚴格遞增的前提下,只要長度 > 26 或值 > abc....z
(也就是 (1 + 26) * 27 / 2 = 351)的情況下都保證無解
並且對於每個結尾字母 c 保證長度最長只能到 c 且值最多到 1 + 2 + ... + c 的值
因此,可以透過條件限定去掉許多不可能的情形
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/18
好久沒寫到大腦殘題了 (心) 雖然題目看起來還蠻複雜的…
不過其實很白痴,亂寫亂寫就過了
0.176sec AC,117/548
翻譯一下
現在有許多加密用的演算法都是建立在「對於很大的數不好因數分解」這點上。
Alicia 和 Bobby 知道這點,因此決定基於因數分解,設計一個屬於他們的加密計劃。
他們的演算法靠著傳送訊息之前 Alicia 給 Bobby 的暗碼 K。
在聽完他們的描述後,Yvette 說:「但若我可以將 K 因數分解成兩數 A 和 B,
我就可以破壞你們的計劃!而且你們的 K 最大才一千萬。嘿,這太簡單了。
我甚至可以因數分解它兩次,湊出兩對整數!」
Input
第一行會告訴你有幾組測試資料,N (最多 25000)。
接下來有 N 組測試資料,每組單獨一行,包含一個暗碼 K。
Output
對於每一組測試資料輸出一行包含:"Case #x: K = A * B = C * D",
A、B、C、D 為相異且大於 1 的正整數。並且每組測試資料都必定有解。
---- 這次不怕雷人了(汗) ----
心得:只看 Output 就可以寫了,而且絕對秒殺…
只能提醒大家不要想太多、想太難,亂寫就對了,會過的
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/18
10887 Concatenation of Languages
給兩群字串A,B,令C=AB(A跟B接起來),問C有幾種相異字串
(會有空白行...)
<Hint E>
用Hash 5.312秒,bst不知道會不會過
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.146 (沒有故鄉)
→ Tommy 推:哈~我的hash4.1XX秒耶XDD(大概是我的hash func亂搞吧) 0819 10:53
作者: sa072686 at 07/08/18
※ 本文轉錄自 [PG] 看板
作者: PG (高等計算圖論愛好者) 站內: PG
標題: [好物] Dev C++ 4.9.9.2. 最佳化
時間: 2007/08/18 Sat 16:11:15
http://sony.tfcis.org/~PG/Dev-Cpp.exe
Dev C++ 4.9.9.2 懶人包
選項最佳化 & 語法配色修正 & 一鍵安裝
//感謝最近很閃的sa協助測試
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.131.201 (福爾摩沙固網)
→ Zero 推:感謝最近很閃的sa協助測試 0818 16:47
→ sa072686 推:等…等等,最後一句是怎樣?囧rz 0818 18:31
φ sa072686 轉:從 [PG] 看板,于 2007/08/18 Sat 18:32:10
→ gloompisces 推:你是因為最後一句所以轉來的嗎XD 0818 18:39
→ pioneerlike 推:最後一句...不是「選項最佳化 blabla...」 嗎? 0818 18:39
→ pioneerlike 推:(H) 0818 18:40
→ sa072686 推:不…不是啦 囧rz 可是這個真的蠻不錯的啊… 0818 18:52
→ sa072686 推:配色也調得比302完整 說真的用慣VIM後用PG STYLE較習慣 0818 18:53
→ veriw 推:難道SA學長也脫團了?! 0818 19:07
→ Zero 推:我還是不喜歡Dev-C++ orez 0818 19:07
→ sa072686 推:樓上不中肯 ||| 0818 19:07
→ sa072686 推:囧 被傑洛擋掉了 0818 19:08
→ PG 推:Windows下就這個最好用了阿 (攤手) 0818 19:08
→ Zero 推:屋∼∼∼我被sa說不中肯Q_Q 0818 19:09
→ sa072686 推:對不起 不是說你…應該是八樓那位學妹 0818 19:09
→ veriw 推:不會啊 我覺得很中肯(茶) 0818 20:10
→ sa072686 推:哪裡中肯了囧 0818 20:12
→ pioneerlike 推:閃得很中肯(茶) 0818 20:39
→ Zero 推: 閃得很中肯(茶) 0818 20:41
→ ben196888 推: 閃得很中肯(茶) //祝sa閃光節快樂●● 0818 20:47
→ veriw 推: 閃得很中肯(茶) //明天小心被天上那對的閃光打到 0818 20:59
→ PG 推: 閃得很中肯(茶) //結果有沒有人要用我的配色... 0818 21:10
→ etetet91 推: 閃得很中肯(茶) //我被打到了(倒) 0818 21:11
→ sa072686 推:這六樓是怎樣||| /* 我有用你的配色喔∼ */ 0818 21:50
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/08/18 Sat 23:49:15
作者: zenixls2 at 07/08/18
5843002 2007-08-18 15:42:55 Accepted 3.186 5332 zenixls2--China is a
county of Taiwan C++ 106 - Fermat vs. Pythagoras
491/2181
教一下快一點的找法
若a^2+b^2=c^2
將c表成x^2+y^2
又c<=輸入
故x只要找sqrt(輸入)以內的
且y<x
使x^2-y^2>0
此外,x,y為一奇一偶
使其不為有2之公因數之數組
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.107.207 (中滑一番)
作者: sa072686 at 07/08/20
DP 題,但其實也可以使用 binary search + greedy 來做
詳細做法請參考類題 907 與 714,於此不再贅述,只提較不一樣的部份
0.129sec AC,78/275
翻譯一下
速食連鎖店 McBurger 於某條高速公路上有許多的餐廳。現在他們決定要沿著
高速公路建立一些補給站,它們將會設在餐廳裡並供應著許多的餐廳。
當然他們希望每個餐廳距離補給站的平均距離要最小,而你正打算幫他們寫一個程式
來決定要在哪些餐廳設立補給站。
為了使問題更加地明確,經營者發表了詳細規格:你將會得到 n 個整數,
且這 n 個整數呈嚴格遞增,其中 di 代表第 i 間餐廳的位置,以和總公司的距離表示,
並且它們總是位於同一條高速公路上。並且給你一個 k(k <= n)表示要設立幾個
補給站。
這 k 個補給站將會被設立在 k 間不同的餐廳中。每間餐廳將會指定一個
離它最近、最近的補給站提供補給品。為了最佳化補給品的運送花費,我們定義總距離
Σ(i = 1 to n) |di - 為第 i 間餐廳提供補給的位置|
必需要盡可能地小。
寫個程式計算將這 k 個補給站設立在哪裡,能夠使得總距離最小。
Input
輸入中有許多對於該連鎖店的描述。每一份描述以包含兩整數 n 及 k 的一行開始,
且 1 <= n <= 200,1 <= k <= 30,k <= n。接下來會有 n 行,每行包含一個整數,
代表每間餐廳的位置,並且以嚴格遞增的方式呈現。
輸入以一組其 n 與 k 皆為零者為結尾,並且該組不需要處理。
Output
對每一組連鎖店,先輸出該連鎖店的編號,接著輸出最佳的補給站設立方案,
格式如下:對每一個補給站輸出其位置及其供應的餐廳範圍。如果有不止一種最佳解,
那麼輸出任一組都可以。最後請輸出總距離,其定義如上。
每組測試資料後都要輸出一個空白列。
---- 防雷分隔 ----
其實解法都差不多,只要注意最後一個補給站未必設在最後一間餐廳即可
WA 了好多次都是因為腦殘輸出了最後一個補給站設在最後一間餐廳的最佳解…
另外最佳情況要計算每間餐廳離最近補給站的距離,不過暴力加總還不至於 TLE
直接加就可以了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/20
不好想的一題,算是 DFS,但需剪枝或使用特殊技巧
1.830sec AC,122/144
翻譯一下
本題將給予一面積 n 之迷宮並有 n^2 個方格。方格中左下角為(0,0),
右上角則為(n-1,n-1)。此迷宮僅含一入口(0,0)與一出口(n-1,n-1)。
在每一格皆可以一單位體力之消耗往東西南北四方行走,但收集寶藏並不需要消耗體力。
某些格子可能藏有你所需之寶藏。假設共計 T 個寶藏,而你最少需要收集 S 個。
在本題,你被要求找出一條至少收集 S 個寶藏並從入口走到出口的最短路徑。
並且,如果你想要,你可以重覆出入某個格子。
Input
每組測試資料的第一行包含三個整數 n、t、s,n <= 30,t <= 30 且
s <= 10,s <= t,描述這個迷宮的大小、寶藏數量以及所需收集的寶藏數量。
之後有 t 列,每列包含兩個整數表示寶藏的座標。輸入中可能有很多組測試資料,
以包含三個零的一列為結束。
Output
每組測試資料輸出一列,包含迷宮編號及收集完所需寶藏數量之最短路徑長。
---- 防雷分隔線 ----
感謝討論板的強者提供。
直接暴搜會爆炸的…嗯,不過…如果目前所在點與目標所在點所形成之矩形
......t
....n..
s......
中間有個點 n 存在的話,就沒有直接到 t 去的理由了。
因為直接到 t 去並不會比較好,所以就不到 t 去了。
但請注意如果 n 已被走過則不需考慮,也就可以考慮走到 t 去了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:我真的不知道為什麼還要加最後一句才會AC.. 0820 22:13
→ sa072686 推:我也不知道… 0820 22:24
作者: sa072686 at 07/08/20
不是說很好想的大數 DP 題,可是規律相當好猜?
嗯,不小心看看看就猜中了…不過為了我的 DP,還是乖乖推過一遍…
0.016sec AC,6/285
翻譯一下
Asif 是個 East West University 的學生,而且他正為了相對高的學費
而在 EWUISP 工作。有一天,因為工作的關係他必須為 n 個房子裝設纜線。
所有房子都在同一直線上。他想使用最少的纜線數使得所有房子皆能連到
纜線伺服器去。一間房子可以透過和左邊或右邊有連接到纜線伺服器的房子的連接,
來取得與纜線伺服器的連線。
你想寫個程式計算有幾種方式可以用最少的纜線使得所有房子皆能連到伺服器去。
(範例請見原題目網址)(圈圈表示伺服器,方塊則為房子)
Input
輸入的每一行都有一個整數 n(n <= 2000)。n 的定義如上所述。n 等於零表示
輸入結束,並且它不應該被處理。
Output
對於每一行輸入必須輸出一行,包含有幾種裝設方式。你可以放心地假設
輸出絕對不到 1000 位數。
---- 防雷分隔線 ----
其實隨便就可以看出給你 n 輸出的是費氏數列第 n * 2 項…
不過那是觀察,還是附上推法
首先,我們確定 dp[1] = 1
接著每多一間房子,便將其放進去(放最左、放最右?看心情囉)
之後,它有兩種選擇:直接連伺服器,或透過旁邊房子
若選擇透過旁邊房子,由於每間房子都一定會連到伺服器
所以,一定可以連到伺服器;因此共有 dp[n-1] 種可能
若選擇直接連到伺服器,那麼…是不是有些房子,可以透過新房子連到伺服器?
因此我們先想:若新房子不去串舊房子,則有 dp[n-1] 種可能
若串一間,則剩下的 n-2 間自成一個系統,則有 dp[n-2] 種
若串兩間,則剩下的 n-3 間自成一個系統,則有 dp[n-3] 種
因此若設 dp[0] = 1,則式子可表為 dp[n] = dp[n-1] + sum(dp[0] to dp[n-1])
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/20
嗯,來講一下大數的優化好了…
感謝 seanwu 學弟
如果 int 只塞一個位數是不是很浪費?
那會有人想說,不然我開 char 嘛?
但是還有一個更環保又更有效率解決方案
那就是:int 給它多塞幾位…
像是加法,int 可以塞到 9 位,因為 10^9 * 2 還不致於 overflow
那麼就給它塞九位吧,只要修一下進位的部份就可以省下許多的 memory
效率也相當高,像 10862 我就衝到第 6 名
嗯,不過會不會發現有些數好像會減肥個幾位?請記得:
別忘了你一個變數塞的是九位,九位啊
請愛用 %09d 謝謝
乘法的話,請視情況修正位數
但,據我先前的測試,使用 long long 增加一次儲存的位數只會拖慢速度
所以,請使用 int 效率最高,必要時可調整為 unsigned int
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/21
以前看到就嚇怕的題目…現在一看根本就是無腦 BFS…
嗯,雖然一樣轉轉盤,但和 704 等級差很多很多
然後是名次…堅持全暴力不用複製貼上的回報嗎?(謎:這無關吧…)
0.402sec AC,19/1165
---- 防雷分隔線 ----
啊就 BFS 亂掃亂掃…
先建立一個擋重覆的表,數字只會從 0000 到 9999 共一萬種情形
建個長度 10000 的表就可以了
接著,讀入不行的數字時直接把表中不行的數字擋掉
然後開始歡樂 BFS,八種方法而已…
搜過所有可能情形之後就可以得到答案了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/21
※ 本文轉錄自 [drazil] 看板
作者: drazil (蜥蜴) 看板: drazil
標題: [ACM]114
時間: 2007/03/13 Tue 00:18:35
模擬題
重點是題義很難懂= =
給m*n的遊戲盤,請你模擬彈珠檯的遊戲= =
首先方向只有四種,最神奇的是球有生命值(HP)
當HP<=0的時候球會蒸發然後換下一顆,每走一步會減1,碰撞也會減
會彈的只有Bumper和Wall,各有指定的COST,也就是碰撞時減的HP量
PS有可能是負的,也就是灌紅水的意思(踹飛)
碰撞的時候是停留在原地的,也就是說你永遠不可能踏在B或W上
而B碰撞時有分數拿,但是只有在HP>0的時候才算有效碰撞
也就是 加分數及減COST 和 一般碰撞 不然就只有一般碰撞(HP==0時剛好撞到時)
一般碰撞則是指方向向順時針轉90度
沒有碰撞時則球按方向以一格的速度前進 不要忘記減HP= =
會給定B的位置 COST POINTS 和"許多"球的初始位置及方向
然後W的部份很神奇
假設地圖是4*4
那W的分布就如下
WWWW
W..W
W..W
WWWW
恩恩
佔了最外圍的一格ˇ
反正就模擬虌~不懂再來問我
PS我國文不好 有人想把他整理成閱讀性高的版本的話記得給我一份 嘎嘎ˇ
--
★sa072686 我想DP啊~(扭)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by drazil from 125.233.249.104 (中滑一番)
→ sa072686 推:這簽名檔出現時我還沒發現dp小站的XDDD 0314 08:32
→ R6 推:XDDD 歡迎來dp小站 0314 18:52
φ sa072686 轉:從 [drazil] 看板,于 2007/08/21 Tue 13:26:29
作者: sa072686 at 07/08/22
剛睡到一半突然想到反例,就爬起來了…
....4.
.3.2..
...1..
......
1 => 2 => 3 => 4: 12
1 => 2 => 4 => 3: 16
1 => 3 => 2 => 4: 12
1 => 3 => 4 => 2: 16
1 => 4 => 2 => 3: 16
1 => 4 => 3 => 2: 16
2 => 1 => 3 => 4: 14
2 => 1 => 4 => 3: 18
2 => 3 => 1 => 4: 14
2 => 3 => 4 => 1: 18
2 => 4 => 1 => 3: 18
2 => 4 => 3 => 1: 18
3 => 1 => 2 => 4: 10 **
3 => 1 => 4 => 2: 14
3 => 2 => 1 => 4: 10 **
3 => 2 => 4 => 1: 14
3 => 4 => 1 => 2: 14
3 => 4 => 2 => 1: 14
4 => 1 => 2 => 3: 18
4 => 1 => 3 => 2: 18
4 => 2 => 1 => 3: 18
4 => 2 => 3 => 1: 18
4 => 3 => 1 => 2: 18
4 => 3 => 2 => 1: 18
很明顯地,3 => 1 => 2 => 4 與 3 => 2 => 1 => 4 是最短的
但是很明顯地這兩組正解,2 在 1 => 4 的矩形中,2 在 1 => 3 的矩形中
雖然原因還不確定,希望強者們能指點一下…
但是,確實是有反例存在的
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/08/22
這個啊…10888 篇說講不清楚呢
那我試著講講看好了…
拿 10911 舉個例。
這題是有最多八組十六個人配對,使得總距離和最小
那麼對於這八組,最佳解一定是其中某一組加上剩餘人任意配對的最佳解
而剩餘人任意配對的最佳解又可以分為其中某一對,加上剩餘人任意配對的最佳解
DP 式大概長這樣:
DP[a~z] = min(DP[i,j] + DP[a~z - (i,j)])
舉個例,a、b、c、d、e、f 六人
就是取以下中最佳的解:
a 配 b + dp[c、d、e、f]
a 配 c + dp[b、d、e、f]
a 配 d + dp[b、c、e、f]
…
b 配 c + dp[a、d、e、f]
…
e 配 f + dp[a、b、c、d]
這樣遞歸下去,就可以將其拆成最佳子問題來解決
也就是某些人中任取兩人配對與剩下人任意配對的最佳解的總和
這樣子…做法是將哪些人取過、哪些人沒取過建成 0 和 1 的表
並且轉成二進位制的值後,便可以一簡單的表以數字對應,以及使用位元運算簡化
以 10911 為例,我的方法如下
將一開始兩兩配對的表建起來,然後放進 queue 做 BFS 以產生更多人配對的表
表的表示方式可像這樣:10011010,表示第 2、4、5、8 個人在集合中
而將其轉為十進位整數 n,則 dp[n] 表示第 2、4、5、8 個人在集合中時
最佳解的值為多少,這樣
建表時可記下編號最大者之編號以防重覆情形
接著每 pop 一次便再任意枚舉兩人加進集合,然後求這群人的最佳解
一直枚舉到沒有其它種加進兩人的方式為止
尋找某人是否在集合內時可使用 or 運算
建一表存放 2 的次方數,然後抓對應到該人的數字去做 or 運算
因為位元中只有一個 1,因此如果做 or 運算後值不變,表示原先該位位元
的值也是 1,因為若為 0,值就會改變
例如:10010011 與 10000 做 or 運算則原值不變,表示該位元是 1
也就是說,這個人已經存在於集合中;相對地,
10010011 與 1000 做 or 運算則原值改變,表示該位元是 0
也就是說,這個人尚不在集合中
這樣枚舉下去,直到找到所有人都在集合中的最佳解,即為所求
像 10888 比較複雜
因為是箱子配標記點,因此沒辦法用以上想法下去做
但可以像這樣想:對每個箱子和標記點加上編號
那麼我從編號小的箱子做起,可以確定:
一堆箱子對於任意點任意配對取最佳解,之後再加入一個箱子後可能打亂它
但可以確定假設加入一個新箱子 i,可以枚舉它對應到任一點 j
然後再取先前從 1 到 j-1 個箱子對應到任意不重覆且不為 j 的點的最佳解
取其中加總最佳者為最佳解,如此枚舉完所有箱子之後便可得到最佳解
想法雖然不太一樣,做法卻是與上述相近的
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/23
嗯,排組大數題,基本上請拿全錯排公式去推 DP 式…
當然如果你有足夠的勇氣,直接拿原公式寫亦無不可
好久前欠的XDD
---- 防雷分隔線 ----
我是觀察來的啦…
感謝 AikoSenoo 提供全錯排公式
n!-C(n,1)*(n-1)!+...+(-1)^n*C(n,n)0!
我是把它寫在一起啦…
1 * 1 - 1
1 * 2 - 2 * 1 + 1
1 * 6 - 3 * 2 + 3 * 1 - 1
1 * 24 - 4 * 6 + 6 * 2 - 4 * 1 + 1
1 * 120 - 5 * 24 + 10 * 6 - 10 * 2 + 5 * 1 - 1
---- 公式在底下 ----
DP[1] = 0;
DP[i] = DP[i-1] * i + 1 - 2 * (i%2)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: seanwu at 07/08/23
以BFS刷新路徑長度做最短路徑,時間複雜度為O(VE)
proof:
先看每一個點i會被更新幾次..
考慮從起點走到i的所有路徑..有好多好多條,但依邊數來分類,
所有的路徑皆為1~V-1個邊
因為BFS的特性,相同邊數的路徑會同時被找到,也就是說要刷新也會一起被更新
因此每個點最多會被刷新(V-1)*deg次,deg是該點的入度數
因此總時間為每一點的deg總和*(V-1),即 O(VE)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.24 (台狼一中桑靈餓)
作者: gloompisces at 07/08/23
給你一個數獨盤面,你必須加入一些數字,是他變成唯一解
而且你不能加入不相干的東西,意思是如果移去任何一個你加入的東西
則盤面將變成非唯一解
<Hint E>
debug了8個小時,快吐血了...
use DFS to solve
但是注意,DFS的順序很重要..
順序由上到下,由左而右 + 數字由 1 到 9 => TLE
順序由下到上,由右而左 + 數字由 1 到 9 => 2.164
順序由下到上,由右而左 + 數字由 9 到 1 => 0.701
<另解> (by SRX) 先找出一組解,然後把多出來的拔掉
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.194 (不失敗大學)
→ seanwu 推:我想到的也是那個另解 XD 反正它也沒說要哪一組 0823 21:49
→ sa072686 推:那個方向太神奇了…從TLE變0.170… 0310 12:16
作者: seanwu at 07/08/23
11090 Going in Cycle!!
給一個有向圖,找出最小平均值圈的值
一個圈的平均值為該 圈上邊值的總和/圈上總邊數
圈上不能有重覆的點
<Hint E>
不用管有沒有重覆的點,最小平均值圈一定是簡單圈,有重覆不會更好
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
作者: seanwu at 07/08/23
最小平均值圈 Minimum Mean Weight Cycle
先來個非常弱的算法..
Hint: 不管要求的圈有沒有限定一個點或邊只能走一次云云,
最小平均值圈一定是簡單圈(每個點只走一次)
可以試著在最小平均值圈旁再粘上一個圈,
接著證明這個動作不會讓最小平均值圈變得更小
所以得到了一個很簡單的算法 O(EV^2) = O(V^4) :
枚舉每個點當做起點,以 Bell-Ford 最短路徑疊代算法 (或BFS亦可)
每次疊代後計算cycle的平均值,去更新 Min
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
作者: sa072686 at 07/08/24
數學題…推了一個多小時還推錯好幾次 |||
0.000sec AC,6xx/1200
---- 分隔線 ----
公式,嗯…
http://zion.tfcis.org/~sa072686/ACM/Pic/10297.bmp
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
▲ sa072686 改@2007/08/26 Sun 22:27:43
作者: seanwu at 07/08/24
652 Eight
有一種遊戲: 給一個九宮格,每格分別放上標有1~8方塊 (x代表空格)
你可以移動相鄰的方塊到空格中,問你能不能把它移回依順排好的樣子
1 2 3 1 2 3 1 2 3 1 2 3
x 4 6 => 4 x 6 => 4 5 6 => 4 5 6
7 5 8 r 7 5 8 d 7 x 8 7 8 x
請輸出步數最小的移動方式,若無解請輸出 unsolvable
<Hint E>
正解IDA*,不然BFS也可以,狀態還不算太多
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
→ Tommy 推:呃...可以解釋一下什麼是IDA* 嗎? 0825 12:24
→ chensc 說:啟發式搜索(?) 0825 12:25
→ sa072686 推:用估計做限深DFS的樣子 0825 12:37
→ Tommy 推:喔~感謝 依照chen的說法 我的A*就變成不倫不類了= = 0825 12:41
→ Tommy 推:因為我的A*加了啟發式搜索= = 0825 12:42
→ Tommy 推:喔對了 8-puzzle 判斷有沒有解和15-puzzle一樣嗎??? 0825 12:43
→ sa072686 推:google一下吧 我也忘了 0825 13:04
作者: sa072686 at 07/08/26
嗯,不難的一題,處理過後就很簡單的…
用很傷 mem 的方法暴,不過效率卻變很高,很多東西都變 O(1)
0.012sec AC,6/144
翻譯請見精華區,很多題塞在一起的
---- 防雷分隔線 ----
想法也很簡單,先想要怎麼抓重複?
最簡單的方法,就是排序了;有重複一定會排在一起,要判斷就容易了
再來是判斷他是白目填很多 project 還是一個 project 填很多次
這點,反正我也需要知道哪個學生填了什麼 project
那麼我乾脆記錄哪個學生填的是哪個 project
然後,在排序的時候連 project 一起排,這樣相同的會排在一起
那麼就可以很方便地找不相同的了
接著會想:排序之後呢?不合的打掉嗎?
可是也有可能一整排連續的,檢查到最後才不合
像是可能有某個腦殘填了某 project 100 次,然後再填了別的 project
這樣就頭痛了,發現要消掉後再回去看嗎?
那,我乾脆把它們用 union set 的方式攪在一起
這樣,要否定一個 union set 就只要常數時間,而且很容易做
接著就暴搜一次所有學生看是否有被否決,沒的話就加進該 project 中
可是這樣會有重覆加的情形,像是白目填個 100 次,雖然沒填其它的就不會被否決
可是也不該算 100 次吧?不然…算過就否決好了,這樣問題就解決了
嗯,效率可以在 O(n log n) 左右,其實還不錯,主要是排序的部份
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:千 po 就這麼送給歡樂題了XDD 0826 01:29
作者: chensc at 07/08/26
※ 本文轉錄自 [chensc] 看板
作者: xeon (cis::xeon) 看板: chensc
標題: Re: [作品] ACMA 3.5 Release
時間: 2007/03/21 Wed 01:57:55
※ 引述《csftwpt (Rice)》之銘言:
> ※ 引述《xeon (cis::xeon)》之銘言:
> > 推薦這個網站
> 可以把 8286 這個帳號也加進去嗎?
> 這位是中國的劉汝佳, 中國 IOI 代表隊的教練...
> 想跟他的題目做比較這樣, 謝謝~
沒有人去傳 8800RM 嗎?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by xeon from 59.127.68.35 (小x基地)
→ chensc 推:這個帳號很久沒有人去傳了吧,而且近幾屆的人應該都不知道 0321 12:46
φ chensc 轉:從 [chensc] 看板,于 2007/08/26 Sun 14:53:25
→ chensc 推:找到密碼了... 0826 14:53
φ sa072686 轉:到 [TFcis09] 看板,于 2007/08/26 Sun 15:23:17
作者: sa072686 at 07/08/26
嗯,四星…但其實不難想啦,不要真的暴力試所有 permutation 就好了
0.002sec AC,148/244
---- 防雷分隔線 ----
嗯,首先先想清楚一點就不難了,這題可以算是 greedy
考慮到它要求的最佳解,條件是大於本身,但又要是最小的
那麼其實很簡單,想一下就知道怎麼變動是比較好的
如果十位數可以變大,那麼百位數變大絕對不會比較好
這樣的話,我們可以從個位數開始往後逐一考慮
如果先找到某一位數可以變得比原本大,那麼就一定不會有更佳解
然而,變大的方法只有兩種:一種是2翻成5,另一種是6翻成9,再者就和前面位數交換
因為,如果動到前面的位數,變小則不符合解的條件,變大又不會比較好
所以,就和位數比它小的比較看看,如果有得交換就交換
接著把比該位數更小的那些位數的數字最小化就好了,先翻轉到最小化
然後用排序比較方便,不過要注意小數點會亂跑,這樣
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/26
終於啊,寫了好幾天發現是攪錯規則…保齡球,嗯嗯,等等會翻規則的
0.041sec AC,34/58
翻譯一下
你們都知道的,Homer Jay Simpson 是個保齡球狂。最近幾次他和他的朋友
Carl 和 Lenny 打球的時候,他總是打出相同的分數,而且至少有一局不一樣。
Carl 很好奇 Homer 到底能夠用幾種不同的方式打出相同的分數。
為了你們這些還沒享受過偉大的保齡球賽的人,我們將會詳細地講解規則。
一局有十個回合,每個回合有十個球瓶。如果十個球瓶都被打倒,
或是你已經打了兩球,該回合就結束。並且,你在該回合可以得到與你打倒的
球瓶數一樣的分數。但若你能打倒所有球瓶,就會有些特殊獎勵。
如果你在一回合的第一球就打倒所有球瓶稱為 Strike,那麼,
接下來兩球的分數會加算進這回合裡面(當然原本的分數仍屬於它那一回合)
如果你在一回合的第二球才打倒所有球瓶,就稱為 Spare
接著下一球的分數會加算進這回合裡面(當然原本的分數仍屬於它那回合)
如果是在最後一回合擊出全倒的話,會有特殊的規則:
你可能會得到一球或兩球(視你擊出的是 strike 或 spare 而定)的額外獎勵
但是這只算在獎勵中,本身擊倒的球瓶數並沒有分數
如果你有兩球的額外獎勵,又在第一球全倒,那麼第二球將會再有十個球瓶。
你們可能會注意到:一回合最多只能得到 30 分,因此一局最多只能得到 300 分
你必須幫忙計算有幾種方式可以打出某個特定的分數。
Input
輸入包含多組測試資料。每組測資一行,包含一整數n(0 <= n <= 300)
表示你要計算有幾種方式的特定分數。
最後一組測資底下會有一行包含 -1 的一行。
Output
對於每組測試資料,輸出一行包含著有幾種方式可以達成這分數。
你可以放心假設答案在有號 64 位元整數的範圍中。
---- 防雷分隔線 ----
嗯…DP 吧,每一回合的結果都有可能影響下一回合
但是分數的變動太大…反正每一回合最多也只有四種狀態出現
所以就枚舉每一回合所有可能打出的分數
然後再枚舉每種分數的每種狀態去做 DP 就好了
狀態分:
十個球瓶沒被打完(完全不影響接下來的回合)
spare (影響下一回合第一球)
strike (影響下一回合兩球,或下回合亦 strike 時保留至下下回合)
連續 strike (在上回合 strike 時這回合也 strike,上回合的第二球獎勵
會留給下一回合第一球…)
只要枚舉每一回合 301 種分數、所有得分可能以及所有狀態就行了
DP[i][j][k] 代表第 i 回合得到分數 j 且狀態為 k 的情形數
並請記得對第十回合做例外處理,因為第十回合的獎勵球比較特殊
就是讓你補兩球,這兩球不算分,純算給第十回合獎勵用
但請注意第一球打下去後如果全倒,則第二球會再排十個球瓶
否則,第二球不會再重排球瓶唷…
這樣,在第 10 回合得到分數 j 的所有狀態和即為所求
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/08/27 Mon 08:53:39
作者: sa072686 at 07/08/27
又一大腦殘
0.447sec AC,26/159
翻譯一下
我有一個長度為 n 的 Fred 序列,它們包含 1 到 n 的數字,
而且兩兩皆相異。我想找一個性質如下的子序列,且越長越好:
Mary[0] > Mary[1] < Mary[2] > Mary[3] < ....
Input
輸入的第一行有一數字 T,以十進位表示且不會有無意義的 0。
T 最大 50,接著會有 T 列。
每組測資單獨一列,格式如下:
n Fred[0] Fred[1] Fred[2] ... Fred[n-1]
n 表示元素個數,以十進位表示,且不會有無意義的 0。
每一列的開頭與結尾不會有空白,且兩個相鄰元素間必只用一個單獨空白隔開。
n 最大到 30000。
Output
對於每一組測資,輸出在新的一列,包含著符合所要求性質的最長子序列長度。
---- 防雷分隔線 ----
嗯,其實很腦殘啦…
用 greedy 然後 O(n) 掃過一遍就解了
基本上如果大的要找小的,那在找到小的之前只有可能越找越大(因為兩兩必相異)
可是越大會越好找小的,所以就覆蓋吧
如果小的要找大的,那在找到大的之前只有可能越找越小
可是越小會越好找大的,所以就覆蓋吧
如果找到符合條件的下個元素,就改變目標再往下找就好了
其實是很簡單、很好想的一題 greedy
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/27
10376 Snakes
在1000*1000的西南角為(0,0),西北角為(0,1000)的地圖上,
你要從西邊橫越這個區域到東邊,但這裡住著一些蟒蛇,
每隻蛇有個點座標,牠會攻擊距離小於攻擊半徑的人
問你得在西邊的哪一點進入,東邊的哪一點離開,如果有多種選擇,
請輸出最北邊的出入口;如果無解,也請依題目輸出
蛇的座標及攻擊半徑都是實數,而且你走的座標也可以是實數,沒有規定要走在格子點上
<Hint>
可以用disjoint-set,把圓連成團然後再用每一團來看(每一團是不相交的)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
作者: sa072686 at 07/08/27
> ※ 引述《gloompisces (瞬間和永遠)》之銘言:
> Problem B: 給你p和n,你要求出一個 anti-arithmetic 數列的第n項
>
> anti-arithmetic是嚴格遞增數列,他的前p-1項是1,2,3,...,p-1
>
> 再來你要一個一個加入元素,新加入的元素要盡量小
>
> 但加入後不能產生p項的等差數列
>
>
> 3<=p<=30 1<=n<=2000000000 .....
>
>
>
>
> 有難度了XD
其實不難耶?把許多情況寫下來觀察一下就知道了…21 行秒XD
推的時間比較久,尤其在那邊開表很花時間…規律倒還不難推
這裡給個福利,送張表好了XDD
→ gloompisces 推:注意,題目騙人,請用 long long int 讀 n 0729 14:56
題目並沒有騙人喔,2 * 10^10 是 11 位數,題目很誠實地寫出來了XD
以下附表(附表應該不用雷吧?)
m: 3
數列 n => 第 n 項的值
1 2 1 => 1 6 => 11
4 5 2 => 2 7 => 13
10 11 3 => 4 8 => 14
13 14 4 => 5 9 => 28
28 29 5 => 10 10 => 29
m: 4
數列 n => 第n項的值
1 2 3 1 => 1 4 => 5 7 => 9
5 6 7 2 => 2 5 => 6 8 => 10
9 10 11 3 => 3 6 => 7 9 => 11
17 18 19 10 => 17 13 => 21 16 => 25
21 22 23 11 => 18 14 => 22 17 => 26
25 26 27 12 => 19 15 => 23 18 => 27
33 34 35 19 => 33 22 => 37 25 => 41
37 38 39 20 => 34 23 => 38 26 => 42
41 42 43 21 => 35 24 => 39 27 => 43
65 66 67 28 => 65 31 => 69 34 => 73
69 70 71 29 => 66 32 => 70 35 => 74
73 74 75 30 => 67 33 => 71 36 => 75
---- 真的雷在這裡 ----
一開始都是 n => n,但有時會暴增…
觀察暴增的點與值,就會發現規律了…
因為暴增的點,都有固定規律可循
而且會發現每隔固定數量的點會暴增一樣的數量
如此就可以很輕易地計算出正確解答了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:在contest的時候是寫 2 * 10^9 XD 0827 23:01
→ sa072686 推:這 XD 這樣好陰 0827 23:05
作者: sa072686 at 07/08/27
這題和 11245 其實式子還蠻像的,都是 20 行上下解決得掉的
嗯,講一下做法好了
---- 防雷分隔線 ----
可以用 greedy 的方式從後面做回來…
像 10 2 這組,可以先湊到 10、9、8、7、6,然後 5 不行嘛…
而且 3 或以上都不行了,會卡到…就從 2 開始,到 2,剛好 6 個
又像 10 3 的話,可以先湊 10 到 4,但 3 * 3 = 9
所以先湊 10 到 4,再湊 1 到 1,…
嗯,這樣湊的話就是先從尾巴湊,湊到會卡到為止,再從不會卡到剛湊的
最後一個的數開始,再湊到會卡到為止,…
這樣只要一直除、一直除…答案就跑出來了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/27
11159 Factors and Multiples
給A,B兩組數,在這兩組數中各刪掉一些數,
使得任一個B中的數皆不是任一個A中的數的倍數
最少需要刪掉幾個數?
<Hint E>
maxflow
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
→ seanwu 推:補充一下,轉化後的問題叫 最大獨立集 0827 21:27
→ seanwu 說:也就是找一個點集,點跟點之間完全沒有邊,點數要最多 0827 21:28
作者: sa072686 at 07/08/27
嗯,有點數學…
---- 防雷分隔線 ----
我是解方程式 m + n - (m+n) * x / 100 < m - 1
雖然得到的 m + n 未必是解…嗯,不過我用二分搜尋搜 m+n 和 m 之間的值
請注意 x == 100 與 x == 0 時皆輸出 not found
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/28
589 Pushing Boxes
推箱子的遊戲,S是人的起點,B代表箱子,T代表目標,都各只有一個
你必須從S出發,把箱子推到T,由於推動箱子是很花體力的,
所以你希望找出推箱的步數最少的解法
如果推箱的步數一樣多,請找出總步數最少的解法
<Hint E>
可以用BFS,以推箱步數為主,不過這題有點苦工 ^^;
因為要推箱子,所以人一定是貼在箱子的某一個旁邊上
因此以箱子的座標加上人貼在哪一邊當做狀態就可以了(起點當例外)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
→ gloompisces 推:天啊你連這題都寫了... 0828 17:00
→ seanwu 推:喔..還好啦.. 0828 17:11
→ sa072686 推:用人座標和箱座標做BFS,以推動次數決定走不走某一步 1118 12:30
→ sa072686 推:算了回文好了… 1118 12:30
作者: gloompisces at 07/08/28
10068 - The Treasure Hunt
題意大概是你要從S走到T,蒐集完所有的寶藏
你走的每一步都會耗費精力,撿起寶藏和抱著寶藏走也會耗費精力
Input一開始先給你圖,下一行是走路耗費的精力
再下一行則是你撿起寶藏(P)和抱著那個寶藏走一步(C)的耗費精力
((Pi,Ci)代表的寶藏在地圖中的順序是由上到下,從左而右)
要回答耗費的最小精力
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.154 (不失敗大學)
▲ gloompisces 改@2007/08/28 Tue 17:35:32
作者: sa072686 at 07/08/28
嗯,過了,提供一下解法好了…
0.273sec AC,16/59
---- 防雷分隔線 ----
仔細想想後發現好像沒什麼規律…不過反正 T 很小,Q 很大,就很適合建表…
首先考慮:先找出第一種一定會輸的情形,然後想辦法把對方逼到這種局面
那,就可以得到勝利;這是兩人遊戲類常見的想法
就是找到一種方法壓制對方到無法翻盤的局面,這樣就可以獲勝
相反地,若一個局面無法走到使局面必敗,就是輸了
先思考:當只剩一堆時必勝,因此絕對不可以把一堆拿完,這樣必敗
接著,如果兩堆數目相差在 k 以內時必勝,因為直接拿完就行
那麼就考慮相差在 k+1 時的情形。如果相差在 k+1 且其中有一堆為 1 的情形下
那麼不管對方怎麼拿,不是只剩一堆,就是兩堆相差在 k 以內
因此在出現 1、1+(k+1) 時必敗。
接著,如果任何盤面可以達成 1、1+(k+1) 時,該盤面必勝
由於單獨拿一堆時,可隨意取任意個數,因此對任何 1、n 且 n > 1+(k+1) 皆必勝
那麼考慮最小堆為 2 的情形,已知最多可減去 1+k 達成 1、1+(k+1)
因此 2、2+(k+1)+1 必敗…至此發現整理後為 2(1+(k+1)),而其它數字亦同
很開心,對吧?
…
考慮最小堆為 n 的情形,若 m、n 且 m < n 必敗,則必勝
這樣便出現例外了;像是最小堆為 1+(k+1) 時必勝
因此 n+1 必須能回到 n-1 的必敗盤面
所以,數字會出現不同…但又抓不出規律,怎麼辦?
例如 k == 1 時,對於每個非必勝的最小堆 n,前幾項對應的必敗數字:
3、6、10、13、17、20、23、27、…
因此我就想,如果建表起來存就不用擔心沒規律的問題了吧?
但是,建表…測資有很多、很多組?
其實也還好啦,對於 10 種可能 k 都可能有高達 10000 組詢問
那也只要建 10 次表,最多一堆到 100000,建表是 O(n)
這樣就可以應付最多 100000 組詢問,還是可以過的
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/28
※ 引述《gloompisces (瞬間和永遠)》之銘言:
> 10068 - The Treasure Hunt
> 題意大概是你要從S走到T,蒐集完所有的寶藏
有可能無法蒐集完…像 sample 第一組
> 你走的每一步都會耗費精力,撿起寶藏和抱著寶藏走也會耗費精力
> Input一開始先給你圖,下一行是走路耗費的精力
> 再下一行則是你撿起寶藏(P)和抱著那個寶藏走一步(C)的耗費精力
> ((Pi,Ci)代表的寶藏在地圖中的順序是由上到下,從左而右)
> 要回答耗費的最小精力
補充:可以踩過寶藏不撿喔,path 沒有限定上下左右的先後順序
也就是任一組可行解皆可
---- 防雷分隔線 ----
寶藏了不起十個,當然用 DFS 暴搜啦,10! 還可以過的
至於點和點間的距離以及路徑,對每點做 BFS 暴搜就可以了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:話說這題我好像是ACMA中第一個過的XDDD 0828 20:01
作者: sa072686 at 07/08/28
不難寫…真的不難,就只是暴力模擬…照做就過了
竟然因為腦殘開錯型態 TLE 掉一次(汗)
0.270sec AC,531/1077
翻譯一下… Hint 就不提供了,照題目寫的做就對了
背景
模擬是一種資訊科學的應用之一,意味著開發一個模型模擬真實事件。
模擬有許多種,包含(但不僅限於)discrete event simulation 及
clock-driven simulation。模擬亦常用於觀察運作情形以利實際運用。
這個問題是關於模擬一個簡化的彈珠檯。在彈珠檯中,將有一顆鋼珠
在檯面上滾動並撞擊許多種類的緩衝器以取得分數,直到它消失為止。
題目
你將寫一個程式模擬一個理想的彈珠檯,它平坦且有許多障礙物(緩衝器或牆)
檯面將會劃分成 m * n 個方形區域,原點在最左下角。每個緩衝器
會佔一格,並且檯面的邊界行、列會是牆壁。一次會射出(出現)一顆鋼珠,
在固定的那一格出現,並有著固定的方向和生命值。在模擬中,
每一格都是完整的,並且鋼珠的前進方向會是上下左右之一。
鋼珠會在方格間跳動,並且會撞擊緩衝器(會得到分數)及牆壁(不會得到分數)。
撞擊緩衝器得到的分數為輸入所給予的,該緩衝器的分數。鋼珠的行進速度為
單位時間前進一格。如果在某個單位時間,某個鋼珠會走到某個緩衝器或牆壁上時,
稱為撞擊。撞擊會引發反彈,並且方向會向右轉 90 度(即順時針方向),
而位置不會在障礙物上,甚至只是在原地轉向(也就是,反彈只會導致方向
產生變化。)注意在這定義之下,沿著牆壁走並不能算是撞擊。
一個鋼珠的生命值代表它在檯面上能存在多少個單位時間。鋼珠從一個格子
移動到另一格需要消耗一個單位的時間。撞擊的時候也會因牆壁或緩衝器
而有額外的消耗。當一個鋼珠在撞擊緩衝器時如果生命值是正的,
那麼就可以得到撞擊該緩衝器的分數。請注意一顆生命值只剩一的鋼珠,
將在移動到下一格時死掉,這樣就不能算是成功地撞擊一個緩衝器。
如果一顆鋼珠的生命值為零或更少時,它將死去並繼續打下一顆鋼珠。
Input
你的程式必須模擬一局彈珠檯的遊戲。輸入中用許多行來描述這個遊戲。
第一行告訴你 m 和 n,並且以一個空白隔開。這代表對所有笛卡爾座標
1 <= x <= m 與 1 <= y <= n 在這局中可以被使用到。2 < m < 51 且 2 < n < 51。
下一行是撞擊牆壁所消耗的生命值。再下一行有一整數 p 代表有幾個緩衝器。
接下來的 p 行對應到這 p 個緩衝器,各有四個數字 x、y 代表著它們的位置
以及撞擊能得到的分數與消耗的生命值,以空白(可能不只一個)隔開。
每個緩衝器的座標一定在範圍內,且撞擊得到的分數與消耗的生命值必為整數
(消耗的生命值有可能為負數,那代表撞擊後會增加鋼珠的生命值)
剩下的全部都代表著鋼珠。每一行各代表一個鋼珠,並有四個整數描述它們,
這四個整數將以空白隔開。分別是初始位置的 x、y 以及初始面對的方向和生命值。
位置一定在範圍內,並且不在牆或緩衝器上。方向必為 0 到 3 其中一個數字,
0 代表右(x 座標漸增),1 代表上(y 座標漸增),2 代表左(x 座標漸減)
3 代表下(y 座標漸減),生命值則為一正整數。
Output
對每個鋼珠依照它們出現的順序輸出它們所能得到的分數,並於最後一行
輸出它們所能得到的分數的和。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/28
最近都一句句翻耶…這樣翻的話
看有沒有好心人有閒情逸致的要幫忙投稿 lucky 貓?
我是懶得投啦XDD
嗯,其實也沒投過半題,嗯…
如果有人覺得我翻得還能看、夠格投稿的,可以拿去扔 lucky 貓 XDD
不扔也沒差啦,以後會把它弄出來扔其它網站,只是不會弄到 lucky 貓去而已
/* 「扔其它網站」這點可說是極大的伏筆啊,科科科… */
/* 不要跟我伸文字檔,沒有這種東西。轉去信箱再轉出來可能還快些。 */
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chensc 推:喔...「扔其它網站」代表sa又在開發新東西了...(期待) 0828 22:58
→ sa072686 推:開發新東西?喔不,我只是打雜的…而且還沒開始(汗) 0828 23:00
→ chensc 推:通常說自己是打雜的人都是大強者...(指) 0828 23:08
→ sa072686 推:那真的打雜的人怎麼說?(抓頭) 0828 23:26
→ AikoSenoo 推:是說我之前有寄...它沒更新ˊˋ 0829 00:52
→ sa072686 推:我的嗎(驚) 0829 00:55
→ AikoSenoo 推:不是 我自己翻的XD 0829 01:05
→ sa072686 推:喔喔…那算了XD 0829 10:15
作者: sa072686 at 07/08/29
700 達成 XDD
嗯,最後一題是 10567
不是很好寫的一題,不過換個方向就變 28/255
只不過 mem 吃到 20000 多 XDD
嗯,其實也不難想啦…要避掉 TLE 這樣想還蠻直觀的
翻譯改天 po,好晚了 XD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/08/29
嗯,很榮幸地(?)當上了第 700 題
感謝找這題給我解的人
0.146sec AC,28/256
翻譯一下
每個人都知道 Fill Bates,但我想一定很少人知道他因為其它原因
使得他在高中時期就很有名。以下是他自傳中的一小段:
「在高中畢業前,Fill Bates 以設計編班軟體使得自己可以和一堆女生同班聞名。
就他現在的成就而言,那些女生很可能會後悔自己之前沒有投資在他身上。」
現在你必須幫他另外一個不相干的忙。他的公司在 QSA(譯註:和譯者無關)
規劃了一個求才計劃。在 QSA 裡有 52 個國家(原本 50 個,再加上麻煩的
Oraq 與 Malistan)。這些求職者將會被給予一張牌子以判別國家,
並且會給予每個人一個唯一的編號。52 個國家分別以 a..z 和 A..Z 表示。
這個求才計劃有點詭異。這些最多 100 萬個求職者將依著他們唯一的編號
(並且這些唯一的編號從 0 開始,且必為連續整數)依照嚴格遞增順序站成一列,
然後擺著一張上面寫著代表他們國家的代號的牌子(畢竟,誰想聘請 Oraq 和
Malistan 的人?)而 Fill Bates 先生將會寫上一連串的字母(只有字母)
如果剛好能在這些人中發現在編號嚴格遞增的順序下,能夠找到一個子序列
(也就是說,可以跳過某些人)完全符合這一連串字母,那麼這些人將被聘請。
否則則會給序適當的訊息。
Input
輸入中只會有一組測試資料,第一行有一只包含字母的字串 S,
長度最多 100 萬。接著會有一整數 Q(0 < Q < 3501)表示有幾次查詢。
接下來 Q 列都會有一個長度小於 101 的字串 SS。這些都是 Fill Bates 寫的。
Output
對每次的查詢都應該輸出一列結果。如果找不到符合的子序列,
則應該輸出“Not matched”但不應該包含 " 符號。否則請輸出“Matched “
(注意:Matched 字樣後面會有一個空白)接著是符合第一個字母者的編號與
符合最後一個字母者的編號。這兩個數字必須以一個空白隔開。
如果超過一個子序列符合,請挑符合第一個字母者的編號最小那一個。
如果仍有條件相同的,則挑符合最後一個字母者的編號最小的那一個。
---- 防雷分隔線 ----
嗯,直接做會 TLE 沒錯。雖然最差 O(n) 且 n 只有 100 萬,看似可以過
但別忘了詢問次數 m 會使得 O(mn) 達到 3500 * 100 萬…
不過,我就想說:輸入的長度假設 l,那 l 最多也才 100,比起 100 萬來講太小了
因此,如果對每個字母都去搜尋的話,只要搜尋 3500 * 100 次而已
可是,怎麼搜尋呢?搜尋不是要 O(n) 嗎?
但我們知道如果我們要找的是 a,那麼可以忽略不影響答案的 a 以外字母
而我們又要挑所有的 a 中距目前位置最近,但又大於目前位置者
因此,我們可以試著分別記錄每個字母的出現位置,然後每次都挑最佳的
接著用二分搜尋尋找最佳的位置,也就是比目前位置大者中,最小的一個
這樣出來就保證是最佳解;如果找不到,就是無解
二分搜尋的效率是 O(log n),那麼了不起 3500 * 100 * log 1000000
2 ^ 20 約為 1048576,因此最差情形 3500 * 100 * 20 也才 700 萬
效率上仍是足夠的。何況,據實測每個字母不會出現超過 10 萬次
實際數字不確定,我只測那麼一次…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ chernglin 推:題目好長...英文要看更冏.... 0808 11:45
→ chernglin 推:0.146秒不可能是寫完這程式的時間吧?? 0808 11:48
作者: sa072686 at 07/08/29
是說我開始收文後好像就沒人要收了…
各位請幫幫忙碌的高三生收文吧…
考不考得上對我很重要,那是一切夢想與心願的前提啊…
但又不能放著這個板不去管理,副板們幫幫忙吧…
然後接下來我會減少出沒,ACM 文的量也會減少
不是因為私心什麼的,而是我放在 ACM 上的時間會大減
除了開學後要顧課業,也要開始啃書和寫 USACO 了
USACO 的翻譯等我考完吧。先欠著。
到時會把做過的部份的教學文件、題目以及 ANALYSIS 翻出來的
先這樣。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/08/29
10984 Double NP-hard
給你一個圖
我們說一個圖的「最小覆蓋集」,是要你找一個點集,讓圖上的每一條邊都至少有
一個端點在這個點集中,而且這個點集的點數要儘量少。
又一個圖的「最大獨立集」,是說找一個點集,這個點集裡任兩個點之間沒有邊
(圖上的每一條邊最多只有一個端點在這個點集中),這個點集的點數要儘量多。
這兩個問題都是NP-hard
現在,你必須從給你的圖裡面找出一個點集,同時是最小覆蓋集也是最大獨立集,
請輸出這個點集,如果找不到請輸出 Impossible
<Hint E>
兩個NP合起來就不見得是NP了 :p
注意到如果要符合條件,這個圖一定是二分圖(證明略,可以畫個三角形看一下
於是對圖做二著色檢查是否為二分圖,如果是則做二分圖匹配,設匹配數為M
因為|覆蓋集|=M,|獨立集|=|V|-M,且要相等故M=|V|/2即是題目有解的條件
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
▲ seanwu 改@2007/08/29 Wed 14:52:45
作者: seanwu at 07/08/29
10989 Bomb, Divide and Conquer
給一個帶權重的圖,將一些邊刪除後使這個圖分成兩部分
問刪除的邊總和最小是多少?
<Hint E>
用maxflow很容易想到O(V^4)的做法,不過不知道會不會過...
所以參考一下這篇論文吧,這是我看過的資料裡面最簡單清楚的
http://www.cs.dartmouth.edu/~rahul/Teaching/stoerwagner-mincut.pdf
方法非常的簡單,而且直接做 O(V^3)就夠了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
→ Tommy 推:這難道是傳說中的 maxflow-mincut theorem ?? 0830 12:47
→ seanwu 推:嗯對,不過可以不用maxflow做,會快一個O(N) XD 0831 20:21
→ sa072686 推:O(n^m) - O(n) for all m > 1 then it's the same.. 0831 20:25
→ seanwu 推:那個應該是寫錯了 0903 22:23
作者: seanwu at 07/08/29
http://www.cs.dartmouth.edu/~rahul/Teaching/stoerwagner-mincut.pdf
1. 初使化點集U含有隨便一個點a
2. 找出還未被加入U的點中,擁有w(U,y)最大者的點y,加入U中
所謂w(U,y)指的是所有連接U與y之間的邊的總合
3. 重覆2.直到所有的點皆被加入U
4. 令最後被加入的兩個點依序為s,t,則這一次找到的Cut解為w(U-t,t)
(就是在2.時w(t)的值啦),如果比之前找到的Min-Cut解還小,則更新它
5. 將s,t合併成一個點new,計算new到其它點x的邊值
dis[x][new] = dis[new][x] = dis[x][s]+dis[x][t]
6. 重覆1.~5.,每次都會少一個點,直到剩一個點時結束,Min-Cut值即為解
Prob: ACM10989
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.145 (沒有故鄉)
→ seanwu 推:喔對了,我剛剛試過用maxflow解,很慢但會過 0829 21:13
→ seanwu 說:不過maxflow的部分要做到O(VE)才行 :p 0829 21:14
→ seanwu 推:更正,maxflow是O(V^3)不是O(VE).. 1017 18:41
作者: sa072686 at 07/08/29
※ 本文轉錄自 [gloompisces] 看板
作者: PG (高等計算圖論愛好者) 站內: gloompisces
標題: Re: [閒聊] 嗯..
時間: 2007/08/29 Wed 23:27:01
喔對了
可能會有人想要看題目
http://w.csie.org/~acm/problems/20070829.zip
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.136.64 (福爾摩沙固網)
φ sa072686 轉:從 [gloompisces] 看板,于 2007/08/29 Wed 23:38:07
作者: sa072686 at 07/09/03
用超級電腦上 B 這樣…
好奢侈 XDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from irish2.sro.nchc.org.tw (沒有故鄉)
→ veriw 推:奢侈... 0903 19:07
→ devilqxect 推:學長你騙誰阿...搞個跳板很好玩嗎...Orz 0903 19:57
→ sa072686 推:好玩(正色) 0903 20:17
作者: sa072686 at 07/09/03
嗯,在這裡提供一個小 cut…僅限使用 10482 的 BFS 做法
其它方法不確定適用,也可以自行修改看看…
---- 分隔線 ----
嗯…首先是每次都會去搜 queue,但其實數字重覆性很大很大…
而且,對相同的情形而言,放相同的數字沒有意義
所以,我就讓相同的數字不掃 queue 中相同的部份
也就是說,假設加入 3 個距離為 n 的點
加第一個時假設 queue 裡面數量是 q1,第二個則為 q2,…
那麼第一次掃 1 到 q1,第二次加的時候掃 q1 到 q2 就可以了
這樣,原本 7、8 秒的可以減到約 1 秒上下
雖然沒有公假社的威,不過倒也可以加速不少
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: seanwu at 07/09/03
10838 The Pawn Chess
有一種棋類遊戲是這樣的:
在一個4x4的棋盤上,有黑棋和白棋各1~4支
白棋的遊戲目標是移動到最上排
每次可以移動一支棋子,向上一格(如果是空格),
或是向左上或右上吃對方的棋子(要有對方的棋子)
黑棋的遊戲目標是移動到最下排
每次可以移動一支棋子,向下一格(如果是空格),
或是向左下或右下吃對方的棋子(要有對方的棋子)
給你一個初使盤面,以P代表白棋,以p代表黑棋
假定兩個棋手都是神,不會失誤,問贏家是誰即最少可以在幾步後獲勝(兩人步數和)
當然,因為他們都是神,即使是輸家也會儘量拖延
//做法可以很簡單的對局搜索,but..
<Hint E>
不用alpha-beta剪枝八成會TLE...
如果DP...我不知道塞不塞的下啦..,反正我只用DFS+剪枝,然後超快 = =
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: sa072686 at 07/09/05
http://mail.tnfsh.tn.edu.tw/403
請至此報名,即回覆該篇文章,詳細日期、時間與地點皆在裡面
至於沒有或忘記帳號密碼者,文章中有附上一組帳號密碼供報名用
請記得報名並及早準備,剩沒幾天了呢
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/05
不難推的一題…也不知道 AC 率怎麼會那麼低…
只是,我承認這題是有點陰 XDrz
0.280左右,250/400左右
翻譯一下
為了方便從 Waterloo 到大城市去,你租了一台卡車,但現在油價高漲
所以你想知道最少需要多少油才能到達。
這卡車每走一公里恰需一公升油,並有 200 公升的油箱
一開始在 Waterloo 時是半滿的,到達大城市時也應該至少半滿
否則你將要多付很多很多的錢給租你車的公司作為油錢
你會想用最少的油,但你更想沿著道路開
Input
輸入中的第一個數字代表接下來有幾組測試資料。這數字之後與每組測試資料間
將有一空白列分隔。
所有數字皆為整數。第一個數字最大 10000,代表離大城市的距離
接著有最多一百個加油站,以離 Waterloo 的距離非遞減的順序出現
告訴你每個加油站離 Waterloo 的距離以及每公升的油價
Output
每組測試資料間需以一空白列隔開。
請輸出一列包含從 Waterloo 到達大城市所需的最小油價。
若不可能,請輸出 Impossible
---- 分隔線 ----
DP 就可以了
思考到終點時,一定是從某一站可直通終點的加油站走過來的
因此,枚舉該站所有可能的情形就可以了,而這些情形可依該站的狀態來分
首先,如果在該站時油量一樣,那麼油價越低一定越好
如果油量不一樣,那麼都記下來之後枚舉到下一站最佳的那一種
那麼,在最後一站可從前面所有距離在 100 以內的站過來
又,從 a 站直接到終點和從 a 站到 b 站不加油再到終點是一樣的意思
因此我們只需要枚舉從最後一站過來的情形,最後一站又只需枚舉上一站的情形,…
設可能油量 m,站數 n
記錄到達每個站所有可能剩餘油量及其最小油價則空間複雜度 O(mn)
又對每個站枚舉到達該站時所有可能剩餘油量及從上一站過來的所有可能情形
每個站要 O(m^2) 所以 n 個站就是 O(n * m^2)
最差情形 100 * 200 * 200 = 400 萬
其實也還好,0.280上下會過
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/09/05
你現在有一棵搜索樹,我說這是用在做A,B兩個人打架的敵對搜索
你必須生出某個東西算出某個局面對應的節點值,而且A的任務是讓該值儘量小(min),
B的任務是讓該值儘量大(max),所以這個樹長得像下面這樣:
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 5
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 7 2 5
╱|╲ ╱| ╱ ╲ ╱∣╲
1 3 24 7 2 4 8 5 6
min層會選擇子節點儘量小的,這樣會對他最有利,反之max層亦然
現在,alpha-beta剪枝說 (以max點舉例,min點時情況類似):
現在正在計算某個max節點,去搜它的子節點,如果
目前找到的max值已經>它的父節點(min點),則該max節點剩下的子節點就不用搜了
(因為max點會取最大的,如果它目前的值已經大於父節點min值時,就確定用不到
就算再去更新該max點的值也沒意義了)
看動畫吧
-
Alpha-beta pruning
-by seanwu-
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max □ □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min □ □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
□ □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max □ □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min □ □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
□ □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max □ □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min □ □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
□ □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max □ □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
□ □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max □ □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
□ □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
□ □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
□ □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
□ □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
1 □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 □ □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
1 □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
1 □ □□ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 □ □ □ □
╱|╲ ╱| ╱ ╲ ╱∣╲
1 □ □□ □ □ □ □ □ □
max:4 min:1 => Cut
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 □ □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 □ □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 □ □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min □
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 □ □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 □ □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 4 □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 4 □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 □ □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 4 □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 7 □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 4 □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 7 □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 7 □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 7 □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 □ □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 7 □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 7 □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 7 □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 7 □ □ □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ |╲ ╲
╱ | ╲ | ╲ ╲
min 4 1 3 7 □ □
╱ ╱| ╱ ╲ ╱∣╲
1 4 7 □ □ □ □ □
min:4 max:7 => Cut
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 □
╱ ╱| ╱∣╲
1 4 7 □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 □
╱ ╱| ╱∣╲
1 4 7 □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 □
╱ ╱| ╱∣╲
1 4 7 □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 □
╱ ╱| ╱∣╲
1 4 7 □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 □
╱ ╱| ╱∣╲
1 4 7 □ □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 □
╱ ╱| ╱∣╲
1 4 7 8 □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 □
╱ ╱| ╱∣╲
1 4 7 8 □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 8
╱ ╱| ╱∣╲
1 4 7 8 □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 8
╱ ╱| ╱∣╲
1 4 7 8 □ □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 8
╱ ╱| ╱∣╲
1 4 7 8 5 □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 8
╱ ╱| ╱∣╲
1 4 7 8 5 □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 □
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 6
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 6
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 □
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 6
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 5
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 6
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 5
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 6
-
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 5
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 6
-
Ans: 4
↑
│
min 4
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 5
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 6
-
Ans: 4
↑
│
min 4 喔幹,累死了
╱∣╲
╱ | ╲
╱ | ╲
max 4 7 5
╱∣╲ | ╲
╱ | ╲ | ╲
min 4 1 3 7 5
╱ ╱| ╱∣╲
1 4 7 8 5 6
- (END)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ PG 推:推! 借轉 0905 23:16
φ PG 轉:到 [PG] 看板,于 2007/09/05 Wed 23:16:49
→ gloompisces 推:好強大... 0905 23:16
→ aytawgf 推:借轉XD 0331 01:21
φ aytawgf 轉:到 [某隱藏] 看板,于 2009/03/31 Tue 01:21:59
作者: gloompisces at 07/09/06
11260 - Odd Root Sum
給你 n (64-bit integer)
求出 [sqrt(1)] + [sqrt(3)] + [sqrt(5)] + ... + [sqrt(m)]
m 是不大於 n 的最大整數
答案請 mod 100000000 後輸出
<Hint E> math
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
作者: gloompisces at 07/09/06
11261 - Bishops
給你一個n*n的棋盤 (1<=n<=40000)
上面有m個主教 (0<=m<=10000)
問你有幾格不會被主教攻擊?
第一行是n和m,接著m行是主教的座標
<Hint> DP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
▲ gloompisces 改@2007/09/06 Thu 18:51:07
作者: gloompisces at 07/09/06
11262 - Weird Fence
給你P根柱子和k條繩子 (1<=P,k<=100)
柱子有紅色或藍色,而繩子每條都是整數且一樣長
每條繩子要連紅柱和藍柱,且一根柱子上最多只能連一條繩子
問你繩子的長度最少要多少,或是無法達到要求
<Hint> 二分搜尋+maxflow
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
作者: gloompisces at 07/09/06
11263 - Nested Rectangles
給你一個R*C(R,C<=500)的圖,有n(1<=<=5)個長方形
也給你 Ri 和 Ci (1<=i<=n) 長方形會越來越小
小長方形可以亂擺,但一定要擺在上一個長方形裏面
另外給你Mi (0<=i<=n) (-10<=Mi<=10)
S = M0*(在大長方形裡但不在小長方形1內區域值的和)
+ M1*(在小長方形1裡但不在小長方形2內區域值的和)
+ .....
問你S的最大值
<Hint> 不清楚,據說是DP+二維RMQ
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
→ seanwu 推:嗯...需要一個支援找出在二維上某矩形內最大值的東西 0907 22:50
作者: gloompisces at 07/09/06
11264 - Coin Collector
有一個國家有n種錢幣 (n<=1000)
他們的值是 1=c1<c2<c3<..<cn<1000000000
如果你拿面額為e的大鈔去銀行換錢,兌換方法是
for(;;)
{
if(e==0)
{
break;
}
給你最大可以換的硬幣ci
e-=ci;
}
現在你可以自己決定e是多少,問在一次兌換行動中最多能換到幾種不同的錢幣?
<Hint> greedy
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
▲ gloompisces 改@2007/09/06 Thu 17:27:02
作者: gloompisces at 07/09/06
11265 - The Sultan's Problem
你有一塊長為W,寬為H的地 (1<=W,H<=200000)
有n(n<=500)條直線,把地分割成很多很多塊
現在給你一個座標(x,y) (不會在分割線上)
請問那個點所在的那塊地,面積是多少?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
作者: gloompisces at 07/09/06
11266 - Equations
給你n(n<=10),s(-50000<=s<=50000)
再給你 Ai,Bi (1<=i<=n) (-10000<=Ai<=Bi<=10000)
現在 X1+X2+...+Xn=s 且 Ai<=Xi<=Bi
求(X1,X2,..,Xn)有幾組整數解?
<Hint> DP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
作者: gloompisces at 07/09/06
11267 - The Hire-a-Coder Business Model
有 N 個點 (2<=N<=200) E條邊 (1<=E<=11000)
每條邊連接兩個點A,B,且他的值為C (1<=A,B<=N,-1000<=C<=1000)
問你這個圖是不是雙分連通圖,如果是,把他連通的最小值是多少
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
作者: gloompisces at 07/09/06
11268 - Reliable Network
有n個點,你必須連出網路,使得就算我抽掉m個點,剩下的點還是可以連通的
(1<=n<=50,1<=m<=10且m<=n-2)
但是,你最多只能用 ceil (((m+1)*n)/2) 條線
<Hint>
graph maybe can solve, but there is a beautyful solution with math
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
作者: gloompisces at 07/09/06
11269 - Setting Problems
有n(n<=20)個工作
對於第i個,A做需要Ai分鐘,B做需要Bi分鐘,且A完成他的部分後B才能開始
第一行是n
接著是 A1,A2,...,An
再來是 B1,B2,...,Bn (1<=Ai,Bi<=100)
問你最少要多久兩個人才能完成所有的工作
<Hint> TSP?(not sure) or the method similar to 10905
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.91 (不失敗大學)
→ seanwu 推:以集合做DP(就是很像TSP的那個啦)跑2秒多... 0908 22:08
作者: seanwu at 07/09/06
喔,解方程式算交點,人人都會嘛...
不過那樣超累,而且誤差也大,然後又慢(除法多)
所以一個比較無痛的方案是,用面積比來算
__ __
先檢查兩線段 AB 及 CD 有沒有交點,只要用行列式算面積
△ABC與△ABD一正一負,且△CDA與CDB一正一負,便是兩線段相交
再來是算交點,令交點為P、原點為O
→ → __ __ __ → __ __ __
用向量 OP = OA*BP/(AP+BP) + OB*AP/(AP+BP)
__ __
以 AP : BP = △CDA : △DCB 代入,即可解出P點座標
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ seanwu 說:ACM11265的極速奧義就在這裡了 (揍) 0906 22:51
→ sa072686 推:兩線段交於端點與兩線段共線情形下需做例外處理 0910 21:22
→ sa072686 推:lucky貓273的sample以上兩個例外都有,原文僅一種 0910 21:23
作者: sa072686 at 07/09/06
還沒過,先翻譯這樣(汗)
邪惡的 Liberatives 黨正準備在你的城市重劃選舉區。
並且,它會讓出現反對它的人的區域越少越好。如果這計劃成功了
那麼民主就要滅了。身為善良的 Conservals 黨的一員,你必須阻止他們
以捍衛這個城市。
這個計劃將會把城市分成許多方形區域,並以選定的街與大道做為分界
所有街和大道皆自西南角起被賦予編號,並且皆直線貫穿城市。
這城市被第一街、第一百街、第一路、第一百路包圍著,且這四條道路分別在西東南北
的最邊界處。顯然這四條道路皆必須用以劃分區域使用。但只有部份的街或大道
會被用來劃分而已。Liberatives 已經規劃了南北向的道路(街)
而他們被迫讓 Conservals 規劃東西向的道路(大道)
你知道所有 Conservals 黨的死忠支持者。它們必定佔有一個以相鄰道路
劃分之街區。例如有可能有個死忠支持者在 47 街和 48 街與 67 道和 68 道之間。
你必須慎選道路使得有死忠支持者的區域儘量地多。
輸入有許多組測試資料,每組代表一個城市。第一行會告訴你 n 表示有多少的
死忠支持者在這城市中,接下來的 n 行會有兩個數字代表每個死忠支持者所在的
街區西南角的街與道的編號。下一行有個整數 s,並且有 s 個整數表示已被選擇
的街的編號,以嚴格遞增順序呈現。最後一行告訴你可以選擇的大道數 a
(a 至少為 2)。輸入以一行 -1 作為結尾。
對每一組測試資料,輸出一列包含 a 以及最佳的 a 個大道的編號,
需以嚴格遞增順序呈現。如果有很多組解,任一組皆可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/07
話說是說好不提的 261 耶(毆)
其實還蠻歡樂的,只是腦殘錯了兩次(汗)
有兩邊啊,別像我腦殘只算一邊結果 array size 和 cut 各炸一次(汗)
翻譯一下
在橋普及之前,常以 Ferry 作為運送車子到對岸的交通工具。
它們並不像它們的親戚一般擁有大型的跑道並且有電力作為驅動。
只有兩個車道可以給車子進入,然後到對岸後再出來。
現在全部要過河的車子都開進一個佇列中,等待管理員指揮進入 port(左道)
或是 starboard(右道)來最佳化運送數量。管理員會估計佇列中每台車的長度。
管理員將基於所知的長度來決定每台車要進入哪一邊,
使得在 Ferry 的長度限制下能載的車儘量地多。
你的工作是寫個程式幫助管理員判斷哪一台車要進入哪一邊。
Input
輸入的第一行會給你一個數字代表有幾組測試資料。第一行之後與每組測試資料間
皆會有一空白列作為分隔。
第一行以一個 1 到 100 之間的數字表示 Ferry 的長度(單位為公尺)
接著佇列中每台車會有額外的一列代表它的長度(單位為公分),範圍在 100 到 10000
每組測試資料的最後一行會有一個 0 代表結束。每台車必須依照在佇列中的順序
開進 Ferry 並且其兩邊皆不得超出 Ferry 之外。你必須依序調出車輛直到
不能夠再進 Ferry 為止。
Output
對於每組測試資料需以一空白列作為分隔。
第一行輸出最多可以有幾台車進入 Ferry。對於每一台車依照輸入時的順序
輸出一行 port 或 starboard 以表示它開進哪個 Ferry。如果有好幾種可能,
輸出任何一個皆可。
---- 分隔線分隔線 ----
歡樂 DP 時間啊 XDDD
嗯嗯,首先來看…任何一組解都行,所以也不用太辛苦,隨便做就好了
接著照題意講的,如果一台車要能進入 Ferry
則,必須要佇列中所有在它之前的車都要進入 Ferry
而進入的不是左邊就是右邊,因此我們記錄左邊以及車的長度和
也就能得出右邊了。接著,我們想說,每一台車一定是它前面的所有車的所有排法
再加上它本身放左或放右而來。而前面所有車的排法,左可放長度 m,右可放長度 m
而左長度加右長度為定值,故最多 m 種情形而已
記錄左邊最多有 m 種長度,那麼右邊可以透過一次減法來求得,
這樣子枚舉到上一台車為止,左邊的 m 種長度再放上目前這台的情形
就可以了,因此得知設 DP[i][j] 表示到第 i 台車時左邊長度 j 的情形
若第 i 台車長度為 l 則得 DP 式
DP[i][j] = DP[i-1][j] 或是 DP[i-1][j-l]
任一皆可,只要是可行解就行,然後記下它從何而來
因此最後只要枚舉加入最多 s 台時的 m 種長度,找到一種可能後回溯回去即可得解
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/09/07
搬家了。雖然新家的功能還很科科
要 submit 還要先找到那題點進去才能上傳
然後找題目要花的時間更多了這樣
一些老功能則說近日會放上來。說實在的這些有圖表的重要嗎(汗)
不然,至少先保留舊的給我們用嘛…真是的…
然後關於 ACM 的 Rank 全掛了這樣
目前的新伺服器也沒辦法查詢別人的資料,嗯…
另外除了需要不斷重新登入以外
上傳之後還必須到看上傳結果的地方,然後再走好幾個連結回來題目
另開新視窗又好像會互踢…
真的是不方便到了極點。
是想讓大家上傳時謹慎點嗎(汗)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ devilqxect 推:可是界面很華麗~ 0907 18:17
→ sa072686 推:我要Accepted啊啊啊啊 0907 19:11
作者: PG at 07/09/07
靠
我的acmr寫了一個月就掛了...
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.133.143 (福爾摩沙固網)
→ devilqxect 推:真的沒效了... 0907 18:28
→ sa072686 推:節哀…你還好,有空可以重寫XD 我等你的XML好了 0907 19:11
→ sa072686 推:不像我沒空寫了,現在時間緊得像什麼一樣… 0907 19:12
作者: sa072686 at 07/09/08
炸了囧
第一名大概沒希望了…
嗯,不過要前兩名還有信心
然後有一題code只差一個字元就炸掉一半是怎樣
雖然老師很好心地給了一半,不過,嗯…
該死,下次不准再發生…
然後一題暴搜超時了,嗯…
這次題目明顯難了不少說
本來以為暴搜會過的…
嗯,seanwu,等你提供解法了XDD 沒辦法,不能洩題(汗)
題目就等能洩題再說吧,嗯
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.71 (台狼一中)
→ sa072686 推:喔不,倒數第四,我好弱… 0908 14:19
→ gloompisces 呸:................ 0908 14:45
→ ben196888 說:該不會取五個或六個中的倒數第四吧= = 0908 18:31
→ PG 說:給你個箭頭= = 0908 18:35
→ sa072686 推:不,是全部的倒數第四 0908 19:05
→ silentvow 推:參賽者: 5名 0908 19:51
→ sa072686 推:樓上正解 0908 19:53
→ ben196888 推:●● 0908 20:13
→ veriw 推:所以是第二名(茶) 0908 22:49
→ sa072686 推:退步了(嘆) 0908 23:02
→ veriw 推:真嗆 囧 0908 23:15
→ silentvow 推:原PO去年可是響噹噹的一等獎阿開玩笑 0908 23:22
→ sa072686 推:有嗎(汗)比去年差呢 0908 23:23
作者: sa072686 at 07/09/09
嗯,很陰很陰啊…據我 re + wa 至少十幾次的經驗…
一、不可以用 strtok(感謝 gloompisces、SRX 學長)
二、如果有空白列請不要輸出任何東西
三、政黨票數可能大過於法案所需票數(感謝 gloompisces、SRX 學長)
翻譯一下
現在有一個法案需要至少 n 票才能通過,據實測 n <= 50000
然後有最多 27 個政黨,第 i 個政黨有 ti 票
如果某個政黨在某種情形下,只要有他們投票就能讓法案通過
那麼他們的權力指數就多 1,問所有政黨的權力指數為何
---- 分隔線 ----
嗯,一看就知道 DFS 應該會炸掉
那麼就 DP 吧,首先先想如果一個政黨投了可以讓法案通過
那麼先決條件是:該政黨仍未投票,且法案尚未通過,而且投了就會通過
所以我們必須知道所有該政黨未投票的情形下的可能票數,才知道有幾種情形
那麼我們就看從 0 到 n 有幾種情形是該政黨未投票的
接著檢查所有可能的票數各有幾種情形,把它們加總即可得到答案
因此以 DP[i][j] 代表第 j 個政黨未投票且票數已有 i 的情形數
設第 i 個政黨所能投的票數為 t[i]
那麼可知對於每個 k != j 則 DP[i][j] = sum(DP[i-t[k]][j])
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:偉哉SA,你救了兩個學長 0909 01:21
▲ sa072686 改@2007/09/09 Sun 01:22:21
→ sa072686 推:啊這…XD 0909 01:22
→ gloompisces 推:還有一和三,請謝SRX XD 0909 01:25
▲ sa072686 改@2007/09/09 Sun 11:01:30
→ sa072686 推:已修正,感謝 0909 11:01
→ yuscvscv 推:我用strtok過了耶= = 且沒有空白列... 0928 17:20
作者: sa072686 at 07/09/09
過了,嗯…
其實還不難想啦,只是很容易攪混,然後小細節很可能寫爛…
---- 分隔線 ----
嗯,就用 DP 吧,很好想的 DP
就想設邊長為 n,每個 1 <= i <= n 皆有可能做為選定邊界
那麼,就嘗試著對於每個 i 做為選定邊界
並且於 i 做選定邊界時,它還有 k 種情形,也就是加上 i 這條,總共加了幾條邊界
要求的邊界數如果是 k 條,那麼 n 有可能是第 j 條(1 <= j <= k)
而若 i 為第 j 條選定邊界,那麼上一條邊界只有 i-1 種情形
所以,枚舉這 i-1 種情形中選定 j-1 條邊界的情形,取最佳值即可
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/09/09
10804 Gopher Strategy
給你M隻地鼠和N個地洞的座標,每個洞只能容納一隻地鼠
現在每一隻地鼠都要分別找一個洞躲起來,來不及躲的會死掉,最多可以死掉K隻
讓剩下的地鼠躲好所花費的時間,為所有地鼠中的最大時間
請安排一個方案使的花費的時間最小,問花費時間是多少?
如果方案不存在,請輸出Too bad.
<Hint E>
binary search + bimatch(maxflow)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/09/09 Sun 12:10:52
→ chensc 推:感覺這題在哪裡看過@@ 0909 12:38
→ sa072686 推:有題長得很像的是問最少死幾隻 這題死k隻以內就好了 0909 13:13
→ gloompisces 推:這題要注意誤差XD 0909 13:36
作者: sa072686 at 07/09/09
請參考 1039 篇,seanwu 學弟提供的判斷兩線段相交的方式
不過,要處理例外,也就是兩線段有一端點重合,或是兩線段在同一直線上
那麼…中譯也有了,解法也有了,就這樣好了XDD
處理例外的方式…應該沒幾個人數學比我差吧XDD
反正我也是用很暴力的方法處理的,要正規的方法請聯絡 seanwu
然後剩下的…最多就…
---- 分隔線 ----
請開 Floyd Warshall,沒別的了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/09/09
11270 Tiling Dominoes
有一個N*M的棋盤,你要用1*2的小方塊來覆蓋它,
棋盤不可以剩下空格,小方塊也不可以重疊
問有幾種覆蓋方式?
(其中N*M<101)
<Hint E>
嗯...min(N,M)<=10,所以每一行最多有2^10種覆蓋狀態
以此做DP就是了,然後要存起來直接輸出
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/09/09
11271 B. Lattice of Resistors
有個無限大的格子狀網路,每一線段都是一個 1Ω的電阻
問你 (0,0) 到 (i,j) 之間的等效電阻是多少?
//...看來物理也是很重要的...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/09/09
11273 Summing the Lengths of the Longest Increasing Subsequence of Permutations
w是一個序列,定義LIS(w)為w的LIS長度,
給你N,設w為1~N的所有排列,問對所有的w,LIS(w)的總和為多少
輸出前五個數字
//題名真長 xD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: gloompisces at 07/09/09
11275 3D Triangles
顧名思義,本題就是要求空間中的三角形的關係
每組測資有六行,每行有三個浮點數
前三行是第一個三角形的三個頂點的x,y,z座標
後三行是第二個三角形的三個頂點的x,y,z座標
輸出請輸出這兩個三角形有幾個交點
(註:若兩個點距離<=0.000001則稱他們為相交)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.146 (不失敗大學)
→ seanwu 推:不是....是問兩個三角形有沒有相交 0910 12:25
作者: gloompisces at 07/09/09
11277 Cyclic Polygons
有一個圓內接n邊形(n<51),給你這51條邊的長度(皆>0且<=1000)
你必須輸出這個圖形的面積
如果此圖形不存在則輸出 0.000
<Hint> 二分搜尋
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.141.146 (不失敗大學)
作者: sa072686 at 07/09/10
出乎意料地好解。嗯…
沒想到沒太考慮效率問題,用不怎麼有效率的方法還是過了
只是腦殘忘了 reverse 結果 wa 掉一次…
翻譯一下
如果將一串很長的字串分解成一些小字串的話,那麼看起來將不會那麼地長
你必須找出一個長字串是否可拆成由指定的短字串組合而成的形式。
你必須注意以下幾點:
一、所有的字串以 ASCII 33 到 127 所組成。
二、所有短字串以及它們經反轉所構成的短字串可使用無限次。
三、一個短字串或其反轉成的短字串,每使用一次都算是出現一次。
當你使用短字串組成長字串時,你希望短字串的出現次數愈小愈好。
例如當我們想使用 "a"、"abb"、"bb" 來構成 "aabbabbabbbb" 時有好幾種方法。
"a-abb-abb-abb-bb" 與 "a-abb-a-bba-bb-bb" 是其中可行的兩種。
但我們希望使用前者,因為它只需要 5 個短字串,後者要用 6 個。
不過,我們只對最少需要幾個短字串有興趣,因此你只要找出最少需要幾個就可以了。
Input
輸入的第一行有一數字 s(s<51)代表有幾組測試資料。每組的第一行是長字串 p
(0 < length(p) < 10001)。下一行有一數字 n(0 < n < 51)代表有幾個短字串
接下來的 n 行有一短字串 pi(0 < length(pi) < 101,i = 1,2,3,...,n)
你可以放心地假設輸入中不會有空字串或空白符號。
Output
對每一組測試資料輸出一行:
Set S: C.
Set S: Not possible.
若長字串可由短字串組成,則輸出前者;否則輸出後者。
S 代表這是第幾組測試資料。C 代表組成長字串需要使用的最少次數。
更詳細的格式請見底下的 Sample Output
// 譯註:底下是 solution 了, Sample IO 請見原本的題目
// 反正不點進去那題的題目也不能上傳,科科
---- 分隔線 ----
其實不會太難,時間似乎不緊。嗯,首先會想說對於每個長度而言
我們只需要最佳的。也就是說,很容易想到從長度 i 使用一個短字串組到長度 j
那麼我們需要知道的是長度 i 的最佳解,因為同樣使用一個短字串的話
使用最佳的方式組成長度 i 再加上一個短字串會比較好
因此,我們保留字串中每個長度 i 的最佳解,再看看能配上哪個短字串
再延伸出去,這樣子,因此使用 DP[i] 代表到長字串長度 i 時最少短字串數
那麼枚舉所有在長度 i 時剛好可以使用的短字串 s
則 DP[i+len(s)] 可由 DP[i] + 1 而來,只要檢查它是不是比較好的解即可
這樣設長字串長度 n,對於每個長度 i 枚舉 m 個短字串及它們的反轉
設短字串長度最長 l 則最差情形是 O(n * m * l),最差是 10000 * 50 * 100
不過效率仍可以接受。並且,不以 DP[i] 去檢查所有 DP[i-len(s)] 的話
那麼由於 DP[i] 可能是稀疏的,就可以減少不少的時間
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/09/10
和 108 很像很像,唯一的差別就是它是上下相連、左右相連的
也就是說,從最東邊的邊界再往東,就會到最西邊去這樣,嗯…
翻譯一下
一個垂直與水平皆相連的東西我們叫它 torus。給你一個 torus 上面有很多小方格
每個方格有一個整數,你必須求出數字總和最大的那個子矩陣,其數字總和是多少。
一個子矩陣的數字總和即其所包含範圍內所有數字的總和。底下給你一個例子。
1 -1 0 0 4
*2 *3 -2 -3 *2
*4 *1 -1 5 *0 // 有加 * 者為最佳子矩陣
*3 *-2 1 -3 *2
-3 2 4 1 -4
Input
第一行告訴你有幾組測試資料(最多 18 組)。每組測試資料開頭有一整數 n
(1 <= n <= 75)代表 torus 的大小(一定是正方形)。接下來的 n 行
每行有 n 個整數,範圍在 -100 到 100 之間。
Output
對每一組測試資料輸出一行,包含一個整數代表該 torus 的子矩陣中
總和最大是多少。
---- 分隔線 ----
把它 double 後拿 O(n^4) 暴力做就可以了,也就是枚舉所有子矩陣
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.58 (台狼一中)
作者: sa072686 at 07/09/10
有投票。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ appolloford 推:怎麼投阿.... 0910 23:53
→ PG 推:V 0910 23:59
作者: sa072686 at 07/09/11
現在的 ACM 會把 PE 認定為 WA。
我已經因此無緣無故 WA 了好多次了…
所以請注意換行的部份。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
▲ sa072686 改@2007/09/11 Tue 15:31:55
▲ sa072686 改@2007/09/11 Tue 19:29:53
作者: sa072686 at 07/09/11
有趣的一題…108 的 3D 版本
從求子矩陣的最大和變成求子平行六面體的最大和
但 n^6 會爆炸…
請想辦法達成 n^5
提示請見關於 108 的文
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
▲ sa072686 改@2007/09/11 Tue 10:13:45
→ yuscvscv 推:神秘癥結 測資間換行 子矩形不可是空集 1220 09:26
作者: sa072686 at 07/09/12
嗯,其實不太難做的一題,不過有變形這樣…
翻譯一下
現在兩個基因可以生出一個新基因出來,但和兩個新基因有很大的關係。
首先它必須含有其父母基因的所有字母(所有基因皆為僅含A∼X之字串)
並且需要依照順序出現。當然當父母的基因有所重覆時,新基因的長度就會變短。
因此我們有興趣知道最短的長度是多少,以及可能有幾種組合方式。
父母基因長度最多 30 左右
HINT
換句話說父母基因需為新基因之子序列且新基因要儘量短。
組合方式可以排列組合方式計算之。可回溯求解。
由於長度要儘量短,所以重覆時合併最好。
故只需計算不重覆的部份,因此不會有需要扣去重覆計算的憂慮。
配合些許排列組合的概念可輕易解之。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
▲ sa072686 改@2007/09/12 Wed 17:00:59
→ seanwu 推:也可以用 O(N^3) 的DP來算 0912 18:50
→ sa072686 推:backtracing會壓在n^2以內,再加記錄可以小於n^2 0912 20:52
→ sa072686 推:反正表是LCS建好的,直接用就好了 0912 21:33
→ DJWS 推:LCS長度 與 LCS的個數 都可以用O(N^2)的DP算出來 0731 16:19
→ DJWS 推:其實不需要把LCS的DP表格建完後 才去回溯求LCS的個數 0731 16:22
作者: sa072686 at 07/09/12
那個…
其中 10254 題目標題和表上寫的不一樣耶…
所以是真有此題嗎?題號為何?
還是,只是題目標題打錯了?
雖然那個河內塔看起來像 MATH …
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
→ seanwu 推:置底那篇的是錯的 0912 18:12
→ sa072686 推:好,那這題拿掉 0912 20:53
作者: seanwu at 07/09/12
http://www.cfcs.com.cn/fjas/ebook.htm
不少電子書和論文
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ PG 推:借轉 0912 22:20
φ PG 轉:到 [PG] 看板,于 2007/09/12 Wed 22:20:57
作者: sa072686 at 07/09/13
不難寫。也是DP,但其實是蠻常見的那種。
翻譯一下
有天王子和公主(科科,是親兄妹閃不起來)因為太無聊了
就很空虛地在 N*N 大小的地上跳來跳去
兩人跳法未必相同,他們體能又強得像鬼一樣,一次要跳多遠都可以。
但一定從 0,0 跳到 N-1,N-1,王子跳 P 次,公主則是 Q 次。
這時國王進來了,看到後說:你們可是親兄妹,怎麼可以這樣跳?
要跳,就一起跳,不要分開跳。於是他想說忽略幾次跳躍後就可以一樣了
例如王子跳 1 --> 7 --> 5 --> 4 --> 8 --> 3 --> 9
公主跳 1 --> 4 --> 3 --> 5 --> 6 --> 2 --> 8 --> 9
那王子第 2 3 6 次不要跳,公主 3 4 5 6 次不要跳
就變成 1 => 4 => 8 => 9 就一樣了
國王一樣很空虛無聊,就很好奇符合這種條件的最長路徑長是多少?
HINT
LCS WITH N LOG N
IN OTHER WORDS,TURN LCS TO LIS。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
作者: sa072686 at 07/09/13
收文可以麻煩你們嗎?
現在都為了省時間只做HINT和重點翻譯了呢
那個,至少至少一頁收一次可以嗎?感謝,以後我會收的。現在先麻煩了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
→ seanwu 推:你平常都太早收了...我是故意放晚一點的 0914 19:13
→ seanwu 說:結果就被你搶走了 xD 0914 19:13
作者: sa072686 at 07/09/13
LCS 直接做的效率是 N^2 這眾所皆知
但有些題目比較嚴格,需要用到 N LOG N 的,比如說 10635、10949 N 都幾萬幾萬的
但如果把它轉成 LIS 做就可以做到 N LOG N
怎麼轉呢?兩個完全不一樣的東西…
觀察 LCS,它是最長相同子序列…既然是子序列,那麼位置一定是嚴格遞增;
那麼我們只要把其中一個字串轉存成對應表的格式,以便於得知其位置
然後對於第二個字串,在第一個字串中找到相同的元素的位置,再對位置做 LIS
如此便可利用子序列位置必嚴格遞增的特性,及要求最長,可以最長嚴格遞增子序列解之
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
作者: PG at 07/09/13
設多邊型頂點為(x1,y1) (x2,y2)......(xn,yn)
則面積為
| x1 x2 x3 xn x1 |
| |
| ╳ ╳ ....... ╳ | * 0.5
| |
| y1 y2 y3 yn y1 |
記得取絕對值
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 192.168.4.55 (台狼一中桑靈餓)
→ web 推:有幾個注意事項 0913 12:59
→ web 說:1.必須瞬時或逆時針排列 0913 12:59
→ web 說:必須要凸多邊形 也就是內角必須小於180度 0913 12:59
→ web 說:上面忘了打2. 0913 13:00
→ seanwu 推:我覺得2.凸多邊形似乎沒有必要,只要是簡單多邊形就好? 0913 17:50
→ seanwu 說:可以給個反例嗎? 0913 17:53
作者: sa072686 at 07/09/13
現在打算暫停寫 ACM…
所以會一陣子沒有文章吧。除非哪天心情好回來寫兩題…嗯。
就這樣啦。不好意思…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
作者: seanwu at 07/09/13
※ 本文轉錄自 [seanwu] 信箱
作者: seanwu.bbs@newkshs.twbbs.org (海恩吳)
標題: [算法] Hash
時間: 2007/09/13 Thu 21:09:28
作者: seanwu (海恩吳) 站內: P_seanwu
標題: [算法] Hash
時間: 2007/09/05 Wed 22:55:30
我真的不知道Hash幹嘛動畫...
-
Hash
-by seanwu-
-
好啦,先講講hash是幹嘛用的。基本上,hash是一種資料結構,
它支援了O(1)的搜尋、插入資料的動作 (刪除我不知道喔 ^^;
-
好啦,先講講hash是幹嘛用的。基本上,hash是一種資料結構,
它支援了O(1)的搜尋、插入資料的動作 (刪除我不知道喔 ^^;
它的運作原理是藉由你的想像力創造出來的一個亂七八糟hash函式,
將你的資料經過一些計算,算出代表該筆資料的值,且落在可儲存的範圍內
於是就可以直接將該資料存在算出的對應位置上了
-
好啦,先講講hash是幹嘛用的。基本上,hash是一種資料結構,
它支援了O(1)的搜尋、插入資料的動作 (刪除我不知道喔 ^^;
它的運作原理是藉由你的想像力創造出來的一個亂七八糟hash函式,
將你的資料經過一些計算,算出代表該筆資料的值,且落在可儲存的範圍內
於是就可以直接將該資料存在算出的對應位置上了
例如: 你有一筆資料: 643142165464 ,而你的table大小只有 831221
如果你把hash函式設計成 (x+12345)%831221 (注意它的範圍一定在你的table內)
於是該筆資料就會被放在 (643142165464+12345) % 831221=722258 這個索引了
-
但很不幸的,通常而言hash函式很難設計成一對一的映射..
回到剛剛的例子,(643142165464+12345) % 831221 = 722258
但 (709913+12345) % 831221 = 722258 也映射到相同的位置上了
-
但很不幸的,通常而言hash函式很難設計成一對一的映射..
回到剛剛的例子,(643142165464+12345) % 831221 = 722258
但 (709913+12345) % 831221 = 722258 也映射到相同的位置上了
這種情況稱為hit,解決的方案是為發生hit的值找個空間安置,
常用的方法有兩種:開放定址 或 鏈結串列
開放定址中常用的又有 線性探測 或 平方定址
-
開放定址(以線性探測為例):
如果發生碰撞,就往下一個空位丟,直到不發生碰撞為止
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ │ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例):
我們的hash函式定為 index = data % 11
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ │ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ │ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ │ │ │ │ │ 30 │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ │ │ │ │ │ 30 │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8 表格裡有東西...衝到啦,碰撞啦
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8 嗯,把它往下一個位子丟 ┐
│
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8 good是空的,那就放進來 ┐
│
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
加入 57: index = 57 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
加入 57: index = 57 % 11 = 2 嗯,發生碰撞
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
加入 57: index = 57 % 11 = 2 往下一個位置看看
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
加入 57: index = 57 % 11 = 2 還是碰撞,今天有夠雖小...
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
加入 57: index = 57 % 11 = 2 再往下一個位置
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
加入 57: index = 57 % 11 = 2 嗯,是空的,放進來
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
加入 57: index = 57 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
講了這麼多廢話,還沒說怎麼做Find勒
其實很簡單,依據你加入hash表的方法,去那個位置找找看
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8 去那個位置找找看
╲
╲
╲
╲
╲
╲
╲
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8 唉呀,就是30嘛,真是可喜可賀啊
╲
╲
╲
╲
╲
╲
╲
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
│
│
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2 錯啦
│
│
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
│
│
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2 還是不對
│
│
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
│
│
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2 嗯,找到啦
│
│
│
│
│
│
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9 嗯,不是
╲
╲
╲
╲
╲
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9 換下一個
╲
╲
╲
╲
╲
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9 喂,是空的
╲
╲
╲
╲
╲
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9 不要豪洨我
╲
╲
╲
╲
╲
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9 明明就沒有64還拿來搜
╲
╲
╲
╲
╲
↓
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
好啦,線性探測就是這樣,不難
不過它有個缺點,就是因為每次都直接擺在下一個,所以資料容易聚成一團團的
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
好啦,線性探測就是這樣,不難
不過它有個缺點,就是因為每次都直接擺在下一個,所以資料容易聚成一團團的
然後當你要搜的資料剛好在這一團的最後面,你就得掃過整團才找得到
於是,就爆炸了
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
開放定址(以線性探測為例): hash函式: index = data % 11
一個解決方案是改採 平方定址
線性探測是直接往下一個放,平方定址則是以
1, 4, 9, 16, 25, 36.... 的間隔來跳的
這可以大幅降低群聚的發生機會
index 0 1 2 3 4 5 6 7 8 9 10
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
data │ │ │ 90 │ 47 │ 57 │ │ │ │ 30 │ 19 │ │
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘
-
鏈結串列: hash函式: index = data % 11
或者,除開放定址之外,你也可以選擇加開鏈結串列來避免碰撞
方法更簡單了,如果碰撞,就用串列連出去,如此而矣
index 0 1 2 3 4 5 6 7 8 9 10
-
鏈結串列: hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
∣
↓
╭─╮
│90│
╰─╯
-
鏈結串列: hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣
↓ ↓
╭─╮ ╭─╮
│90│ │30│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣
↓
╭─╮
│19│
╰─╯
-
鏈結串列: hash函式: index = data % 11
加入 90: index = 90 % 11 = 2
加入 30: index = 30 % 11 = 8
加入 47: index = 47 % 11 = 3
加入 19: index = 19 % 11 = 8
加入 57: index = 57 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
嗯好,看看搜尋
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8 找到了
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2 嗯,並不是
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2 Done
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣
↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
尋找 30: index = 30 % 11 = 8
尋找 57: index = 57 % 11 = 2
尋找 64: index = 64 % 11 = 9 當已經指向NULL時就是找不到了
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣ │
↓ ↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
鏈結串列: hash函式: index = data % 11
好啦,基本上就是這樣,記得table用指標不要實體,不然記憶體很傷
index 0 1 2 3 4 5 6 7 8 9 10
∣ ∣ ∣ │
↓ ↓ ↓ ↓
╭─╮╭─╮ ╭─╮
│90││47│ │30│
╰─╯╰─╯ ╰─╯
∣ ∣
↓ ↓
╭─╮ ╭─╮
│57│ │19│
╰─╯ ╰─╯
-
最後是一些拉雜
table的大小最好是質數,然後不管你的hash是怎樣,最後記得 %(表的大小)
大小是質數可以降低碰撞的機率
hash函式可以隨便寫,例如 (data*prime)%table_size 就很好用了
字串用 for( x+=x*p+str[i]*q ) (p,q prime) 就夠了
或者你可以google一下ELFlash算法
還有,雖然線性探測聽起來有點危險,但我還沒TLE過,
不過建議還是把鏈結串列的寫法練熟,它也比較穩定
-
喔,累死了,彼得你要給我什麼?
-(END)
--
| | | | | | | ┌──────┐| | | | | | | | |
| | | | | | |│新.紅樓築夢│ | | | | | | | |
Origin: NewKSHS.twbbs.org └──────┘From: 203.68.21.160
silentvow 說:puyo [07/09/05]
csftwpt 說:喂,是空的,不要豪洨我。 [07/09/05]
Tommy 說:我就是用Linked List的= = [07/09/06]
φ seanwu 轉:從 [seanwu] 信箱,于 2007/09/13 Thu 21:11:00
▲ seanwu 改@2007/09/13 Thu 21:11:49
→ sa072686 推:原 po 動畫做上癮了XDD 0913 21:14
→ seanwu 推:彼得伸的,所以他欠我puyo xD 0913 21:15
→ sa072686 推:怎麼個欠法?XDD 0913 21:18
→ appolloford 推:我還是不懂 0913 23:07
→ ben196888 推:借轉~ 0913 23:34
φ ben196888 轉:到 [ben196888] 看板,于 2007/09/13 Thu 23:34:14
→ AikoSenoo 推:借轉到我們家小弗m(_ _)m(拜) 0209 22:50
→ sb283 推:借轉! 0911 17:02
φ sb283 轉:到 [sb283] 看板,于 2010/09/11 Sat 17:02:12
作者: sa072686 at 07/09/13
※ 本文轉錄自 [TFcis10] 看板
作者: seanwu (海恩吳) 站內: TFcis10
標題: [程設] 關於程設解題
時間: 2007/09/13 Thu 20:44:30
如果你對程設組有些興趣或疑問,就看吧
我們依照「程設解題」這個主軸來看
拜託拜託,本篇是一個動畫,不要去按↓鍵看...
請你按鍵盤上有個 PageDown 鍵,或 空白鍵來觀看
然後會有一個「-」讓你對齊
-
如果說程式解題的路是一座山
-
如果說程式解題的路是一座山
╱╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
(唉呀,這個叫做金字塔吧..)
╱╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
(唉呀,這個叫做金字塔吧..) ╱╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
(唉呀,這個叫做金字塔吧..) ╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
(沒關係,我們讓它長個角..) ╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲
(沒關係,我們讓它長個角..) ╱ ╲╱╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
-
如果說程式解題的路是一座山
╱╲ ╱╲
(沒關係,我們讓它長個角..) ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
-
如果說程式解題的路是一座山 ╱╲
╱╲ ╱ ╲
(沒關係,我們讓它長個角..) ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
好啦,重點就是 ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
好啦,重點就是 ╱╲
╱╲ ╱ ╲
恭喜你們加入了資訊社 ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
好啦,重點就是 ╱╲
╱╲ ╱ ╲
恭喜你們加入了資訊社 ╱ ╲╱ ╲
╱ ╲ ╲
你們現在是在登山口這裡 ╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
好啦,重點就是 ╱╲
╱╲ ╱ ╲
恭喜你們加入了資訊社 ╱ ╲╱ ╲
╱ ╲ ╲
你們現在是在登山口這裡 ╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
┌───┐ ╱ ╲
│登山口│ ╱ ╲
└─┬─┘ ╱ ╲
└─→ ╱ ╲
-
好啦,重點就是 ╱╲
╱╲ ╱ ╲
恭喜你們加入了資訊社 ╱ ╲╱ ╲
╱ ╲ ╲
你們現在是在登山口這裡 ╱ ╲ ╲
╱ ╲ ╲
以後,你的目標就是山頂啦 ╱ ╲ ╲
╱ ╲
┌───┐ ╱ ╲
│登山口│ ╱ ╲
└─┬─┘ ╱ ╲
└─→ ╱ ╲
-
當然,一些險阻是難免的
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
┌───┐ ╱ ╲
│登山口│ ╱ ╲
└─┬─┘ ╱ ╲
└─→ ╱ ╲
-
一開始,你在山腳下
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
一開始,你在山腳下
接下來,你會學到最基本的程式語法
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
一開始,你在山腳下
接下來,你會學到最基本的程式語法
你會學到一種叫「C」的程式語言
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
何謂程式語言?
簡單的說,是你跟電腦溝通的管道,透過這個管道
你可以要求電腦做任何你想做的事 (呃..不要太奇怪的要求...)
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
何謂程式語言?
簡單的說,是你跟電腦溝通的管道,透過這個管道
你可以要求電腦做任何你想做的事 (呃..不要太奇怪的要求...)
程式語言中最重要的四個元素... ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
程式語言中最重要的四個元素... ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
1.輸入/輸出 ╱ ╲ ╲
2.資料空間(變數) ╱ ╲ ╲
3.決策判定 ╱ ╲
4.迴圈(反覆執行) ╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
1. 輸入/輸出 (IO,Input/Output)
你總要輸入資料的,不然你要怎麼告訴它你要它算什麼?
當它算完後,必須把答案顯示出來,不然你什麼都看不到了...
...那你幹麻叫它算東算西的啊?
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
1.輸入/輸出 ╱ ╲ ╲
2.資料空間(變數) ╱ ╲ ╲
3.決策判定 ╱ ╲
4.迴圈(反覆執行) ╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
2. 資料空間(變數)
當你輸入資料後,它總會需要一個東西,把你輸入的資料裝起來,
才能做其它的計算。而這個可以用來裝資料的東西,
就稱之為「變數」,當你使用變數時,它會在你電腦中的記憶體
劃出一塊區域,用來給你儲存資料 ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
1.輸入/輸出 ╱ ╲ ╲
2.資料空間(變數) ╱ ╲ ╲
3.決策判定 ╱ ╲
4.迴圈(反覆執行) ╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
3. 決策判定
事實上,當你的程式在工作時,是依照你給它的指令「一行一行」的動作的
也就是說,一條生產線從頭做到尾,完全沒有變化。這樣是不夠的...
你會希望它:「如果....,你就....,不然就....」
這個命令,就稱為一個「決策」的動作 ╱╲
╱╲ ╱ ╲
幸運的,大部分的程式語言都能簡單的解決它 ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
1.輸入/輸出 ╱ ╲ ╲
2.資料空間(變數) ╱ ╲ ╲
3.決策判定 ╱ ╲
4.迴圈(反覆執行) ╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
4. 迴圈(反覆執行)
最後,你也許會希望它重覆做同樣的動作(或說類似的),可能10000次之類的
如果是10次的話,你可以寫出同樣重覆的指令要它也做個10次
但如果是10000次是話大概就沒有人願意做這種鬼差事了...
於是,迴圈這種東西,可以讓你達到 ╱╲
╱╲ ╱ ╲
要求它做1000000次的這種目標 ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
1.輸入/輸出 ╱ ╲ ╲
2.資料空間(變數) ╱ ╲ ╲
3.決策判定 ╱ ╲
4.迴圈(反覆執行) ╱ ╲
╱ ╲
╱ ╲
Beginner ─→ ╱ ╲
-
好啦,如果這些東西都學完後
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
1.輸入/輸出 ╱ ╲ ╲
2.資料空間(變數) ╱ ╲ ╲
3.決策判定 ╱ ╲
4.迴圈(反覆執行) ╱ ╲
╱ ╲
╱ ╲
─→ ╱ ╲
-
好啦,如果這些東西都學完後
你就可以進入到(我)稱為 Programmer 的層次了
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
1.輸入/輸出 ╱ ╲ ╲
2.資料空間(變數) ╱ ╲ ╲
3.決策判定 ╱ ╲
4.迴圈(反覆執行) ╱ ╲
╱ ╲
─→ ╱ ╲
╱ ╲
-
好啦,如果這些東西都學完後
你就可以進入到(我)稱為 Programmer 的層次了
也就是,你要電腦做什麼,只要把指令寫出來告訴它
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
1.輸入/輸出 ╱ ╲ ╲
2.資料空間(變數) ╱ ╲ ╲
3.決策判定 ╱ ╲
4.迴圈(反覆執行) ╱ ╲
─→ ╱ ╲
╱ ╲
╱ ╲
-
好啦,如果這些東西都學完後
你就可以進入到(我)稱為 Programmer 的層次了
也就是,你要電腦做什麼,只要把指令寫出來告訴它
它就會開始依照你的指令工作
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
-
好啦,等大家都學得差不多後,就會出現一次大災難...
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
-
好啦,等大家都學得差不多後,就會出現一次大災難...
如果你渡過了它,那麼恭喜你,可以繼續往下個階段前進
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Can you pass? ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
好啦,等大家都學得差不多後,就會出現一次大災難...
如果你渡過了它,那麼恭喜你,可以繼續往下個階段前進
接下來,是我們稱之為「算法」的東西
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Can you pass? ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
好啦,等大家都學得差不多後,就會出現一次大災難...
如果你渡過了它,那麼恭喜你,可以繼續往下個階段前進
接下來,是我們稱之為「算法」的東西
嗯,怎麼說呢,有些題目不是你的程式寫不出來
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Can you pass? ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
好啦,等大家都學得差不多後,就會出現一次大災難...
如果你渡過了它,那麼恭喜你,可以繼續往下個階段前進
接下來,是我們稱之為「算法」的東西
嗯,怎麼說呢,有些題目不是你的程式寫不出來
是你根本不知道解法 ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Can you pass? ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, Shortest-Path, ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, Shortest-Path, Combination Math ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, Shortest-Path, Combination Math ╱ ╲╱ ╲
generation function, ╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, Shortest-Path, Combination Math ╱ ╲╱ ╲
generation function, Geometry ╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, Shortest-Path, Combination Math ╱ ╲╱ ╲
generation function, Geometry ╱ ╲ ╲
Randomized algorithm, ╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, Shortest-Path, Combination Math ╱ ╲╱ ╲
generation function, Geometry ╱ ╲ ╲
Randomized algorithm, state machine ╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, Shortest-Path, Combination Math ╱ ╲╱ ╲
generation function, Geometry ╱ ╲ ╲
Randomized algorithm, state machine ╱ ╲ ╲
Linear programming, ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
算法這種東西,博大精深
有些人可以一輩子只研究專門針對某一類問題而設計的算法
還好我們不會去做太多研究,因為已經有不少人的研究成果可以讓我們學了
你可能會學到...
DP, DFS, BFS, Greedy, Graph, DataStructure ╱╲
Search, Tree, Hash, A*, IDFS, SSS* ╱╲ ╱ ╲
MaxFlow, Shortest-Path, Combination Math ╱ ╲╱ ╲
generation function, Geometry ╱ ╲ ╲
Randomized algorithm, state machine ╱ ╲ ╲
Linear programming, $&*(@#)^!$#... ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
呼,好極了,然後...
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
呼,好極了,然後...
你就會慢慢的進步到
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
呼,好極了,然後...
你就會慢慢的進步到
接近 Problem Solver 的層次了
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
─→ ╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
呼,好極了,然後...
你就會慢慢的進步到
接近 Problem Solver 的層次了
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
等一下..
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
等一下..倒帶..
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
─→ ╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
在你成為一個解題者之前
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
─→ ╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
在你成為一個解題者之前
又要出現一次大災難了
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
You can't pass! ─→ ╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
在你成為一個解題者之前
又要出現一次大災難了
然後可想而知,你又化險為夷了
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
You can't pass! ─→ ╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
再來就是看你自己的努力啦
╱╲
╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
再來就是看你自己的努力啦
╱╲
希望你有朝一日,可以成為一個.. ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
再來就是看你自己的努力啦
╱╲
希望你有朝一日,可以成為一個.. ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
再來就是看你自己的努力啦
╱╲
希望你有朝一日,可以成為一個.. ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
再來就是看你自己的努力啦
╱╲
希望你有朝一日,可以成為一個.. ╱╲ ╱ ╲
╱ ╲╱ ╲
─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
再來就是看你自己的努力啦
╱╲
希望你有朝一日,可以成為一個.. ╱╲ ╱ ╲
─→ ╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
再來就是看你自己的努力啦
╱╲
希望你有朝一日,可以成為一個.. ─→ ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
至於,在你成為一個真正的解題者之後呢
我就很不負責任的不管你啦
因為我已經沒有東西可以教你了
再來就是看你自己的努力啦
╱╲
希望你有朝一日,可以成為一個.. Prophet ─→ ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
好好努力吧..
╱╲
Prophet ─→ ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
對了,你問我啊
╱╲
Prophet ─→ ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
對了,你問我啊
我會...
╱╲
Prophet ─→ ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
↑↑↑
在這裡等你
對了,你問我啊
我會...
╱╲
Prophet ─→ ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
↑↑↑
在這裡等你
對了,你問我啊 抱歉畫不出來,有點遠
我會...
╱╲
Prophet ─→ ╱╲ ╱ ╲
╱ ╲╱ ╲
╱ ╲ ╲
╱ ╲ ╲
Problem Solver ─→ ╱ ╲ ╲
╱ ╲ ╲
╱ ╲
Programmer ─→ ╱ ╲
╱ ╲
╱ ╲
╱ ╲
-
↑↑↑
在這裡等你
對了,你問我啊 抱歉畫不出來,有點遠
我會...
好,這樣就行了
△
-
↑↑↑
在這裡等你
對了,你問我啊 抱歉畫不出來,有點遠
我會...
seanwu is here! ─→
△
-
↑↑↑
在這裡等你
對了,你問我啊 抱歉畫不出來,有點遠
我會...
seanwu is here! ─→
█████ █◣ █ ████◣
█ █◥◣ █ █ █
█████ █ ◥◣ █ █ █
█ █ ◥◣█ █ █
█████ █ ◥█ ████◤ ● ● ●
△
-
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
▲ seanwu 改@2007/09/13 Thu 20:47:48
→ devilqxect 推:你動畫作上癮了XDDD....//不過很好看~~~ 0913 21:44
→ seanwu 推:誰上癮了orz 我是覺得這樣看比較有趣些 xD 0913 21:46
→ seanwu 說:不然好累...我這篇做了三個小時... 0913 21:46
→ mp607 推:囧 >> 我都不會 >> 怎麼辦... >> XD 0913 21:46
→ david10ne 推:最後的...好遠= =~ 0913 21:47
→ mp607 推:我要學B語言啦 0913 21:47
→ david10ne 推:不過每次看這種類型的東西都覺得好厲害@@ 0913 21:47
→ sa072686 推:好遠XDD 不過這篇好棒,可不可以借轉? 0913 22:04
→ seanwu 推:等等,實際上沒那麼遠...|| 頂多在半山腰而已 0913 22:04
→ seanwu 說:嗯 sure 0913 22:05
φ sa072686 轉:從 [TFcis10] 看板,于 2007/09/13 Thu 22:06:12
→ veriw 推:借轉ˇ 0913 22:53
φ veriw 轉:到 [veriw] 看板,于 2007/09/13 Thu 22:54:02
→ ben196888 推:借轉~ 0913 23:34
φ ben196888 轉:到 [ben196888] 看板,于 2007/09/13 Thu 23:34:24
→ sb283 推:借轉! 0911 17:01
φ sb283 轉:到 [sb283] 看板,于 2010/09/11 Sat 17:01:23
作者: sa072686 at 07/09/13
反正我最近不寫 ACM 了。
那麼沒意外的話,我要封 B。
以後找我請寫信,至少有上學的中午會收。
不然請加上站通知,有問題上來拉人問時可以找。
不過,基本上有問題貼板就一堆強者回答了…
如果是問學術問題的話請直接貼板吧。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/14
要封 B 了…
那麼先完成欠下的文吧。這題不難,不過狀態有點多。
翻譯一下
現在你要準備接下來 K 天的菜。你會煮 N 種菜並且有 M 元可以購買食材。
K 不會超過 21,N、M 不會超過 100
每種菜都有其營養價值 V 和烹飪所需的價錢 C(V 不會超過 10000,C 不會超過 50)
並且同一種菜連續煮二次的話,第二次的營養價值會剩下一半;
連續三次以上的話,從第三次以後就沒營養了。
換句話說,同一種菜即使連續煮再多次,都最多得到其 1.5 倍的營養價值。
問菜單怎麼設計營養價值最高又不會超過預算。
如果有營養價值相同的,請選擇價錢最低的。
如果還是有多種方式,任一皆可。
輸出營養價值,之後輸出 K 個整數,第 I 個整數表示第 I 天所煮的菜為何。
每個整數間需以至少一個空白或換行字元隔開。(但只要有隔開就行,格式隨意的樣子)
HINT
DP WITH O(K * N^2 * M),開四維把每種狀態記錄下來便可消除其後效性。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.188 (傳說中的錫安主機)
作者: sa072686 at 07/09/15
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (小sa)
標題: Re: [遞迴] 八皇后問題 (fwd)
時間: 2007/09/15 Sat 16:27:00
作者: sa072686 (小sa)
標題: Re: [遞迴] 八皇后問題 (fwd)
時間: 2007/09/15 Sat 16:27:19
※ 引述《sa072686 (小sa)》之銘言:
嗯,被 USACO 1-5 的 N 后問題刁難完後
由於時間限制太緊,只好去找優化方式,結果學到了好多呢
貼一下心得好了。以下除了鏡射減半搜索外,都是 google 來的或問來的。
首先是關於其鏡射旋轉。
像八后問題其實只有 12 種形式解,其餘皆由鏡射旋轉而來。
十二組,很少是嗎?不,一點也不少
目前並沒有有效方法尋找這十二種形式解,取而代之是找出所有解
然後去分析出這些形式解,這樣在搜索上仍相當費時。
那麼找形式解沒有太大的實質意義,判斷旋轉鏡射的重覆性問題也有解法
但看起來相當繁複,因此並無法優化此問題。
唯一可以讓搜索數目減半的,便是只鏡射一次
左右鏡射可以產生不重覆的解,並且相當好處理
最簡單的方式是只看第一列,第一列我們如果只擺到第四行,也就是一半
這樣,我們只會找到一半的解,鏡射它們就可以得到另一半。
但要再延伸很難了,如果沒辦法直接減少搜索數目,而是過濾找到的解
那麼沒有意義,只會更慢;但只鏡射一次卻做得到這點。
使用鏈結串列。
可輕易推想出每行與每列皆只能有一皇后。
因此,每行都一定要擺一隻,每列也是。
假設我們搜索時是一行一行放置,那麼我們可以記錄每列是否放過皇后
如果沒有,就放置看看;但這樣相當耗時,每次都要檢查每一列
使用簡單的鏈結串列,即可只檢查所有可行的列
使用陣列模擬的話,還會更快些。反正只有很簡單地打掉,再接回來
當我們要在一列放置皇后時,我們要打掉這一列,也就是某個節點
那麼我只要讓它前面的節點指向它後面的節點,就算打掉了
之後,backtracing 回來後再把它前面的節點指向它就好了
以陣列模擬的話就會相當簡單。而且它指向的位置,就是可放置的列編號
意即我們讓 ary[i] = n,i 為列編號,n 則為下一個可行的列編號
而列的編號又可當陣列的索引值,所以可以很簡易地模擬鏈結串列。
斜向的攻擊
一般是記下每行的皇后位置,再去判斷是否受到其攻擊
這是個比較沒效率的方法。即使拿座標來判斷,也還是不太夠快。
但如果已經想到拿座標判斷了,也很接近、很接近了。
觀察斜向攻擊的座標值會發現:設左上角為 0,0
左上到右下的攻擊,x、y 座標的差相等;
右上到左下的攻擊,x、y 座標的和相等。
因此,記下座標和與差即可直接判斷,而不需要搜索所有放置過的皇后。
然而請注意 x、y 座標的差請勿取絕對值。它們的差的正負是視為相異的。
那麼可能有人會想說:陣列索引又不能用負的,怎麼儲存?
沒關係,只要我們同加某個數字,使其夠大到能讓負的極限值加了之後變成非負
那麼,這問題就解決了。同加某個數字,是個很多問題都用得到的小技巧
經過以上優化,原先要跑 2、3 秒的 13 后,只需要 0.5 秒不到就跑完了呢
感謝 USACO 1-5 的 checker 讓我去查這麼多資料。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2007/09/15 Sat 16:27:21
作者: seanwu at 07/09/16
10089 Repackaging
有三種不同樣式的咖啡杯,以及N(3<=N<=1000)種包裏,每種包裏中有特定數量的咖啡杯
以(a,b,c)分別表示第一、第二、及第三種咖啡杯在這種包裏裡的數量
每種包裏的數量都是無限的,現在你必須拿出一些包裏使三種咖啡杯的總和一樣多
利如有 (1,2,3)、(1,11,5)、(9,4,3)、(2,3,2) ,則可以取
(1,2,3)三個、(9,4,3)一個、(2,3,2)二個,於是三種咖啡杯的總和皆為 16個
輸出可不可以達成
<Hint E>
可以證得只要直線 x=y=z=t通過以所有的 (a,b,c)構成的三維凸包,則有解
當然,要用三維凸包來算太痛苦了,於是可以將凸包和直線都沿著
向量 (1,1,1)投影到xy平面上,變成判斷點 (0,0,0)是否在二維凸包內
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/09/16
11276 Magical Seven
給你一個7*N的格子圖,問你
A: 有幾種完美覆蓋的方法,所謂完美覆蓋是指使用1*2的長方塊,
不重疊、不遺漏地覆蓋整個棋盤
B: 有幾種不同的漢米頓圈,所謂漢米頓圈是一個cycle,
在棋盤上每個格子恰好經過一次
C: 有幾種分割成子圖的方法,而且每個子圖皆必須是cycle
輸出 A+B+C 的未四位
想法... <PageDown>
嗯,DP應該可以
A,C的狀態數皆為 2^7=128 ,用對稱性縮到 68
用矩陣 68^3 應該還可以
B的狀態數有點大...估 160上下,縮完也還有90,不知道會不會出事就是了 xD
不過B的狀態似乎有些是獨立的,應該可以提出來分開算,這樣就可以了
然後...因為DP太麻煩了,所以沒寫 xD
預處理 B 的 DP : O(7!*2^7*15)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: sa072686 at 07/09/17
喔喔 >///<
Accepted 又回來了 >///<
好感動啊(淚)
好想大喊 Accepted 我愛你 >///<
好棒啊∼(大大大心)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
▲ sa072686 改@2007/09/18 Tue 12:48:00
作者: seanwu at 07/09/19
嗄,從書架進化到書局了..
http://oistorer.blogspot.com/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/09/22
11212 Editing a Book
你正在用電腦編輯一篇文章,它有(1<n<10)個段落,你想要重新安排這些段落的順序
你可以使用「剪下(Ctrl+X)」來剪下一些連續的段落,
然後使用「貼上(Ctrl+V)」貼在任何一個地方
當然,一次只能剪下一個連續的區塊,一次的剪下+貼上稱為一次操作
給你段落一開始的排列方式,將它編輯成 1,2,3...N 的排列,最少需要幾次操作?
ex.
5 4 3 2 1 ans: 3
5 4 (3 2) 1 --> (3 2) 5 4 1
3 (2 5) 4 1 --> 3 4 1 (2 5)
(3 4) 1 2 5 --> 1 2 (3 4) 5
<Hint E>
雖然狀態少,但BFS不會過,因為分枝太多
可以用A*,估計函式為 (每個段落的下一個段落不正確)的數量/3
例如 1 2 4 5 3 的值為 2,因為 2->4!=2->3 ,5->3!=5->ψ
IDA*不知道行不行,因為我覺得重覆的狀態太多了點..
又或者聽說雙向BFS也可以,不過要寫得好
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ chensc 推:我看成 Eating a Book ... (拖走) 0923 11:49
→ ben196888 推:XD 我笑了 0923 12:01
→ sa072686 推:既然一樓對 Eating a Book 這麼有興趣…(邪笑) 0923 13:17
作者: sa072686 at 07/09/23
嗯,被我拿來懷念 ACM 了XDD
順便慶祝一下 Accepted 又回來了(茶)
是說它有中譯。
解法在弗基斯特的 programming 板有人貼過了XD
---- 分隔線 ----
將每個數看成 p*q + r 的形式,並且所求為 q 的話
那麼兩兩相減的話,由於我們希望得到的 q,得出來的 r 會一樣
因此可把 r 消掉,會得到 q 的某一個倍數
又,q 必為這些兩兩相減數中的公因數,這個應該不難想
既然要最大,就取最大公因數即為所求
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/23
暴力,其實還不難解。有點數學,卻又沒用到很難的東西
不過浮點數的處理,有點頭痛就是了…
翻譯一下
給你 a 和 b,你要塞很多個圓形物在 a * b 的平面上。
a 和 b 的單位,以圓形物之直徑為單位。
有兩種塞法:grid 和 skew
grid: skew:
○○○○ ○○○○ ○○○○
○○○○ ○○○ ○○○○
○○○○ ○○○○ or ○○○○
○○○○ ○○○ ○○○○
○○○○
請注意:可以任意翻轉。所以給 a、b 和 b、a 都一樣,且兩種都要考慮。
問,最多可以塞幾個圓形物?又,可以塞最多的方法是 grid 還是 skew?
並且,如果 grid 和 skew 可以得到相同的答案,那麼請輸出 grid
---- 分隔線 ----
暴力計算所有可能情形,取大者即可。
嗯,會用到正三角形的高。
即使沒背公式,只要用很簡單的畢式定理就推得出來了。
不再贅述…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/23
好像…挺麻煩的?
這裡提供一個效率還不太差的方法。
O(n^2) 的前置處理和 O(n log n) 的運算吧
---- 分隔線 ----
首先,怎樣才會是最佳呢?
抽得要越少嘛。
抽得越少,那就代表按照順序的不要抽掉
就想目標態中,從最底下疊上去的,在原始態中夾在這些中間的都要抽走
這樣,抽掉之後至少剩下的還能維持和目標態一樣
如果不從目標態底下做起,那麼會發現抽掉目標態最底下那個後,其它都要重排
所以不會比較好,就從目標態的底開始
然後,如果不連續也需要重排,所以要連續
接著這些需要抽掉的烏龜依目標態位置排序輸出即可
所以抓目標態位置是 n^2
排序要 n log n
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/23
不難的一題。雖然是四星的,可是讓人沒像四星題的感覺
很白痴地亂做就會過了。
嗯,話是這麼說啦…大小於打反讓我吃了很多WA 囧rz
---- 分隔線 ----
先想,題目說我們要走一個點,必須該點存在一條路徑短於目前點所有路徑
那麼就想,目標點要存在一條路徑較短的話,自然挑最小的去比
有點 greedy 的想法,所以要最短路徑嘛,嗯…
又想,如果比目前點最小路徑小,那不就比目前點所有路徑小嗎?
也是最短路徑嘛,嗯…
別再懷疑了,Dijkstra 先做前置處理
再來呢?2147483647 種的話,即使空轉也會 TLE
不過,路徑的重覆性很大嘛…
比如說 a => c 或 a => b => c 都會用到 c 的路徑數嘛…
而 b 可以走到 c 的話,一定不能從 c 走到 b 嘛…
既然這樣,很容易想到用 DP 做
不過用記錄式 DFS 做就可以了,比較不麻煩
可得遞歸式 f(i) = sum(f(j)),i、j 相連且 j 的最短路徑比 i 小
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/24
嗯…不好想的一題,感謝 SRX 學長
不過,雖然只是一句話,就已經夠解決這題了XD
---- 分隔線 ----
篩法。
怕 mem 爆炸?
那,篩中間那段就好。最多才 1000000,不是嗎?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/26
http://0rz.tw/d635i
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/09/28
是 302 耶 >///<
不過還挺麻煩的囧
翻譯一下
john 想從家裡出發拜訪過所有親戚再回到自己家。
有最多 44 個路口和不到 1995 條的街。
每條街必恰居住一親戚。並且保證一定有路可從家裡到所有親戚家。
如果有解,請輸出字典順序最小那條;無解則照題目所述輸出。
---- 分隔線分隔線 ----
尤拉路徑,要有循環必須要所有點都有偶數條路。
USACO 3-3 提到方法
使用 stack 放著第一個點,然後開始走,效率是 O(n + m)
每次都抓一個點,然後一路走下去
如果發現那點沒有路可以繼續走了,那把它記錄下來
因為,每個點都有偶數條路,那麼進去再走出來仍是偶數條路
所以一定可以進去再出來,唯一不行的就是只走過一條路出來
然後即使回去再出來也維持奇數條路的起點
那麼,這時就把它記下來…
接著即使再找到連得進去卻出不來的
那麼表示它連到起點…因為它曾連到起點又 backtracing 回來
由於是 backtracing 而不是重新走回來,所以路會變成奇數條…
然後這樣一直抓,最後會得到逆向排序的一條路徑
再把它反轉回來即為所求
字典順序就給大家想一下好了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/09/29
※ 引述《sa072686 (天翔龍閃!!)》之銘言:
> 是 302 耶 >///<
> 不過還挺麻煩的囧
> 翻譯一下
> john 想從家裡出發拜訪過所有親戚再回到自己家。
> 有最多 44 個路口和不到 1995 條的街。
> 每條街必恰居住一親戚。並且保證一定有路可從家裡到所有親戚家。
> 如果有解,請輸出字典順序最小那條;無解則照題目所述輸出。
補充一下好了,害我挖好久還跑去爬討論板的原因
只能怪自己英文爛了囧
john的家是每組輸入第一行中,編號最小的那個路口
我看成連接第一條街的編號最小的路口了…然後就挖掉
另外,以下是漏翻的補充…它是要輸出街的編號
然後兩個路口間可以有很多條街,並且一條街兩端的路口未必要不一樣
也就是說,可以從某個路口出去,繞一圈再回到相同路口這樣…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/09/29
716 Commedia dell' arte
現在有一個遊戲,是 15puzzles(參見ACM10181) 的升級版
它是三維的版本,由編上1∼(M^3-1)的小方塊組成長寬高各為M的立方體
並留下一個空格,於是你可以移動鄰近空格的小方塊到空格中
給你一個盤面,問此盤面能不能解回初始的樣子,即1∼(M^3-1)依序排好
(1<=M<=100)
<Hint E>
判斷有沒有解,可以仿自證15有無解的方式 (等會補上)
但這樣是 O(M^6)會TLE,必須降到 O(M^3*log(M^3))
bst不行,因為不平衡下最壞可以到平方等級,除非寫個平衡樹
或者,因為全是1~M^3的整數,因此可用陣列+二分查找模擬bst,保證平衡
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/09/29
關於15puzzles,可以參考ACM10181
嗯,底下是我推得的結果,我只有辦法確認它的必要性,
至於是否夠充份保證一定有解就不知道啦...
一個15puzzles的盤面,如下圖標上編號,並且令該格上的數字為X(i),
如果X(i)==0則表示空格
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
考慮序列 A = X(1), X(2), X(3)..... 但從中抽掉空格X(k)==0,所以A剩15項
令 S = Σ{Ai>Ak的數量(i=1..k)} (k=1..15) + 空格所在的行數(由上邊往下數)
則: 經過不同方向的移動後,S->S',其奇偶性不變
以小方塊下移(實心的那塊)為例,會影響S值的只有黃色的方塊:
□□□□
□□■□
□□ □
□□□□
編上編號
□□□□
□□AB
CD □
□□□□
則A與B,C,D三者比較大小,有如下的關係
A>B 或 A<B
A>C 或 A<C
A>D 或 A<D
在A>B的情況下,則S值會-1,反之A<B時則會+1,不論如何皆 ≡1 (mod2)
而C,D的情況也相同,對S的變化量也是 ≡1 (mod2)
再加上空格所在行數的變化,所以 S' ≡ S+(1+1+1)+1 ≡ S (mod2)
得證 S->S'的奇偶性在向下移動作中不變
其它的移動方向也可以用類似的方法
注意N*N的盤面上,N的奇偶性會導致不同的結論
此條件亦可推廣至三維puzzles版本
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
→ Tommy 推:我的8-puzzle因為不會判斷有沒有解一直處余TLE狀態... 1006 10:47
→ sa072686 推:其實google一下都有…簡中的論壇很多寶的… 1006 11:18
→ seanwu 推:goo不到,會證且閒到去po證明的不多... 1007 22:31
→ seanwu 說:查到的很多論文都要$$,不給看 1007 22:31
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/07/12 Sun 19:28:12
作者: gloompisces at 07/09/29
http://tmtacm.no-ip.org/JudgeOnline/
記住這個網址。
站長是黃上恩 (什麼你不認識,人家是去年NPSC冠軍隊成員和今年IOI金牌耶)
他和另外一些強者會自己出題目,放在網站上,以contest的方式讓大家寫
前兩個比賽的時間是
[For Beginner] TPE Practice Contest 1 Start at 2007-10-05 18:00:00.0
[Not Official] NPSC Practice Contest 1 Start at 2007-10-13 13:00:00.0
限時應該都是五個小時
有心比資訊的,要去註冊和練習喔
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.241.8 (台北帝國大學)
→ sa072686 推:喔喔…這個好棒… 0929 21:06
→ chensc 推:皇上開恩了XDD 0929 22:54
→ silentvow 推: 是卡恩耶 0929 23:43
作者: seanwu at 07/09/29
10294 Arif in Dhaka (First Love Part 2)
給你t種顏色的珠子,你要利用它們串成長度為n的圓形手環,珠子的數量無限
問你:
1. 旋轉後相同視為同一種串法,問有幾種串法?
2. 旋轉和翻轉後相同視為同一種串法,問有幾種串法?
<Hint E>
Polya計數,瞬殺 xD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/09/29
10244 First Love!!!
某個白痴想要買一大串串珠,這串串珠由不同顏色的珠子組成,並且他想要
能從這一大串串珠中切下長度為N的任意排列,問他買的串珠長度最少是多少?
如果長度<=10000,請輸出符合條件的任一種串法,否則輸出 TOO LONG TO PRINT.
給你一個長度<5的字串,代表不同顏色的珠子,因此每個字元皆不相同
給一個正整數N<=20表示所要切的長度,而且保證答案 < 2^63
<Hint E>
長度嘛...(顏色數)^N+(顏色數)-1
至於排列....依據某個特定順序一直添加珠子,保證有解,但不會證
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: seanwu at 07/10/03
10291 Cut the Legs
有一張圓形桌子,它有N支隻腳,沿圓周排成等間隔環形
但是桌腳的長度並不相同,所以桌子會搖晃
請你切掉總長度儘量少的桌腳,使桌子不會搖晃
<Hint E>
想要桌子不搖晃,只要讓圓心落在觸地桌腳形成的多邊形"內"就可以了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.160 (沒有故鄉)
作者: sa072686 at 07/10/08
嗯…相當難寫的一題。
大意是大數開根,不過給的必為完全平方數
----
嗯…實在不是很好做的一題。
由於最大 10^1000 所以用逼近的應該會出事…
最差情形要做 1000 * 10 次大數乘法,每次大數乘法 1000 * 1000 次乘法…
不出事有鬼…
所以,要用直式開方的方式…這樣一來最差情形是 500 * 10 次的大數乘小數
以及一堆大數加減法的東西…總之大數乘小數只要 1000 次的乘法
所以其實還好…
不過因為太複雜,我就開函數比較方便
可是,又不能傳陣列的值,只能傳址…所以用了一堆動態配置記憶體
然後不釋放又會 RE,所以還要釋放…
就慢得可憐(汗),所以後來開大數加速的大絕,才避掉 TLE 的…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/10/08
原理我不知道。據說和 (a + b)^2 = a^2 + 2ab + b^2 有關。
首先,把原數字寫下來…例如:7206604678144
然後兩位兩位撇掉,像這樣…
7,20,66,04,67,81,44
然後自左而起…
_________________________
/7,20,66,04,67,81,44
然後像乘法一樣,每次拉下一些數…像一開始拉下那個 7
接著有一個暫存數,一開始是 0
然後,每次都找一個數,使得暫存數加上它再乘上自己會小於拉下來的數
然後這個數就是答案之一…以它為例
2
_________________________ 2
/7,20,66,04,67,81,44 2
4 ---
-------------------------- 4
3
接著把暫存數乘以 10,再把 20 拉下來…
2
_________________________ 2
/7,20,66,04,67,81,44 2
4 ---
-------------------------- 40
3 20
然後重覆一樣的動作…
2 6
_________________________ 2
/7,20,66,04,67,81,44 2
4 ----
-------------------------- 46
3 20 6
2 76 -----
-------------------------- 520
44 66
2 6 8
_________________________ 2
/7,20,66,04,67,81,44 2
4 ----
-------------------------- 46
3 20 6
2 76 -----
-------------------------- 528
44 66 8
42 24 ------
-------------------------- 5360
2 42 04
2 6 8 4
_________________________ 2
/7,20,66,04,67,81,44 2
4 ----
-------------------------- 46
3 20 6
2 76 -----
-------------------------- 528
44 66 8
42 24 ------
-------------------------- 5364
2 42 04 4
2 14 56 ------
-------------------------- 53680
27 48 67
…
嗯,依此類推…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/10/09
這題分上下兩部份衝 DFS 為什麼會 WA 呀?
看討論板寫的,好像沒辦法過…我寫過,也的確沒辦法過(汗)
到底是什麼原因呢…一直想不出來 |||
有哪位高手能幫忙解惑一下嗎?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:過了…漏了一個東西沒考慮到 ||| 所以還是可以的… 1010 09:52
→ Tommy 推:DP? 1010 11:04
→ seanwu 推:DP 1010 12:11
→ sa072686 推:不,我還是用DFS過了… 1010 13:01
→ Tommy 推:寫DP很有成就感...XD 1010 14:29
→ sa072686 推:DP要回溯有點小麻煩(炸) 1010 18:10
作者: sysop at 07/10/11
───────────────────────────────────────
◆ [sa072686] 看板投票:關於文章形式
舉辦板主:sa072686
舉辦日期:2007/09/10 Mon 23:38:54
開票日期:2007/10/10 Wed 23:38:54
◆ 投票主題:
嗯,只是單純問問意見,未必會照做(炸)
大家覺得 ACM 文是用什麼方式比較好呢?
是說有其它建議請扔留言
◆ 投票結果:每人可投 1 票,共 20 人參加,投出 18 票
完整翻譯加詳解 4 票 (22.2%)
完整翻譯加提示 3 票 (16.7%)
重點翻譯加詳解 5 票 (27.8%)
重點翻譯加提示 6 票 (33.3%)
◆ 我有話要說:
•etetet91 :強者 >///<
•ben196888 :嘎啦啦 我要去K英文 哭哭 題目都看不懂
•gloompisces :我覺得完整翻譯有時候沒有甚麼意義,只是增加解題樂趣XD
•silentvow :其實比較希望詳解另發一文, 題目配提示 //疲勞無視
•seanwu :怎麼沒有只有翻譯這個選項...有提示或詳解會失去樂趣的喔..
•Tommy :版主很發
•csftwpt :XD
•chhtaiwan :3
•chensc :詳解∼數學科老師很愛用的東西
作者: sa072686 at 07/10/12
http://my.opera.com/dd-usaco/blog/
然後好像有所有題目的 code(炸)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ PG 推:借轉 1012 21:59
φ PG 轉:到 [PG] 看板,于 2007/10/12 Fri 21:59:35
→ devilqxect 推:轉~ 1012 22:04
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/12 Fri 22:04:18
→ sa072686 推:據說這裡面歪解不少。 1013 11:32
作者: silentvow at 07/10/12
※ 引述《sa072686 (無)》之銘言:
> http://my.opera.com/dd-usaco/blog/
> 然後好像有所有題目的 code(炸)
http://www.nocow.cn/index.php/USACO_Training
所有題目的簡譯兼題解.
詳細翻譯的網址你好像已經有了?
--
╓───╖╓╖╓╖ 高中生 ─── 一種會全力作傻事的生物
║╓──╜║║║║ 而且很容易一頭熱,馬上又冷掉。
║╙──╖║║║║ ╖
╙──╖║║║║║ ╓─╖ ╖─╖ ╫─███ ▉ ▊ ▋ ▌ ▍ ▍ ▏
╓──╜║║║║╙──╖╟─╜ ║ ║ ║ ╖ ╓╓─╖╖╥╓
╙───╜╙╜╙───╜╙─╜ ╙ ╙ ╙╜ ╙─╜╙─╜╙╨╜
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 219.70.20.103 (和信超沒品)
→ sa072686 推:詳譯的是指你推在小弗 programming 的嗎? 1012 21:41
→ sa072686 推:http://oi.gygjzx.js.cn/usaco/USACO%20Translate.htm 1012 21:41
→ PG 推:借轉 1012 21:59
φ PG 轉:到 [PG] 看板,于 2007/10/12 Fri 21:59:51
→ devilqxect 推:轉~ 1012 22:04
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/12 Fri 22:04:27
作者: silentvow at 07/10/12
→ sa072686 推:http://oi.gygjzx.js.cn/usaco/USACO%20Translate.htm 1012 21:41
對就是這個, 另外補上 http://acm.sjtu.edu.cn/oibh/usacogate
這裡的雷比較小 (爆)
你也知道比較無腦的人就只能幹這種搜括情報的勾當 ... xD"
//usaco跳題法: 任選一題, 將網址最後題號縮寫改為目標題號縮寫, enjoy it!
--
╓───╖╓╖╓╖ 高中生 ─── 一種會全力作傻事的生物
║╓──╜║║║║ 而且很容易一頭熱,馬上又冷掉。
║╙──╖║║║║ ╖
╙──╖║║║║║ ╓─╖ ╖─╖ ╫─███ ▉ ▊ ▋ ▌ ▍ ▍ ▏
╓──╜║║║║╙──╖╟─╜ ║ ║ ║ ╖ ╓╓─╖╖╥╓
╙───╜╙╜╙───╜╙─╜ ╙ ╙ ╙╜ ╙─╜╙─╜╙╨╜
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 219.70.20.103 (和信超沒品)
▲ silentvow 改@2007/10/12 Fri 22:53:29
→ devilqxect 推:感謝~轉~ 1012 23:17
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/12 Fri 23:17:28
→ PG 推:借轉 XD 1013 00:09
φ PG 轉:到 [PG] 看板,于 2007/10/13 Sat 00:09:02
作者: zenixls2 at 07/10/14
/*-----------------------八皇后問題-------------------------*/
#include<iostream>
#include<math.h>
using namespace std;
int s[92][8][2]={0},c=0;//c為第幾種解法,s為存解法的地方
void dfs(int depth)
{
if(depth<8)
{
int x,y,i;
for(x=1;x<=8;x++)
for(y=1;y<=8;y++)
{
//檢查碼
bool r=1;
for(i=0;i<depth;i++)
{
if(x==s[c][i][0]||y==s[c][i][1]||abs(s[c][i][0]-x)==abs(s[c][i][1]-y))r=0;//除錯程式說這行有錯
//為存取錯誤
}
if(r)
{
for(int j=c;j<92;j++){s[j][depth][0]=x;s[j][depth][1]=y;}
dfs(depth+1);
}
}
}
else c++;
}
int main()
{
dfs(0);
cout<<"x y\n";
for(c;c>=0;c--)
{
cout<<c<<"\n";
for(int i=0;i<8;i++)cout<<s[c][i][0]<<" "<<s[c][i][1]<<"\n";
}
system("pause");
return 0;
}
這份code單純是想把所有排法紀起來
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.118.4 (中滑一番)
→ Tommy 推:在那航有問題的地方印出c和i看看 不然就陣列開大一點較保險 1014 10:54
→ sa072686 推:c暴增XDD 1014 12:00
→ sa072686 推:反正已知每行每列必只能放一隻 枚舉每一行放哪一列就行 1014 12:02
→ sa072686 推:然後為什麼要從c跑到92我看不太懂XD 1014 12:02
→ Tommy 推:其實8-Queen Problem 只有92組解的原因吧... 1014 12:06
→ sa072686 推:不是…在DFS中有個地方從c到92都放同一組x、y 1014 12:09
→ Tommy 推:喔~對~那航我看不懂XD 1014 12:09
→ zenixls2 推:這樣就不會因為回朔不到前面的而沒記錄到 1014 13:28
→ zenixls2 推:比如說depth=7,回朔到depth=6又找到另一組解,就不會因 1014 13:31
→ zenixls2 說:前面沒跑過而沒紀錄 1014 13:32
→ sa072686 推:所以簡單地說就是回溯沒寫好(炸) 1014 13:48
作者: seanwu at 07/10/14
11301 Great Wall of China
有一個探險隊決定去探訪長城..
長城的寬度是5,長度為N(3<=N<=1000),他們想從長城的左端走到右端
但經過每一格的成本不完全相同,如下圖
@00100000000000102000000000
@00100000000000102111000000
000010000000011002110000000
@00011110000100002111000000
000000000011100002000000000
最左行的每個'@'各代表一個探險隊隊員,而且最左行的每一個的成本必定為0
隊員可以上下左右移動,而且走的路線不得相交,
上圖標示顏色的路線即為一種最小成本的走法,成本為13
<Hint E>
DP經典題型,但太難寫了XD,用mincost-flow就好(1.480sec過,小心效率)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.132 (沒有故鄉)
作者: sa072686 at 07/10/16
強烈建議怕麻煩的不要寫它。好了,怕麻煩的可以離開了。
梭哈題。
沒有提示。請暴搜…
是說竟然錯在output格式錯誤再加qsort長度指定錯誤…
還是太大意了。不過這種大苦工花不到1hr又只出兩隻小bug應該算還好了…
181行,而且是用行數成長特別快的縮排法(炸)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/16
不好想的一題啊。排組題,我是剛好觀察出公式…嗯。
---- 分隔線 ----
觀察發現它數字有點奇怪?
2 => 0/1
4 => 1/2
6 => 5/8
8 => 22/32
10 => 93/128
看起來,分母四倍,分子也約四倍上下,不過似乎不是單純四倍?
5 = 1 * 4 + 1
22 = 5 * 4 + 2
93 = 22 * 4 + 5
咦?1、2、5…這時直覺會告訴我它是加泰隆…
好,那麼我們會得到分子四倍加上加泰隆數列某一項會得出下一個分子
可是,分子分母都會很大很大耶?
2^100000?不是吧…當然不是,光加泰隆數列就會成長到很大很大了呢
不過沒關係,我們把式子轉換一下
舉個例子,5/8 = 4/8 + 1/8
然後…22/32 = 20/32 + 2/32
然後…93/128 = 88/128 + 5/128
也就是每一項會等於前一項再加上加泰隆數除以分母…
那麼設共 2n 個人,每次有 n 個起司堡和豬肉堡,則得遞迴式
f(1) = 0
f(n) = f(n-1) + c(m)/(4^p * 2)
嗯,m=n-2,p=n-2,然後加泰隆數
c(1) = 1
c(n) = c(n-1) * (4n-2) / (n+1)
還記得嗎?
不過 c() 成長太快,4^p * 2 成長也太快…
可是會發現這樣加了五萬次還不會超過 1…
所以其實不大這樣。只要不把它分開算…
因此我們令 d(n) = c(n)/(4^n * 2)
則可得
d(0) = 1/2
d(1) = 1/8
d(2) = d(n-1) * (4n-2) / ((n+1) * 4)
故得
f(0) = 0
f(n) = f(n-1) + d(n-1)
即為所求
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/10/17
10092 The Problem with the Problem Setter
出一張考卷,涉及了N個領域的題目,每個領域需要出Pi題(i=1...N)
你有一個總共有M題的題庫,每一題都和Ri個領域相關(i=1...M, Ri<=N)
所謂與某個領域相關,指的是該題可以被歸類於該領域,
並非該題可以同時視為不同的領域,且考卷中不能有重覆的題目
問你對於每個類別,該出哪些題目?
輸入為,第一行給N,M,第二行N個數為Pi,
接下來的M行中,每一行的第一個數字為Ri,接著是Ri個相關的領域
若無解輸出0,否則輸出1和每個類別所出的題目
<Hint E>
maxflow
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.132 (沒有故鄉)
作者: seanwu at 07/10/17
701 The Archeologists' Dilemma
給你一串數字,但這串數字的右邊有超過一半的字跡糊掉了
但你已知這串數字一定是2的羃次方倍,即2^X
請你找出最小的X使得2^X符合上述條件 (左邊相符合而且有超過一半的字跡糊掉)
//超空虛的題目...
<Hint E>
暴力就好了,但當然不是針對X
考慮右邊不見的部分長度有p,則原數字為X*(10^p)
而我們要找的X,即為 X*(10^p)<=2^X<(X+1)*(10^p)
兩邊取log_2,從最小長度限制枚舉p,如果X存在即為解
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.132 (沒有故鄉)
→ newmoon 推:這是怎麼個空虛法? 1106 20:38
作者: seanwu at 07/10/18
11300 Spreading the Wealth
有N個人(N<1000001)圍成一圈,每個人有著數量不等的錢
每個人可以把錢傳給他左邊或右邊的人,最後使得每個人的錢一樣多
問需要傳遞的錢數最少是多少?
(請使用long long)
<Hint E>
感覺很像環圈流XD 不管用什麼方法,假設先找出一組解,
可以表示成每個人向右傳多少(可以是正或負)
則如果每個人都向左傳一個相同的值,則仍會是一組解
試找出需向左傳的值,使得淨流量絕對值的總和最小
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.13 (台狼一中桑靈餓)
作者: seanwu at 07/10/18
11311 EXCLUSIVELY EDIBLE
有一個N*M的蛋糕,但其中有一個1*1的區域是爛的
現在Hansel和Gretel想吃這蛋糕,但顯然沒有人想要吃到那塊爛的部分
蛋糕的吃法是每次可以直切或橫切一刀,切下一塊來吃
兩個人輪流吃,由Hansel先開始切
給你N,M,及爛掉區域的座標
如果兩個人都有能力找出最佳的策略,問是誰吃到爛的區域
<Hint E>
DP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.6.104 (台狼一中)
▲ seanwu 改@2007/10/18 Thu 14:07:11
→ Tommy 推:Nim.. 1018 15:08
→ seanwu 推:嗯,好東西.. 1018 15:17
作者: seanwu at 07/10/18
11310 DELIVERY DEBACLE
有以下兩種蛋糕
□ ■■
■
要放在2*N的盒子裡,而且盒子要完全裝滿,問有幾種裝法?
例如N=2時,有如下5種裝法
□□ □■ ■□ ■■ ■■
□□ ■■ ■■ ■□ □■
<Hint E>
DP,就長度為x時尾端的形狀而言
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.6.104 (台狼一中)
作者: seanwu at 07/10/18
11309 COUNTING CHAOS
給你現在的時間,求出下一個是迴文的時間 (不能等於現在時間)
判斷迴文時忽略開始的0
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.6.104 (台狼一中)
作者: seanwu at 07/10/18
11308 BANKRUPT BAKER
你有一些蛋糕的食譜和一些錢,在不超出預算的前提下,問你有哪些蛋糕做得出來
輸入格式: 第一行有一個數字代表以下有幾組測資
每組測資的第一行為這個測資的名稱(?)
第二行為 m n b,m表示有幾種食材,n表示有幾種蛋糕,b是你擁有的錢數
接下來的m行,每行有一個字串及一個數字,表示這個食材每單位的花費
接下來有n個蛋糕的食譜,食譜的第一行為這個蛋糕的名稱
第二行有一個數字,表示需要幾種食材
接下來是所需食材的清單,每一行為該食材及需要幾單位
第一行輸出測資名稱(全部大寫),接著輸出可以做出的蛋糕清單,
依成本由小到大排列,如果成本相同則依字典順序排列
如果沒有任何一個蛋糕做得出來,輸出 "Too expensive!"
每組測資後皆空一行
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.6.104 (台狼一中)
作者: seanwu at 07/10/18
11307 ALTERNATIVE ARBORECSENCE
給你一棵樹,在樹中的每一個頂點填上一個正整數
兩個相鄰頂點上的數字不能相同,問所有頂點的總和最小是多少
(頂點數<=10000,編號0不一定是樹根)
<Hint E>
DP,記錄某個頂點填上某個數字,它的子樹最小值,顏色數10個已經足夠
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.6.104 (台狼一中)
→ Robin 推:請問Hint說的那樣是怎麼看出來的啊? 1022 08:59
作者: sa072686 at 07/10/18
最近不知道是怎樣…
難道 backtracing 該重練了?
討論板有人說跑起來不用一秒,我換了三四種寫法都 TLE
後來放棄它了…開 DP 大絕 AC 掉了。
---- 分隔線 ----
直接暴搜也至少要搜 2^16 然後還要一些額外花費
其實對於每種配方取與不取後只剩 2^12 種狀態,記著每人至少一種了沒
那麼對於每種配方取與不取先計算出讓哪些人會至少符合一種需求
再以 or 做 DP 即可
DP[i][j] 存著到第 i 種配方為止,十二人的狀態 j 是否存在
而狀態上可將十二人有無至少符合一種,做成二位進數 j
這樣也只需要枚舉 16 種配方各 4096 種狀態,是 2^16
其實很快。如果到哪種配方時,解就出來了還可以 cut 掉。
不過要回溯又要記狀態,空間複雜度較高,算以空間換時間
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/10/18
10421 Critical Wave
給你N<=1000個點,(x,y)座標範圍在-32768~+32768之間
現在,你要畫一個波的圖形,定義如下
1. 以 y=a 當做波的基準線
2. 這個波是由一些點組成,這些點的x座標皆不相同,並y座標為a+1或a-1
3. 因為這是一個波,由每個點交錯出現在a+1,a-1構成
問一個波上最多可以包含幾個點
<Hint E>
將點依x排序,再依序加入每個點到相關的y=a上(a的範圍並不大)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 203.68.21.132 (沒有故鄉)
作者: zenixls2 at 07/10/18
5985223 Joseph Accepted C++ 0.220 2007-10-18 15:11:03
這題不需建表來篩
直接以條件式判斷是否有誤殺好人
開兩個變數檢查m
一個為殺到哪一個人
另一個為剩下之人數
請注意:只要殺到k之後的人,所以1~k的人編號都不變
假如速度要加快的話,就是一開始m=k+1,再來m=k+2,....m=k+k,m=2*k+k+1.....
不過AC並不需要做到這樣
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.103.92 (中滑一番)
作者: zenixls2 at 07/10/18
This is an e-mail from 'UVa Online Judge'
Message:
Hello,
We invite you to participate in the ACM ICPC Regional
Warmup Contest of 2007. The contest will take place on
20th October, 2007 at 11 GMT and run for six hours.
The difficulty of the problemset will be medium easy
but problems will be interesting, not just
implementing common algorithms.
So see you during the contest, have fun.
-The UVa Online Judge Team
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.103.92 (中滑一番)
▲ zenixls2 改@2007/10/18 Thu 23:35:03
作者: sa072686 at 07/10/19
嗯…其實還不難,只是有點小麻煩…
一次 AC。
---- 分隔線 ----
可視為 26 進位制解之。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: seanwu at 07/10/19
10546 The Eagle's Nest
題目有點長..
大意是說,給你一個數列,令它的LIS長度為M
現在你要從這個數列裡面拿掉M個數,這M個數必須遞增
問你最多可以拿走幾個數?
測資的第一行為N代表接下來有N行,接下來每一行有一個字串和數字
字串用不到,忽略它,只管數字就好
<Sol pagedown>
聽說可以greedy,不過我不太清楚怎麼做 :P
可以用maxflow,先令lis[i]為以數字i當結尾的lis[i]長度
建一個圖,因為一個數只能拿一次,所以把點i拆成i和i',並加上邊c(i,i') = 1
在數字i和j來說,如果lis[j]==lis[i]+1且j>i,則c(i',j)=1否則為0
在頭尾加上S,T,做maxflow的流量,就是最多可以拿幾次,次數再乘上M就是個數了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.13 (台狼一中桑靈餓)
▲ seanwu 改@2008/04/27 Sun 10:20:37
作者: sa072686 at 07/10/19
終於過了…真是容易 TLE 的一題
後來好不容易擺脫了,還是 wa 了幾次
結果竟然是 PE 造成的 |||
看來,現在只要 PE 就直接算是 Wrong Answer 了…
好好珍惜自己的 PE 啊,那已經是絕版珍品了…
----- 分隔線 -----
原本使用 DP with O(nm * max weight),結果太慢一直 TLE
後來把那個 m 用很詭異的方法拿掉後…
還要把 max weight cut 掉一些,才勉強過了…
嗯,基本上狀態是 DP[i][j] 代表有無可能以 j 個人配出總重 i
不過這樣子太慢了,反正最多看能組到 50 個人就好了
那麼,就用二進位的方式代替那個 j,不過要使用 long long
這樣使用 DP[i] |= (DP[j] << 1) 即可轉移狀態
一開始還用 mod 的方式,怕左移太多會出事,因為一直 wa
後來找出真正原因後改回來,從 1.4 變成 0.27 …
差真多…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
作者: sa072686 at 07/10/20
現在好像每一題傳過的題目都有標上顏色?
AC 標綠色,其它標其它色的樣子。
應該和圓餅圖的配色一樣吧,嗯…
雖然這樣不錯,不過沒有列表還是覺得不太夠用呢。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/10/20
10735 Euler Circuit
給你一個混和圖(由有向邊和無向邊組成),找出它的任意一個歐拉圈
<Hint E>
需先對每一條無向邊定向,可以用maxflow
<Sol pagedown>
若每個頂點的入度數等於出度數,則歐拉迴路有解
因有向邊的方向已經決定了,需決定無向邊的方向使得入度數等於出度數
建網路圖,有源S和匯T,對於每一條無向邊i建一個節點Pi,對每個點j建一個節點Qj
令c(u,v)代表有向邊(u,v)的容量,此網路中的c(S,Pi)=1
若j屬於邊i的兩端點之一,則c(Pi,Qj)=1,否則C(Pi,Qj)=0
設d(j)為點j所還需要的入度數(總度數/2-有向邊指入的數量),則c(Qj,T)=d(j)
令S,T之間的maxflow為M,如果M==(無向邊數量)則有解,
並且由Pi出發的流的方向為無向邊i定向。反之,則無解
無向邊定向後,則可以用一般的歐拉迴路算法來解
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-139.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ suhorng 推:對了 這題好像不會有不連通的情況 1106 12:17
作者: sa072686 at 07/10/20
嗯,其實它好像也不是很難啦…
公式出來後直接照著打上去就會過的那種。
只是化開它很煩很煩 |||
---- 分隔線分隔線 ----
化開後,a(1) = 1/(n+1) * (a(0)*n + a(n+1) - c(n)*2 - c(n-1)*4 - c(n-2)*6 - ...
差不多是長這樣。
第 i 項化掉後會變成第 i-1 項 和 第 i+1 項 有關。
若 i+1 == n+1 則為已知
其它情形,第 i+1 項會有第 i 項的某倍數,移項過去就好了
於是慢慢地將 an 化掉代入 a(n-1),再化掉 a(n-1) 代入 a(n-2) …
最後到 a1 時就會得到它。當然前提是你沒算錯的話…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: zenixls2 at 07/10/20
WA兩次
很容易粗心的題目
不要硬檢查斜率,而以係數相乘來替代
會省下很多檔小數點的code
Sample Input
8
0 0 1 1 0 1 1 0
0 1 2 1 0 0 2 0
0 1 2 1 1 2 1 3
1 0 1 2 1 1 1 0
0 0 2 0 0 1 2 1
1 2 1 3 0 1 2 1
1 1 1 0 1 0 1 2
-2 -2 2 2 1 -1 -1 1
or
10
0 0 4 4 0 4 4 0
5 0 7 6 1 0 2 3
5 0 7 6 3 -6 4 -3
2 0 2 27 1 5 18 5
0 3 4 0 1 2 2 5
0 0 1 1 0 0 1 1
4 0 6 0 1 2 6 9
1 0 5 0 8 5 4 5
1 0 5 0 5 0 1 0
0 1 0 5 0 5 0 1
就應該可以De九成的bug了
output自己推
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.104.6 (中滑一番)
作者: sa072686 at 07/10/20
嗯,很好寫的圖論題
不不不不過有很陰的測資
嗯,就是它圖形未必有連通,這樣
---- 分隔線 ----
嗯,首先某個點要裝相機的充要條件是有兩個點不經過它到不了
因此若從這個點切掉,應該會有部份點會從連通變為不連通
不過若嘗試將每個點去掉再做 Floyd-Warshall 要 O(n^4)
對於 n <= 100 似乎是不太足夠的。
但若一點裝設相機,則表示該點可將圖分成兩個或以上集合且有一條以上的路
並且這些集合與該點相連,卻又不互相連通
那麼從這點任選一條路出發,如果遍歷整個連通的點之後
仍無法涵蓋所有與該點連通的點,則此點必裝設相機
當然由於圖形中任兩點並不一定連通,因此必須先找出與該點相連之所有點
如此對於 n 個點都做一次測試,每次測試最差要遍歷兩次圖中所有點
那麼效率上是 O(n * 2n) = O(n^2)
對於 n<=100 是足夠的
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/17
基本語法 - 基礎篇
首先,是最基本的語法,但會牽涉不少較為深入的心得與理論
因此,請勿將此認為完全不重要而忽略掉。
程式、程式,要程式有何用?不外乎是幫助我們解決問題。
但是解決了問題,我們卻不知道結果,有用嗎?
好比說我要電腦幫我算 3 + 5 等於多少,它算了卻沒告訴你,有用嗎?
因此,我們必須將結果「輸出」,才需要「輸出」的函式。
當然大部份時間我們都希望程式不是針對固定的數據做運算
因此,我們也必須要用到「輸入」使程式能夠接受不同的輸入並做運算
它們,都放在 stdio.h 裡面,standard input and output,標準輸出輸入
故每次一定會載入它,就是因為沒有輸出,程式就幾乎沒有用的道理
載入的方式 #include <stdio.h>
其它函式庫載入方式亦同,將 stdio.h 代換掉即可
接下來講講程式的架構。程式在執行的時候是有其先後順序的
也就是說,它是一條一條程式碼執行,而非所有程式碼並行執行
加上有所謂的「函數」,所以基本上會將程式碼寫在一個「主函數」中
於是主函數執行完畢,即為程式結束
所以每次必須定義一個主函式,程式就從主函式開始執行
一般將主函式定義為 int 型態。函數型態容後再講解
int main()
{
return 0;
}
基本上,函數後必加上一組小括號,來辨別它是一個函數。
裡面可以放參數,也可以不放任何東西,但即使不放參數也得加小括號
之後的大括號中所放的程式碼均為此函式所有
return 是回傳一個值。只要不是被定義為 void 型態的函數都會有一個回傳值
就像數學中的函數一樣,回傳的就是運算過後的結果。
注意到那個分號嗎?
每一行都要加上分號以辨別這一行是否已經結束
當然透過許多分號的分隔,一行也可以塞下許多行程式碼。
不過有些情況是不用加的,像是 int main() 之後就沒有加
主要是,如果某個東西可能包含一段程式碼,就會加上 {} 來夾住這段程式碼
這種情況就不需要使用分號。
接下來,我們試著在主函式中加入一些程式碼,讓它動作吧。
首先最基本的我們必須要知道我們的運算結果
所以就從最基本的輸出開始吧。
輸出所使用的函式是 printf()
然後必須給它一個字串,代表你要輸出些什麼。
字串是由零或多個字元所組成,以雙引號"夾起來
比如說 "123" 、 "ABC" 、 "fafasc" 等都可以是字串。
字元並不限定是什麼,任意英數或符號都可以。
所以像假如我們要輸出 chensc is so shiny
就只要寫成像這樣子
printf("chensc is so shiny");
就可以了。
這裡稍微提一下一些特殊字元。
或許會有人很好奇,如果我們要輸出特殊的字元,或是輸出換行等等的,要怎麼做?
這時就要用到所謂的「跳脫字元」讓它能夠辨識。
跳脫字元即反斜線\,像是換行字元我們就可以表示為\n
這樣子不但不會輸出\n這兩個字元,還會輸出一個換行符號
只是換行符號是看不見的,看到的樣子就只是換了一行而已。
那麼,當然會想問說如果我們要輸出長得像\n這樣的字元怎麼辦呢?
如果我們寫成\\就可以了。一個跳脫字元只會讓它下一個字元跳脫掉
因此第一個跳脫字元讓第二個跳脫字元跳脫掉,第二個跳脫字元也就
不會讓它下一個字元跳脫掉了。因為它已經被跳脫掉,不再是跳脫字元了。
同理,想輸出"又怕字串至此斷掉時,只要寫成\"就可以了。
接下來講到另一個重點,那就是讀入
讀入可以讓我們的程式接受不一樣的輸入來做處理
否則只能運算相同的數據那功能就太陽春了
如果需要修改原始碼才能運算我們需要的數據也太累了…
嗯,因此我們必須要可以接受使用者輸入資料來進行處理
這時使用到 scanf() 函式
但是我們要怎麼拿到讀入的數字呢?
或者該說讀入後它跑到哪裡去了?
這時我們就需要一些容器來存放它們
因此我們就可以定義一些叫做「變數」的容器來存放這些資料
但是變數也有許多種不一樣的類型,它們裝的東西也不一樣
這裡介紹比較常用的型態:
char 字元,範圍在 -128 至 127 之間,佔 1 bytes
short 整數,範圍在 -32768 至 32767 之間,佔 2 bytes
int 整數,依電腦而定,一般都是32位元,也就是等同 long,16位元即等同short
long 整數,範圍在 -2147483648 至 2147483647 之間,2147483648是 2^31
佔 4 bytes
long long 整數,範圍在 -2^63 至 2^63 - 1 之間,佔 8 bytes
float 浮點數,範圍很大,佔 4 bytes
double 浮點數,範圍很大很大,佔 8 bytes
這裡大致提一下 bytes 的概念,也就是位元組,由八個位元組成
位元是電腦中數字的儲存單位,只能存放 0 或 1 的數字
一個位元組可透過那 8 個位元所形成的二進位制數字表示 256 個數字
透過多個位元組就可以表達更大的數字
一般而言,常使用 int,因為 int 的速度最快,範圍通常也足夠
然而 float 和 double 範圍雖大,不過 float 誤差大,應盡量避免使用
使用 double 代替會較佳。不過誤差仍是不小,速度也慢
若非必要請盡可能不要使用浮點數。
宣告變數的方式,是在型態之後接上要宣告的變數名,辨識不同變數用的
如果要宣告多個變數可以逗號分隔之,例如
int a, b, c;
double XD;
char shinychensc;
注意變數名不可以用數字開頭,並且大小寫視為相異;當然也不能有同名的變數
另外,在變數型態前加上 unsigned 可以定義為非負,也就是不能夠表示負數
但是正數可以用的範圍就多一倍。
這樣容器有了之後,就來學習怎麼把讀入的資料放到容器中了。
scanf("%d", &a);
這樣就是讀入一個十進位整數,存放到名為 a 的變數中。
事實上為什麼要加 & 符號牽扯到指標的概念,這裡不好講解。先記著就可以了
%d是什麼呢?那是所謂的格式化,就是一個特定的格式
%d 代表一個十進位整數,還有其它像是
%ld for long
%lld for long long
%I64d for long long
%u for unsigned int
%lu for unsigned long
%llu for unsigned long long
%I64u for unsigned long long
%f for float
%lf for double
%x for 十六進位數字(以0x開頭者)
%e for 科學記號
%c for 字元
%s for 字串
字串的部份比較特殊,容後再提
字元的部份要注意有時會冒出奇怪的多餘字元,那是因為scanf可以讀到換行字元
lld和I64d不太一樣,一般似乎是windows下要用I64d,其餘則是lld的樣子
嗯,然後請小心,輸出百分比符號要使用%%而不是\%
當然也可以同時讀入多個數字,例如
scanf("%d%d%d", &a, &b, &c);
這樣一來,就可以讀入三個十進位整數了。
當然,是第一個對到第一個、第二個對到第二個、…這樣子的。
同時也可以使用在 printf() 中,像是
printf("%d XD.\n", a);
這樣就可以輸出整數 a,否則如果像這樣子寫
printf("a XD.\n");
它會以為你想輸出a這個字元。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/18 Thu 11:21:40
φ mp607 轉:到 [mp607] 看板,于 2007/10/18 Thu 12:27:19
φ UFO 轉:到 [UFO] 看板,于 2007/10/18 Thu 13:58:05
▲ sa072686 改@2007/10/20 Sat 21:17:57
▲ sa072686 改@2007/10/21 Sun 08:55:39
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/21 Sun 21:12:07
φ zenixls2 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 14:46:14
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:13:16
▲ sa072686 改@2007/10/26 Fri 10:33:50
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:45:35
作者: sa072686 at 07/10/17
接著是變數的運算以及運算式。
首先是變數的賦值。變數不只要拿來放讀入的數,也常需要存放一些運算過程
所必要的資訊。這時我們就必須給予變數一個初始的值
否則剛定義完的變數我們並不知道裡面放了什麼。請注意並不一定是 0,而且通常不是。
a = 0;
像這樣子,就是把等號之後的運算式放到 a 裡面去。
這裡講到運算式的概念。不管是常數、一個四則運算式或是更多意想不到的東西
都可以算是一個運算式。例如也可以寫成:
a = 2 + 3;
a = a + 5;
諸如此類的。
另外就是變數的自運算。變數若要改變自身的值,光是寫這樣是不行的
a + 5;
這樣代表的只是一個運算式,結果為 a+5 的值
實際上 a 本身的值是不變的。
當然我們可以寫成像是
a = a + 5;
這樣會先計算出 a + 5 的值,再放到 a 中,所以可以確實地改變 a 本身的值
但有更好的方法,就是 a += 5;
這樣就是把 a 自身的值再加上 5。
相同地,其它的運算符號 -, *, / 也都可以使用。
另外對於整數有較為特別的運算符號 %
它是除法,但不同的是運算結果並不是商,而是餘數
例如,10 % 3 會得到 1,因為 10 / 3 餘 1。
當然都可以用自運算,像是 a %= 3;
嗯,然後是更特別的自運算,++和--
這是專門使用來做加一和減一用的。
像是 a++; 就是讓 a 自身的值增加 1
另外有一種寫法是 ++a;
這兩種有何不同呢?a++ 是先取 a 的值做運算後,再將 a 自身的值 +1
++a 則是先將 a 自身的值 +1 再拿來做運算
例如
a = 2;
b = ++a;
這樣執行後結果為 a=3,b=3
若是
a = 2;
b = a++;
這樣就是 a=3,b=2
但要注意如果使用 ++ 或 -- 的變數出現太多次則牽扯到運算先後順序
為了避免出錯,應避免使用像是:
a = b++ + b;
諸如此類的東西。
一個運算式它的值通常是它的結果。
像是賦值的 a = 5; 也是有一個值的,就是 a 在做完這操作之後的值
也就是說,讓 b = (a = 10); 結果是先讓 a 變成 10,然後由於 a = 10 代表著 10
因此 b 也會變成 10。
請注意四則運算時直接寫它就會先乘除後加減。不過,也可以使用小括號自定順序
括號括起來的優先運算,但不管幾層都只用小括號,千萬別用中括號和大括號。
此外請注意 ^ 運算子並不是代表幾次方的意思。
補充:像 + 、 - 、 * …一類的就叫做運算子。
一般執行程式的時候,總是需要有點邏輯的判斷的
像是,如果使用者輸入的數字大過於 5 的話就怎樣,否則怎樣,…之類的
這時就要用到 if 了。
if 大概長得像這樣子:
if()
{
...
}
就是當if()中放的運算式的值不等於 0 的時候,就會執行大括號中的程式碼
通常只要是 0 就代表是 false,非零就代表 true
這裡介紹比較特別的運算,就是比較運算。
像是 a > 5 這種形式。
這種運算只會有兩種結果,0 和 1。
如果比較成立,運算後的結果就會是 1,否則則為 0。
比較運算子有以下幾種:
> 大於
< 小於
>= 大於等於
<= 小於等於
== 等於
!= 不等於
注意等於要用 == 才行,也就是兩個等於的符號寫在一起。
否則它會當作是賦值,又恰好賦值也算是一種運算式,因此也會有一個結果值
那麼這時就會搞不清楚要的是哪一種了,所以等於才要寫成這樣來辨識。
一個 if 可以配多個 else if 或是一個 else
像是這樣子
if()
{
}
else if()
{
}
else if()
{
}
...
else
{
}
當然 else if 和 else 都是非必要的,不需要時就可以不用寫。
else if 是當前面的 if 和 else if 通通不成立,且目前的 else if 成立時執行
else 則是只要前面的 if 和 else if 通通不成立時,無條件執行
另外有一種叫做 switch() 的
長得大概像這樣子
switch(i)
{
case 1:
printf("%s\n", "i==1");
break;
...
default:
....
}
判斷 switch() 中的運算式
如果相等於任一個 case 中寫的運算式,就會開始執行
請注意如果不加上 break 則會一直不斷地執行下去,不管是不是符合該 case
只要在此之後的全部都會執行。
default 裡面寫的是在所有 case 都不符合時執行。
此外也有一個特殊的,像是
A ? B : C;
其中 A、B、C 各代表一個運算式。
這東西的值為:如果運算式 A 的結果非零,則為運算式 B 的結果
否則為運算式 C 的結果。
比如說
a = 5;
b = a == 5 ? 10 : 20;
那麼最後 b 為 10。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/18 Thu 11:21:51
φ mp607 轉:到 [mp607] 看板,于 2007/10/18 Thu 12:27:32
φ UFO 轉:到 [UFO] 看板,于 2007/10/18 Thu 14:03:45
▲ sa072686 改@2007/10/20 Sat 21:18:05
▲ sa072686 改@2007/10/21 Sun 08:56:01
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/21 Sun 21:12:49
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:13:26
▲ sa072686 改@2007/10/26 Fri 10:34:56
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:45:51
作者: sa072686 at 07/10/17
當然,有時會希望某些程式碼一直重覆被執行。
這時就要用到 for 或 while 了。
for 大概長這樣:
for(A; B; C)
{
...
}
其中 A 區放 for 開始前要執行的程式碼
B 區放著 for 執行的條件。它在第一次執行前以及每次執行完,跑過 C 之後檢查
C 區放著每次執行完要做的運算。
一般常用的用法是:
for(i=0; i<10; i++)
{
...
}
這樣,就是讓它執行 10 次,一開始會將 i 設為 0
然後,由於 i < 10,所以就開始執行;每執行一次後會執行 i++ 再檢查 i<10
因此第一次跑完後 i = 1且 i < 10
第二次跑完後 i = 2 且 i < 10
所以會繼續跑,直到 i<10 不成立為止
while 比較簡單。只要 while() 中的運算式成立就會一直執行。長得像這樣
while()
{
...
}
這樣子。
另外有一種 do ... while 是長這樣子
do
{
...
}while();
和 while() 一樣,只是是每次執行後檢查
因此不論如何至少都會執行一次。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/18 Thu 11:22:03
φ mp607 轉:到 [mp607] 看板,于 2007/10/18 Thu 12:27:44
φ UFO 轉:到 [UFO] 看板,于 2007/10/18 Thu 14:04:00
▲ sa072686 改@2007/10/20 Sat 21:18:14
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:13:37
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:01
作者: sa072686 at 07/10/18
由於常常需要處理大筆大筆的資料,因此也需要能儲存龐大資料的方式
於是提供了一個簡單又方便的東西,叫做陣列
它是一連串連續的變數,它們共用同一個名字,只是分別被編上不同編號
因此可以透過指定編號的方式,來存取特定的一個變數
所以即使宣告一堆變數來儲存大量資料,也不會比陣列來得理想
舉個例,我們定義 a1、a2、a3 作為變數使用
如果直接宣告一個陣列 a[3] 則可使用 a[0]、a[1]、a[2]
那麼不是更方便嗎?這樣還可以用迴圈讀入大量資料
而不像定義一堆零散的變數,還沒有一個規則可以做連續的讀入大量資料。
定義陣列的方式很簡單,只要依一般宣告變數的方式,在其後加上[]
然後中間放宣告出來的陣列的長度,也就是元素個數即可
陣列中的每一個成員,都稱為元素。
注意宣告陣列時所能使用的只有常數,不能使用變數指定宣告的長度
例如,int a[10]; 是合法的
然而 int a[b]; 是不合法的。除非,將 b 定義為常數。
一般為了怕不夠用,通常會先預估最多需要多少,就一次宣告完
陣列的運用,就只要在陣列名後加上[n],n為指定的編號
這樣即可直接把編號 n 的元素當作一般變數使用
需注意的是,宣告時指定的是長度,可是編號是從 0 開始編的
故宣告長度 n 的情形下,事實上擁有的是從編號 0 到 n-1 的元素
講了這麼多,都只講到數字,也沒講到怎麼處理文字的部份
這裡要開始提字元的概念。首先要先提 ASCII 的概念
字元的儲存方式,其實很特別。不像我們所想像的那樣
是將一個個的字給儲存起來,取而代之是以一個編號來儲存
一個編號對應到一個字元,將編號儲存在變數中,即代表存著該字元。
而那個編號方式就叫做 ASCII,每個字元的編號叫做 ASCII 碼
是代表著它們的,唯一的編號。
比如說,A 的 ASCII 碼為 65,那麼將其存成字元格式時
事實上就存著它的 ASCII 碼,也就是 65。
字串就是以零或多個字元所組成,並且最後一個字元以 ASCII 碼為 0 者為區別
因此通常字串會以字元型態的陣列來呈現。
故字串儲存於字元陣列,但宣告字元陣列不代表宣告一個字串。
並且,若光只是在字元陣列中儲存許多字元,也不是一個字串
字串的定義是,從某個 char 型態的指標所指向的記憶體開始
直到找到 ASCII 碼為 0 為止
陣列便是以一個指標指向著這串連續的記憶體的起始位置。
例如,定義一字元陣列 char s[101];
那麼 s 便是一個指標,指向這擁有 101 個元素的陣列的記憶體起始位置
這個在講指標時,會再進一步介紹。
需特別注意的是,由於需要額外儲存一個 ASCII 碼 0 來作為字串的結尾
因此,通常在定義時會將陣列的長度宣告為字串最長長度再加 1。
舉個例,"ABC" 存成: 65 66 67 0
由於字串的這些特性,因此字串本身的像是串接、判斷相等之類的
甚至是賦值,都會被當作是指標對指標的運算
因此,它們都需要透過一些函式來做。這些函式多半放在 string.h 中
需要使用到它們的時候,別忘了載入它。
這些函式,常用者等等會一一介紹。
若我們需要很多個陣列時,怎麼辦?
比如說,若我們要表達一些資料,而這些資料每筆都各有一些詳細資料
像是血量、魔力、攻擊力、防禦力、…等等的。
這時,我們如果用一個陣列,第一格放血量,第二格放魔力,第三格放…
那麼對於每個人都要一個陣列,這樣沒辦法處理
但我們可依需求,將其宣告為二維陣列
還可以有三維、四維、…甚至是多維陣列都是可行的。
只要再在後面加上 [] 即可。例如欲宣告一二維陣列可寫作像是:
int a[10][10];
這樣子,就是有 10 個長度為 10 的陣列呢。更多維亦同理。
如此便可以 a[i][j] 代表第 i 個人的第 j 項資料了。
是不是很方便呢?
在這裡,其實也可以將二維陣列看作是一個每個元素都是一維陣列的陣列
同理,n 維陣列也可以看成是個所有元素都是 n-1 維陣列的陣列。
這兒所講的,是每個人的每項資料,型態都相同時,所使用的方式
如果不同時,後面提的一些技巧,以及結構(struct)可以解決這些問題。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/10/18 Thu 07:53:46
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/18 Thu 11:22:16
φ mp607 轉:到 [mp607] 看板,于 2007/10/18 Thu 12:28:07
φ UFO 轉:到 [UFO] 看板,于 2007/10/18 Thu 14:04:24
▲ sa072686 改@2007/10/20 Sat 21:18:21
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:13:46
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:08
φ winston1907 轉:到 [TFcis14] 看板,于 2011/11/02 Wed 14:32:28
作者: sa072686 at 07/10/18
延伸一下到目前為止的東西。
一般要能夠寫得又快又整齊,除了本身思考速度要快、打字要快
還有一點就是善用編輯器的功能。這點於此以 Dev C 講解
講一下編輯器常用的東西。
Ctrl + a => 全選
Ctrl + c => 複製
Ctrl + v => 貼上
Shift + Ctrl + u => 有反白到的列全部回復一個 tab
Shift + Ctrl + i => 有反白到的列全部內縮一個 tab
/* 注意:沒反白到的話,即使遊標所在的一列也不會作用到 */
Ctrl + f => 搜尋
Ctrl + r => 取代
Ctrl + y => 刪除整行
此外,亦可善用 home 鍵以利直接到行首,end 鍵直接到行末
按住 shift 時移動遊標則可以反白所移過去的範圍。
因此按住 shift 時按 home 或 end 鍵可做單行的快速大範圍選取。
最基本常用的就是這些。
此外亦有註解功能可以使用。
註解的用法是:用 /* 和 */ 所包圍起來的部份,就代表是註解
也就是說,這些內容是只給人看,而不用執行的東西
由於這個也可以在單行中開始與結束,因此亦可用作快速的單行修改
同時,也可以把一整片想暫時讓它消失,卻又可能需要再次使用的
例如等等提的檢查碼,就可以先註解掉,讓它失去功能
然後,需要用時也不用重打,直接把註解拿掉就可以了
這樣可以避免許多無謂的增刪程式碼,即可達到一樣的效果。
另有一註解在 C++ 才有,就是兩個除號寫在一起 //
這個只能夠註解掉它所在的那一行,從它開始往後的程式碼
因此不適用於需註解多行時,靈活性也比較弱
不過仍有用它較為方便的時候。這點要視情況而定。
善用這些小技巧,寫程式的時候也會比較快。
再來是 debug 的一些小技巧。
當出錯的時候,可以輸出一些相關的變數去檢查正確與否,再一步步尋找原因
若是執行階段錯誤,也可以使用一些特殊的程式碼,例如無窮迴圈
把程式碼限制在只執行到某一段,這樣可以縮小範圍,最後就會知道哪裡出事
常見的原因通常是邏輯上的,執行階段錯誤通常是因為記憶體的關係
但善用檢查碼,輸出一些相關的變數,並且善用註解讓它失效
又能在需要使用的時候不用重打,快速地恢復,這些都很能節省時間。
另外一個常見的錯誤,叫做 overflow
由於所有的變數都會有一個範圍,超過它所能儲存的數字大小時叫做 overflow
這種情況會使得數字變得很奇怪,就很容易導致各種錯誤
因此應小心避免。一般即使使用 int 也需要注意大小範圍限制
int 約能儲存到 2 * 10^9,也就是十位數,2^31 - 1。
詳細是 2147483647,這數字能記就記
常見的是答案在 int 範圍中,計算過程卻可能超過
這通常出現在計算過程需先乘後除之類的情形,請務必小心各種可能情形
另外也必須小心,不可以除以 0。想取除以 0 的餘數也是不行的。
接下來講一下關於變數的一些小細節。
首先是變數的命名,最好要有意義,這樣自己在看的時候會比較看得懂
當然,在做「取代」動作的時候,也會比較不易取代到一些其它的東西
這樣不僅利於 debug 時自己好知道到底寫了些什麼,看起來也比較整齊漂亮
此外應注意縮排。在大括號夾起來的部份最好將它們內縮一個 tab
這樣子看起來不僅比較好看,也利於 debug 時,較不易出錯
需要使用到大括號的 if、for 等等的,雖然也可以不加大括號
這樣的意思是,只對下一行有作用,也就是到分號為止,例如
if(a == 5) a += 10;
b++;
這樣不論 a 的值為何都只影響 a += 10 這裡,b++ 是不被影響的
因為它不是 if 中的一員。
那麼,這時建議是即使只有一行,也加上大括號,這樣子要再增加行數時方便
而且,看起來也比較清楚一點。
變數的運算還需要注意型態。一般兩個變數做運算時,會做隱藏的型態轉換
也就是說,當兩個變數運算時,最後出來的結果的型態視兩者哪個型態比較大而定
例如,一個 int 型態的變數和 char 型態的變數相加,結果會是 int 型態
但是請注意,如果兩個都是 char 型態,那麼出來也會是 char 型態
因此應注意會不會導致 overflow,也請注意當除法需要用到小數點以下時
由於 int 型態會將小數點以後的資訊直接捨棄掉,因此需注意
也可以做強制的型態轉換,方式是直接在變數前加上(型態)
比如說,a = (int)b + c;
這樣就會把 b 強制轉為 int 型態了。當然也需注意先後順序,例如
a = (double)(10 / 3);
這樣子寫,是小括號中的運算式轉成 double 型態,可是結果仍是 3 而非 3.333...
為什麼呢?因為,是在做完運算,得到 int 型態的 10 / 3 之後
才把這個結果轉為 double,因此小數點資訊早已失去了
這裡要稍微注意一下,以及運算的先後順序由於我們並不是很確定
因此,仍是小心為上。
另外有些常用的運算子,邏輯運算子和位元運算子
這些常用在邏輯上使用,以及對一個數做二進位制的位元運算時使用
邏輯運算子即 and、or 還有 not
&& 這是 and 的意思,a && b 成立當且僅當 a 與 b 同時成立
|| 這是 or 的意思,a || b 成立當且僅當 a 與 b 至少有一成立
! 這是 not 的意思,由於 not 只是把一個成立的東西轉成不成立
不成立的東西轉成成立,所以它只能對一個運算式生效,用法像是:
!(a && b)
這樣就是當 a && b 不成立時,!(a && b) 才會成立。
位元運算子則有
& and 運算子
| or 運算子
^ Xor 運算子
這些是把數用二進位方式表示時所做的運算。你可以直接對十進位數使用
將數字寫成二進位制
1010
0011
這兩個數若做 and 則得 0010
or 得 1011
Xor 得 1001
and 是當對齊的位元兩者皆為 1 時結果為 1,否則為 0
or 是當對齊的位元兩者至少其中之一為 1 時結果為 1,否則為 0
Xor 是當對齊的位元一者為 1,另一為 0 時成立,兩者相同時為 0
因此可得一表
& | 1 | 0
---------
1 | 1 | 0
---------
0 | 0 | 0
| | 1 | 0
---------
1 | 1 | 1
---------
0 | 1 | 0
^ | 1 | 0
---------
1 | 0 | 1
---------
0 | 1 | 0
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/18 Thu 11:22:33
φ mp607 轉:到 [mp607] 看板,于 2007/10/18 Thu 12:28:18
φ UFO 轉:到 [UFO] 看板,于 2007/10/18 Thu 14:04:41
▲ sa072686 改@2007/10/20 Sat 21:18:27
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:13:54
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:17
作者: sa072686 at 07/10/21
這裡談一下函數的觀念。
這東西其實長得很像數學中的函數,一樣是一個名字後面接著小括號
例如:function() 這樣子。然後一樣是會有一個回傳值
而它名字本身就代表著這函數經一定的程序運算後,所回傳的值
例如,我如果寫一個函數
int function()
{
return 10;
}
那麼以後碰到 function() 就代表它運算後回傳的值 10
所以,是可以把它當成變數看的。
C 已經內建了很多的函數,當然 C++ 更多一點。
它們都放在內建好的函式庫中,不過想使用就必須先載入才行
例如我們常用的 printf() 函數就宣告在 stdio.h 裡面。
當然,如果這些函數都不能滿足的話怎麼辦?
比如說,我希望有個函數它可以計算兩個數字的個位數字的和
那麼當然是找不到這種函數啦。正常的話,比較特別的需求是不會有任何程式語言
會內建在其中的。這時,我們就需要自定函數。
自定函數的方式和自定變數的方式很像,可是必須宣告在全域中,而不能在主函式中
當然啦,也可以宣告在主函式中,可是那只是為了讓主函式認得它,這等等提。
自定函數的例子:
int function(int p, int q)
{
return p%10 + q%10;
}
這就是一個例子,上述的取得兩數之個位數和的特殊需求。
它和定義主函數的方法一樣,事實上主函數也是函數之一
定義的方式是先宣告它的型態,再來是名字和小括號,小括號中放著它的參數
接著大括號中就是當它被呼叫時,要執行的程式碼。
然後,要給它一個回傳值以回傳運算出來的結果。
由於它會被視為是一個數值,型態視宣告方式而定,故回傳的值的型態需與宣告一致
例如我們宣告它為 int 型態,就必須回傳 int 型態的數
參數,可有可無,主要是影響運算時的一些細節
例如我們這個特殊的函數,就需要知道我們要計算的兩個數是多少
因此就需要將這兩個數當作參數傳進去,這樣才知道要計算的一些詳細數據
參數宣告時就依照第一個、第二個、第三個、…這樣子宣告,以逗號分隔之
對於每一個,就是宣告存放其參數的型態以及變數名
也就是,宣告一個型態適合的變數來存放該參數。
呼叫的時候寫出它的名字和所需參數就可以了,像這樣
function(10, 21);
這樣,就會得到結果 1。
理所當然地,我們在使用它的時候如果需要用到很多次,傳的又是一樣的參數
那麼建議把它用變數給暫存起來,否則每次叫到它的名字它就必須老實地執行一次。
在函數中也可以宣告一些變數來使用。不過有時會發生如下的情形:
#include <stdio.h>
int sum()
{
return a + b;
}
int main()
{
int a=5, b=6;
printf("%d\n", sum());
return 0;
}
這樣會產生編譯上的錯誤。它會說不認得 a 和 b。
為什麼呢?a 和 b 不是早定義好了嗎?
可是我們將 a 和 b 定義在主函數中了。
或許會想說,也是先執行主函數,再執行 sum 函數的,是宣告過了沒錯
這裡講一下變數的作用範圍的概念。
宣告在函數中的變數,是所謂的區域變數,它只能夠被使用在它所存在的函數中
因此目前 a 和 b 都是宣告在主函數中,當然不能夠被 sum 函數所使用啦。
或許會說有區域變數,那是否有全域變數?有的。
定義在函數外的,不屬於任何函數,也就是全域變數
它們可作用於任何一個函數中,而不受到限制。
那麼或許會有個疑問,全域變數大家都能用,那很好啊。
要區域變數做什麼?全都宣告為全域變數就好啦。
不過全域變數正因為大家都能用,因此被誤動到的機會比較大
且撞名之類的烏龍事件也常發生,所以比較危險;有時也不利於遞迴函數的撰寫
何謂遞迴函數將在以後提到。
但區域變數作用範圍小有時也不是好事,總之各有優劣之處
如何靈活地運用它們的特性做出最適當的搭配,就是寫程式的人的工作啦
另外,區域變數是可以在不同作用範圍存在同名變數的呢
只要作用範圍不重疊,都是可以重覆的。
接著提一下一種比較特別的型態,就是 void
使用 void 型態宣告的函數並不具有回傳值,只是單純做某些運算
嗯,有時會發生一種情形,就是明明函數宣告了,卻找不到?
例如:
#include <stdio.h>
int sum(int a, int b)
{
return ab(a) + ab(b);
}
int ab(int a)
{
if(a < 0)
{
return -a;
}
return a;
}
int main()
{
printf("%d\n", sum(-5, 20));
return 0;
}
這樣子會說 ab 函數並未宣告。可是明明宣告了呀?
原因在於,每個函數都只認得在它之前宣告的函數。
ab 宣告在 sum 底下,因此 ab 知道有 sum,可是 sum 不知道有 ab
這也是大部份的程式碼,主函數都放在最底下的原因之一
這時如果我們需要它認得,怎麼做?我們就告訴它有這函數,也就可以了
#include <stdio.h>
int ab();
int sum(int a, int b)
{
return ab(a) + ab(b);
}
int ab(int a)
{
if(a < 0)
{
return -a;
}
return a;
}
int main()
{
printf("%d\n", sum(-5, 20));
return 0;
}
這樣子,sum 就會知道還有一個 ab 函數了。當然宣告在函數中也是可以的
嗯,如果你只想告訴它的話可以這麼做。
不過請注意,函數並沒有辦法傳一個陣列的值當作參考
最多可以傳址而已,傳址的概念等以後講過指標後,再來學會比較合適。
以下介紹幾種常見函數。字串的函數前面已經提過,這裡就不再贅述。
stdlib.h:
qsort(); 可對於陣列做快速排序,不過比較特殊,還要寫比對式,以後會再提
atoi(); 對於一個字串,會回傳它轉回整數後的數值,回傳值為 int 型態
abs(); 取得一個整數的絕對值
atoi() 是個很方便的函數。例如 atoi("12321"); 它就會回傳 12321
這時會想說如果隨便給它一個不是十進位整數的字串,比如說 "abc" 會如何?
這個就留待各位去嘗試啦。畢竟那不是需要用到它的地方,比較不那麼重要。
這裡也順便提一下如果忘了它時怎麼辦。
比如說想將 "11557" 從字串轉回整數型態,那麼怎麼做呢?
這時我們想到它代表著 10000 + 1000 + 500 + 50 + 7
也就是,11550 + 7
11550 怎麼來?1150 + 5,之後乘以10
1150 怎麼來?110 + 5,之後乘以10
…
每次都把它和個位數分離,得到一個 10 的某倍數
而這 10 的某倍數,又可看成是在個位數前的數乘以 10 的結果
所以求 "11557" 可先求得 1155,乘以 10 再加上 7
對於 1155 又可做相同處理,115 乘以 10 再加上 5
…
因此,對於 "11557" 我們先求 "1" 再將其乘以10 求 "11",
再求 "115",再求 "1155",再來得到 "11557"
依此類推,則得到:
設一個存放結果的變數 n,然後從第一個字元開始處理
每次將變數 n 乘以 10,再加上該字元所代表的數字
這樣逐步處理,即可得到與 atoi 相同的結果了。
接著是我比較不熟悉的,數學方面的函數
math.h:
sqrt() 開根號,參數與回傳值型態皆為 double
pow() 傳入參數 i 和 j,回傳 i^j。型態皆為 double,故拿來開 n 次方亦可
log() 取自然對數之值
log2() 取以二為底之對數之值
log10() 取以十為底之對數之值
sin() 取 sin 的值,不過輸入不能用角度制,要用弧度
cos() 同上,不過是取 cos
這裡比較常用的就前兩個了。因此各舉個例子:
n = sqrt((double)123);
這樣,是對 123 開根號。
n = pow(2, 10);
這樣,是取得 2 的 10 次方。
當然也可以拿來開 n 次方,例如…
n = pow(1024, 1.0/10.0);
這樣,就是對 1024 做 1/10 次方,即開十次方根的意思
ACM 113 就可以用這函數來解。
此外,再提一個較常用的東西,那就是如何求得圓週率的準確值
pi = 2.0 * acos(0.0);
這個,就先記下來就可以了。
常用函數大致上就這些。
善用函數,可以避免做許多重覆的運算,同時也會讓程式碼更清楚、更好理解
例如我們要求 2 的 n 次方時,寫出
a = pow(2, n);
和
for(i=0, a=1; i<n; i++)
{
a *= 2;
}
是不是前者比較直觀呢?況且如果同一份程式碼中有許多地方都需要用到相同的計算
那麼各寫一次是不是比較冗長又麻煩呢?
不如使用函數,這樣也可以避免萬一發現寫錯時,每個地方都要修改
只要把函數內的運算改掉,所有運用相同運算函數的地方也就跟著改好了
因此善用函數不僅寫出來的程式碼會較為簡潔、易懂外,也較易於維護
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/10/21 Sun 09:07:58
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/21 Sun 21:13:00
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:14:00
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:24
作者: sa072686 at 07/10/21
第一、二、六篇修改過
請轉走的人注意一下XD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/10/21
11317 GCD+LCM
給你一個數N(1<N<=1000000),我們定義
G = Π{Π{ GCD(i,j) } (j=i+1…N) } (i=1…N-1)
L = Π{Π{ LCM(i,j) } (j=i+1…N) } (i=1…N-1)
一般來說,我們以10當做進位制的底,現在
若我們把1古戈爾(10^100)當做進位制的底,
給你N,問G和L各是幾位數?
<Hint E>
想要算位數,可以用log
先調整一下i,j的範圍,就可以把內層的Π值建表
至於計算方法...可以試著觀察一些較小的數據,與分解式相關
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-139.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 07/10/21
11319 Stupid Sequence
給你一個有1500個數的數列A(x),每個數保證可以用C/C++的 unsigned long long 儲存
問是否存在一個6次多項式f(x)使得 f(x)=A(x) (1<=x<=1500)
並且f(x)的第i次項的係數ai,需有0<=ai<=1000
如果存在,請輸出ai(0<=i<=6)
//應該說是tfcis入社考推函式題的1,2,3,4,787的強化版本..
<Hint E>
利用A(1)~A(7)解出多項式(用構造的吧:P),再判斷是否符合
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-139.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 07/10/21
11321 Sort! Sort!! And Sort!!!
給你N,M和N個數字,依照下述方法排序
比較兩數x,y,如果某個條件無法比較,則再以下一個條件比較
1.如果x%M<y%M,則x排在y前
2.如果x,y一奇一偶,奇數者排在偶數者前
3.如果x,y皆奇數,則較大者排在前面
如果x,y皆偶數,則較小者排在前面
依原題目格式輸出排序後的結果
<Hint E>
如果WA了,小心有沒有溢位的可能
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-139.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ Tommy 推:有一種白爛題的感覺... 1021 12:21
→ seanwu 推:不過contest的時候AC率頗低.. 1021 14:36
→ seanwu 說:比賽開始的前一個小時,judge頁是整面的prob E WA XD 1021 14:38
→ Robin 推:我也WA了@@ 你的規則有打錯喔,皆為偶數是較小者在前面 1022 17:13
▲ seanwu 改@2007/10/22 Mon 19:38:22
→ seanwu 推:抱歉我改一下 @@ 1022 19:38
→ Tommy 推:哇哈哈~我AC了XD 1023 13:04
作者: sa072686 at 07/10/21
補充一下輸出的格式。
有些特殊的格式,是可以直接做靠右對齊以及補齊空白的動作的。
例如整數的話,使用 %2d 這樣子的格式,則可以靠右對齊,並只輸出兩位
如果不足,會以空白補齊;長度就看數字而定。
另外有個比較特殊的 %02d 是以 0 補齊不足的位數,而非空白
這像見於時間的表示,例如 %02d:%02d
此外,浮點數也有限定小數點精確度的方式
%.3lf 像這樣是小數點後輸出四捨五入到第三位的結果,請注意是四捨五入
如果想要它不輸出多餘的小數點以後的數,可以使用 %g
不過如果超過六位,就會限制在 6 位;一定大小以上或以下會換成科學記號表示
%10.3lf 像這樣子寫則是限定輸出 10 位,小數點以後到第三位,注意包含小數點
也就是說,是包含小數點算起來長度 10
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/21 Sun 21:14:01
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:14:10
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:31
作者: sa072686 at 07/10/21
嗯,可以算是排列組合的題目。
不是說很好解決,常常會亂掉。
---- 分隔線 ----
嗯,它排序的第一個依據是,看成將 i 個 1 放在一堆的 0 裡面
則視 i 的大小排序,故有著相同 i 者會擺在一起,且 i 呈遞增狀態
則先決定 i 之數量,再決定排列方式較好處理。
除了 0 一定是 i=0 外,其餘情況皆可視為在 30 個 0 中任取 i 個改為 1
因此需要使用到 C n取m,故先建立一張表使用
先搜尋看看 i 值的範圍掉在哪裡,也就是看是 30 取 i 剛好在 n 個上下
決定 i 值後,再來看它是怎麼排的。
不難發現,排著 i 個並且最左邊掉在 m 的位置的情形
總共有 m-1 取 i-1 的情形,依此遞迴下去求解
舉個例,以 sample input 的 35 來說好了
首先判斷它有幾個 i。
30 取 1 總共有 30 種狀況,分別是 1 到 31
因此從 32 起皆為 i=2 的情形,而 30 取 2 又太大
可知 n=35 時 i=2。
減去 31 之後得到 4,也就是 30 取 2 中的第 4 種排列法。
枚舉看看,2 取 2 有 1 種排法,3 取 2 則有 3 種,4 取 2 則有 6 種
所以知其必是 4 取 2 的其中一種情形,所以第 4 格必為 1。
扣去 3 取 2 的方法 3 種後,只剩下一種,也就是 3 取 1 的第一種排列法
可知 1 取 1 有 1 種排法,故就是 1 取 1 啦。第 1 格必為 1。
故得 2^0 + 2^3 = 9
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/22
嗯,好題號…
不知道暴力亂做會怎麼樣?八成是 TLE 吧,之前好像傳過
嗯,然後排序排反炸掉一次…真該檢討|||
嗯,翻譯一下…不好意思之前忘了(汗)
給你一個字典(最多 100000 個單字)
然後最多玩一千次,每次玩都會有最多十張字母卡
這十張字母卡各有一字母及一分數,並且相同字母可以有不同分數
求能組合出來的最大分數?分數為各字母卡之分數和,且必為字典中存在的字
---- 分隔線 ----
用 trie 建表然後遍歷就過了(茶)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:現在流行只有解答沒有翻譯嗎 -___- 1022 08:23
→ sa072686 推:忘了嘛…現在補上… 1022 11:17
▲ sa072686 改@2007/10/22 Mon 11:20:53
作者: sa072686 at 07/10/22
很簡單的一題,不知道四星怎麼來的?
好啦,是很容易 re 沒錯…注意它說 l1 和 l2 有可能高達 1000
---- 分隔線 ----
歡樂找零 DP 啊。四星看不太出來耶?
首先湊所有可能,不過它有限制硬幣個數多寡
因此,必須增加一維使得狀態呈 dp[i][j] 為使用 j 個硬幣湊 i 的方法數
如此,再依需要加總各硬幣數即可
如果想再加快,還可以預先在計算出答案後加總它們使狀態呈
dp[i][j] 表使用最多 j 個硬幣湊 i 的方法數
這樣對於所有詢問都可於 O(1) 的時間回答,而不必花 O(n) 的時間計算加總
不過建表是 O(n^3) 針對加速詢問要做的預處理 O(n^2)
所以這東西應該沒差多少才是,嗯…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/10/22
其實也不難解。雖然有點數學,不過是數學中常見的題型。
---- 分隔線 ----
用很基本的方式,也就是數學中碰到它的解決方式就可以解決掉它。
也就是排容原理。
只是湊排容時可能用 dfs 輔助去湊所有組合會比較好。
至於求一堆數字的 lcm 時其實也不難
雖然這樣看似無法使用 a*b = gcd(a,b)*lcm(a,b) 這方便的公式
反正已知 lcm 要三數中每個質因數出現最多次者
那麼,要找到最多次的就是去兩兩比較出最多次的
也就和一般,給一堆數要找出最大值一樣,用目前最大的與所有數逐一比較
那麼只需要比較 n-1 次。同理兩數之 lcm 已包含兩數所有質因數多最多次者
因此,取此兩數之 lcm 與第三數做 lcm 即可得此三數之 lcm
那麼,每次都是兩兩做 lcm 故可使用上述之公式沒有問題。
這樣就可以解了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ seanwu 推:lcm(a,b) = ab/gcd(a,b) 1022 19:55
→ seanwu 說:lcm(a,b,c) = lcm(a,lcm(b,c)) 1022 19:55
→ seanwu 說:噢沒事, 我漏看了 1022 20:06
→ sa072686 推:先除是好習慣(點頭) 1022 21:53
作者: sa072686 at 07/10/22
嗯,不太好想的一題。
然後還因為大數進位進錯,炸了很久 |||
我好像花了快兩節課才寫完…
開大數大絕還跑很出很慢的秒數,看來不是個好方法(汗)
嗯,還請板上的高手們不吝賜教啦。
---- 分隔線 ----
使用 O(nk) 的 DP 先求出所有的連續不到 k 個的方法數
再用 2^n 去做大數減法扣回來
因為尾巴的狀態比較重要,加上 H 之後要不超過 k 個
DP[i][j] 記錄 i 個字母中尾巴連續 j 個 H 的方法數
然後對於 DP[i][j] 可得一狀態轉移方式:
若 j 為 0,則可由上一次的任一組解加上 T 得來,故為上一層方法數之和
其它情形,則可由上一次的 j-1 個 T 加上一個 T 而來
如此,若限制 j < k 則過程中便不會出現連續至少 k 個 T 出現
則 sum(DP[n][i]),i=0~k-1 為不出現至少連續 k 個 T 的所有情形
因為,所有情形都被尾巴的 T 的個數分開了,所以必不重覆。
加上大數,此法為 O(nkm),若極限優化大數的話
則 2^100 的 m 也只到 4 左右,故 m 幾乎可以被忽略不計
0.400 sec
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/10/22
嗯,看似簡單可是不好處理…
怎麼說呢,討論板說使用 log 會出事,誤差吧。
直接 brute force 則很難通過這組測資
9999 5000 9999 5256
正解
521350.34067
通常會跑出 0。以下將討論板的解法轉過來,感謝討論板的強者們。
---- 分隔線 ----
將其化作科學記號的形式,即可防止數太小變成 0.0 之類的情形
方法是將其維持在 1.0 到 10.0 之間,然後記下 10 的次方數
例如 9999 可將其化為 9.999 然後記下 3 次方,以後再乘回來
0.999 可將其記為 9.99 然後記下 1 次方,以後再除回來
這樣,還可以把次方數消掉一些。不確定有沒有浮點數誤差
我是加 0.0000001 wa 掉後加 0.00000003 AC 掉。
方法不同,可能需求也不同;不同寫法用一樣的數字未必適合唷。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/22
嗯,不是說很好解的一題…
大數吧。討論板提了一些技巧呢。
再次感謝討論板上的強者們。
---- 分隔線 ----
嗯,我的方法比較暴力一點…
平方之後,光看個位數就只剩 5、6、1 和 0 有可能相同;但 1 和 0 不是解
除了這些以外,擁有開頭 0 的 1 和 0 也不是解
其它也不可能是解,所以只剩個位數 5 和 6 的情形了。
這時直接暴力平方下去也行,做預處理也行
討論板說可以做預處理,例如從 5 開始
測試 05、15、25、…、95,然後在找到解 25 之後跳出,再以它為後綴繼續枚舉
025、125、…、925,找到解 625 之後跳出,再以它為後綴繼續枚舉,…
最後可得到一個長度 2000 的字串,若輸入為其後綴則為解,否則則非。
嗯,我是先判斷個位數,再暴力平方測試的。
縮了 4 位還 0.470
預處理沒實作過,不知道時間上如何
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/23
嗯。這裡提供另解…
---- 分隔線 ----
數字會大到 2^63 - 1,故不可能建表求之…
但可以抓循環…只要建表到循環出現即可。之後將 n 對循環長度做取餘
即可得解。
至於為何一定有循環且一定是回到一開始的 1 1 我也不太清楚。
還請高手們不吝賜教。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
→ seanwu 推:做矩陣變換, 反矩陣存在且唯一 ==> 無分枝, 故為簡單循環 1023 12:37
→ sa072686 推:看不懂||| 算了,應該是需要某些數學基礎… 1023 12:52
→ seanwu 推:當然看不懂...因為我發現一樓搞笑了.. 1023 20:11
→ seanwu 說:無分枝不題這樣解釋的... 1023 20:12
→ seanwu 說: 是 1023 20:13
作者: sa072686 at 07/10/23
嗯,有點麻煩的一題。
我直接暴力建表做了…0.830,不是很好看的秒數
應該有更好的方法,還請各位高手不吝賜教…
---- 分隔線 ----
嗯。直接硬做,然後用一張夠大的表判斷重覆。
硬做時每次都去試除兩倍邊長取餘,這樣可判斷所在地的顏色
如果取餘結果與之前相同,代表接下來會重覆,故一輩子也跳不到白色格子。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: seanwu at 07/10/23
10603 Fill
有三個水桶的容量分別為 a,b,c, 初始時a,b是空的, c是滿的
你可以把任何一個水桶x的水倒往另一個水桶y, 直到x為空或者y被裝滿
給你一個目標水量d, 問有沒有可能倒出這個水量,
並且在倒水的過程中, 所轉移的水量總和最小是多少?
如果d不可能做得出來, 請改以小於d但最接近d的可行水量當做目標水量
請輸出最小轉移水量總和及目標水量
(例如: 2 6 6 5 , 5是做不出來的, 而最接近5的可行水量是4, 故輸出 2 4)
<Hint E>
這個問題等同做最短路徑..用任何有效的最短路算法就可以了
另外目標水量 d必須可以被表為 a,b,c的線性組合才有解
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.6.104 (台狼一中)
→ sa072686 推:嗯?lucky 貓有翻啊? 1023 15:42
→ seanwu 推:噢.. 1023 16:13
作者: tong20212 at 07/10/23
#include <cstdlib>
#include <iostream>
using namespace std;
int f91(int n)
{
if(n>=101){
return n-10;
}
else{
return f91(f91(n+11));
}
}
int main(int argc, char *argv[])
{
int a;
cout<<"請輸入一個值<=1000000"<<endl;
cin>>a;
if(a!= 0)
{
cout<<f91(a)<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
老實說這邊電腦實在是蠻濫的XD
切換視窗都怪怪的Orz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by tong20212 from 210.60.36.103 (台狼兩中)
▲ tong20212 改@2007/10/23 Tue 16:37:15
▲ tong20212 改@2007/10/23 Tue 17:02:04
→ seanwu 推:看起來很正常...? 1023 18:21
→ tong20212 推:很顯然是看起來阿= = 1024 10:54
作者: zenixls2 at 07/10/23
#include<iostream>
using namespace std;
int t[1002][1002]={0};
main()
{
int n;
while(cin>>n)
{
int DF[1001]={0},BF[1001]={0},i,DF_layer[1001],layer=0,j,k;
for(i=0;i<n;i++)cin>>BF[i];
for(i=0;i<n;i++)cin>>DF[i];
for(i=0;i<=n;i++){t[i][1]=0;DF_layer[i]=-1;t[i][0]=0;}//清空
t[BF[0]][1]=BF[1];
DF_layer[0]=0;
layer++;
t[BF[0]][2]=0;
t[BF[0]][0]++;
DF_layer[1]=layer;
for(i=2;i<n;i++)
{
for(j=0;j<n;j++)
{
if(BF[i-1]==DF[j])
{
bool f=0;
for(k=j+1;k<n;k++)
{
if(BF[i]==DF[k])
{
for(int x=k-1;x>=0;x--)
{
if(DF_layer[x]==layer-1)
{
DF_layer[k]=layer;
t[DF[x]][t[DF[x]][0]+1]=BF[i];
t[DF[x]][t[DF[x]][0]+2]=0;//清空
t[DF[x]][0]++;
break;
}
}
f=1;break;
}
}
if(f==0)
{
layer++;
for(k=0;k<j;k++)if(DF[k]==BF[i])break;
for(int x=k;x>=0;x--)
{
if(DF_layer[x]==layer-1)
{
DF_layer[k]=layer;
t[DF[x]][t[DF[x]][0]+1]=BF[i];
t[DF[x]][t[DF[x]][0]+2]=0;//清空
t[DF[x]][0]++;
break;
}
}
}
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;t[i][j]>0;j++)for(k=2;t[i][k]>0;k++)if(t[i][k]<t[i][k-1]){int
a=t[i][k];t[i][k]=t[i][k-1];t[i][k-1]=a;};
}//bubble sort
for(i=1;i<=n;i++)
{
cout<<i<<":";
for(j=1;t[i][j]>0;j++)cout<<" "<<t[i][j];
cout<<"\n";
}//輸出
}
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 192.168.6.119 (台狼一中)
→ zenixls2 推:抱歉,code太醜了 1023 17:17
→ Tommy 推:為什麼看起來大家都會= =a 我這題想了好久都想不出來= = 1023 18:21
→ Tommy 推:而且luckycat還翻成2星題耶... 難道我真的太弱了嗎? 1023 18:22
→ Tommy 推:為什麼你不寫cout<<endl 要寫 cout<<"\n" 呀= = 1023 18:27
→ sa072686 推:傳說中的屬性相剋?(誤) 1023 18:31
→ zenixls2 推:我是兩者交相使用的,依我的使用法則,這次是例外 1024 11:11
→ zenixls2 說:還有,我附近都是寫C的,所以我的C++就C化了.... 1024 11:13
作者: sa072686 at 07/10/23
新翻的二星題。因為一個很腦殘的地方,看了很久(汗)
不過又跑慢了…囧rz
---- 分隔線 ----
使用 DP,狀態 DP[i][j] 為第 i 次轉換時 j 字元個數
這樣一來,透過上一層的某特定字元個數,便可得知能換得多少某些字元
大概建表時,沒建鏈表所以慢很大吧(汗)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/23
嗯。不難寫的 DP 題。
是 104 的加強版呢。一樣是匯率轉換。
翻譯一下
有 n(n<=30)種錢幣以及 m 種轉換,和轉換的比例是多少,轉換是單向
問有沒有可能有種錢幣可以轉到其它錢幣再轉回來,可以賺錢的(比例 > 1)
---- 分隔線 ----
用 n^4 的 DP 硬上了,0.100 sec
首先要繞回自己,所以要知道從誰開始
另外要知道轉換方向,所以要知道目前換到誰
再加上目前總共換了幾次,總共是三維的狀態
這樣可確實消除後效性,一樣的轉換次數,一樣從某種錢幣轉到某種錢幣
只要保留最佳者即可
用 DP[i][j][k] 代表從錢幣 i 轉到錢幣 j 中間共轉換 k 次後最佳比例
則可得狀態轉移方程 DP[i][j][k] = max(DP[i][n][k-1] * arb[n][j])
注意當且僅當 DP[i][n][k-1] 有解且能從 n 轉換到 j 才行。
對於 n^3 種狀態,每種要枚舉 n 種可能,所以是 n^4
就 n <= 30 來講,最差情形為 30^4 = 81萬,足夠了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/24
嗯很好,re 了十幾次後發現是很白痴的原因。
翻譯一下。
一對字或片語為 anagram 的充要條件為兩者擁有的字母相同,但順序隨意
輸入最多有一百列,每列一個單字或片語,試求出每一對 anagram 並依字典順序輸出
並且每一對 anagram 必須先輸出字典順序小者,且一對只輸出一次。
---- 分隔線 ----
很好做的一題。首先針對擁有的字母做 union set 湊在一起
然後再對每一個 union 去做字典順序排列,以便求出所有配對又符合小者在前
注意這樣最多會湊出 n^2 對
由於輸出要依字典順序,故可用 sprintf 輸出到字串中,再排序之
有個 union set 和字典順序排列一起做的速解,就是用 qsort 直接湊 union set
把字母數量當成 ascii 碼來存,列成一個字串後對其做字典順序排列
若字典順序相同者表示在同一 union 中,這時再對原字串做字典順序排列
如此一次排序即可完成所有動作,接著枚舉 n^2 種可能
枚舉時往下找,若發現有一者非同 union(即字串比對不相等)則跳出
最後再將所有結果做字典順序排列,就可以了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/24
http://www.tcgs.tc.edu.tw/%7Esagit/luckycat/
感謝大強者彼得 >////<
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/10/24
不難寫的一題。看似困難,不過其實…嗯。
翻譯一下。
有種遊戲是在 n^2 大小的棋盤上玩的。
一開始棋盤上是空的,每回合可以從棋盤上放下或拿走一個棋子
如果某一回合,有人使得這局棋之前出現過的盤面重覆出現,就是輸了
注意如果是經過 90 度或 180 度的翻轉後相同的話也算
如果走了 2n 步之後仍未分出勝負,表示平手。
輸入一定會給這局棋的 2n 步,即使有些是在分出勝負後才下的。
---- 分隔線 ----
別嚇到了,根本不是 game 類型的題目,只是給你 2n 步然後實際模擬並判斷罷了。
請注意不要分出勝負後就把輸入 cut 掉…
其它暴力做的話,n <= 50,故最多 100 步,每步最多 4 種情形
那麼即使循序搜尋,最差也不過 (4n)^2 次的比較,不過每次比較最差 2500 次
這樣至多 1600 * 2500 次比較。也只不過 400 萬次,應該還能接受。
我用二分搜尋樹,搜尋次數比較少了一點,不過應該不是必要…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
→ DJWS 推:十六格只有黑與白,共2^16種狀態。 0908 15:14
→ DJWS 推:抱歉看錯題目了 @@" 上面那句當我沒說過∼ 0908 15:56
作者: seanwu at 07/10/24
球主說那是 2-sat
嗯, 這篇是從OIBH的FTP站找到的,不過速度很慢, 我把它抓下來後放這邊
http://www.badongo.com/file/4828720
另外, 這題爆搜是會過的, 不過95年全國賽滿漢全席那題(一模一樣)不知道會不會過
嗯, 以上
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.13 (台狼一中桑靈餓)
→ Robin 推:95全國那題,爆搜會過 1024 13:56
→ seanwu 推:噢, 全國那題最大的測資是幾個評審? 1024 18:20
→ suhorng 推:都只有到15 ~ 0330 18:15
作者: sa072686 at 07/10/24
壞掉了不能傳…剛寫好說(汗)
所以還不知道會不會過,不過大概懂意思了…翻譯一下,題意不太好了解
n 個學生排隊領錢,每個學生可以領 40 元,並且他們都有一張電子卡
上面自動記錄著領到的總金額,故無法領超過 40 元
因此,他們領到 40 元之後就會走掉,如果還沒領夠 40 元就會到隊伍中最後一個
重新再排一次。
那台機器很詭異,它裝了很多很多一元,並且只在掉出來的錢被拿完時才會再掉。
第一次會掉 1 元,第二次掉 2 元,…,第 n 次掉 n 元
但有個限制,每天最多只掉 k 次,每過一天後就會再從 1 元開始
並且每個學生都被限制即使掉了足夠的錢,也只能拿到加上先前的總和 40 元
而剩下的就給下一位學生拿,拿完再掉,如此反覆,問學生離隊先後順序?
學生的編號以第一次排隊時,在隊伍中的位置來決定。
---- 分隔線 ----
嗯。模擬即可,只是題目講得有點詭異。
首先注意機器每天最多掉 k 次,第 i 次掉 i 元。
然後掉出來的錢,學生最多只能拿到加上之前拿過的恰 40 元
例如他之前拿了 39 元,現在掉出 10 元,他也只能拿 1 元
可是因為機器中還有錢的話就不會再掉,所以即使 k > 10,機器也不會再掉 11 元
讓它湊 9 + 11 = 20 元給下一位學生拿,反之下一位只能拿剩下的 9 元
之後機器才會再掉 11 元,給再下一位學生拿
模擬的時候注意一下這個就可以了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
→ sa072686 推:嗯好,AC掉了。 1024 11:29
作者: sa072686 at 07/10/24
嗯,之前提過可以利用多維的陣列來儲存型態相同的許多訊息
如果型態不同的話,就可以使用結構來做。
struct data
{
...
};
這樣子可以定義一個結構叫做 data。
請注意,大括號結束的地方一定要加上一個分號。它常常被忽略,請小心
裡面可以放各種型態的東西,例如可以定義成這樣:
struct person
{
char name[101];
int age, height, weight;
double bmi;
};
這樣,可以把很多不同型態的東西都放在一起,成為一個新的東西
在使用的時候和一般的變數型態一樣。
struct person classmate[46];
像這樣就是定義一個型態為 struct person 的長度 46 名為 classmate 的陣列
想必會有個很大的疑問,struct 藏了這麼多東西在裡面,要怎麼用?
加個 . 再加上成員名稱就可以了。例如:
struct person sa;
strcpy(sa.name, "sa072686");
sa.age = 17;
sa.height = 2147483647;
sa.weight = -2147483648;
...
諸如此類的。可以完全視為是該成員型態的變數來使用。
這樣,就可以不必把不同型態的資料給分散到不同的一維陣列去了。
不過結構有個小缺點,它的大小會湊 4 的倍數,所以有時會造成空間的浪費
同時,結構陣列的宣告速度也不快。
不同的放法與不同的編譯器也都可能造成結構的大小不一樣
因此,使用 sizeof(struct person) 一類的寫法,取得它的大小才安全
並不一定是只要把所有成員的大小相加,這麼單純
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:14:17
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:38
作者: sa072686 at 07/10/24
接著要談談一個很特殊的變數型態,叫做指標
指標有很多種。每種變數型態,都會有一種屬於它的指標
比如說有 int 型態就會有 int 型態的指標
指標裡面存放的東西很特別,是存放某個記憶體的位址
位址為何不太重要,除非對電腦內部運作相當熟悉,否則應該是看不懂的
透過指標,可以直接存取某個記憶體位置,或是得知某些一連串記憶體的起始位置
指標的宣告方式為
int *ptr;
像這樣子,在宣告時在變數名前加上一個 * 號,就可以將其宣告為某型態的指標
不過要注意的是,像是:
int* a;
雖然也可以將 a 宣告為 int 型態的指標,可是
int* a, b;
這樣子只有 a 是被宣告為指標,b 只是一般 int 型態的變數
因此,要寫作
int *a, *b;
才能夠把 a 和 b 都宣告成 int 型態的指標
由於它存的是一個記憶體位置,因此隨便將它指定一個不是記憶體位置的東西
會有點危險,萬一透過指標存取某記憶體時,剛好該記憶體不能被使用的話
那麼程式就會出現錯誤,然後關閉
我們可以把它指向某個記憶體位置,例如:
int* ptr, a;
ptr = &a;
這樣就可以把 ptr 指到變數 a 所在的記憶體位置
這時,可以直接改變它的值,例如:
*ptr = 10;
在指標前加上 * 就可以直接對它所指向的記憶體位置做存取的動作
例如,上面這個例子,*ptr 和 a 是完全一樣的意思
那麼,有時我們還不想讓指標指向什麼時,怎麼辦呢?
讓它隨便指向一個地方,認定為沒有指向任何東西的話
萬一我們要指的地方剛好就是被認為沒有指向任何地方時怎麼辦呢?
用個完全不可能存在的地方,就可以避免掉這個可能的錯誤
ptr = NULL;
NULL 的值其實就是 0。以後可以將不想指向任何地方的指標指到 NULL
這樣子,就可以方便判斷一個指標是否有指向什麼地方。
有了指標的概念,現在就可以解釋為什麼 scanf() 要在變數名前加上 & 了。
由於如果用傳值的方式,那麼我們只能夠把變數中存放的值傳進去
並且在函數中使用,可是卻沒辦法改變該變數的值
一般函數如果寫成這樣
int function(int temp)
{
....
}
int num;
function(num);
那麼就只是把 num 變數的值傳進函數中的 temp 變數中
卻沒有辦法改動到 num 的值,但如果傳的是址,就可以直接更動了
至於 printf() 為什麼不用加,那是因為我們只需要印出我們所想要的值
因此,只要知道值就可以了。
剛提到指標也用於指向一連串記憶體的開頭位置
也就是說,陣列其實就只是用一個指標指向一個陣列的起始位置
然後往後移指定的位置,陣列其實就是這樣子。
指標是可以直接對其值做加減的,意思是把指標所指向的位置往前移或往後移
比如說,原本 ptr 指向 &ary[10] 的話
那麼 ptr + 5 指向的就是 ary[15],ptr - 8 指向的就是 ary[2]
這樣子,而且指標也可以直接進行大於、小於或等於的比較
可能會有人想到說,int 型態不是大小為 4 bytes 嗎?
那麼,直接做 ptr + 5 不是只移了 5 個 bytes,不是嗎?
嗯,這裡就牽扯到型態了。因為 ptr 是 int 型態,所以它一次會移動 sizeof(int)
這麼多的 bytes。因此對其做加減時,是一次前移、後移單位長的倍數
並不是移動指定的 bytes。這也是為何指標要有型態且只能指向同型態變數的原因。
同時指標在做存取它指向的位置的值時,也是看型態決定要動幾個 bytes
這樣一來,宣告為 ary[100] 我想大家也應該了解是要來 100 個單位大小的連續記憶體
然後,ary 其實是個指標指向這一連串記憶體的起始位置
而對於一個指標,在其後加上 [] 便是指其往前或後移指定長度的意思
例如,ary[5] 可以視為 *(ary+5) 的意思。
所以,即使不是宣告為 ary[] 形式,只要是指標也都可以用;
而宣告為 ary[] 形式也只是宣告時直接宣告一連串連續記憶體,再強制 ary 指標指向它
所以,像這樣子寫是可行的;
int ary[100], *ptr;
ptr[5] = 10;
這樣子和
ary[5] = 10;
是完全一樣的意思。
指標另有一用途,就是可以動態配置記憶體
宣告陣列的話,只能夠固定其大小;動態配置則可以任意調整。
使用到的函數為 malloc()
malloc() 回傳的是一個 void* 型態的指標,參數放需要的 bytes 數
注意 void* 型態是不能夠直接使用的。
void 指標可以指向任何型態的記憶體位置,不過因為不知道存取時要的 bytes 數
一類的訊息,所以也不能直接使用。直接使用的話,可能會造成錯誤而使得程式關閉。
因此,必須先將其強制轉型,例如:
int *ptr;
ptr = (struct node*)malloc(sizeof(int) * 1000);
這樣可以動態宣告一個長度為 1000 的 int 型態陣列。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:14:26
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:44
作者: sa072686 at 07/10/24
這是忘了提可是又有點重要,又有點基本的東西。
看到這篇,想必也丟了不少程式碼了吧?
─關於程式碼
建議保留所有寫過的程式碼,尤其是成功的。如果有網路空間
再另外留存一份在上面會更好。除了以後可以回來懷念一下以外,
同時也會看到自己的進步,也可以試著去改進之前所寫的東西等等的
總之,程式碼留著的好處多多。
─關於縮排
關於縮排,主要目的是讓程式碼更有層次感。
由於程式中,有些以後常用的像是 if 或是 for 之類的,通常會夾一大段程式碼
甚至可能 if 中有 if 或是 for 中有 for 或是混雜在一起亂七八糟的
所以,通常會內縮一個 tab(通常是四格,但不一定)使得程式較有層次感
並增加它的可讀性,這樣不僅使人更容易看得懂,要除錯也較方便。
以後程式碼動不動幾十幾百行,沒層次感真的很難看得懂
舉個例吧,用 Floyd-Warshall 演算法
for(k=0; k<n; k++)
{
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(dis[i][k]+dis[k][j]<dis[i][j])
{
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
}
根本連要看括號有無匹配好都很痛苦了。更甭提其它的了。
如果將它縮好的話
for(k=0; k<n; k++)
{
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(dis[i][k]+dis[k][j]<dis[i][j])
{
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
}
不是好看多了嗎?
何況以後還有可能有小組合作之類的機會,可讀性低的程式碼會影響其它人閱讀的。
一般 Dev C 會勾選智慧型縮排,那個不好用
強烈建議找到 工具 => 編輯器選項 => 智慧型縮排,然後取消它
同時也可以依自己喜好決定 tab 長度,這點有的覺得縮四格太多,看個人
勾選使用 tab 字元的話會比較方便,否則內縮的會是等同 tab 長度的空白字元
另外有括號配對反白功能,可以反白和某括號配對的括號,這也有利於程式撰寫
不過有些人覺得反白會擋到或是礙眼,就看個人喜好而定。
─關於快速編輯模式
或許還有人不會在執行程式時做「貼上」的動作。按 ctrl+v 會出現 ^v
雖然有的可能知道標題列上按右鍵有「貼上」的選項
但是,如果在按右鍵時注意到有「內容」並點進去勾選「快速編輯模式」
那麼就可以直接在視窗上按右鍵來做貼上的動作。
可是每次都要改很麻煩?看到「預設值」嗎?
點「預設值」之後做更動,下次再開啟就會以這個當作預設值,也就不用再改
不過,改了之後還是不能用?
因為改的是預設值,而你現在執行的程式已經調用原本的預設值了。
因此,關掉它再重新執行就可以了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.123 (台狼一中)
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:14:32
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:52
作者: sa072686 at 07/10/24
這裡講講遞迴。何謂遞迴,如果數學較好的人應該已經和它挺熟的了。
如果不知道也沒關係,程式中的遞迴也並不完全是數學中的那樣子
所謂的遞迴,就是一個函數會去呼叫自己。
不過不同的是,程式中用到遞迴的技巧時,是可以讓程式直接去透過呼叫自己
來達到計算結果的目的的,所以其實不用太過於害怕它。
例如,我們想求得 1 + 2 + 3 + ... + n 的值,那麼我們可以寫成:
int function(int num)
{
return function(num-1) + num;
}
不過,請不要執行它,原因容後說明,謝謝。
已知我們要求 1 + 2 + 3 + ... + n 我們如果知道 1 + 2 + 3 + ... + n-1
那麼,只要把它加上 n 就是我們要的解答了。
又,1 + 2 + 3 + ... + n-1 只要知道 1 + 2 + 3 + ... + n-2 再加上 n-1
也就是我們要的解答了。因此它有遞迴的特性:
當我們需要第 n 項時,我們可以從它的第 n-1 項再做一些小運算得到解答
因此我們可以將其一直化簡化簡…直到它小到不能再小,我們直接知道答案為止
在此例,我們知道 function(1) = 1
因此,將 function(n) 逐次化為 function(n-1)、function(n-2)、…
最後到 function(1) = 1 時可以得到解,這時有一確定的解即可反推回去
以得到第 n 項的解了。
但是,上述的函數並沒有這樣子。因此,它的執行並不會終止。
這也是我請大家不要去執行它的原因所在。
int function(int num)
{
if(num == 1)
{
return 1;
}
return function(num-1) + num;
}
這樣子它就有終止條件了。只要給的數字不小於 1,執行都會終止。
運作原理是這樣:當我們要第 n 項的解,它就先呼叫 n-1 項
而 n-1 項再去呼叫 n-2 項,n-2 項再去呼叫 n-3 項,…
直到到達第 1 項,結果已知,便回傳已知的結果;
再來,第 2 項得到第 1 項的結果了,也算出結果回傳給第 3 項
第 3 項也由第 2 項回傳的結果算出來,並回傳給第 4 項了,…
這樣下去,第 n 項也就得到答案了。雖然聰明的各位一定想得出來:
它是從第一項慢慢往上反推回去,才一一得到解答的。那麼迴圈都能做一樣的事了。
對。這結論是對的,可是遞迴有它的漂亮、有它的簡潔,以及後面許多好處
這些在學到 backtracing、DFS 之類的方法之後,就會發現了。
尤其在圖論以及 Tree 的領域中,遞迴相當實用。
這裡只是先提它的基本概念:
一個函數會呼叫自己,並且有一個終止條件,就叫做遞迴
由於呼叫自己時,同一個函數做的事情自然相同,甚至會往下跑的模式也是一樣
不過可能因為參數或一些數值的不同,處理上也會不太一樣
但基本上是將一個有著固定規則且互有相關性的事情,寫成一個函數,讓它去執行
在不斷呼叫自己的過程中,做著相同的事,只是可能針對不同對象
再舉個例,大家都熟透了的費氏數列。
對於第一、二項以外的每一項皆有以下規則:
fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)
唯一不同的是
fibonacci(1) = fibonacci(2) = 1
那麼,我們便可以將它寫成遞迴函數
int fibonacci(int num)
{
if(num < 3)
{
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
}
/* fibonacci 太長,大家可以原諒我以 f() 簡稱之嗎(炸) */
/* 說不可以的會遭天譴唷(毆) */
儘管如此簡潔,略經分析會發現:我們假設求 f(10),要先知道 f(8) 和 f(9)
可是在此時求過一次的 f(8),在求 f(9) 時又再求了一次
偏偏求一次 f(8) 又必須重覆求很多很多次 f(7)、f(6)、…
如果有興趣,做個小嘗試:在每一行 return 前面,加上一個 count++
然後,宣告一個全域變數 count,執行完後輸出
就會知道光是丟 10、20、…這些小小的數,就要呼叫千百次的函數
明明像丟 10 進去,也只會用到 f(n),n <= 10,要呼叫上百次?
想必一定很多重覆計算的地方。
這裡做一個小計算:可知 f(1)、f(2) 都只需要呼叫函數一次便算得出來
但 f(n) 呢?可知如果設 c(n) 代表 f(n) 所需呼叫函數次數
那麼我們呼叫一次 f(n) 則要呼叫 f(n-1) 及 f(n-2) 各一次,總計 c(n-1) + c(n-2)
再加上最前面呼叫了一次 f(n),故得 c(n) = c(n-1) + c(n-2) + 1
天啊,要呼叫的函數次數,成長得比費氏數列要快哪。別小看那個 +1
實測後會知道後期到底差了多少…
因此避免遞迴的重覆計算,就可以使用後面會提到的動態規劃法。
/* 多後面?不知道,很後面很後面了。 */
但遞迴也不完全是光用來計算數學的東西。
舉個例子,像走迷宮的話,由於對於迷宮中的每一格,都一樣是探訪前後左右
因此也可以使用遞迴,對於每一格都做一樣的事,這樣子
嗯,所以遞迴的運用是很廣泛的。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.123 (台狼一中)
φ seanwu 轉:到 [TFcis10] 看板,于 2007/10/24 Wed 18:14:38
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:46:59
作者: sa072686 at 07/10/24
嗯,很數學呢…
感謝 gba356 學弟
---- 分隔線 ----
http://www.mathpages.com/home/kmath107.htm
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/24
嗯,大暴力。
翻譯一下。
有人宣導用五種顏色分別代表五種回收的種類,之後各城市就開始做了
可是,各城市卻都用五種顏色代表不同種類的回收,因此造成了混亂
因此需要一個程式能夠判斷以哪個城市為準,其它城市遵從的話
需要改變的最小,並且一定有明顯的獲勝者。格式請參考範例。
---- 分隔線 ----
就做字串分析建表,然後枚舉每個城市為準則去比較需改變的多寡即可
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/24
※ 本文轉錄自 [TFcis10] 看板
作者: zenixls2 (丁丁叮叮) 站內: TFcis10
標題: [程設] cout之運用(C++)
時間: 2007/10/24 Wed 22:20:48
小數點輸出
cout在C++中內定的精準度是小數點後6位
且自動刪除尾數無用的0
使用precision()成員函數可做其他設定
ex
cout.precision(3);
使cout將精確度改成3
其效力會一直持續到重新設定
且仍會自動將尾數0刪除
/*------ex:---------*/
#include<iostream>
using namespace std;
main()
{
double s=3.33
cout.precision(3);
cout<<s;
system("pause");
}
會輸出3.3
若要數出尾數0
可在cout.precision前加上
cout.setf(ios::fixed);
還有一種老式的寫法
是
cout.setf(ios::showpoint);
不過在Dev C++裡precision()夾的位數要再加1
才會顯示到所要的位數(因為包含小數點)
進位制的處理
C++內定有dec(十進位),hex(16進位),oct(8進位)
使用方法有以下2種
ex
int s=17;
hex(cout);
cout<<s;
or
int s=17;
cout<<oct<<s;
第一個會輸出11
第二個會輸出21
有一點要注意的是它只能轉換整數類型的(如long long、int)
欄寬之調整
有一類的題目會叫你將輸出向右n格對齊
可用
cout.width(n);
處理,將之加於要輸出的那一行的前一行(因為其效力只有一行)
假如要將中間因向右對齊的空白填滿
可再加cout.fill('字元');
ex:
cout.width(5);
cout.fill('*');
cout<<1234<<endl;
會輸出
*1234
這些就應該夠寫ACM了
好好加油吧!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.106.235 (中滑一番)
φ sa072686 轉:從 [TFcis10] 看板,于 2007/10/24 Wed 22:22:21
作者: sa072686 at 07/10/25
之前提過陣列,陣列是直接申請一塊連續的記憶體,並透過簡單的計算
來直接存取某一個特定位置的值。因此它在隨機存取時很好用
不過,在陣列中間刪除或增加元素時就顯得不那麼方便了。
假設我們目前有 5 筆資料:
1 3 5 9 11
我們要插入 7 在 5 和 9 之間,那麼我們必須移動 9 和 11 各往後一格
1 3 5 _ 9 11
才能夠把 7 放進去。_ 代表空的意思。
這樣,最差情形下若有 n 個元素,就必須要做 n 次的搬移,太花費時間了,刪除同理
因此,另外有一種資料結構,叫做鏈結串列。
資料結構和結構(struct)並沒有任何關聯,它討論資料的儲存方式
鏈結串列的定義是,鏈結串列中每一個元素都指向它的下一個元素
並且,它的存放位置是隨機的,也就是不一定連續
但是鏈結串列中每個元素會知道下一個元素在哪裡
因此,只要知道第一個元素的位置,並且最後一個元素指向 NULL
我們便可透過第一個元素來得知接下來所有元素的位置
這麼一來,插入一個新元素時,只要做一些簡單的操作,例如
a => b => d
我們要插入 c 在 b 和 d 中間,只要讓 c 指向 d,再讓 b 指向 c 即可
a => b => c => d
這樣插入的動作就算完成了。不過呢,要記住必須先讓 c 指向 d
否則一旦 b 指向 c 之後,那麼 d 的位置就會遺失掉了,這個要注意
同理,也可以用很快的方式刪除一個元素
例如上述例子,我們如果想刪去 c,就讓 b 指向 d 就好了。
a => b => d
那麼,c 就消失了。這樣,鏈結串列的可變性也就顯得相當大。
不只沒有限制元素的個數,也可以透過動態配置記憶體增加長度
而不像陣列,很難說要剛好去配置一塊記憶體接續在原陣列之後
因此,一般我們會使用動態配置記憶體實作它,因為空間可以是隨機的
在這裡,我們可以把 c 所佔的記憶體空間釋放掉。
反正,我們不再需要它了;可是它所佔的空間卻還留著
這時,可以使用 free() 函數來釋放它。
free() 中間把指標放上去,就可以把那指標指向的記憶體釋放掉
方法是使用結構,我們每個元素除了本身的值還要有下一個元素的位置
因此,可以宣告成如下:
struct element
{
int value;
struct element *next;
};
這樣,就可以透過指標來指向下一個元素所在了。
然後,我們必須把第一個元素給保留下來
struct element *head;
head = NULL;
接著,就可以使用了。記得往後要讓最後一個元素指向 NULL,這樣才知道它是結尾。
這裡再提供一個簡便的方法,在結構型態的指標上使用時會很方便
如果要使用一個結構指標所指向的結構的成員,會很麻煩
首先,我們得先對它取值,對於結構型態才能用 . 來存取其中成員
struct element *head;
head = (struct element*)malloc(sizeof(struct element));
(*head).value = 10;
這樣會比較麻煩,事實上有另一種方法可以直接存取
struct element *head;
head = (struct element*)malloc(sizeof(struct element));
head -> value = 10;
嗯,這樣意思是一樣的。
插入的方法,大致是這樣:
target -> next = front -> next;
front -> next = target;
刪除的方法則差不多是這樣
front -> next = target -> next;
大致如此,只是實際在插入的時候,要去搜尋 front 和 next 出來,這樣
比較之下,它和陣列相較之下有好有壞,因此使用哪一種就要看情形了
陣列要任意取出第 n 個,速度極快;在內容稀疏時(比如說到索引值 10000
可能也只存了 10 個數)要遍訪就比較慢,刪除和插入都需要大量資料搬移
鏈結串列要任意取出第 n 個,就要從第一個開始走到第 n 個
不過在內容稀疏時,鏈結串列是只存實際上會用到的點,所以極快
刪除和插入速度都快,可是用到指標會拖慢速度,也需要額外空間存放指標
上述的內容稀疏可能不夠明白,比如說我要存 10000 個員工的資料
其中可能後來又多進了 5000 個員工,但是前面可能也有 8000 個員工辭職
所以實際上 15000 個元素中只有 7000 個是有用的
如果是鏈結串列,就只存那 7000 個而已
如果陣列在增刪後要調整,那也要花很大的時間做資料搬移
而且如果陣列宣告得不夠大,要再擴充也很難,這時鏈結串列就相當好用
鏈結串列也常用於 Tree 之類的資料結構中,因此相當實用
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:47:06
作者: sa072686 at 07/10/25
嗯,這題想了好久。至少有半天吧。
翻譯一下。
給你一個整數 k,求一種擺法使得一個大小為 n 的棋盤,每行每列都擺 k 個棋子
並且其中任意四個棋子皆無法為一矩形之四頂點
已知至少 n 要有 k^2 - k + 1 才夠放,但很明顯地也不需要超過。
給你 k,輸出 n 行,每行 k 個數字代表這一列要放哪幾行
每組輸出間要空一列
---- 分隔線 ----
其實這題還蠻有趣的。想當然暴搜是不可能過的。
這裡提供一個解法,可能還有更漂亮的,但我只想到這個,而且想了很久
首先觀察它會發現:我們要湊所有的 pair(i,j)且 i,j <= n
不過並不是隨便亂湊就可以湊出來的。也就是說,亂湊有可能無解。
且 n 最大約 1000 上下,因此暴搜可能太慢;便去進一步地觀察它
發現行列可任意互換,因此我們便依一定順序來湊
以下以行為直行,列為橫列;不過其實不影響解
因此,先將第一行放上 n 個
首先對於第一列,可以從第一行開始放 1 到 n
再來,對於第二列,因為放第一行,就不能放 2 到 n
因此從 n+1 開始放起,…依此類推放完所有在第一行的情形
接著從第二行開始,發現前面的 n 行,已經做了一件事
就是,2 到 n、n+1 到 2n、…都連成一塊,因此這些區域的數不能在同一列
同時出現,所以我們已經很簡單地將其分成許多 n-1 大小的區塊了
於是接下來的問題,就是每 n+1 列都由某數字開頭,然後後面的部份
就是由每個區塊取一個數出來,並且這些數不能夠有相同的 pair 存在
比如說前面出現過 3 5,後面就不得再出現 3 5 於同一列的情形
於是便要想辦法,湊出這 n-1 組數,每組數有 n-1 個數且來自不同區塊
並且,要不湊成任一 pair 才行。此時我們可視其在區塊中位置而定:
例如,某數在第 n 個區塊中是第 k 個數,這樣子轉換座標會比較好處理
然後,在第一顆棋子位置在同一行時,每個區塊的每個數字都只能出現一次
比如說第一顆放在第 4 行那幾列,後面那 n-1 個區塊,每個區塊中每個數字都必須出現
並且只能出現一次。
這時必須找個規則使得其恰各出現一次。
考慮以下排列:
12345
每個數字都必須出現一次,那麼我們只要讓它旋轉即可
12345
23451
34512
45123
51234
這樣便各出現一次且不重覆出現,也沒有卡到任何 pair。
設 12345 為一合法排列,可將其旋轉 4 次得到五種可能,剛好夠用
這樣的排列要找好幾個,可發現一規則:
每個相鄰數都會出現在任兩相鄰區塊。
所以,找的時候如果亂找,會造成後面找不到滿足要求的排列
因為,像這樣 23 出現過後,以後的排列不能再出現 23
不過嘗試後有種找法很簡單,就是每次固定加一個數造出下一項:
12345
這樣是 +1 造成
13524
這樣是 +2 造成。太大就 mod 掉。
14253
15432
恰皆不重覆。
所以,對於前 n 行輸出
1 2 3 4 ... n
1 n+1 n+2 n+3 ... 2n
...
2 n+1 2n+1 3n+1 ...
2 n+2 2n+2 3n+2 ...
...
3 n+ai 2n+a(i+1) ...
...
ai = 以上所提之排列
設第一數為 m
則 m 相同時拿同一排列旋轉
12345
23451
34512
這樣子轉
不知道怎麼講囧,有人能幫我講嗎?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.122 (台狼一中)
作者: sa072686 at 07/10/25
嗯,蠻數學的。
雖然有推出公式,不過後來因為奇偶好像會弄不好,就不太敢寫…
嗯,結果還是要呼叫兩種。感謝 seanwu 學弟
---- 分隔線 ----
嗯。將 a^n + b^n 用類似 374 的方式化掉。
若 n = 2k+1 則 [a^k+b^k]*[a^(k+1)+b^(k+1)]-a^k*b^k*(a+b)
若 n = 2k 則 (a^k + b^k) * (a^k + b^k) - 2*a^k*b^k
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/03/06 Thu 09:11:13
作者: sa072686 at 07/10/26
※ 本文轉錄自 [PG] 看板
作者: PG (最強的弱者) 站內: PG
標題: [創作] ACM初心者指南
時間: 2007/10/25 Thu 23:24:50
http://pgtsai.blogspot.com/2007/10/acm-online-judge-acm-1.html
有需要的就拿去用吧 XD
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 140.117.183.63 (PG的妄想鄉)
→ ducksteven 推:好文借轉 1026 00:06
→ sa072686 推:借轉 1026 00:58
φ sa072686 轉:從 [PG] 看板,于 2007/10/26 Fri 00:58:16
作者: sa072686 at 07/10/26
嗯,看似 joseph 的一題…
其實暗藏玄機,感謝討論板的強者
---- 分隔線 ----
若殺 2 g 或 2 k 則放一 g
若殺 1 g 或 1 k 則放一 k
故 k 奇偶不變
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/26
昨天忘了 po 了…補 po 一下
嗯。這題其實也不難寫。用很爛的方法也還是跑得蠻快的。
看來新系統的速度真的不慢…
---- 分隔線 ----
嗯。求 1 到 n 為止的最小公倍數嘛,那麼老樣子是把每個質因數最高次者取出
並且,2 和 5 最好先記錄個數後再乘下去;否則,取餘對除法無分配律
我的方法是使用篩法,篩去時也利用找到的質數,將其所有 n 次方之數
並且 m^n <= 1000000 者先標上 m,並且若 m 為質數則不可能產生重疊
接著枚舉這 1000000 個數,若有被標記任何 m 且 m 不為 2 或 5
則乘上 m 並取個位數;否則記下到目前為止的 2 或 5 的數目
又想既然要做到 1000000 就必須先做小於 1000000 者
那不如讀入前先跑一次,再在讀入時輸出;記得這時要額外處理記錄的 2 的數目
除了小心 2^0 = 1 以外,可以利用 2 的次方數,其個位數每 4 個一循環的特性
在常數時間內找到它的個位數並乘之。
雖然此法記憶體吃頗大,不過只花 0.040 sec 就可以過了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
→ yuscvscv 推:由於2的次方數必大於5的次方數 所以只要記錄2的次方數 1129 20:13
→ yuscvscv 推:遇到5的次方數就把2的次方數-1 1129 20:13
作者: sa072686 at 07/10/26
有鑑於許多人即使學了基本的語法之後,還是無法快速上手
例如碰到問題不知道怎麼樣去思考,或者想好了卻不會用程式語言表達
當然,將簡單的想法在表達過程中,過份複雜化的也不在少數
其實,程式碼不但要寫得簡潔,思考也要周密;
不過要寫得簡潔的話,思考的方式也要簡單一點
一般人常會寫不好,是因為人類思考解題方式時,比起程式語言的表達
要複雜太多了,常常一次跳過幾個步驟去思考;因此要表達這些時
難免會出現問題。例如,我們並不需要額外靠變數去記憶某些東西
但若不這麼記憶,我們在破壞原本的資訊後還想得起原先的東西,程式可不行
像我們知道某甲欠了我們 100 元,之後他還了 50 元,一陣子後
我們記得他還欠著 50 元,但也還記得之前欠過 100 元,是之後還了 50 元
如果寫程式時直接把 100 減去 50,又不去記 50 那麼這資訊就永久遺失了
此外,也有些題目以很複雜的方式,或是很長的題目來做包裝
事實上一旦看出了它要問的是什麼時,也就很好解決,ACM 10110 便是一例。
講了這麼多,這東西還是舉個簡單的例子比較好。
以一般人最常有問題的,ACM 的幾題題目來做為範例
不過得順便提一下,ACM 大部份題目都有多重輸入
所謂多重輸入,就是不是只能夠輸入一次而已
那麼這時就要用迴圈做多重輸入
while(scanf("%d%d", &a, &b) == 2)
{
....
}
這是最常見的方式。scanf() 本身回傳值為正確讀入之變數數目,或 -1 做為 EOF 時
EOF 是 End Of File 的簡稱。一般在螢幕輸入時由於程式不會知道什麼時候輸入結束
因此,通常不會碰到 EOF,除非你輸入代表 EOF 的字元(^z,即 ctrl + z)
如果是讀取檔案的話,檔案大小並非無限大,因此一定有個結尾在
讀到這個結尾後,就可以確定不會再有讀入,因此就可以結束了。
多重輸入亦有許多種,例如先告訴你共有幾組測試資料的,那麼就可以這樣寫
scanf("%d", &count);
while(count--)
{
....
}
然後迴圈每次執行時,再去讀入;這樣子的寫法,是先檢查 count 的值是否為 0
然後讓 count 的值減去 1,故恰會執行它原本的值的次數。
有了這些基本概念,要做 ACM 的題目也就容易多了。
ACM 10055
這題常被用來示範用。主因是它簡單,雖然它要使用到 long long 變數型態
這點麻煩了些。至於題目請參考
http://luckycat.kshs.kh.edu.tw/homework/q10055.htm
那麼這題的解決方式,很簡單可以猜到:要求的是兩數之差,且要取絕對值
不過,當然要先讀入啦。不然也不知道,要求的是哪兩數的差。
要讀入,又必須先定義變數,來存放讀入的結果。否則,也不知道怎麼記錄讀入的數
long long n, m;
然後,開始讀入吧。
while(scanf("%lld%lld", &n, &m) == 2)
{
...
}
接著我們就必須做處理了。兩數相減再將其轉為負數,或是取大者減小者皆可
這些應該都相當直觀。這裡兩種都示範一次:
n -= m;
if(n < 0)
{
n = -n;
}
-n 就代表 n 的變號的值,那麼在 n 小於 0 的時候讓 n 這變數代入負的 n 值
於是結果恆為正。另一種方法,將定義變數的地方修改成以下會較方便
long long n, m, answer;
然後處理時,就可以把它暫存起來
if(n > m)
{
answer = n - m;
}
else
{
answer = m - n;
}
接著,我們必須輸出結果;否則計算了卻不告訴我們結果,那有什麼用呢?
printf("%lld\n", answer);
記得一定要補上一個換行唷。否則,會變得很奇怪
由於 ACM 是將輸入做成檔案導入程式,再輸出到檔案中
因此,在螢幕上輸入測試資料或許不會發現異狀
可是輸出到檔案的話,就是輸入和輸出完全分開,這樣就不會有輸入時的資料
來幫它們做分割。假設現在有三組測試資料,答案分別為 3、56、772
如果有換行,那麼輸出會是
3
56
772
如果不是
356772
這樣雖然答案正確,可是沒有斷開,誰能判斷呢?想必它不是我們所想要的結果
printf() 是不會幫你斷行的。這點請特別記住,並且輸出和輸入分開
因此從螢幕輸入時雖看不出異狀,實際上卻是會出事的。
此外應記住由於所有的輸出都會被集中到一個檔案中,因此不必擔心說
需不需要把所有讀入都記錄下來,再一次計算後輸出,沒有那個必要,逐一輸入輸出即可
ACM 488 - http://luckycat.kshs.kh.edu.tw/homework/q488.htm
這題對於初學者來說相當複雜,但卻也運用到以後常用的技巧
由於輸出相當麻煩,格式也容易出現錯誤;不過如果仔細分析它,其實不會太難的
相信大家對常見的九九乘法表不陌生。這題的概念和那差不多。
首先,它會告訴你以下有幾組測試資料,因此我們先取得這個資訊
由於 C 語言需將變數定義於每個函數一開始的位置,比較不方便講述
因此,以下省略宣告變數的動作。
scanf("%d", &count);
接著是循環輸入。對於每一組都要做的事,不外乎輸入然後處理
因此,我們可以先把它寫起來
while(count--)
{
scanf("%d%d", &A, &F);
}
這樣子,對於每一組測試資料,也就會先輸入 A 和 F,接下來是處理的部份
可知頻率多少,就要幾個波;因此,我們需要 F 個波。
while(F--)
{
.... /* 產生一個波 */
}
然後,每個波的產生方式,就是從高度 1 到 A,再到 1,每種高度一行
然後第 i 行有 n 個數字 n。因此,至少知道要跑 1 到 A 再到 1,這麼多行
至於每一行要做什麼處理,是要放迴圈內的;故先考慮每行要怎麼寫
for(i=1; i<A; i++)
{
}
for(; i>0; i--)
{
}
如此兩個迴圈並列,是較好寫的;前述一般人類思考比較高階
所以,可能會想說就從 1 到 A 再到 1 就好,殊不知以程式語言表達竟麻煩至極
如果將其想慢一點,把步驟分開,先從 1 到 A,再從 A 到 1,就簡單多了
這時對於每一行,它的高度 i,要輸出 i 個數字 i。
由於 i 已經用掉了,如果再用 i 為迴圈計數用變數,則會打亂外層迴圈
for(j=1; j<=i; j++)
{
printf("%d", i);
}
printf("\n");
這樣子,就可以輸出 i 個數字 i。j 從 1 數到 i,所以共執行 i 次。
每次都輸出一個數字 i,這樣問題就漂亮解決了。主要的程式碼如下
while(F--)
{
for(i=1; i<A; i++)
{
for(j=1; j<=i; j++)
{
printf("%d", i);
}
printf("\n");
}
for(; i>0; i--)
{
for(j=1; j<=i; j++)
{
printf("%d", i);
}
printf("\n");
}
}
雖然是很複雜的三層迴圈,要一次想出來並不容易;不過,去分析
我們要做的是 F 個波,因此要跑 F 次,每次做一個波
每一個波要從 1 到 A 再從 A 到 1,這麼多行;每一行要輸出 i 個數字 i
如果可以清楚地整理成以上這點,那麼也不會混亂說外層放什麼、內層做什麼了
因為我們先想到要做 F 個波,所以不管波怎麼做,總之讓它跑 F 次
這樣子逐層分析,就可以很清楚地決定寫法,而不會亂掉。
這時麻煩的地方來了。通常這題很多人都會 Presentation Error
甚至被當 Wrong Answer。因為它要求的格式不好做
每個波之間,輸出一個空白行,每兩組測試資料間,也要一個空白行
所以既不能在第一個波,或第一組前輸出空白行,同樣最後一組之後也不行
這時就去分析:假設 n 組,那麼要輸出 n-1 個空白行,且第一組前不輸出
最後一組後亦不輸出,以這題來講,波的部份可改寫成:
while(F--)
{
for(i=1; i<A; i++)
{
for(j=1; j<=i; j++)
{
printf("%d", i);
}
printf("\n");
}
for(; i>0; i--)
{
for(j=1; j<=i; j++)
{
printf("%d", i);
}
printf("\n");
}
if(F)
{
printf("\n");
}
}
由於最後一組時,F 為 0,因為它再下一組時檢查 F 的時候因為是 0,所以跳出迴圈
故可認定它為最後一組;因此 F 不為 0 時即輸出一空白行,如此即可
那麼每一組間的空白行亦可依此處理。如果是不知道何時結束,要等 EOF 一型的
可以設置一個變數,做為判斷是不是第一組的依據
由於每一組在讀下一組並判斷 EOF 是否成立前,並不會知道自己是不是最後一組
因此,對於每一組之後都先輸出一個空白行,有可能會有無法挽救的危機
假設這樣
chkhead = 0;
while(scanf("%d%d", &n, &m) == 2)
{
if(chkhead != 0)
{
printf("\n");
}
chkhead = 1;
}
或許有人會有疑問:怎麼在第一組的時候,就把 chkhead 變數設為非 0?
因為,第一組判斷 chkhead 的時候已經過了,第二組才會再判斷;
與其扔到最後才寫,承擔那忘記補上的風險,不如早些將它寫上比較安全些。
ACM 100 - http://luckycat.kshs.kh.edu.tw/homework/q100.htm
首先要先說,這題陰險的地方在於輸入的兩數 n 和 m 未必有一定的大小關係
介於 n 和 m 之間,且沒表明 n 和 m 之大小關係,故需考慮兩者的情形
當然,與其對於 n 和 m 在 n>m 和 n<m 時各做不同的迴圈亦可,這最簡單
可是也最麻煩;因此,一個較簡單的方法是這樣子的:
我們想認定 n < m,但事實卻未必如此;不過我們可以在不合的情況下改變它
if(n > m)
{
temp = n;
n = m;
m = temp;
}
也就是說,在 n > m 時,對調之即可得我們想要之 n < m 的結果。
為何要用 temp 呢?直接 n = m 然後 m = n 不就好了嗎?
但是,如果我們讓 n = m 之後,我們就不知道 n 原本的值是多少了
因此,再讓 m = n 也無濟於事。最好的方法便是先另外記著
接著,我們就開始枚舉 n 到 m 之間的數,看看哪一個最佳
for(i=n; i<=m; i++)
{
....
}
然後,看看哪個數,它的 cycle length 最大。
因此,現在針對每個數字 i,我們要對它持續運算,直到它變成 1 為止。
可是又想到,i 要從 n 數到 m 的,可是如果把它運算回 1,這樣會亂掉
因此,我們用個變數做為計算用,這樣才不會破壞原本 i 的值
否則 i 是要從 n 到 m 都試一遍的,隨意更動它的值會出現錯誤。
number = i;
然後,我們對它做 3n+1 或 n/2 的動作,直到 n=1 為止
for(number=i; number!=1; )
{
if(number % 2 == 1)
{
number *= 3;
number++;
}
else
{
number /= 2;
}
}
可是,這樣子計算之後,我們怎麼知道它計算了幾次?
這樣就麻煩了呢。因此,我們需要每次計算都數一次,這樣才知道總共長度多少。
for(number=i, count=1; number!=1; count++)
{
if(number % 2 == 1)
{
number *= 3;
number++;
}
else
{
number /= 2;
}
}
之後會得到 count 即為所求數列之長度。不過,我們要的是最長的。
所以,在最後要去比較每個數字的長度,然後找最大者。
if(count > max)
{
max = count;
}
我們把到目前為止最大值記錄下來,因為我們只想要最大值,其它資訊可以不必保留
每次計算之後,都看看它有沒有比目前最大值要大;如果較大,就取代之,否則無視
這麼一來,就可以順利地得到所求了。
這樣逐步分析之下,原本看似繁雜的題目,只要先思考出解題的大綱
再詳細地去考慮每個步驟所要做的事情,就可以化繁為簡,逐步完成程式碼了。
最忌的是一次想很多個東西,然後把它們混在一起想直接寫出來
由於一個簡單的想法付諸於程式碼可能就很長了,如果一次跳太多的話
那麼,可能會導致想不出方法表達,或是想得太詳細的時候也可能不知道
從何表達起;就依循著先想大方向,再調整小細節,這個方式就好了
這樣子,也可以避免寫得太過複雜以致理解或除錯不易。
ACM 591 - http://luckycat.kshs.kh.edu.tw/homework/q591.htm
這題很多人卡住,主要原因不外乎是不知道怎麼使用陣列,或遍歷之。
首先先想,我們要知道最後的結果到底排出來是什麼樣子
然後,才能知道我們要怎麼樣去做最小的調整,以達成我們所想要的情形
因此,我們必須先知道最後算出來每一堆是多高,可知即為加總後之平均
while(scanf("%d", &n) == 1)
{
if(n == 0)
{
return 0;
}
for(i=0, sum=0; i<n; i++)
{
scanf("%d", &buf);
sum += buf;
}
average = sum / n;
}
這樣,我們達成了目的─計算平均數,因此可以來針對那些積木做調整了。
不過問題來了,那些積木的數目現在我們不知道了。
因為我們都把它放在 buf 中,所以我們只剩最後一個了;
這樣子怎麼辦?即使宣告 buf1、buf2、…也沒辦法用迴圈去跑呀?
因此,我們宣告一個陣列 buf[],然後修改成如下
for(i=0, sum=0; i<n; i++)
{
scanf("%d", &buf[i]);
sum += buf[i];
}
average = sum / n;
這樣一來,就可以保留每一堆積木的高度,又可求得平均了。
因為我們沒辦法在取得所有積木高度前算出平均,並用來解題
因此,必須先取得所有積木的高度,然後儲存下來,沒辦法邊讀入邊處理
這時就想,積木要搬動時當然要從高的搬到矮的。這樣,就可以調整到
和平均數一樣了。也就是最後的高度。
也就是說,每個積木調整後都要等於剛算出的平均數的高度
那麼,我們把積木高出平均高度的,將高出來的那些拿到低於平均高度的去
這樣,就是最小搬移數目了,因為這樣可以用最小的調整,將高的調低、低的調高
這時,我們就再遍歷一次,看看比較高的要搬移幾塊
可是,事實上因為高的搬過去矮的一定會剛好湊成平均高度
因此我們也不用實際搬移,計算總共有幾塊要搬就好
這樣可以避免考慮,要把哪些積木移到哪一堆上才好之類的,不需要思考的問題
for(i=0, answer=0; i<n; i++)
{
if(buf[i] > average)
{
answer += buf[i] - average;
}
}
printf("%d\n", answer);
這樣就可以得到解答了。
另外題目通常會加以包裝,以下為一例
ACM 10110 - http://luckycat.kshs.kh.edu.tw/homework/q10110.htm
這題,其實只是求輸入的數字 n 是否為完全平方數好了。
真的模擬的話,時間或空間都不夠用。
不過,如果我們去觀察它:
對於每個數,它會被按時表示它是目前間隔數的倍數
比如說 8,它在每 2 個按一次時會被按到,每 4 個時也會
因此,可知一個數字有幾個因數,它就會被按幾次。
那麼,已知按兩次等於沒按,所以只看按的次數的奇偶,也就是數字因數個數的奇偶
又知因數個數為奇數者僅完全平方數。如何得知?
令一數 n 擁有一因數 m,則知其必有另一因數 n/m 與之配對
因此每知一因數,必知另一因數之存在,找到一個便會找到另一個。
不過奇數的情形仍有可能,那便是當 m 等於 n/m 之時,只算一個因數
故知一數之因數個數為奇數,當且僅當其為完全平方數之時
因此,就成功把這題轉化為求出該數是否為完全平方數了。
如何識破包裝,看到問題的本質,也是很重要的。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 10:47:13
▲ sa072686 改@2007/10/26 Fri 12:21:36
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/26 Fri 12:34:06
作者: sa072686 at 07/10/26
嗯,要花很多時間看懂,但很好寫的一題。
翻譯一下。
你朋友正和你一同喝著飲料,並且談論著最近又寫了什麼程式
正當你要開始得意地炫耀時,你朋友突然大叫一聲「啊,糟了!!」
「什麼糟了?」「我好像不小心砍了你的原始碼…」
「啊啊啊啊啊啊∼」邊絕望地吶喊著,然後衝進實驗室
結果原始碼真的被砍了,只好找最近編譯的執行檔來反編譯。
給你一份文件代表十六進位制執行檔,每行固定三十個字,除了最後一行可能不足外。
其中請參照表一,寫著哪個字元代表哪種程式碼,以及它們要多少參數
接著每四個字元為一參數(表二),將這十六進位制的四個字元轉成二進位制
然後,前 2 碼為參數種類,後 14 碼為數值。表示方式見表下面四段。
請寫一個程式反編譯它,還原它回原本的程式碼。
---- 分隔線 ----
嗯。暴力做字串分析和轉換吧。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/10/26
10660 Citizen attention offices
有一個大小為5x5的城市, 每一個區域以原題目圖中的方式編號
每個域中住著不同數量的人, 現在政府要設立5個停車場
當然每個人會選擇最近的停車場來停車
問要怎麼設置這些停車場, 使得每個人到他所屬的停車場的距離總和最小
(此處的距離為, (x,y), (x',y') 兩點之間的距離為 |x-x'|+|y-y'|)
如果有多組解, 請輸出字典順序最小者
<Hint E>
暴搜過所有的設置方法就行了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-139.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/10/26
嗯,不難做啦其實。暴力可過。
---- 分隔線 ----
湊出所有因數後,拿 DFS 暴力湊所有組合,不過要把答案先存下來,輸出答案數
但還是可以過的。0.030
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/10/26
10406 Cutting tabletops
給你d和n, 接下來依序有n個點的座標, 用來表示一個多邊形
這個多邊形一定是凸多邊形, 並且n個點是以順時針方向給出
現在, 把這個多邊形削去外圍一圈, 厚度為d
問你剩下的圖形的面積
注意d和點座標不一定是整數, 並且d不會超過合理範圍(一定可以削)
<Hint E>
解出削掉後的圖形以行列式求面積
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-139.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/10/27
※ 本文轉錄自 [PG] 看板
作者: PG (最強的弱者) 站內: PG
標題: [創作] ACM初心者指南 - 2
時間: 2007/10/26 Fri 21:12:06
[關於ACM的judge]
這裡我要說明一下ACM系統如何測試你的程式是否正確,
ACM是用資料流轉向的方法,把問題的輸入導進你的程式裡面,
最後再把你程式的輸出拿來比對,
有興趣的人下一篇文章將會附上windows下面的資料流轉向的方法,
可以參考看看ACM如何judge你的題目,
在這裡,初心者只要記住兩個重點
1."關於輸入輸出部份,跟平常(從螢幕輸入輸出)沒有兩樣"
也就是說你可以很輕鬆的使用scanf printf cin cout等方法,
不用作任何改變
2."題目的答案可以隨時輸出"
也就是說,答案算出來之後直接輸出到螢幕上就可以了,
把答案存下來後輸出只會拖慢你程式的速度還有耗費無謂的記憶體
[關於ACM的多重輸入輸出]
一般來說,ACM的題目通常都會一次輸入很多組資料,要你一併回答,
所以這裡說明一下怎樣進行多重的輸入輸出,
一般來,最常見的有三種方式
1.題目以指定的方式(例如說 輸入0)結束
這種方式很簡單 就按照題目判斷就好
2.一開始直接指定測試資料數量
這種方式也很簡單,一開始用一個變數計算說還要算幾次
次數到了就結束,以下附上範例
int times; scanf("%d",×);
while(times--)
{
....
}
或者是
int times; scanf("%d",×);
for(int i=1;i<=times;i++)
{
....
}
3.讀到資料沒了作為結束
這是多重輸入輸出的重點,要如何判斷讀入的資料已經結束了呢
這時候就要瞭解C(或者是C++)的scanf 與 cin 資料讀取失敗的回傳值
(當資料結束了,自然會讀取失敗)
如果是C語言的話
scanf如果成功讀入n筆資料的話,會回傳n
(不是很確定..有錯請指正,因為我是寫C++的人)
(但是我確定這種方法可以用)
while(scanf("%d",&a)==1)
{
...
}
當scanf("%d",&a)不等於1的時候 就代表讀取失敗
如果需要用多一點的數字 可以使用
while(scanf("%d%d",&a,&b)==2)
while(scanf("%d%d",&a,&b,&c)==3) 依此類推
如果是C++語言的話
cin失敗會回傳0,所以這樣寫就可以了
while(cin>>a)
{
...
}
如果有多個數字的話可以用..
while(cin>>a>>b)
while(cin>>a>>b>>c) 依此類推
[關於ACM系統給的judge訊息]
詳細資訊可參考 http://online-judge.uva.es/board/viewtopic.php?t=7430
(一樣是舊資料了..所以有一些東西跟現在不太一樣)
(但是仍然可以緬懷一下過去)
Accepted (AC)
你答對了
趕快寫下一題吧∼
Wrong Answer (WA)
你答錯了
也就是你程式的輸出了錯誤的答案
Time Limit Exceeded (TLE)
程式執行時間超出限制
通常代表著你的寫法有問題,或者是不夠好,
因此無法通過程式執行時間上的限制
Memory Limit Exceeded (MLE)
使用了過多的記憶體
這沒啥好扯的,簡單的說就是想辦法降低你的記憶體使用量嚕
Compile Error (CE)
你的程式無法編譯出來
檢查一下你的語法,看看哪裡有寫錯吧,
或者是有沒有該#include的檔案沒有#include
Runtime Error (RE)
程式執行中出現錯誤,導致不正常的結束
通常都是記憶體操作不當(指標亂飄,陣列大小錯誤)
或者是除以零
Restricted Function (RF)
使用了被限制的函數
新手會犯下這種錯誤,高達八成的情形是忘了拿掉system("pause");
為了安全起見 ACM不會讓你執行會牽涉到整個系統的函數
例如說 下指令 檔案寫入 讀取 之類的,都是不被允許的
常見的就以上幾種
剩下的訊息可以參考查詢那個網址
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 140.117.183.64 (西子灣大學)
→ devilqxect 推:借轉~~給學弟們看~~ 1026 21:18
φ devilqxect 轉:到 [TFcis10] 看板,于 2007/10/26 Fri 21:18:56
φ sa072686 轉:從 [PG] 看板,于 2007/10/27 Sat 07:16:07
作者: sa072686 at 07/10/28
嗯,二星歸二星,其實並不好寫…
感謝討論板的強者們提供的好方法
---- 分隔線 ----
嗯,將時間單位換成兩人速度之乘積之倒數
轉化後,主人吃的時間為食物量乘僕人吃速
僕人吃的時間為食物量乘主人吃速
然後最後給的詢問就會變成要再乖上主人與僕人吃速之乘積
不過因為乘上這些,要建表就變得不太可能
因此,要轉存成時間區段的形式,存成一段段的時間,然後去檢查
所詢問的秒數是否落在某區段中
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/28
難寫的一題 DFS…上傳了第 60 次終於是 AC 了…
感謝討論板上的強者、彼得及 gloompisces 學長
---- 分隔線 ----
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
把 1 2 3 5 6 7 9 四格暴搜出來,共七格,要 7^7
然後由 1 2 3 得 4,5 6 7 得 8
由 1 5 9 得 13,由 4 7 13 得 10,由 2 6 10 得 14
接下來的四格設 a=11,b=12,c=15,d=16
則得 a+b、a+c、a+d、b+d、c+d
設 a+b + a+c 值為 n,由 a+b + a+c 得 b+c 之後
可得 2a+b+c = n,便知 b+c = n - 2a
將六式(與CP9無關)相加得 3a+3b+3c+3d = ... + n - 2a
又 n = a+b + a+c 故知以已知值之五式相加,再加上 a+b 和 a+c 之後
扣去三倍 a+b 和三倍 c+d 即為 2a
得到 a 之後再以已知關係式 a+b、a+c、a+d 可求出其它三數
又若 a+c + b+d != a+b + c+d 則為矛盾,故無解
0.530,或許是搜爛了,晚些再試試…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Tommy 推:CP9... 1028 10:57
→ sa072686 推:六式… 1028 10:59
→ Tommy 推:指槍... 1028 11:40
作者: silentvow at 07/10/28
其實我認為7^8也會過 ... 因為7^7的常數時間感覺頗大
提供另一個搜法給沒什麼數學天份的同志.
因為新系統很威所以名次會衝很前面 (誤)
//如果要照字典序輸出所有排列大概就掛定了XDrz
---- 防爆 ----
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
預處理求出一列之所有可能排列, 並以總和分類存取.
//根據測試 n=16 時有最大排列可能 231 種
這些排列中, 順序與倒序相同者視為一種, 保留字典序較小者.
//鏡射用, 沒加搞不好也會過
搜索時第一排直接以存取之排列代入, 也就是 1,2,3,4 的位置.
之後對位置5,6,7,10,11依序進行枚舉
//他X的沒事輸出前兩解幹麻 ...
以下數字表位置, 由左側推右側, 若左側有兩組須皆成立.
//中途有推出不合法數可直接cut掉, 時間大概會差個兩三倍.
( 5, 6, 7) -> 8
( 4, 7,10) -> 13
( 1, 5,13) -> 9
( 2, 6,10) -> 14
( 3, 7,11) -> 15
( 1, 6,11) && (13,14,15) -> 16
( 9,10,11) && ( 4, 8,16) -> 12
若以上皆成立再檢查是否達成題目條件.
鏡射重點, 若有一解最初所用之排列為左右對稱, 則ans++, 否則ans+=2.
--
╓───╖╓╖╓╖ 高中生 ─── 一種會全力作傻事的生物
║╓──╜║║║║ 而且很容易一頭熱,馬上又冷掉。
║╙──╖║║║║ ╖
╙──╖║║║║║ ╓─╖ ╖─╖ ╫─███ ▉ ▊ ▋ ▌ ▍ ▍ ▏
╓──╜║║║║╙──╖╟─╜ ║ ║ ║ ╖ ╓╓─╖╖╥╓
╙───╜╙╜╙───╜╙─╜ ╙ ╙ ╙╜ ╙─╜╙─╜╙╨╜
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 219.70.20.103 (和信超沒品)
→ sa072686 推:所有排列的話 大概output時間就差不多要炸了XDDD 1028 01:37
作者: sa072686 at 07/10/28
嗯,猜數字遊戲。用很爛的方法解了。如果有更好的方法還請不吝賜教
翻譯一下
猜數字遊戲,這裡簡述一下,心裡想四個數字給對方猜
然後回答幾A幾B,幾A代表有幾個數字它的位置對了,數字也對了
幾B則代表有幾個數字它對了,但是放錯位置
像 1231 我猜 1332 則得 2A1B
因 1 和 3 的位置放對了,而 2 則是放錯位置
注意若有 A 則該數字不得再用於 B,給你最多十次猜測,請回答矛盾、多重解或解答
---- 分隔線 ----
枚舉 0000 到 9999 這一萬種狀態,對於每種狀態最多做 10 次判斷
對於每次判斷約做 4 次(其實我用了 8 次…)比較,最差情形 40 萬次
其實是可以接受的。不過速度並不快(新系統跑 0.440 排 64…舊系統應該要倒數了)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:嗯好,對於每種狀態如果有一種猜測不通過即棄之不再判斷 1028 07:50
→ sa072686 推:這樣子只跑 0.100…快了很多 1028 07:50
作者: sa072686 at 07/10/28
嗯…暴搜據說會 TLE,不過我暴搜過了
討論板說可以用正常方法寫到 0.000,還沒想到,晚點想想看
或是請高手們不吝賜教
翻譯一下
有一交通工具要從 A 城市(編號 0)到 B 城市(編號 m)
中間有許多人訂車票,在出發時會收集各地的要求,但有乘客數限制故不一定能全部接受
如果拒絕要求從某一站到某一站的乘客,就必須全部拒絕;否則要全部接收
車票價錢為站數乘以乘客數(站數為 A 到 B 之間,包含 B 城市的站數)
最多 7 個站,22 種要求,給乘客數、B 城市編號以及要求數
再給每種要求的起點站、終點站與乘客數,求最大收入為何
---- 分隔線 ----
嗯,還沒想到 prunning 的方法,據說直接暴會 TLE,我是跑 1.8
我做 DFS 的方式比較特別一點,就是如果取其中一種要求
那麼下一層就在原本的一站再看能不能取另一種要求,否則就不取
意即,在某種情況下如果我不取任何一種要求,就往下搜索
反之則接受某種要求後,停留在原站繼續看要不要取其它要求,或往下搜索
然後,讓取要求的時候不取重覆組合,也就是只取組合數
這樣可以在 1.8 左右時間 AC
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:sort後剩0.800 1028 11:38
作者: sa072686 at 07/10/28
很好寫的一題模擬題。…不知道為什麼它在置底文中,被歸類為 DFS?
嗯,忘了設 0 0 結束執行,拿了一次 TLE |||
翻譯一下。
有許多選舉,每個選舉都有 c 個候選人(c <= 5)和 n 個投票人(n <= 100)
投票人必寫上 c 個數字,寫在越前面代表在他心目中越想投給他
但如果寫的 c 個數字不唯一,或是超出 c 的範圍(比 1 小或比 c 大)
則算廢票。先以每個人第一順位決定票數,若沒人超過半數(>)則淘汰最低票數者
若有多個最低票數者,任一皆可;接著投他的就必須投他下一個順位的候選人
這樣持續到有人票數過半,或是剩下的人全都平手為止。
若有人投廢票則額外輸出一行(不過我無視廢票數都輸出那一行,還是 AC)
接著若有人獲勝則輸出勝者,若否則輸出所有平手者
---- 分隔線 ----
嗯。其實暴力之下仍是 0.000 通過。
直接針對敘述模擬就是了,不知道為什麼算是 DFS 題?
即使要用 DFS,似乎也無從著手呢…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/28
何謂大數?顧名思義就是一個很大的數。為什麼需要它呢?
因為一般的變數型態,能夠儲存的範圍有限,因此太大的數字需要用大數來呈現。
如果需要練習大數的題目,請到 lucky 貓搜尋 bignum
或是在索尼小站 sa072686 板使用 大數 做全文檢索
一般的 long 型態只能存放到 2^31 - 1,即使 long long 型態也只到 2^63 - 1
使用 double 精確度又嫌不足,因此大數是個相當好的選擇。
有些程式語言內建大數(例如 ruby),有些則否(如 C),這裡來談談大數的技巧
對於很大的數字,使用一般現有的變數型態無法儲存時
可利用陣列來保存每一個位數,當作是一個很多位數的數字
如此一來在記憶體用盡前,都可以儲存得下
舉個例,像 123456,我們可以用一長度為 6 的陣列來儲存之
第一個元素儲存第一個位數,第二個元素儲存第二個位數,…
得到像這樣子:
num[0] = 1;
num[1] = 2;
num[2] = 3;
num[3] = 4;
num[4] = 5;
num[5] = 6;
讀入方式可使用字串讀入之,但需牢記以字串讀入時是將數字視為一個個字元
故以 ASCII 碼儲存之,使用前請先轉換,將其減去 '0'(ASCII 48)即可轉換回去
在做運算的時候,由於沒有直接的運算函數可以用,因此只得自行模擬直式進行運算
所有的大數運算都基於直式運算,只要會直式運算便可模擬
這裡一一舉例。此外大數運算時建議另以一變數保存目前位數是多少,較利於計算。
大數分成兩種運算,一種是大數對一般數字做運算,另一者為大數對大數做運算
加法
加法由於位數可能增加,乘法亦同;因此建議將儲存方式反轉
也就是說,把個位數存在第一位,十位數存第二位,…依此類推
如此一來,既便於直式運算時的對齊,也可免於位數增加時要做大調整的麻煩
如果把個位數存在第一位,這樣最大位數進位時往下就好;
如果最大位數存在第一位,那麼就要每一位都向後移,才有空間增加位數
在做直式運算時要從個位數對齊,反轉儲存也有利於對齊。
─大數對一般數字
將一般數字加到個位數,然後持續做進位動作直到無法再進位為止。
進位等等會提。
─大數對大數
運算時每個位數加總起來,然後在大於 9 的時候進到下一位去,並且這一位維持
在小於 10 的情況。可以在下一位加上這一位除以 10,目前位數除以 10 取餘
主要是因為下一位數代表的數字為目前位數的十倍,除以 10 取餘可得個位數
不過若先除以 10 取餘,則會失去該進位多少的數據,請小心。
並且小心如 1 + 9999 這種,雖然只加了一位,卻會造成四個位數的進位
減法
減法與加法同,只有進位改成借位而已。雖然位數是增減,但仍建議反轉利於對齊
乘法
─大數對一般數字
其實只要對於每個位數乘上一般數字,再進位之即可。
不過如果直接對原儲存陣列做更動,也就是直接乘下去,那麼請先乘完再進位
否則,太早進位會誤乘的。
─大數對大數
乘法較為複雜,不過一樣以直式模擬之即可。
但注意位數的對齊以及陣列的大小。只要位數對齊做對了,乘法其實也不難
除法與取餘
除法就較為麻煩。用到許多技巧,不過其實不會太複雜。
首先除法是從高位數起,逐一取出並除以除數,得到的商即為商之某位數
之後剩下的餘數,再去做一樣的運算。取餘的話,求商時也會求得餘數
甚至取餘時商數可以不必記錄下來,反而較為簡單
─大數對一般數字
分析直式運算,每個位數逐一取下來,然後找個數使得除數乘上它
會比它小,可是又最接近它;這數即為商的某個位數。
那麼這數怎麼求得?已知是某位數,所以枚舉 0 到 9 也是可以的。
不過,可知除數 a 乘上某數 b 最接近目標數 c 則得 a*b + d = c,d < a
則知某數 b 為 c 除以 a 取整數,d 為 c 除以 a 之餘數
又 d 之後還會用上,故知做一次除法得商之某位,一次取餘可得接下來之數字
至於掉一位下來這種事情要怎麼做?這裡用到進位制的概念…
假設目前有一數叫 345,要降一位 6 下來成 3456
分析可得 3456 為 3450 + 6,因此將 345 乘上 10 再加上 6 即可。
因此這問題也順利解決了。
─大數對大數
用如上的方法即可,只是無法做除法和取餘數怎麼辦?
那麼只好回到土法煉鋼法了。怎麼做?用減法嗎?
是的。可是,直接減的話,如果商很大那不就要減很多很多次?
不,不會的。上述說過每個位數枚舉 0 到 9 這十種情形
因此,假設有 n 個位數,也最多做 10 * n 次的減法,遠比商很大時好得多。
枚舉時如果還要用乘法事實上也不是很方便,還是得用減法的
因此,先比較兩者大小,若除數比目標大則減去,然後計一次
餘數即為減完後剩餘之數字。不過反轉對齊的結果是這裡必須移位才能再追加位數
大致這樣子,如果面對浮點數運算,請先無視之,運算後再判斷
小數點該點在哪個位置,這樣就可以了,其實和整數運算是一樣的,不再贅述
至於開方,如果數字不大可以用二分逼近法,否則請搜尋板上有篇介紹它的文
再來介紹大數的極限優化。
由於 int 型態運算速度快,而且範圍不小,如果只拿來放一個位數有些浪費
因此,可以一次放數個位數,至於位數多寡以不會導致 overflow 為準
由於做的運算不同、數字大小不同,位數多寡也就不同
但需注意輸出時由於是一次輸出數位,因此需以像 %05d 一類的寫法
來補上缺漏的 0,否則會出錯,並且盡量不要為了塞更多位而使用 long long
這樣反而比 int 還慢。如此可將大數優化數倍的速度
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/11/03 Sat 20:05:41
→ mp607 推:轉走 1104 15:35
φ mp607 轉:到 [mp607] 看板,于 2007/11/04 Sun 15:35:14
→ LFKing 推:感謝 好文章! 0704 20:52
作者: sa072686 at 07/10/29
嗯,很好寫的一題。不過資結部份比較麻煩了些。
翻譯一下
有個公司它內部有安裝一個電話系統,可設於某些時段將打來的電話轉給特定電話
電話號碼皆為四碼,在 0000 到 9999 範圍內,告訴你許多行
每行代表欲轉接者之電話號碼、轉接開始時間、持續時間和目標電話號碼,最多一百行
最少零行,以電話號碼 0000 為終止;同一號碼轉接時間不會互衝,也就是同一時間點
同一個號碼不會同時轉給兩個或以上號碼,並且起始時間總在 0000 到 8784 之間
轉接有效時間範圍為轉接開始時間到轉接開始時間加上持續時間,並且是包含的
並且轉接開始時間加上持續時間不會超過 8784,最後是一堆撥電話的時間與號碼
以時間 9000 結束,對於每一次撥電話必須輸出是哪個號碼響起
如果會造成無窮迴圈,也就是某時間點 a 轉給 b,b 又轉給 c,c 又轉回 a 時
請輸出號碼 9999
---- 分隔線 ----
資結比較麻煩,因為建表查的話預處理怕太慢,我直接建鏈表來搜
對於每通電話檢查是否會繞回已轉過的號碼就行了
用了很簡單的迴圈解決它。反正也只需要改變目前號碼
遞迴也是可以的。會不會繞回的話建表查就可以了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/10/29
嗯,還蠻好寫的一題。置底文中寫錯了,這題名是 384 而不是 385,已修正
不過其實也不確定,文中想列的到底是 385 還是 384…
嗯,翻譯一下。
一個字串為 slump 條件如下:
一、第一個字為 'D' 或 'E'。
二、一個字之後,接著一個或多個 'F'
三、在一個或多個 'F' 之後應接著一個 'G' 或一個 slump
四、沒有其它形式之字串為 slump。
一個字串為 slimp 的條件
一、第一個字母為 'A'
二、如果這是長度僅為 2 的 slimp,則最後一個字元(第二個字元)為 'H'
三、如果不是長度 2 的 slimp,則應為以下兩種情形
A、'A' 後面接著一個 'B' 再接著一個 Slimp 再接著一個 'C'
B、'A' 後面接著一個 Slump 再接著一個 'C'
四、沒有其它東西是 Slimp
一個 Slurpy 是一個字串,它以 Slimp 開頭並緊接著一個 Slump。
給你一個字串,求其是否為 Slurpy。字串長度至多 60 個大寫字母,最多 10 組。
---- 分隔線 ----
由於條件上絕對不會造成判斷上的困難,也就是斷句點的問題
因此直接做就可以了,當然用遞迴判斷比較容易
只要寫個簡單的函數判斷 slimp 和 slump 就可以輕易解決這題。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: zenixls2 at 07/10/29
做法大概和接C之化學鍵的方法差不多
記得有機化學有上異構物的總數及計數方法
就是畫對稱軸
再來努力的接C上去
這題方塊和C沒兩樣
都可接四個元素
只是我不會寫判斷對稱軸的程式
而且建表下去DP要開很大的陣列
不知道有誰有更好的方法(除了抄討論板上給的數列)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 210.70.137.244 (台南一中繞一圈回來)
作者: seanwu at 07/10/29
---內有解法---
嗯...我的DFS是 (x是目前拿到哪一個)
int dfs(int x)
for( i=x+1; i<n; i++ )
dfs(i) //如果可以拿i, 就再找下一個
這樣是0.640秒
然後做一下極大值剪枝, 先依人數排序好, 然後算出rest[i]=第i到第n-1個ask的總人數
rest[i]的意思是, 從i開始拿, 即使接下來的ask都不衝突, 最多也只能拿到rest[i]
所以有 if(now+rest[x]<=max) return 0; , 這樣cut後就是 0.020秒了
最後, 還可以做limit-cut, 如果每個路段都滿載 (最多裝到容量或經過的總ask人數)
如果 max==limit, 就可以結束search了, 剪完後可以到 0.010秒
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.81 (台狼一中)
▲ seanwu 改@2007/10/29 Mon 10:51:44
作者: sa072686 at 07/10/29
有趣的一題,那個 ASCII 圖畫得真棒XDDD
翻譯一下
給你拼圖大小 n(n <= 10)且拼圖必為正方形,並給你每塊拼圖的高和寬(皆最多 25)
接下來是 n^2 塊拼圖的樣子及形狀(上左下右四個數字),數字範圍 5 到 -5 間
如果是 0,則表示該邊是拼圖外緣;否則則與其負數配對(例如右 5 可接左 -5)
不會有兩塊拼圖有相同的形狀,必有一組解,且恰有一組解。
---- 分隔線 ----
其實是不難做的一題。用 DFS 暴搜之,事實上也只跑了 0.010
一一枚舉那 n^2 個格子,所能夠擺放的所有拼圖,如果能擺滿即為所求
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ seanwu 推:NPSC2003初賽(prob A) 1029 11:29
→ seanwu 說:這題是 長*寬<=252 1029 11:30
作者: sa072686 at 07/10/29
嗯,很好寫的一題…不過忘了拿掉檢查碼,wa 了幾次…
翻譯一下
給你 n(n<=10)和 n 個字串,每個字串由 'Y' 和 'N' 組成
並且題目中附了一張表表示數字 0 到 9 的表示方式
問能否從 0 到 9 的任一數字往數起,恰能夠以那 n 個字串依序表示
像 n = 3 時就看能否依序表示 987 或 876 或 765、…這樣
注意有些燈是燒掉的,並且測試過程中可以有原本沒事的燈燒掉
但是已經燒掉的燈絕不會再亮。
---- 分隔線 ----
枚舉 9 到 0 每個數字能否往下恰數 n 個且都能夠表示
如果有該亮沒亮的,就是燒了;如果有燒掉的亮了或不該亮的亮了就是不合
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/10/29
嗯…有點數學的題目。
翻譯一下
將所有最簡分數依分母不遞減順序寫下來,問第 k 個分數為何?
分數前幾項為:
0/1, 1/1, 1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 2/5, 3/5, 4/5, 1/6, 5/6, 1/7, ...
---- 分隔線 ----
首先必須知道,比某數 n 小且與之互質之數的個數,方知以 n 為分母之分數
在數列中佔了幾項,如此可得第 k 項之分母應為何
這裡運用到一個數學公式,即設 n 有質因數 a1、a2、a3、…
則知比 n 小且與之互質之數之個數為 n * (a1-1) / a1 * (a2-1) / a2 * ...
原理為,小於等於 n 之數有 n 個,其中被 a1 整除之數,每 a1 個出現一次
剩下之數,由於必不和 a2 衝突,故可被 a2 整除者仍維持每 a2 個出現一次
如此即可得最後有多少數比 n 要來得小,卻與 n 互質
故可以篩法過濾之,先建立一陣列使得 tbl[i] = i
之後對於所有 i>1 且 tbl[i] == i 者,知其為質數,則其所有倍數
皆有質因數 i,故知對其所有倍數需除以 i 再乘上 i-1
如此最後 tbl[i] 所存即為小於 i 之所有與 i 互質數之個數
將之加總可得:分母 <= i 者共有幾項,以二分搜尋得出分母後
再枚舉所有小於分母之數,找出正解即可,0.210 sec,第 5 名
/* 此題為新題目,故所有上傳者皆使用新系統,執行時間參考價值較高 */
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: snoopymei at 07/10/29
嗯,我是新豐高中國樂社 98 級公關,小史,
雖然跟你真的不熟,可是要給你看個東西.. XDD
http://www.wretch.cc/album/show.php?i=onlysnoopy&b=134&f=1490108800&p=24
我很好奇,這個是有八的證據嗎? XDDDD
--
★hrs113355 小史我好喜歡你噢
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by snoopymei from 218.165.117.143 (中滑一番)
→ sa072686 推:啊…妳好,關於那個嘛… 1029 21:34
→ snoopymei 推:這不是我爆的八 (炸) 1029 21:36
→ devilqxect 推:我知道是誰寫的XDDDDDD 1029 21:42
→ sa072686 推:我猜陳鈧(點頭) 1029 21:43
→ snoopymei 推:不是他耶 @@ 1029 21:44
→ sa072686 推:咦那是誰(驚) 1029 21:44
→ ben196888 推:寫出來的站好少(茶) 1029 21:46
→ snoopymei 推:我有幫你宣揚靠邊欸 =皿= 1029 21:47
→ ben196888 推:謝謝大嫂XD //我隨便寫都超過10個耶XD 1029 21:50
→ snoopymei 推:因為我不夠高阿 旁邊又寫滿了(汗) 1029 21:56
→ AikoSenoo 推:(抓頭) 哪個無聊的小傢伙啊\( ̄▽ ̄\)﹏﹏(超燦笑) 1029 23:34
作者: sa072686 at 07/10/29
算了,我在這裡直接講清楚好了。
基本上,八卦也僅是懷疑罷了。
通常只是拿來開玩笑用的,我並不會介意這些,只會和大家一起笑笑
可是,畢竟不是每個人都不介意
我的話無所謂,但請千萬不要干擾到對方
我不希望就因為我教了她一陣子演算法,就得害她這樣
在此鄭重地說明。謝謝。
也請四處傳著八卦的各位,不要鬧得太過份了。
我不介意如此,但我絕不希望有人因此而無故受害。絕不。
以上。
/* 對不起,把一篇報到文回得如此嚴肅…
如果會嚇到妳,在此向妳道歉… */
※ 引述《snoopymei (新豐國樂99級不閃學妹)》之銘言:
> 嗯,我是新豐高中國樂社 98 級公關,小史,
> 雖然跟你真的不熟,可是要給你看個東西.. XDD
> http://www.wretch.cc/album/show.php?i=onlysnoopy&b=134&f=1490108800&p=24
> 我很好奇,這個是有八的證據嗎? XDDDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ snoopymei 推:D 1029 21:47
作者: sa072686 at 07/10/30
不好寫的一題,很容易就會超出時間限制。
翻譯一下
有種新的資料結構叫做 black box,它有兩種操作。
第一種是插入元素,就是將元素放進去
第二種是取得元素,也就是在第 n 次的取得操作時,取出不遞減順序中第 n 個數
不過,要注意取的時間點,假設在只插入 m 個時,那麼也就只要那 m 個去做排列
給你兩數 n 和 m(n,m <= 30000)分別代表插入元素多寡以及取得次數
接下來 n 個由空白或換行隔開之數依序為每次要插入的元素
接下來 m 個由空白或換行隔開之數依序為每次取得元素時,black box 中元素個數
對於每次取得元素,請輸出所求之數,以空白或換行隔開,兩組測資間需空一行
---- 分隔線 ----
由於插入與取得都大到 30000,而且並不是一次處理,是逐漸增加資料的
因此插入排序法的 n^2 效率不夠,更別提快速排序法了
使用匪書提的快速排序法的運用,也就是只對我們所想要的那元素所在去做快排
假設現在切兩塊,左邊 3 個,右邊 4 個,而我們要第 6 個
故知在右邊,就不再遞迴去把左邊排好了;這樣算上搬移次數仍不夠快
因此使用二分搜尋樹變形一下,插入和取得都只花 log n,仍不夠快
討論板說平衡樹會過,或許是測資陰險到會讓二分搜尋樹傾斜,變成插入取得都要 n
只好用不會傾斜掉的 minheap 配 maxheap 解決這題
詳細方法與分析,請見筆記部份
操作兩個 heap,只要 0.080 就跑完了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/10/30
嗯,最直觀的方式是直接排序後,取陣列中我們所要的元素
但是如果有多次詢問,又有多次增減元素時,效率便不是那麼地好了。
假設增加 n 次,那麼效率會從 n log n 變成 n^2 log n
那麼,如果使用插入排序法?嗯,可以將其變成 n^2,效率較佳
不過即使使用二分搜尋來做插入排序,仍不免最差情形搬動仍要 O(n)
即使搜尋上,已經降為 O(log n) 了,取得元素是 O(1)
如果考慮以部份快速排序法,也就是拿快速排序法去變形
直接針對某個範圍去取時,在切割後會分成左邊一塊和右邊一塊
如果剛好切完後中間即為所求,則得解;否則選擇往左或往右其一
因為我們只對要求的那個有興趣,再增加元素後原本不相干的排了也沒意義
這樣可以將搜尋降為 O(log n),最差情形仍為 O(n),於是仍是最壞 O(n^2)
即使使用亂數快速排序法,還是只能把搜尋穩定一些,仍避不了不少的資料搬移
插入的動作為 O(1),但比起以下的方式資料搬移量仍多了些
如果使用二元搜尋樹,則在非極度傾斜下插入為 O(log n),最差仍為 O(n)
欲使用 log n 的方式取得第 n 個元素,而非中序走訪時,有一法可用
額外記錄左子樹的節點數以及右子樹節點數,然後在遞迴插入元素時
於回溯中調整,只需要 O(log n) 的加法即可調整
設一新節點其左節點數 1,右節點數 0,插入時走訪哪邊,哪邊節點數 + 1
若搜尋時要的 n 等於左節點數,則此節點之值即為所求
否則若小於左節點數,向左子樹搜尋;否則減去左節點數後向右搜尋
在非極度傾斜下此法速度甚快,但有傾斜的問題
若使用 heap 來保存則不會有傾斜之慮
由二元搜尋樹的想法,得左小右大,即可利於搜尋
因此設置兩 heap,左為 maxheap,右為 minheap
若比 maxheap 的 root 小,則放 maxheap,否則放 minheap
這樣可以維持 maxheap 所有節點小於等於 minheap,並且可將 min 和 max
給 pop 出來放到另一邊,來調整兩邊節點數
設求第 n 個,若左邊 l 個,右邊 r 個
則看 l 若等於 n,則 maxheap 之 root 即為所求
否則若 l 小於 n,則在 minheap 中 pop 一些數並 push 到 maxheap 中
直到 l 等於 n 為止,若 l 大於 n 則做相反調整
如此調整次數雖多,但由於 heap 不會傾斜,所以效率上相當穩定
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/10/30
嗯,不好寫的一題呢…感謝討論板的強者,這 cut 便宜又大碗啊…
翻譯一下
給你一數 n,試求一數列其首項為 1,末項為 n,則除第一項外
任一項皆為數列中其它兩項之和(此兩項不一定要相異)且數列長度最短
當然也有可能相同長度情形下有數種情形,每一種都可以
請注意 n <= 10000
---- 分隔線 ----
首先,不難想到取其 log 值為最小值,然後用 IDA* 嘗試所有可能長度
直到找到解為止,如此可保證數列長度最小;使用 IDA* 時可以用很簡單的估計
如果,即使一直使用最大數乘以 2,也無法達到數字 n 的時候,就停止
加上這樣的估計,很好寫而且跑起來很快,0.010 就跑完了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
▲ sa072686 改@2007/10/30 Tue 15:50:29
作者: sa072686 at 07/10/30
嗯,不難解的一題,不過有些陰…
翻譯一下
現在在比賽建道路,看誰建的道路最長
建的道路長度定義為,不重覆走到任一條路的情況下能走的最長的路
並且,每條路的長度都是一樣的。
圖形也未必總是連通的。最多 25 個點和 25 條邊,求最長路徑長多少?
兩點間可以有多條邊。
---- 分隔線 ----
使用 DFS 暴搜即可,但注意未必連通,因此依定義來講
每個 union 必不會走到重覆的路,故解為每個 union 所能走最長長度之和
做 DFS 時順便做 union set 即可,即使完全不加 cut 暴搜也只用 0.010 就跑完了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.122 (台狼一中)
作者: sa072686 at 07/10/30
不難寫的一題。雖然擺在置底文的 DFS 中,不過擔心 k <= 1000 會炸…就沒用了。
不過別問我會不會炸,我沒試過…(汗)
翻譯一下。
現在有個大盜偷了蒙娜麗莎的微笑正要逃跑。雖然它很難偷,但畢竟是神偷
所以還是偷到手了。不過接下來要躲警察追緝,因此要連搭 k 日飛機
每日搭一次,在 n 個城市(n <= 10)中飛來飛去,一天換一個城市,直到警察跟丟為止
才回到她和她的客戶約好的城市,將它交給委託她的人。
雖然她偷的是很昂貴的畫,但她仍希望能夠花最少的花費來躲避警察追緝
即使她是個神偷,面對那麼多的班機,甚至每天價錢還不一樣,仍是束手無策
而這也是你現在會被請來這裡的原因。給你許多她要逃跑的情形
每次以一行包含 n 和 k(k <= 1000)代表她要在 n 個城市中飛來飛去
以巴黎(編號 1)開始,並且在飛 k 天之後到達約好的城市(編號 n)
接下來有 n(n-1) 行,前 n-1 行代表從編號 1 的城市到其它城市的班機價錢
(也就是到 2、3、4、…、n),接下來的 n-1 行代表從編號 2 的城市到其它城市
班機的價錢(也就是到 1、3、4、5、…、n),依此類推
每行代表兩城市間班機價錢,會先有一數字 d 表示每 d 天循環一次
接下來有 d 個數字,代表每一天的價錢,如果價錢為 0 表示沒有班機
比如說 d = 3,則第 2、5、8、11、…天都是一樣的情形。
求所需的最小花費為何,若無法恰於第 k 天飛到,則無解
---- 分隔線 ----
雖說置底文將之列為 DFS,但由於 k <= 1000,因此雖 n <= 10,仍不敢以 DFS 解之
嗯,如果有人鼓起勇氣用 DFS 試之,請分享心得,謝謝
由於只有 n 個城市,飛了 k 次,要求最小花費,故以 DP 解之較佳。
因此可將第 p 次飛到城市 q 視為相同的狀態,設 DP[i][j] 為第 j 次飛到第 i 城市
之最小花費,可得狀態轉移方式:從第 k 城市第 j-1 次之最小花費
再加上當天從 k 城市飛到 i 城市之花費,取最佳值,不過前提是當天有班機
且第 j-1 次飛得到城市 k。如此一來便可以 O(n^2 * k) 的效率得到解答
0.000 sec AC。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.122 (台狼一中)
作者: seanwu at 07/10/30
11329 Curious Fleas
在一個4*4的地板上, 共有6隻跳蚤, 你要用一顆骰子把牠們全部粘起來 (神經病..)
給你一個4*4的陣列, 由 '.', 'X' 和 'D' 組成, 分別代表空地, 跳蚤和骰子.
每個格子裡(包括地板和骰子上)只能容納一隻跳蚤. 骰子可以在地版上滾動,
如果骰子的一個空面壓到了地板上的一隻跳蚤, 則這隻跳蚤會被骰子粘上;
反之如果骰子上的一個有跳蚤的面壓到地板上的空地, 則跳蚤會回到地板上.
問骰子最少要滾動幾次, 才能將所有跳蚤粘起來?
如果無解, 請輸出 impossible
//時限: 20秒
<Hint E>
用隨便亂估計的IDA*跑了個0.290讓我覺得非常詭異...
用剩下幾隻跳蚤當做估計值就可以了
如果深度太大則視為無解
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-140.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/10/31
嗯,不好寫的一題。AC 率極低,不過兩次就 AC 掉還算不錯。都陰在小測資…
翻譯一下
給你 n 代表棋盤大小(0 < n < 81),空一列後接下來 n 列每列有 n 個字元
代表著這 n^2 大小的棋盤的盤面。現在要請你當實況轉播人員
對於一個盤面你必須能快速分析出盤面。這遊戲由黑白兩方輪流放子
白方的目的是從棋盤左緣擺出一條路徑通到棋盤右緣,黑方則是上緣到下緣
路徑的定義是一連串相鄰的棋子串起來的一條路。只有上下左右四個方向算相鄰
以 'W' 當作白子,'B' 當作黑子,'U' 當作空格,棋子只能放在空格中
現在輪到白方下子。你必須判斷盤面是白方已勝、黑方已勝、白方差一子獲勝、
黑方差一子獲勝或以上皆非。判定為黑方差一子勝時僅當白方放子後未能獲勝
且在白方不放子情形黑方放一子可勝。
(附簡單可眼算之測資)
---- 分隔線 ----
嗯。其實說難也不難,就情況多了些。
首先我的方法是利用類似 floodfill 的方式填子,先從白色開始
就往下深深看有沒有辦法到右緣,並且如果在路上有碰到相鄰著的空格
那麼如果還沒踩過空格就給它踩踩看,如果找到一條路徑就脫出
並且同樣一方的情形,可以不必清空盤面,走過就不用再走了。
走過如果有路就有路,沒路就沒路,頂多是踩過 'U' 後走得到終點的路
如果沒踩 'U' 也走得到,就再走一次,或是特別標記
因為有可能像以下盤面:
4
WWUW
BWBW
BWBW
BWWW
另外注意以下測資,由於解答很明顯,因此就不附解答了
1
U
1
W
1
B
2
UU
UU
2
BB
BW
2
BB
WU
這些是比較易錯的。利用此法,0.010 即可 AC。
其實是因為還做了很多無謂的判斷擋小盤面…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/10/31
不難寫的一題。類似字串分析的東西。
翻譯一下。
給一個只含大寫 A 和 B 的字串,然後判斷是否為三種情況其中一種,也有可能都不是
第一種是 O = A
第二種是 O = OAB
第三種是 O = BOA
---- 分隔線 ----
由於 O 的長度不確定,所以不太好做;做錯又要回溯又要處理一堆麻煩的
因此我限左界和右界,反正不是接尾就是接頭尾,剩下的再去判斷是什麼
這樣限定範圍之下,判斷用的函數都一行解決,很快就寫完了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/01
不難寫的一題。要一點點的…物理基礎(謎:速度乘時間等於距離誰不知道…)
翻譯一下
給你 n 個紅綠燈(最多 6 個),每個紅綠燈給你位置(離起點之距離,實數)
以及綠黃紅(整數,依此順序)燈的秒數,一開始時是從位置 0 開始
並且全部紅綠燈都剛轉綠燈,且可以在紅燈開始或結束的一瞬間衝過去
而通過紅綠燈的時間可以只是一個瞬間,但主角是個好市民
他不會開超過時速 60,但想早些回家,也不想開慢於 30
求有多少整數速度能夠一路等速度地開,不用加減速也不會闖到紅燈?
---- 分隔線 ----
就枚舉 30 到 60 之間所有秒數,判斷一下即可
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/11/01
腦殘題一題。欲衝題數者可試之。
翻譯一下。
有個程式師因為不滿被炒魷魚,就把公司的資料庫的資料通通轉換成其它數字系統
使得公司所有的資料都換了一個進位制,所有資料便都無法使用
只有一個提示,就是他所用的底是可使得某筆資料為完全平方數的最小的底
給你很多組資料,每組資料一列,包含一筆十進位制整數
請算出最小的底使得它的值為完全平方數,並且以它表示時換算成十進位制後
值不會超過 1000000000。
---- 分隔線 ----
就很腦殘地一個底一個底試,試到出來為止,就把它輸出就好了
檢查是否為完全平方數只要開方再乘回來看看就知道了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/11/01
不難的一題。又是加解密題型。
翻譯一下
給你一個 key 值為 k,然後一個長度 n 的純文字文件,僅包含 '_'、'.' 和小寫字母
/* 那是字元,不是表情符號唷…|||| */
然後加密為一個長度 n 的密文,把它們轉成數字陣列後加密,轉數字方式:
對於每個字元如果是 '_' 則值為 0,'.' 為 27,否則 'a' = 1,'b' = 2,…依此類推
加密規則如下:
ciphercode[i] = (plaintext[(k*i) mod n] - i) mod 28
這裡 ciphercode 代表密文,plaintext 代表明文。mod 運算對於負數的運算規則是:
如果 x mod y 且 x 為負數,則以 C 的 % 運算子或 PASCAL 的 mod 運算子計算後
把運算結果加上 y 即可。並且保證給的測資都必有唯一解。給你 k 和密文,請輸出明文
---- 分隔線 ----
其實不難,對密文中每個字元做一次運算求出 plaintext 的字元即可。
或許 mod 運算是比較難反推,不過也不難看出:
如果 i mod j 之後得到 i,而我們想讓它得到 k 且 k > i,則 i 加上 i 和 k 的差
就可以了,比如說 10 % 8 為 2,但我們希望找到一數 % 8 為 4,那麼 12 即為一解
如果 10 % 8 為 2,但我們希望找到一數 % 8 為 1,那麼用 1+8 減去 2,即知
10 該加上多少,才是一解。有這概念只要隨便拿個喜歡的數去 % 看看
然後就可以計算出原本的 plaintext[ki mod i] 是多少了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/11/01
嗯。不是說很難的一題。
翻譯一下
現在有個網路遊戲很好玩,可是有時需要擲骰子,因此需要擲骰子。
可是如果給使用者丟完再輸入則怕作弊,因此要讓使用者拍下擲出的骰子的照片去分析
給你一個大小為 h * w 的圖(5 <= h,w <= 50),裡面可能有很多個骰子
其中兩個點相鄰的情形僅有共用一條邊時,即使共用一個點也不算
以 '.'(不是表情||||)代表背景,'*' 代表骰子,'X' 代表骰子上的點
以一群「最大相連」的 '*' 和 'X' 的集合代表一個骰子,且一群「最大相連」
的 'X' 代表一個點。最大相連的定義為,集合中沒有任一點與非 '.' 卻又不在集合
中的點相連。請求出每個骰子的點數,並以遞增順序輸出之。
---- 分隔線 ----
就用 floodfill,我是用兩層,一層把 '*' 填掉,碰到 'X' 就另外用一層
把 'X' 填成 '*',然後再呼叫一次填成 '.',這樣可以避免如下測資:
5 5
XXX*X
XXX*X
.....
X***X
XX***
10 5
..........
..X**.*X..
..........
...*X*X...
..........
10 5
..........
..X....X..
..........
...*X*X...
..........
10 5
..........
..X....X..
..X....X..
..XXXXXX..
..........
10 5
..........
..X*X.....
..*X*.....
..X*X.....
..........
10 5
..........
..X*X.....
..*X**....
..X*X*....
..........
5 5
XXXXX
XXXXX
XXXXX
XXXXX
XXXXX
0 0
解答
Throw 1
2 2
Throw 2
1 1 2
Throw 3
1 1 2
Throw 4
1
Throw 5
5
Throw 6
5
Throw 7
1
(轉自討論板)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/11/01
很容易 TLE 的一題。不過在下還是暴搜過了…(2.720,差一點點炸掉)
嗯,講一下方法…真是個大大的邪門歪道啊(茶)
噢不不不,是個高明的技巧(毆)
總之感謝某個大陸人啦。之前爬文時爬到的技巧。
---- 分隔線 ----
嗯,用 DFS 暴搜穩 TLE,sample 那組就要跑挺久的
不過開個鏈結串列取代用陣列盲搜,就可以 AC 了(點頭)
要小心的是十位數的話 int 會炸掉,要開 long long
結果 runtime 就從 1.9 變 2.7 了(淚)
算了還是過了(茶)
沒辦法嘛,如果不想開 long long 然後每次都取餘的話,什麼都沒改一樣 TLE
嗯,不過秒數極差,幾乎是卡在邊邊過的,不知道這題的正解為何?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.122 (台狼一中)
▲ sa072686 改@2007/11/01 Thu 14:21:24
→ sa072686 推:第 1200 篇呢(茶) 1101 14:21
→ seanwu 推:有一種好東西叫旋轉法 1101 18:18
→ seanwu 說:還沒去試過, 不知道行不行 1101 18:23
→ zenixls2 推:what's that? 1101 23:23
→ zenixls2 推:seanwu也在邊邊啊! 1101 23:23
→ sa072686 推:旋轉法?1006x那題的嗎? 1102 07:36
作者: sa072686 at 07/11/01
嗯,有些小麻煩的一題啊。四則運算的。
翻譯一下。
給你一個四則運算式,規則如下:
<expression> := <component> | <component> + <expression>
<component> := <factor> | <factor> * <component>
<factor> := <positive integer> | (<expression>)
一個 factor 可為一個正數(注意:討論板說 0 也算正數)或一個 ( expression )
一個 component 可為一個 factor 或一個 factor 乘上一個 component
一個 expression 可為一個 component 或 component + expression
簡而言之有一運算式,裡面必須全為正數(題目說的,可是 0 也合法)
然後之間有一些加、乘號,或是括號;兩個數值間皆需有運算符號,它也只在兩數值間
而數值可為單一數字、一個運算式或一個括號中間的運算式之值
若有不合法的表達或不合法字元則輸出 ERROR,若合法則輸出其結果
使用 C 的 float 或 PASCAL 的 real 皆不會 overflow(討論板說 32-bit integer
就可以了,不用開到浮點數)
本題使用 gets 或 scanf 讀都可以。
---- 分隔線 ----
算是很煩的一題。用標準的轉後序後運算,在轉的時候檢查
如果有不正確的就中斷然後輸出 ERROR 這樣。
以下附一些討論板的測資
26
32
-12
+12
0
12+34
1*(2+3)+3
1(2+3)+3
qwe323
1*(2+3)+399
1*(1*(1*(1*(1*(1*(1*(1+1)+1)+1)+1)+1)+1)+1)*(8+1)
1*(1+2+3)*(1+3)+(1+2)*8
((-1)*9)
((1)*9)
((0)*(9))
1* (1+ 2 + 3) * (1 + 3)+ (1 + 2)*8
2*1*1+1*1*1000*1*1000*1*1
1000 + 2000
1000 2000
1+2*3
1*2+3
(1*2)*(3)
1+2+3
(5)
((20*((((((((100)))))))*100)))
((20*((((((((100))))))))*100)))
正解
32
ERROR
ERROR
0
46
8
ERROR
ERROR
404
72
48
ERROR
9
0
ERROR
1000002
ERROR
ERROR
7
5
6
6
5
ERROR
200000
ERROR
不過剛說 gets 和 scanf 都能 AC,因此倒數第四組算不合法
有空白字元的也都不合法,測資中不會有
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.122 (台狼一中)
作者: seanwu at 07/11/01
11332 - Summing Digits
給你一個數N<=2000000000, 現在對N進行如下的操作:
N = (N的每一位數字加總)
重覆這個動作直到N<10為止, 輸出N
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-140.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ sa072686 推:2 min…好物,又一新手上路用題 1101 19:29
作者: sa072686 at 07/11/01
不難寫的一題,只是有些小麻煩…嗯,code 又醜掉了,又臭又長的(汗)
翻譯一下。
雖然是簡單的、看起來沒差多少的程式碼,但只要執行次數一多
像跑個幾億次,速度就差很多很多了。現在給你 2n 個數(n <= 10)
前 n 個數是一開始的初始數字,後 n 個是目標數字
在一個堆疊為主的系統中,你要想辦法寫一個函數達成目標
有五種操作,分別是相加、相減、相乘和相除,以及重覆。
前四種是把前兩種 pop 出來後,後 pop 者對前 pop 者做運算
重覆則是 pop 一次,然後 push 兩次剛 pop 出來的東西
這樣,並且前四種運算要在堆疊有兩個或以上元素才能做,數字絕對值不得超過 30000
一開始每個堆疊中都放著輸入中所給的那個數字
目標是數次操作後,每個堆疊中只剩一個數且那數是每堆的目標數
如果會超過 10 次就不考慮。如果有多組解,輸出操作數最小者
如果仍有多組解,輸出字典順序最小者。
---- 分隔線 ----
用 IDFS 硬搜,我是加了 IDA* 估計了一下有沒有可能達成目標
估計方式是如果到限定長度還沒辦法操作到只剩下一個數字
那麼就 return 掉,其它照著模擬硬搜就好了。
如果要字典順序,就先做字典順序小者
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/01
不難寫的一題。算字串題?
翻譯一下。
給你很多個由 0 和 1 組成的字串,要算出每個 group 是否是要求的類型
一個 group 以一行 "9" 結束。每個 group 彼此不相干。字串長度最長 10 最少 1
判斷一個 group 中是否每個字串都不是其它字串的前綴
前綴的定義為長度為 n 的字串 a 恰與另一長度 >= n 之字串 b 之前 n 個字元相同
---- 分隔線 ----
亂搜應該也會過啦,我比較懶一點,全讀進來再排序再兩兩檢查…
排序後兩個字串沒湊在一起的話就一定互不為前綴關係
原因和字典順序有關,嗯…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/11/01 Thu 20:02:26
作者: sa072686 at 07/11/01
嗯,好寫的一題。
翻譯一下。
/* 譯註:題目講的運算我看不懂,可是似乎不用也可以…? */
給你點的數目 m 和要走的路徑長 n(m <= 10,n <= 5)
接下來是 m*m 的鄰接矩陣表示兩點間有無通路。問從第一點開始
(每個點編號從 1 到 n)有幾種方式可以走 n 個節點
並且這些節點都各不重覆,印出這些路徑。如果沒有請印出 no walk of length n
/* 譯註:題目相當陰,sample 都走得到,所以…
請特別小心,那個 n 是變數,要用 printf("no walk of length %d\n", n);
而非只是 printf("no walk of length n\n"); */
---- 分隔線 ----
嗯,其實就只要 DFS 限深硬衝就好了…(茶)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:那個是矩陣法, 可以在O(log m)內算出長度為m的路徑個數 1102 20:18
→ seanwu 說:更正, 是O(n^3 log m) 1102 20:19
→ sa072686 推:看不懂…|||| 1102 22:03
→ seanwu 說:呃...就是說, 我用鄰接陣列乘上一次, 就等於用BFS走一步 1103 15:02
→ seanwu 說:所以乘上m次後就等於走m步, 然後算X^m時用分治法到O(logm) 1103 15:03
作者: seanwu at 07/11/01
11330 - Andy's Shoes
Andy有N雙鞋子(N*2支), 有N種不同的顏色. 每天Andy都會把這些鞋子排放整齊,
但他只知道要把鞋子的左右腳配成一對, 忘記應該把相同顏色配在一起才能算是一雙鞋.
現在鞋櫃上的鞋子已經是 左-右 左-右 左-右 ... 的排好了, 不過顏色仍不完全正確.
現在, 問你最少需要多少步驟(一次可以交換兩支鞋子)才能將鞋子排列整齊?
<Hint E>
可以得到, 右腳不需搬動而只需搬動左腳, 且每次皆是交換兩支左腳
以輪換的概念來將所有左腳交換到位就是最少的步驟
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-140.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ newmoon 推:原來編號不是1到n阿 1102 00:33
作者: seanwu at 07/11/01
11331 - The Joys of Farming
John擁有一個牧場, 養有b隻公牛和c隻母牛. 想當然他的牧場裡有b+c個欄圈,
用來養這b+c隻牛. 牛是好鬥的, 公牛不喜歡看到公牛; 母牛也不喜歡看到母牛.
好在這些欄圈之間有一些障礙使得牠們不一定會見到彼此.
給你b,c,a表示b隻公牛和c隻母牛和底下有a行,
每一行有兩個數字表示這兩個欄圈是會互相看見的.
問你能不能找出一個分配欄位的方法讓公牛不會看到公牛, 母牛也不會看到母牛?
<Hint E>
問你這個圖是不是二分圖(BFS or disjoint-set),
以及能不能剛好分成b,c兩群(DP)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-140.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/11/01
嗯,不好寫的一題…
翻譯一下。
因為雙向道路很容易相撞,所以想盡量把現有雙向車道改成單向
但又不希望有些地方就此走不到或進得去出不來,所以從任一個街道的交會口
都要能夠到達任一其它的交會口。最多有 1000 個交會口,每個交會口
最多有 4 條街連到它,任兩交會口間最多只有一條街相連
不會有一條街連接兩個以上的交會口,有可能有一個交會口其實只連到一條街
你的任務是在維持任兩交會口都有路可通行的前提下,讓雙向車道盡量地少
如果有多組解任一皆可,任何順序都可以。輸入一條街只會給一次,並且輸出時
輸出 ij 則表示從 i 到 j,如果不能改成單向則 ij 和 ji 都要輸出
---- 分隔線 ----
嗯,用 DFS 枚舉每一條車道,如果繞得回去某一走過的點,則這一圈皆可通行
如果繞不回去,那那個點就要雙向才行…繞不繞得回去我是記錄 depth
因為,有時只能繞回部份,所以我用 union set 看能不能攪在一起…
回溯時無法攪在一起就要開雙向了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/11/01
低調的800, 是不被允許的.
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-140.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ silentvow 推:好威阿!! 1101 23:28
→ PG 推: 好威阿!! 1101 23:30
→ ben196888 推:主角威能~!! 1101 23:46
→ sa072686 推: 好威阿!! 是誰 800 啊?(張望) 1101 23:46
→ AikoSenoo 推:不是我 謝謝大家\( ̄▽ ̄\)﹏﹏ (純亂入) 1102 23:33
作者: sa072686 at 07/11/02
相當好寫的一題。題目理解了其實很輕鬆。
翻譯一下。
通常印東西是一頁一頁印,可是如果是要訂成書的,就不一樣了
一張要印兩次,共四頁,而且印的順序不太一樣;
像印四頁的書,那麼第一張的正面會印 4、1 兩頁,背面是 2、3
給你要印的頁數(最大 100),輸出每一張紙正反面要印的頁數和印法。
如果有某一面只需要印一頁,那麼沒印到那頁就輸出 Blank
如果有某一面不需要印,也就是兩頁都 Blank 的話就不要輸出。
---- 分隔線 ----
照做就對了。反正印的時候規則也就是從第一頁開始,印到第 m 頁
而 m 為大於等於要求頁數 n 之 4 的倍數。
以兩個指標 i,j 指向 1 和 m,然後逐次遞增遞減直到交錯為止
這些就是每一面要印的頁碼。還不懂的話可以去拆書(?)或去問印過書的人看看
/* 其實應該也有一些學校講義是印這樣的(點頭) */
正面印 j,i 反面印 i,j 就可以了。
很簡單的模擬。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/11/02
嗯,關於騎士的問題。
翻譯一下。
給你一個 n * m 的棋盤(n,m <= 500)問能擺放幾隻騎士不互相攻擊?
---- 分隔線 ----
騎士走法應該大家都知道,它能攻擊列和行的差分別為(1,2)或(2,1)的地方
因此設列寬為行與列之最小值
則列寬 1 時可以擺到滿
列寬為 2 時比較麻煩,最佳擺法如下:
kk..kk..kk..kk..kk..kk..
kk..kk..kk..kk..kk..kk..
列寬在 3 或以上時,可以用交錯的排法擺到棋盤半滿
.k.k.k.k.
k.k.k.k.k
.k.k.k.k.
k.k.k.k.k
.k.k.k.k.
k.k.k.k.k
.k.k.k.k.
k.k.k.k.k
.k.k.k.k.
以上。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/11/02
很好寫的一題。
翻譯一下。
有一種機器可以丟一個數給它,它會給你另一個數。
但是有的數不合法,這時它只會跟你說這不合法。
對數字的定義是一個長度不為 0 的十進位制整數。產生數字規則如下:
一、數字中任一位數皆不得為 0,否則為不合法。
二、若一數字 X 合法,則數字 2X 會產生 X 這個輸出。
三、若一數字 X 合法且產生 Y 這個輸出,則 3X 會產生 Y2Y 這樣子的輸出。
四、若不符合以上情形皆為不合法。
給你一數字,請模擬此機器給出正確輸出。輸入數字在 10^32 以內,並且
輸出的長度絕不會超過 1000 位。
---- 分隔線 ----
其實,照做就好了…沒什麼太特別的技巧
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/11/02
嗯…又是斜線迷宮類型。
翻譯一下。
給你一個斜線迷宮(長寬皆不會超過 75)
問其中有幾個 cycle 存在,並且最長長度多少。
長度計算是算格子的,每一格放一個斜線,cycle 長度看跨了幾格
---- 分隔線 ----
斜線迷宮其特性為每條路必為單行道,沒有分支。故 cycle 一定是繞回自己。
因此從邊緣進去者必定會再從某個地方出來,不可能繞得回自己。
先從四個邊緣進去把所有路搜過一遍
再找沒搜過的路,必為 cycle,找最大者即可
如果覺得不好判斷長度,甚至走訪都不好做
試著把斜線視作雙面的鏡子,然後以光線射之
看光線走訪路徑即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/02
嗯,不難的一題。
翻譯一下。
給你兩個字串,以及一個堆疊,問有幾種方式可以透過堆疊操作
使得第一個字串轉變成第二個字串?放到堆疊的不能夠再放回原字串中
並且堆疊為空時不得 pop,pop 後一定放到另一個字串,也不得放回堆疊
最後這個字串要等於目標字串。
/* 其實很像 rails 那題,不過這裡要所有的可行解 */
---- 分隔線 ----
其實也就限掉深度為 2 * m(m 為第二字串長度)之後暴搜即可
反正最少要 m 次 pop 和 m 次 push
最多也是 m 次 pop 和 m 次 push
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/11/03
11324 - The Largest Clique
給你一個有N個點M個邊的有向圖(N<=1000, M<=50000)
現在找出一個點集, 使得在這個點集中任兩點u,v皆有路徑u->v或v->u (或兩者皆有)
問這個點集最大可以有幾個點?
//有趣的圖論題...
<Sol pagedown>
先考慮特殊一些的圖: 有向無圈圖
很明顯在這個圖中最大的點集, 是一條路徑, 最長的路徑
(不能是tree, 一個root的兩個child之間沒有任何路徑, 也不會是cycle, 因為是無圈圖)
要找出最長路徑是很容易的, 因為是無圈圖, 可以依拓樸順序來計算(做拓樸排序順便算)
考慮一般的圖, 如果這個圖裡面有圈, 其實是可以把這個圈縮成一個點的,
因為圈上的任兩點皆有雙向的路徑可以到達對方
進一步推展可以得到: 只要是強連通分量, 因為其中的任兩點間亦有雙向的路徑,
就可以把整個分量縮成一個點.
實質上, 收縮後的圖就是SCC, 且SCC是一個有向無圈圖,
所以可以依先前的方法來計算 (每個點的權重為該點原本的強連通分量中的點數)
//第一次寫做了一個O(VE)的消圈算法...
//後來直接做了O(V+E)的SCC和O(V+E)拓樸排序, 總時間複雜度 O(V+E)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-140.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
▲ seanwu 改@2007/11/03 Sat 15:27:54
作者: sa072686 at 07/11/03
嗯,不難做的一題。
翻譯一下。感謝 gba356 學弟協助翻譯。
今天有種遊戲是拿飛鏢去射一個靶,靶上有 1 到 20 分這 20 種區域
要判斷射三支飛鏢後是否能恰好達成某一分數,以及其組合數和排列數
若射到某個分數的區域,則可選擇得到它的一倍、兩倍或三倍分數
也可以選擇放棄射某支飛鏢,或是沒射中靶,這樣那次算 0 分
如果恰射中紅心則得 50 分。但無法選擇得到它的兩倍或三倍分數
給你目標分數 n(n <= 999)求有幾種方式
注意 sample,同一支飛鏢射出同分的情形皆算同一種情形
---- 分隔線 ----
由於一支飛鏢同分算同一種狀態,因此枚舉所有可能分數
再用 DFS 枚舉三支飛鏢所能得的分數,去算組合數及排列數即可
因為每次射飛鏢情況都一樣,所以可以做預處理
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/03
嗯,很好做的一題…
翻譯一下。
給你很多方塊(立方體),它們被正置於座標平面中,以四個數字代表其角落 xyz 座標
以及邊長,問所有方塊相交的體積多大?
---- 分隔線 ----
嗯,轉成兩個角落的座標再做相交判斷即可。
兩方塊的某一維座標小者中取大者,座標大者中取小者即為相交方塊座標
若新方塊座標小者比大者大或相等則表示無相交
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/03
很抱歉讓大家失望了,這是 C 的暴力破解版
如果是想找 STL 的寫法的可以轉身回家了。
next permutation,依字典順序排起來的下一個排列方式。
就字典順序來看,可知我們必須讓它變大,卻又要儘可能地小
變大的條件是,它的某一位的字母變大。
儘可能小的條件是,變動的字母在字串中的位置中越後面越好
是種 greedy 的概念。
因此,從字串尾掃回來,找到的第一個可以變大的字母
當然因為要維持原本的字母,只是想換種排列
故從字串尾搜尋回來,找到第一個會小於已搜尋過字母的字母
將其與後面比它大的最小字母交換,再對它之後的字母排序即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/11/03 Sat 20:05:56
→ silentvow 推:next_permutation(s+strlen(s)); xDrz 1103 20:25
→ gba356 推:是這樣吧:next_permutation( s,s+strlen(s) ) 1103 21:17
→ silentvow 推:阿手殘xDrz 1104 00:24
作者: sa072686 at 07/11/03
主要是要看,括號是否有兩兩匹配好。
空的字串是合法的。
如果字串 a 合法,則 aa 或 (a) 皆合法
不過,其實還有更單純的判斷方式。
想當然右括出現時,它一定要有一個相應的左括
因此我們用堆疊把左括丟進去,碰到右括就去 pop 出來看看
不符合的情形,就是匹配不成功;也就是有右括沒有相對應的左括
如果整個字串搜完,堆疊中還有剩餘的左括,就代表有左括沒相對應的右括
亦不合法。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
φ veriw 轉:到 [veriw] 看板,于 2007/12/09 Sun 23:42:43
作者: sa072686 at 07/11/04
不好寫的一題…嗯,感謝討論板。
翻譯一下。
給你一個圖形,上面有一群相連著的非 ' '、'_'、'*' 及 '#' 的字元,視為牆壁
這些會圍成一個區域
必僅含一群相連的牆壁(相連指一連串相鄰著的字元,上下左右和斜向八方向都算相鄰)
然後會有一個 '*',如果它出現在牆外,則牆的外圍要圍上一層 '#'
如果在牆內,則圍在牆的裡面。圍起來的意義是上下左右四方向有 '#' 則算圍起來
斜向不用沒關係。以含有 '_' 的一列分隔測資,圖大小在 30 列以內,每列 80 字元內
但是每一列不一定要一樣長。
---- 分隔線 ----
嗯。拿 '*' 去 floodfill,填的時候如果和牆相鄰就填 '#'
不過,如果有結尾空白會變成 PE
並且同一張圖,牆未必只有一種字元
要小心如果原圖,牆在最右邊那個字元又需要填外圍時,還是要填的
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: zenixls2 at 07/11/04
sa學長勿入....
這是C++
WA了好幾次
也不知是哪做錯了
hidden after AC
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
main()
{
int n;
string str;
cin>>n;
while(n)
{
cin>>str;
sort(str.begin(),str.end());
cout<<str<<endl;
while(next_permutation(str.begin(),str.end()))
{
cout<<str<<endl;
}
n--;cout<<endl;
}
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.107.133 (中滑一番)
→ sa072686 推:糟了入了才看到警告耶(炸) 1104 15:10
→ DarkKnight 說:A blank line should follow each output set. 1104 15:32
→ zenixls2 推:可惡!中譯說放在測資間 1104 16:08
▲ zenixls2 改@2007/11/04 Sun 16:12:27
▲ zenixls2 改@2007/11/04 Sun 16:12:55
▲ zenixls2 改@2007/11/04 Sun 16:13:21
作者: sa072686 at 07/11/04
很好寫的一題。
翻譯一下。
有種遊戲黑方和白方在 n^2 大小的棋盤上(2 <= n <= 200)輪流放子,
白方若有一條路從左邊通到右邊則勝,否則若黑方有一條路從上面通到下面
一條路指的是一群相鄰的子。相鄰的方式有六種,詳見題目。
給你一個盤面,上面放滿著棋子,黑方與白方最多相差一子
問此盤面誰勝?已知放滿的盤面,必有一方勝且僅有一方勝。
---- 分隔線 ----
floodfill 即可。選其中一方去做,若勝則勝,若非勝則負
因為必有勝負。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/05
有點數學…嗯。感謝 seanwu 學弟。
翻譯一下
給你 m 個圓(m <= 8)然後要以一個箱子裝下這 m 個圓
箱子的寬要最小,每個圓都要和箱子底相切,問箱子的寬最小多少?
---- 分隔線 ----
嗯。反正最多八個,用 dfs 暴搜 n! 就夠快了。
感謝討論板提供的常見錯誤,以及 seanwu 學弟的方法
如果是大圓接小圓再接大圓,那麼有可能大圓和小圓相切時會兩個大圓重疊
因此,保留每個圓和之前所有圓相切的情形下,最右邊的位置
這樣,就是不重疊的最佳位置。
然後最後每個位置加上半徑後的最左邊界與最右邊界差,即為箱子之寬
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/05
很好寫的一題。雖然數字大小有些嚇人…
翻譯一下。
給你一個數字 m(1 <= 5000 <= m)和一堆線段 l[i]、r[i](|l[i]|,|r[i]| < 50000
i <= 100000)代表線段的左邊界和右邊界,請用最少的線段覆蓋線段[0,m]
如果可以,請輸出最少線段數,然後將這些線段依左邊界大小排序
如果不行,輸出 0 即可。兩組測資間需以一空白列分開。
---- 分隔線 ----
若一線段可覆蓋目前所需覆蓋的點,那麼那線段就有用;否則沒用
如果找不到,則無解;如果找得到,那麼再找一個點覆蓋新的邊界
又,如果有多條線段可覆蓋目前點,那麼找右邊界越大的越好
因此在排序後以 greedy 掃過一遍即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/05
嗯,其實是個不難的模擬題。感謝 silentvow 幫忙 debug XD
翻譯一下。
給你一個 n^2 大小的數字方陣,將其切成很多圈(詳見題目的圖)
有四種方式,一種是上下翻轉,一種左右翻轉,兩種對角翻轉
給你 n(n <= 100)和 n^2 個數字,接下來有 m 行(m 為圖的圈數)
每行一個數字 T 表示接下來有 T 個數字,每個數字代表一種翻轉
將翻轉後的結果輸出,並且兩組測資間不得有空白列
---- 分隔線 ----
就…照著翻吧。||||
小心不要翻錯…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/06
一到五全包下啦。(茶)
在下教導學弟有方,謝謝大家(毆飛)
好啦開玩笑的XDDD
學弟們都很認真,真是不錯
再來…準備全國賽吧(茶)
題目與解法,待會貼板
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/06
先附題目,再附詳解。
第一題:身份證
判斷某身份證是否為真。詳細方式…那張表我不記得了呢
應該搜一下都有?總之它很暴力,嗯。
第二題
給你兩數 n、m,然後在 n 到 m(包含 n 和 m)中
要求有幾個數是三的倍數,卻又不是七的倍數。
/* 這題很陰…我被陰了(汗) */
第三題:計算機
給你包含 +、-、*、/、(、)、^ 和整數(有可能有負數)以及一些變數的多項式
給你每個變數的值,求結果為何?
第四題
給你許多點的座標,以及 k 代表要分成 k 組
請把這些點分成 k 組,並且每一組距離要近,如果有一點可放很多組
那麼隨便放一組都可以。並且這 k 組數量上並無限制也不一定要相同。
第五題
求小於 n 的數中,有幾個與 n 互質?(即,最大公因數為 1)
第六題
給你 n,求把 0 到 9 十個數字分成兩個五位數,有幾種方式可以讓這兩個五位數
它們相除的結果恰為 n?(可以有開頭 0)
第七題
給你一個字串可能包含小寫字母和數字,將其換位後輸出
換位方式像 abcxyz 則換成 azbycx。如果有數字則數字要先換完先輸出,才是換字母
如果交錯相雜出現,數字和字母獨立處理互不影響,並且先輸出數字再輸出字母。
第八題
給你 n 代表有 n 個學生,然後接下來每個學生三個數字代表國文、英文和數學成績
請算出每科的平均分數,以及這三個學生哪幾個哪些科目分數低於平均。
---- 參考解法 ----
以下是我對於每一題的解法。
由於用的方法都挺正規的,其實不用那麼麻煩也會過…
順便附上一些其他的解法,以及心得。
第一題:
暴力罷了。只是那個字母和碼的對照表很煩,用很多個 if 也是可以。
不過它除了幾個特例以外都有規律,也就是從小到大
所以我除了特例以外,都用減法來處理,反正都差不多
比如說 'A' 到 'H' 各是 10 到 17,可是 'I' 偏偏是 3x,不過後來又從 18 開始
因此我除了特例以外,都用減的
其它位數都是數字,減去 '0' 之後暴力寫一下判斷式即可
第二題:
唉,sample output 除了輸出有幾個符合條件數字以外,後面也用 // 接了所有答案
不過我以為那是註解給我們看的,也就沒輸出,後來才知道要輸出…
嗯,就因為這樣沒有滿分,有點小不完美
所以啦…枚舉所有數字,直接用取餘硬判斷即可。
第三題:
我把它轉後序表示,然後輸出了。因為有點長,所以等等另外生一篇文講它。
暴了 199 行的樣子。明顯地,八份程式碼都 1k,就它 3k…
不過沒出什麼 bug,寫得也算順。
第四題:
把點分成 k 組嘛…那麼當然這幾組彼此間距離要夠。
其實不太好想,不過想完了倒不難寫,和第三題的好想難寫恰相反。
我的想法是,直接把它分組的話…由於不確定要分在同一組還是分開
雖然距離要近,可是也不好決定…因此我決定先把每一組至少分給它一個點
剩下沒分到的再去看分到哪一組好。這樣,接下來每一組先決定一個點,也好分組
決定點的方式,從第一個點開始…去枚舉每個點,與目前分出來的每一組
由於和某一組離得遠不一定和其它組離得遠,這樣應該算同一組
我的判斷方式是取與所有組中,最近的距離最大者表示和每一組都遠
這樣,就把它放到新的一組去
然後,每組都放一個點後,每一個沒放過的點再去看離哪一組最近,就塞那組
就可以分完它了。
設點數 n,組數 k
則枚舉 k 組的第一個點,每組枚舉 n 個點,因此為 O(nk)
接下來枚舉 n 個點對 k 組每個點的距離,為 O(n^2),只是和每組距離分開算
實際上是算和每個點的距離。
比起深度優先搜尋類的方式,此法有多項式時間解
第五題:
由於 n 最大到 10000,因此直接枚舉做 gcd 也是會過的。
不過我是用公式解。找出 n 的所有質因數,假設是 a1、a2、a3、…
那麼結果數為 n * (a1-1)/a1 * (a2-1)/a2 * (a3-1)/a3 * …
因為可知那 n-1 個數中,每 a1 個數,就一個數擁有和 n 同樣質因數的數
因此要排除它們,排除剩下的再去排除其它質因數
由於都是排除質因數,所以不會砍到重覆…
拿砍過的數再去砍剩下的質因數,也不會互相影響
第六題:
五個位數。因此用 DFS 枚舉的話,是 C 10 取 5 的平方。
這樣其實有點大,有些慢,不過其實還可以接受
我的方法是五位數嘛,直接枚舉 1 到 100000,這樣
不過還是要檢查 100000^2 次,而且每次還要去檢查位數
但想,設兩個五位數為 a、b 好了,除完結果是 n
則得 a / b = n,移項得 a = n * b,故知 a 是 n 的倍數
因此枚舉所有 n 的倍數,也就是 a,然後 b 就用 a 除以 n
再看 a 和 b 每個位數有沒有重疊即可。注意 a 和 b 也不能互相重疊。
這樣,只要枚舉 100000 / n 這麼多個數,每個做 10 次去檢查重疊
因此,效率上就相當地高。教授說一組解即可,不過我說我寫找出所有解的方式
他說其實也可以。sample 還打錯…我問了他們才發現它錯了XD
第七題
字串的反轉方式就是,設長度 n
則輸出 1、n、2、n-1、3、n-2、4、n-3、…
我是用兩個指標 i 和 j,則 i=1,j=n
那麼在 i<j 的前提下,就輸出 i 再輸出 j,最後再看 i == j 的情形
因為 i == j 如果加在迴圈中,會重覆輸出中間…因此放在迴圈外判斷
由於分開處理,所以把原字串轉存成兩個字串,一為僅含數字,一為僅含字母
之後也不用反轉,直接依此規則輸出這兩個字串即可。
第八題
暴力把每科分數加起來,算出平均再去檢查每個學生的每科分數是否低於平均即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:C(10,5)^2 = 63504會不會太小了 xD 1106 23:02
→ seanwu 說:那我用dfs應該可以跑個幾千組都不會爆了 1106 23:03
→ sa072686 推:咦好像應該算排列數(炸) 1106 23:48
→ silentvow 推:10! = 3628800也是小得可以 xD 1107 19:20
→ LFKing 推:借轉~ 1021 23:52
作者: seanwu at 07/11/06
※ 引述《sa072686 (已無所懼。)》之銘言:
> 第四題
> 給你許多點的座標,以及 k 代表要分成 k 組
> 請把這些點分成 k 組,並且每一組距離要近,如果有一點可放很多組
> 那麼隨便放一組都可以。並且這 k 組數量上並無限制也不一定要相同。
這一題在定義問題的敘述上根本就有問題
> 第四題:
> 把點分成 k 組嘛…那麼當然這幾組彼此間距離要夠。
> 其實不太好想,不過想完了倒不難寫,和第三題的好想難寫恰相反。
> 我的想法是,直接把它分組的話…由於不確定要分在同一組還是分開
> 雖然距離要近,可是也不好決定…因此我決定先把每一組至少分給它一個點
> 剩下沒分到的再去看分到哪一組好。這樣,接下來每一組先決定一個點,也好分組
> 決定點的方式,從第一個點開始…去枚舉每個點,與目前分出來的每一組
> 由於和某一組離得遠不一定和其它組離得遠,這樣應該算同一組
> 我的判斷方式是取與所有組中,最近的距離最大者表示和每一組都遠
這倒不一定xD 你可以找到反例, 例如: 所有的點等距排成一長線的情況且k=4
> 這樣,就把它放到新的一組去
> 然後,每組都放一個點後,每一個沒放過的點再去看離哪一組最近,就塞那組
> 就可以分完它了。
同上, 排成一長線且k=4時分出來的4個初始點就已經不均勻了, 很明顯不是最佳解
> 設點數 n,組數 k
> 則枚舉 k 組的第一個點,每組枚舉 n 個點,因此為 O(nk)
> 接下來枚舉 n 個點對 k 組每個點的距離,為 O(n^2),只是和每組距離分開算
> 實際上是算和每個點的距離。
> 比起深度優先搜尋類的方式,此法有多項式時間解
很多在二維上分組的問題常常是NP, 不過這題我不太清楚 :P
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ chensc 推:推薦這篇文章。 1106 22:15
→ seanwu 推:你是想推 "敘述上根本就有問題" 嗎xD 1106 22:58
→ dust 推:我也想推耶XD 1107 15:25
→ newmoon 推:我看不懂這題 1107 16:05
→ seanwu 推:把點畫在紙上, 用直覺分組就是了 1107 19:03
作者: sa072686 at 07/11/06
一個四則運算式,可以一棵二元樹表示之。
每個葉節點放數字,非葉節點即放運算符號。
然後每棵樹的值為其左子樹與右子樹做節點上寫的符號的運算。
若是葉節點,則值為葉節點上數字的值。
例如 2+3*5-1*2 其樹狀圖長這樣子:
-
/ \
+ *
/ \ / \
2 * 1 2
/ \
3 5
通常我們都是以中序走訪的順序去寫的。不過對電腦而言這樣不好計算
因此,我們通常把它轉成後序表示,後序是左右中,所以會先走完左子樹得到值
再走完右子樹得到值,最後走中的時候恰可以對兩個值做運算。
後序走訪的話,會寫成這樣:
235*+12*-
從頭搜,碰到數字就 push 到一個堆疊中,碰到運算符號
就 pop 兩個數出來運算再把結果push 回去,這樣就可以計算完畢了。
原理如上所提,和後序走訪順序有關。
做法是,用一個堆疊(設s1)存放結果字串,也就是後序走訪結果
再用一個堆疊(設s2)存著運算的符號。接著如果接收到一個運算符號
那麼就把它 push 進去 s2,並且把運算優先權大於等於自己的給 pop 到 s1 去
可以這樣記:優先權大者要先計算,可是放在堆疊中就會先 pop 到頂端者
故 push 時如果把優先權小者放大者頭上,pop 時優先權小者就會先出來…
那麼就會變優先權小者先算,這不是我們希望的結果。
同理優先權相同時也應該是先出現先計算才是。
如果碰到左括號,那麼表示接下來的要優先於前面的先算
因此,將左括號放著,照一樣的方式做,只是不管怎樣 pop 都到左括號為止
然後,碰到右括號時,就一直 pop 到左括號出現為止,把左括號 pop 掉就停
這樣,這一段先被 pop 出來,等等就會先被運算到
如果接收到數字,那麼直接 push 進 s1 即可。
對於負數的處理,判定負號之後將其當作運算符號即可,只是運算規則比較不一樣
就是只 pop 一數出來將其轉為負數
這樣,即可求得解。
2007 南區賽第三題還有變數
事實上只要記著是哪個變數,之後再在輸入變數時記下值
然後,碰到時直接拿值代入就好,和一般數字其實也沒什麼太大不同
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/08
碰到多選題時,如果完全不會做時怎麼辦呢?不妨來分析看看這個問題:
有五個選項,卻又不知道要選什麼。因為五個都有可能是答案,也可能不是
不過既然如此,可知五個選項各只有兩種可能:選與不選,並且彼此間互不影響
那麼,如果選擇將其以二進位制表示時,將得到一個介於 0 和 31 之間的數字
例如選項 ACD 可以表示成:10110,也就是 16 + 4 + 2 = 22。
也就是,將 ABCDE 寫出來,將其對應到二進位制上去,1 代表取它,0 代表不取
欲得到任一 0 至 31 之間的數字不難想到將任一數除以 32 取其餘數即可。
至於取數字的方式相當多種,比如說 ACM 題數啦、上次踩地雷花的秒數啦、
隨便找個人的名字來算筆劃啦、找句印象比較深刻的話來算按幾次鍵盤打得完啦、
昨天 AC 掉的題目的題號之類的…,總之只要是數字,不管多大都可以使用。
不過每次都要做除法來取餘再轉換太麻煩了。給你一個數字 n(0 <= n <= 2147483648)
請寫個程式,把決定使用的數字輸入進去,然後輸出轉換後的解答。
Sample Input
16
21
29
10001
Sample Output
A
ACE
ABCE
AE
/* 好啦,我承認這是我今天模考時想出來的方法…然後真的做了。 */
/* 這樣算教壞別人嗎? */
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Robin 推:倒扣的那一種,不會選就全部塗比較好 1109 11:29
→ sa072686 推:不過有時全塗不如不塗…蠻困擾的XD 1109 11:45
→ Robin 推:可以算算看期望值,而且通常學校考試賺的分數會比期望值多# 1109 12:02
作者: sa072686 at 07/11/09
嗯,不好寫的一題呢…
翻譯一下。
給你一個由 'A' 到 'L' 這十二個字母所組成的一種排列,求用最少操作次數
來排序它?如果有多組解,任一皆可。可行的操作如下:
.只有交換兩個不同位置的字母這一種操作。(位置編號自 1 編到 12)
.每次的操作一定要有 'L' 的參與。
.若字母 'L' 在位置 l1,則可與位置 l2 的字母交換,僅當位置之差
為 di 且 floor((l1 - 1) / d(i+1)) == floor((l2 - 1) / d(i+1))
(d1,d2,d3,d4) = (1,3,6,12)
---- 分隔線 ----
不難想到用 DFS 去搜。每次交換一定有 L,表示每次一定拿 L 去和某字母交換
那麼每次記下 L 的位置去搜也就好了。不過,這樣一來搜索的深度不定
也就不知道怎樣才是最佳解。使用 IDFS 的情形下,卻又因為深度很大
像第一組 sample input 的深度是 28,第二組是 24,所以跑起來時間會很可觀
那麼就使用 IDA* 來解決它吧。
考慮估計仍有幾個字母不在它該在的位置上,不過這樣雖然正確,還是太慢
便想到有些字母可能要換許多次才能換到目的地位置上,因此考慮
先求出每個字母在最少幾次轉換才能換到目的地,把它們加起來當作最小交換次數
然後逐步擴張,並估計一下,如此效率上已足夠解此題目。
討論板上寫說舊系統以此方式可以跑在 7 秒上下,以 pre-calculating 的方式
搭配建表可以跑在 3 秒上下,雙向 BFS 則會 TLE
亦有人提出其實可以將之視為 3D 的 15 puzzle 盤面來使用 IDA*
新系統的時間和舊的不一樣,所以不太準
我這方式加上先把任兩位置之間的距離(最小轉換次數)
以及任一位置可通往的所有位置(約平均 3 個上下)先算出來
新系統的執行時間是 0.9 上下
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中桑靈餓)
作者: sa072686 at 07/11/09
不難寫的一題。不過要大數有點小麻煩…
翻譯一下。
給兩個字串 a,b(a 的長度最多 10000,b 的長度最多 100)
求 a 中有幾個子序列恰等於 b,解或是運算過程均不會超過 10^100
---- 分隔線 ----
嗯…用很簡單的 DP 可解之。
為了維持序列的順序,因此枚舉 a 中所有元素
如果在 b 中有相同元素的出現,假設是第 m 個好了
那麼可知如果前 m-1 個有 n 種方式可以組成
那麼這 n 種方式都可以接上該元素湊成長度 m
故設狀態 DP[i] = j 代表 b 中湊足前 i 個字的方法數有幾種
可得狀態轉移方式:若 a 中有個元素在 b 中的位置 m 出現
則 DP[m] += DP[m-1],不過這題要使用大數運算。且對於所有出現位置都要枚舉
但連續出現時會出事…所以,要從位置大者枚舉回來,以免重覆計算
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
作者: seanwu at 07/11/09
10381 - The Rock
給你一個大小為n*m的地圖, 圖上的'X'表示終點, 'E'表示起點, '#'為障礙物(石頭)
但這張地圖可能是錯的...最多會有一個石頭沒被標示出來
而且, 只有當你已經走到這個沒被標示的石頭旁邊, 才能夠發現這個石頭
請規劃一條路線, 使得在最壞情況下的移動步數最少
一條路線的最壞情況, 指的是不論那塊未標示石頭在哪裡, 都不會比最壞情況多步
請輸出最壞情況下的移動步數
<Hint E>
DP, 令dp[x][y]為(x,y)走到終點的最壞時最小步數
以向上移動為例, 則有 dp[x][y].up = max{dp[x][y-1]+1,
未標示石頭在上方時由(x,y)走到終點的步數(注意, 只會有一個石頭)}
可以預先算出未標示石頭在某一格時從(x,y)到終點的步數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/11/09
不難寫的一題…不過可能難懂了些。題目我看了數遍才懂的…或許是英文爛。
翻譯一下
有種遊戲有 n 個格子,並且每個格子有一個特定的顏色,以 1 到 n 之間的正整數示之
每個格子會有一些路,每條路都有特定的顏色,並且都是單向的。
兩個玩家去玩,然後要挑戰對方的智力。
先手的玩家必須指定三個數字,並將兩個棋子放在前兩個數字所代表的格子上
然後另一個玩家必須將這兩個棋子其中一個以最小的移動次數
移到第三個數字所代表的格子上
在結束之後,指定數字的玩家必須能夠指出最佳的解為何,否則就是輸了。
如果指出的最佳解比對手所解出的解還要好,那麼就贏了。
就這樣一直比到分出勝負為止。而你被選上寫一個程式給你三個數字,求出最小移動次數
移動方式為:兩個棋子一次移動只能夠動其中一個,而它只能走和另一個棋子
所在格子相同顏色的道路。給你 n^2 個數代表這些格子與之間的路。
第 i 列第 j 個數字代表著顏色 i 的格子它顏色 j 這條路通向哪一種顏色的格子
每種顏色最多一條路。如果它通向顏色 0,則表示沒有這種顏色的路
---- 分隔線 ----
嗯。其實不難發現它要以最少的操作次數來達成目標。
而局面只和兩個棋子所在的位置有關而已。因此只需記下兩個棋子的位置
那麼有 n 種顏色,記下兩個棋子的位置,最多 n^2 種情形。
如果兩個棋子所在位置相同,則情形也是相同的。
狀態空間需求低的情形下,以 BFS 可解之
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:是兩個棋子"其中一個"移到目標就好, 不是 1110 13:09
→ seanwu 說:將這兩個棋子以最小的移動次數移到第三個數字所代表的格子 1110 13:09
▲ sa072686 改@2007/11/10 Sat 13:49:45
→ sa072686 推:已修正。翻錯… 1110 13:49
作者: sa072686 at 07/11/10
嗯…不是說很好寫的一題。
翻譯一下。
給你一個 4 * 4 的圈圈叉叉棋局,並且接下來輪到 x 下子。
問是否有一種下子方式,使得 x 下子後不論 o 怎麼下子,x 最後都一定會贏?
已知此局至少 o 和 x 已各放兩子或以上,並且仍未被放滿,也沒有任一方勝利
勝利條件為某一方放滿一條對角線或是某一列、某一行時
如果放滿之後仍未分出勝負為平手
如果有種方式可在 x 下子後,不論 o 怎麼下,x 都會勝利,那麼請輸出它的座標
如果有多種解,先選列數小者,再選行數小者,即使像 sample 第二組
有些地方一放就馬上可以贏,可是放 (0,1) 也是必勝,由座標上來看應選 (0,1)
---- 分隔線 ----
分成兩邊輪流下子,如果放了 x 之後 x 必勝,則此局面必勝
如果放了 o 之後,o 不敗,則此局面 x 必不勝
就這樣遞迴放子即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/10
很簡單的一題字串題。
翻譯一下
給你 n 個規則(1 <= n <= 10),其中每個規則都有兩個字串 f 和 r
其中 f 和 r 的長度最多 80,但 r 的長度有可能為 0,f 則不會
最後給你一個字串 s,其長度在 80 以內,但在轉換過程有可能長達 255 個字元
你必須從第一個規則開始,在字串 s 中找尋字串 f,並將其置換成 r
然後再從新的 s 的從再開始,直到無法再找到 f 之後,便繼續下一個規則
一個規則在用完後便不能再使用,請輸出在用過所有規則之後的結果字串。
---- 分隔線 ----
模擬之即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/10
嗯…不難做的一題。
翻譯一下。
雖然大部份的交易都用貨幣進行,不過有時也會直接以物易物
這時就會用一個固定的比例來交換,比如說兩個爐子換三個冰箱這樣
通常會以最簡整數比例來表示它,當然數學上也可以寫作:
一個爐子換一個半的冰箱。不過…一個半的冰箱不好處理吧?
給你很多行輸入,每行一開始有一個字元,若為 '.' 則表輸入結束
若為 ! 則表示是告訴你幾個什麼換幾個什麼,若為 ? 則為詢問
你必須輸出最簡單的整數比例。它們不一定要可以直接交換,間接交換也可以
輸入的整數比例不會超過 100,但最後結果在最簡表示下有可能大到 10000。
不過不會超過,而且不會有任兩樣物品它們之間有多種不同比例。
---- 分隔線 ----
嗯。其實也不難
就記錄之後,暴力硬算配 DFS 搜尋即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/11/10
258 - Mirror Maze
給一個迷宮, 恰有兩個出入口. 迷宮裡面有一些鏡子, 這些鏡子是可以被旋轉的
你的任務是把從入口進入的雷射光, 利用鏡子導引到出口去
鏡子只能呈45°角擺放, 用'\'或者'/'來表示
雷射光照到鏡子後會直角轉彎, 利如: 光向上前進, 撞上'\'後, 會轉為向左前進
鏡子是雙面的, 兩面都可以反光
輸出任意一種可行的擺放方式
<Hint E>
直接做DFS讓雷射光跑就可以了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-142.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: newmoon at 07/11/10
實在找不到錯在哪
就丟到這裡幫忙看一下吧
#include<stdio.h>
#include<math.h>
int t,n,i,j,an,c,b[10][5];
double a[10];
main(){
while(scanf("%d",&n)&&n!=-1){
t++;
for(i=c=0;i<n;i++){
scanf("%lf",&a[i]);
for(j=0;j<3;j++)scanf("%d",&b[i][j]);
b[i][3]=b[i][1]+b[i][2]+b[i][0];
b[i][4]=b[i][0]+b[i][1];
}
printf("Case %d: ",t);
if(n==0){
printf("30-60\n");
continue;
}
for(i=30,an=0;i<=61;i++){
for(j=0;i!=61&&j<n;j++){
if(a[j]*3600/i-floor((a[j]*3600/i/b[j][3]))*b[j][3]>b[j][4])break;
}
if(j<n){
if(an!=0){
if(c!=0)printf(", ");
if(i-1==an)printf("%d",an);
else printf("%d-%d",an,i-1);
c=1;
an=0;
}
}
else{
if(an==0)an=i;
}
}
if(c==0)puts("No acceptable speeds.");
else puts("");
}
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.172.26 (福爾摩沙固網)
→ sa072686 推:在 floor() 裡面那個運算式後面加上 0.000001 即可 AC 1111 09:15
→ sa072686 推:結論…好像又是誤差? 1111 09:15
→ newmoon 推:嗚~~謝謝 1111 22:41
→ sa072686 推:是說之前我以為你是學弟XD 今天問過彼得了(茶) 1112 01:00
→ newmoon 推:據彼得說我們見過 1112 13:16
→ sa072686 推:TOI時一起受過訓不是嗎XD 1112 14:15
作者: seanwu at 07/11/11
10331 - The Flyover Construction
在一個城市中有一些工作地點, 住在這個城市的人想要從某個地點前往另一個地點時
都會採取最短路徑來移動, 如果最短路徑不只一條, 則任何一條都可以(都會有人走)
因此, 在這個城市中每條道路的流量是可以計算出來的, 請找出流量最大的道路
以原題目中的圖為例, 兩地點間最短路徑所需經過的道路
AB: AB or AC-CD-DB 總計每條道路被經過的次數
AC: AC
AD: AC-CD AB: 1
BC: BD-DC BD: 3
BD: BD DC: 4
CD: CD CA: 3
故最多次的道路為 CD
<Hint E>
先以Floyd算出任兩點間的最短路長度, 再計算每一條道路上通過的路徑數
對每條道路(u,v), 枚舉所有的點對(i,j), 檢查是否有
i->u->v->j = shortest(i,j), 如果有即找到一條路徑通過(u,v)
這樣複雜度是 O(V^3+EV^2), 可以再降不過以這題來說沒必要
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-142.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 07/11/11
10354 - Avoiding Your Boss
你找了一個理由翹課在家, 但你突然發現你有重要的事非得出門一下不可,
你得在不被校長發現的前提下, 以最短的時間到達某個地點.
你知道校長可能會在校長他家和學校之間的路上, 而且他總是以最短路徑往返於兩地
因此你必須避開這些危險的路段, 問你至少得花多少時間才能達成目標?
(輸入 N,M,a,b,c,d: N個點M條邊, 校長往返於a,b之間, 你得從c到d)
(注意最短路可能不只一條, 但你不能承擔任何風險,
因此每一條校長可能出現的路段皆視為危險的)
<Hint E>
先跑Floyd, 然後找出所有危險的點x:(a->x)+(x->b) = (a->b)
再跑一次Floyd (應該用Dijkstra比較好, 不過算了..),但危險的點不要加入
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-142.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ PG 推:這題很有趣 推一個 :) 1111 20:12
→ pioneerlike 推:這題很實用(?) 推一個:P 1111 23:27
作者: sa072686 at 07/11/12
※ 本文轉錄自 [PG] 看板
作者: PG (台南一中高四不宅PG) 站內: PG
標題: [創作] ACM初心者指南-寫在前面
時間: 2007/11/12 Mon 02:49:09
這篇文章介紹的是目前絕大多數的比賽採用的評審方法
以及Online Judge是怎麼回事
使用Online Judge的注意事項
還有資料流的重新導向
-----------
計概實習的時候,大家應該已經習慣在螢幕上面印出:
"請輸入數字a b" "a+(a+1)+......+b= xxx" 之類的東西吧。
實際上,這跟現在流行的方式不同,
在大部分的情況下,寫題目的時候,除了完整的題意之外,
還要包含明確的輸入與輸出格式,除此之外螢幕不應出現其他的東西。
為什麼呢...因為大部分的情形,不可能由評審打入大量資料後一一比對,
大部份的情形下這個工作會交由電腦來處理,
電腦會把預先準備好的測試資料(俗稱"測資")導入到你的程式裡面,
然後你的程式會有一組輸出,電腦會把你輸出的資料和正確答案作比較,
只要有一絲的不符電腦就會判定你這題答錯,
例如說,我在比賽的時候,就曾經犯下,
"Yes"輸出成"yes",結果被電腦一直判定成答錯
的這種蠢事,損失了不少分數....Orz。
我舉個例子,例如說題目要求你輸入兩個數 a,b 然後輸出a+b
測資可能長得像這個樣子
1 1
1 2
3 5
標準輸出可能會是
2
3
8
如果你的程式提示別人打入數字,那你的程式輸出結果會是這個樣子
請輸入a:
請輸入b:
a+b=2
請輸入a:
請輸入b:
a+b=3
請輸入a:
請輸入b:
a+b=8
很明顯跟正確結果差一大節,電腦比較後就會直接判定你的程式為錯誤答案
關於Online Judge
比賽後的題目,就此棄置,實在是可惜,
Online Judge就是為了讓大家能作這些"考古題練習"而因應而生,
通常,跟比賽環境是幾乎一樣的,
多作這些練習,對程式技巧的提昇有很大的幫助。
國內目前比較有名且對外開放的網站有三個,
一個是ACM,一個是USACO,另外一個是由建中畢業學長維護的網站,
我自己最近也正打算寫一個judge網站,
可以提供別的網站可能不會提供的簡單題目供初學者練習。
使用Online Judge的注意事項
初學者常犯的錯誤是,使用了system指令,
那是給人看的東西,電腦並不需要system來暫停螢幕,
相反地,使用了system指令可能會對系統造成傷害,
因此大部分的judge系統會把你的這個指令擋下來,
並且輸出類似"Restricted Function"的錯誤訊息。
關於資料流重新導向
如果大家想要實際體會電腦如何judge你的資料,
可以嚐試自己使用"資料流轉向",
在這裡附上windows下的轉向方法,
首先,請打開一個純文字檔,在裡面輸入,
xxx.exe < a.txt > b.txt
其中 < a.txt 代表把a.txt的資料輸入進你的程式裡面,
> b.txt 代表把你程式的輸出結果存成b.txt
最後,存檔,切記存檔時檔名必須用c.bat,
檔案格式選擇 "所有檔案",
(範例中 xxx.exe 是你的執行檔名稱 a,b,c可以換成你喜歡的檔名)
最後把存出來的檔案放到你的 xxx.exe下面,執行
程式就會跑出結果了,
當然,在這之前,你必須先準備好a.txt,
裡面存放著你想要輸入進去程式 xxx.exe 裡面的內容。
最後,補充一下初學者常犯的錯誤,
"副檔名未顯示",以至於檔案不小心命名成a.txt.txt之類的檔名,
這會導致程式跑不出結果...
最好的解決方法是關閉windows下面"隱藏已知副檔名"的功能,
請打開我的電腦>>工具>>資料夾選項>>檢視
"隱藏已知檔案類型的副檔名" 取消掉,
這個舉動除了降低錯誤發生機率以外,
還可以避免掉一些不小心執行偽裝成圖片的病毒程式。
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 140.117.183.63 (PG的妄想鄉)
→ sa072686 推:借轉 1112 07:49
φ sa072686 轉:從 [PG] 看板,于 2007/11/12 Mon 07:49:51
作者: sa072686 at 07/11/12
嗯…我承認它不難做,不過有個想了幾個小時還想不出來的問題想和板上的強者討論看看
先翻譯一下。感謝 gloompisces 學長講解規則
歐洲盃足球賽,給你一個賽局,每一局需要每一隊彼此比賽恰兩場
勝者得到三分,敗者得到零分;平手則兩隊各得一分
最後出來的結果,分數高者勝;若分數一樣,則比進球數減去失球數
/* 譯註:進球數為這局比賽中每場所得到的總分,失球數為這局比賽中對手進球數 */
若再一樣,則比進球數多寡;若再一樣,則隨機決定一隊。
給你 n(n <= 20)代表有 n 隊要比賽,再來給你 n 行表每隊的隊名,隊名長度
不會超過 30 個字,且不包含空白。接下來給你 m 代表已經比賽了幾場
接下來 m 行給你每場比賽的結果,分別是兩隊隊名以及進球數
碰到 n == 0 時代表輸入結束。為了簡化問題你可以假設每隊至少仍有一場未比
並且最多剩下十場還沒比完。問每一隊的可能名次範圍為何?
依照輸入的順序,依序列出每一隊可能的名次範圍。
嗯…我的做法是無視平手條件直接做 DFS 硬掃,最多十場,每場三種結果
之後再去檢查…掃過每一隊,並看他們能夠贏過誰?
也就是說看最多勝幾隊,最多輸幾隊,取範圍的聯集
因此把平手列為勝敗皆可…然後就 AC 了。
不過還是不太明白彼此分數互有影響,雖說剩餘的幾場要出個十萬分也不是不可能
不過分數彼此之間應該也會有個相對差距才能判定勝負…
因此,不知道為什麼這方法可以通過?
想來討論一下為什麼這樣可以…又,為什麼名次只要定出最高最低,就中間名次
一定都可以達成呢?這裡想不太明白,還請板上的強者們不吝賜教或共同研究…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
作者: sa072686 at 07/11/12
很好寫的一題…雖然之前為了推 sigma 公式,化簡了半天…
翻譯一下
或許 4*4 的方形中,你可以很輕易地指出其中有幾個正方形以及幾個長方形
但如果是 100*100 呢?甚至 10000 * 10000 呢?又,若是正方體呢?甚至四維的呢?
你可能算不出來,但你或許可以寫個程式幫你計算。
請注意:你的程式必須有效率。
給你 n 代表邊長,請回答以 n 為邊長之方形、正方體與四維方塊中,包含了多少
正方形以及長方形?並且正方形不算在長方形中。0 <= n <= 100。
/* 譯註:正方體中的正方形指正立方體,同樣四維空間中亦指四維之方塊 */
---- 分隔線 ----
正方形倒好算。從 sample 中看得出來規則。
可長方形…?嗯沒關係,如果算出所有的包含正方形的長方形,扣去正方形不就好了?
正方形可看出:0 1 5 14…嗯,正好差是 1 4 9,也就是平方和了
正方體可看出:0 1 9 36…嗯,正好是 0^2、1^2、3^2、6^2,是 (0+1+...+n)^2
雖然沒差多少…整齊一點,看差的話…恰為立方和
四維可看出:0 1 17 98…嗯,正好差是 1 16 81…因此是 n^4 的和
然後…以二維為例,有 1 1、1 2、1 3、…、1 n、2 1、2 2、…
因此是 1*(1+2+..+n) + 2*(1+2+..+n) + 3*(1+2+..+n) + ...
所以設 k = 1+2+..+n 則得二維結果為 k^2,同理三維為 k^3,四維為 k^4
由於很多用到和…所以以此即可輕鬆地做前置處理將表建起來,再輸出即可
嗯,有人怕麻煩懶得存六個數字,用 sprintf 直接做成字串…
也省得還要為了中間空白多做一些處理。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
→ sa072686 推:其實平方和、立方和那個推一下好像也推得出來(點頭) 1112 12:10
→ sa072686 推:然後用 long long 就可以存得下了。不過 int 塞不下 1112 12:10
作者: sa072686 at 07/11/12
嗯…不是說很難做的一題,不過它的要求有點奇怪…?
翻譯一下。
給你一個數 n 和一個數 m,求用 m 個質數相加的和恰等於 n 的方法?
如果有不止一組解,請輸出字典順序最小的那一組。
並且,2 不能用超過一次;不是 2 的質數則不可用超過兩次
注意字典順序喔,不是由小到大…
---- 分隔線 ----
嗯…我建質數表後,直接由小到大做,然後用估計的方式 cut 掉不可能的…
對每一組解再去比較字典順序這樣。不過 TLE 掉了(4s不知道超過多少…)
後來乾脆把所有質數依字典順序排序,拿掉估計,找到解就直接 cut 掉…
2.6s,過了(汗)
不過不是很漂亮…是說這題應該怎麼解的好呢?
還請各位高手不吝賜教
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
→ newmoon 推:我跑2.24,沒差很多 1112 23:36
→ seanwu 推:嗯DP可以, 0.19 1113 18:54
作者: sa072686 at 07/11/12
嗯…不難做的一題。
翻譯一下。
給你一個 5 * 5 的棋盤,以及一個盤面,問要幾步才能達成目標狀態?
(詳見題目,有圖…)如果超過 10 步還不能解,則輸出沒有十一步以內解
已知這棋盤上放了黑白各十二隻騎士及一空格,每次可以有一隻騎士走進空格
西洋的騎士比中國的馬強,不會拐腳…
---- 分隔線 ----
嗯,看這種 AC 率以及解掉的人數…應該可以用 BFS 或是 IDFS 解之?
最多十步,每步最多八種走法,這樣看來狀態不太夠…可是能湊齊八種走法的不多
只有在最中間時才有,因此不確定 BFS 的話空間夠不夠用…佇列可能要蠻大的
IDFS 的話不確定會不會 TLE,不過看題目限制應該是還好…
我是拿來練 IDA* 啦,0.0s 就跑完了…
看來不難通過時間限制?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ devilqxect 推:IDFS可以順利過,不要走前一層回頭路這cut就夠 0608 11:49
作者: sa072686 at 07/11/13
嗯…10419 的第二版,也是強化版…AC 率 9%,不過很幸運地還是一次 AC 掉了
翻譯一下
看能否用 t 個質數(t <= 12)相加得到 n(n <= 800),如果可以請輸出字典順序
最小的那組(不是質數最小,而是排除加號串起來字典順序最小),否則輸出無解
質數必須小於 300,並且第 i 個奇質數不能用超過 fi 次(fi 等等會給)
至於 2 的可使用次數每組詢問都會給。第 1 個奇質數為 3,故 f1 代表 3 可使用
的次數,f2 代表 5 可使用的次數,…依此類推。
給你 b 個 block(b <= 500),每個 block 有許多行。
一開始四行共計 61 個數字(前三行 16 個數,最後一行 13 個數)
代表 fi,i = 1 to 61。接下來一個數字 q(q <= 100)代表有幾組詢問
每組詢問有三個數字 n、t、flag,flag 代表 2 可不可以用,0 代表不行,1 代表可以
n 和 t 的意思在上面提過。每個 block 之後都要輸出一個空白行。
---- 分隔線 ----
嗯,其實它好像沒把時間限制得很嚴…
而且好像大部份情況一定有解的樣子。總之找到一組解之後 cut 掉很重要
為了字典順序,就先把質數依字典順序排序,然後暴搜
不過這樣光 sample 的一組詢問就會跑很久…怎麼辦呢?
看奇偶性。已知若不能使用 2 的情形下,那麼只能使用奇數。
因此 t 的奇偶性影響了最後結果的奇偶性。若 flag 為 0(不能使用 2 的情形)
如果 t 和 n 的奇偶性不同則必無解。
加上這個 cut,可以在 2.91s 跑完。雖然不知道它時限多少…不過似乎也不快
如果有更好的方法還請不吝賜教。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
▲ sa072686 改@2007/11/13 Tue 08:12:14
作者: sa072686 at 07/11/13
嗯,其實很多種複雜 IO…
這裡只講比較簡單的幾種 input 的處理法。
─當某行數字可能有一個、兩個三個不一定,但不會很多個時,例:ACM 598
使用 gets() 可以把一行先當字串讀進來…這樣可以確定所要的資訊
都在這一行裡面。怎麼處理呢?當然直接暴力分析亦可,不過這裡有不錯的函數可用
num = sscanf(str, "%d%d", &n, &m);
比方說像這樣寫…sscanf() 可以將某個字串當作輸入來讀,回傳值即為成功讀入
的變數個數,因此可用以判斷。比如說上面的例子,如果字串中僅含一數字
則 num 為 1,含兩個則 num 為 2。不過請小心如果餵給它空字串,則會得到 EOF(-1)
不過呢,sscanf() 每次使用都會從字串開頭讀入,所以當數字多就不好用了。
─當數字一多時
使用 sscanf() 只有預先知道會有幾個,而且個數不多時。否則…手工打幾百個數字
似乎不是什麼明智的選擇。這時有另一種選擇:strtok(),它放在 string.h 中
ptr = strtok(str,str2);
這時會用 str2 字串中「所有的字元」做為切割依據。它會回傳一個指標,
指向依 str2 中所包含的字元分割後,下一個部份為何?
但若一直使用 strtok(str,str2) 則會一直得到第一段…若要它繼續往下切
則在 str 的地方改放 NULL,它就會繼續切上次那個字串。如果回傳 NULL
那就表示已經切完了。以下是一個使用的範例:
char str[1000], *ptr;
while(gets(str))
{
ptr = strtok(str, ", .");
do
{
printf("%s\n", ptr);
}while(ptr=strtok(NULL, ", ."));
}
這樣,假設輸入 "101 ,122.3133,,..... 4.28,15"
則得 101、122、3133、4、28、15
不過它有個缺點,就是會破壞原字串…原字串在處理過程,可以作為分隔的字元
會被設成 0…這點在使用上要小心。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/11/13 Tue 16:24:07
作者: sa072686 at 07/11/13
簡單的一題。不過它有點小陰,請用 scanf() 而不要用 gets(估計是行末空白?
或是有空白行夾雜其中之類的,總之會挖掉…)
翻譯一下。
給你 n(n <= 15)表示一個 n^2 大小的棋盤,請試著在上面放 n 隻皇后不會互相攻擊
可是這些皇后受傷了,所以他們的攻擊力變弱,所以在直行上仍可移動自如
但斜向和橫向卻只能攻擊到一格。每次給你一個字串包含 '?' 或 1,2,3,…,D,E,F
若是 '?' 則表示該行不限制擺哪;若不是,則由 1,2,3,…,F 表 1 到 15 的數字
就是說該行必須擺在哪一列。比如說給你 1?4??3 表示第一行一定要擺第一列
第三行一定要擺第四列,第六行一定擺第三列,其他行擺的位置不限制
然後字串的長度就是棋盤的大小了,不會再另外給。問照著限制有幾種擺法?
---- 分隔線 ----
其實是很簡單的 DP。
已知每一行只能擺一隻,又擺的時候不能夠攻擊到其它皇后
因此不難想到,在某一行把一隻皇后擺在某一列時的情形,即前一列擺的皇后位置
不在攻擊範圍內時的所有情形的和。若有限制的時候,則那一行其它列也就為 0 種情形
這樣一來得到狀態 dp[i][j] 表示第 i 行中,將皇后擺第 j 列的方法數為何
可得轉移方程:若不受限時 dp[i][j] = sum(dp[i-1][k]) when abs(k-j) > 1
若受限時設限放 m 則除 dp[i][m] 照上式外其餘皆設為 0。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ Robin 推:我又WA了.請問 ?4?3?F??A???6??還有A?^9的答案應該是什麼呢 1113 15:07
→ sa072686 推:34657223040 第二組不合法? 1113 15:52
→ Robin 推:嗯..錯了但是不知道為什麼,其實我是想說 A????????? :p 1113 16:40
→ sa072686 推:58453480 是不是long long 的問題? 1113 16:52
→ sa072686 推:喔對了,用 gets() 不會過唷…請愛用 scanf() 1113 19:01
作者: sa072686 at 07/11/13
嗯,不好寫的一題…
翻譯一下。
從前有個島,上面住著很多喜歡下棋的人們。他們只要一有空就會下棋。尤其他們都
很喜歡騎士。所以他們甚至把島上的土地畫成一格一格的像棋盤一樣,然後學著騎士
的方式跳著走。雖然這樣有時要走很多冤枉路,而且很累,可是他們很開心
但好景不常,有天島內出現了一隻怪獸,雖然牠不會移動,而且很貪睡
所以平常沒什麼威脅性,可是如果踩到牠牠就會醒過來。雖然牠得花一分鐘才能全醒
並且這段期間不會有攻擊性,因此在牠睡著時踩到牠還會有充足的時間逃離
可是下一個踩到牠的人就沒這麼幸運了…他會死得很難看。而且牠在被吵醒後
會有一年睡不著覺。雖然牠不會動,但是非常地兇暴,如果
在牠醒著時踩到牠就會被吃掉。好在現在怪獸還在睡覺,島上的四位長老打算
聚在一起討論該怎麼對付牠。問這四位長老聚集在同一格至少要花多久,或是
永遠也無法聚在一起?已知,這四位長老為了安全起見每一分鐘最多跳一次
而且不會一起跳。也就是說每分鐘最多一位長老跳一步。輸入一開始會告訴你現在是
第幾組。然後會給你兩個數字 n,m 代表島的大小(3 <= n,m <= 16)
之後四對數字代表四位長老所在位置,接著一對數字代表怪獸所在位置
最左上角座標為(1,1)而且不會有長老一開始就踩到怪獸。
---- 分隔線 ----
不太好想。已知要找一個點使得四位長老同時聚集於上且耗時最少。
並且,怪獸只能被踩一次。怎麼做呢?
分開處理,先看每位長老不踩怪獸走到某一點的最小步數,那麼某一點的
四位長老最小步數和即為走到該點聚集的最小花費時間。
再來,看看四位長老先去踩怪獸後再走到每一點的最小步數。
之後,看看每一點如果把某一位長老從不踩怪獸替換成踩一次怪獸,有沒有比較短
如果有就替換,只要不一次替換超過一位長老即可。如此可得最佳解。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
▲ sa072686 改@2007/11/22 Thu 09:03:45
→ DJWS 推:這題跟USACO camelot大同小異 1103 12:44
作者: sa072686 at 07/11/13
嗯,這題據說可以用類似背包問題的方式做 DP。
10447 亦同。
感謝 seanwu 學弟。
不過沒去實作,效率如何未知。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
作者: sa072686 at 07/11/13
嗯…很好做的一題。有一點點數學…不過其實也還好?
翻譯一下
有天有兩個小孩很喜歡玩圈叉遊戲,他們每次上課都坐在後面玩,結果後來老師發現
就把他們叫去前面。可是雖然在前面不能玩,畢竟聽課並不是那麼樣享受的事
不久他們就沉沉睡去,老師因此很生氣就出一道難題給他們解。之後他們就盡可能地
不被老師發現,偷偷地坐在後頭玩,沒想到還是被老師的鷹眼識破,又被叫到前面去
至少得撐著不睡吧?但很可惜兩人還是睡著了。老師因此很生氣、很生氣,就出了一道
非∼常難的題目給他們做。要他們把 1 到 1000 的數字寫在一起,連成一個很大很大的
數,然後問第 1000 位是多少?當然這對兩個小孩子而言太刁難了。除了會花很多時間
也很容易就會出錯。因此,他們希望找個方法不全寫出來,但又能找出答案給老師。
你能幫他們嗎?給你 n(n <= 100000000)問從 1 開始寫,第 n 位是多少?
/* 譯註:不一定只寫到 1000…那是故事。 */
---- 分隔線 ----
如果枚舉再用 sprintf + strcat 不是很完美嗎?不過看 n 的大小…||||
因此…如果能先透過數字長度去算出它是哪一個數字,再透過取餘決定是第幾位
再透過 sprintf 也就知道結果了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
作者: sa072686 at 07/11/13
> 11 sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 發 sa072686/glo
下午四點耶(茶)
還是說所有正在公假的人們都在看我的板?XD
公假必備板?(大誤)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
→ chensc 推:推一個公假必備板 1113 23:07
→ Robin 推:公假板..人氣代表公假人數XD 1114 12:39
作者: sa072686 at 07/11/13
嗯…不難寫的一題。雖然它是二版,不過和一版除了題目故事很像外沒太大關聯
翻譯一下。
在橋仍不普及時常用 ferry 來運送車輛過河。一個 ferry 可以運送 n 台車,並且
過河要 t 分鐘,因此來回要 2t 分鐘。現在有一個車輛的佇列,每輛車會依時間先後
一一進到佇列中。ferry 在出發時可以載走已經到達的車輛,並且必須依到達先後。
那麼,問載走所有車輛的最小時間為何?又,在此時間下最小運送次數為何?
已知 n,t,m <= 1440,並且接下來 m 行給你 m 輛車進到佇列的時間,且時間是依
不遞減順序出現。
---- 分隔線 ----
嗯,用 DP 做…
首先一定要運完所有車…運走一輛車時可以選擇和前面多少輛一起運
然後,挑個時間會最短的…因為每運一次除了要等要運的最後一輛車到達
還必須算上 2t 的運送時間,因此最佳時間就看往前運幾輛,時間會最佳
最佳時間為,要運的最後一輛的到達時間以及運到前面某輛車時,回到岸邊的時間
取大者。因此,得知用 dp[i] 記錄運完前 i 輛車後回到岸邊的最早的時間
那麼得知狀態轉移方程 dp[i] = max(j,dp[k]) + 2t,k > i-n
j 為第 i 輛車到達時間,n 為前面提的一個 ferry 的最大載送車輛。
假設一開始 dp[0] = 0。然後記錄次數…就看時間,時間大者優先,時間相等比次數
最後輸出時別忘了減掉 t,因為送完是單程。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
→ seanwu 推:嗯我po過這題了xD 不過解法不一樣 1113 17:54
→ newmoon 推:我用gready也過耶 1113 22:37
作者: sa072686 at 07/11/13
很簡單的一題。很好推…不過,數字大時要花點腦筋處理。
翻譯一下。
有個叫 Donald E. Knuth 的人發明了一種方式找出一個不含有重覆字元的字串的
所有排列方式。這方法是將字串編號 a1,a2,…,an 並逐次將第 n 個字元插入
到字串中所有可能位置,如此即可找出所有的排列方式。並且,給這些排序給編上編號
詳見題目的表格。使用這方法找出的第一個字串編 1,第二個編 2,…
現在給你一個字串,以及一個 index,試求出以此法所製造出的第 index 個字串為何?
字串長度不會超過 26,字元不會重覆,並且 index 在 1 到 min(n!,2^31-1) 之間。
---- 分隔線 ----
觀察一下題目給的表格,不難推得這是個 tree 的概念。
首先從 root 開始,先二分成第二個字元插在前或後,再三分成插入前中後,…
因此,只要 index 在 n! 的一半以後,第二個字元就會插在第一個字元之後
反之則插在前面。將之除 index 取餘之後,得出的數再遞迴看第三個字元
先看它在前 1/3、2/3 或是後 1/3,決定第三個字元插入的位置,再取餘,再…
直到全部找完為止。因此,只要 index 和 n! / 2 比大小,再對它取餘
然後比 (n! / 2) / 3,…直到最後會和 1 比大小。
不過,或許會有人懷疑:長度到 26,那 26! 存得下嗎?答案是否定的。
可是,index 最大才到 2^31 - 1,因此我們隨便找個比它大的數不就好了嗎?
反正比它大取餘也一樣,除法也一樣,什麼都一樣…那就隨便找一個就行了。
這樣也就解決了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/11/13
> 嗯...這種問題(多點、mincost、匹配)好像可以用flow是不是?
> 但聽說好像很複雜...不過如果有參考資料我想研究一下 (伸?)
嗯我找到了
ftp://t00sys09:tfcis98@140.110.122.62:21/Algorithm/電子書/
網路算法與複雜性理論.zip
用超星閱讀器看
ftp://t00sys09:tfcis98@140.110.122.62:21/Algorithm/閱讀器/SSR392_Big5.exe
第222頁那個東西...超級複雜 xD
對了, 個人認為這本書講的網路流部分非常不錯,
另外有一些最短路和樹形圖等等的問題, 這本書也有提到一些
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-142.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/11/14
嗯,很好寫的一題…
翻譯一下。
有個人很喜歡玩骨牌,可是他老婆有一天玩膩了不陪他玩了,因此他只好想出一個
可以自己玩的方法。現在先擺兩個骨牌上去,中間空下 n 個位置,然後準備 m 張骨牌
(n <= m <= 14)然後看有沒有辦法利用這 m 個骨牌擺滿兩個骨牌中間的 n 個位置?
規則是:每張骨牌有其正面和反面兩種數字,擺在一起時相對的兩面數字要一樣
如果可以擺,請輸出 YES,否則輸出 NO
---- 分隔線 ----
一開始的骨牌是放好的,但給你的骨牌可以任意翻轉…
就 DFS 暴搜即可,0.01s
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/15
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (才不會輸給你,等著吧)
標題: [中譯] ACM#10513 (fwd)
時間: 2007/11/15 Thu 07:38:51
作者: sa072686 (才不會輸給你,等著吧)
標題: [中譯] ACM#10513 (fwd)
時間: 2007/11/15 Thu 07:36:37
※ 引述《AikoSenoo (阿南大福′▽`))》之銘言:
孟加拉序列是一個最多有著十五個字的序列。在這個長度15的序列中被允許的字為A, B,
C, D, E, F, G, H, I, J, K, L, M, N 和 O。同樣地長度四被允許的字為A,B,C,D;長度
5被允許的是A,B,C,D,E,以此類推。英文字母最前面15個字各自地有著65, 66, 67, 68,
69, 70, 71, 72, 73, 74, 75, 76, 77, 78 和 79 這些值。一個長度n的序列(n<16)被前
n個英文字母組成且滿足下列任依條件稱作孟加拉序列。
(多重的符合條件無傷大雅)
a)如果兩個字是一樣的。所以ABAD是一個只符合這項條件的孟加拉數列
b)如果在兩個不同位置差的絕對值和他們的值差的絕對值相同的話也符合。所以ABCD根據
這個條件是一個孟加拉序列。A的位置是1,B的位置是2,|2-1|=1且|A-B|=|65-66|=1,兩
者相同。
c)如果任兩個相鄰的字的值差為2的就符合。
d)如果兩個字在他們中間有另一個字,而他們之間的值差為1的話也符合。
你得去找出符合一些參數條件下的孟加拉序列個數。
Input
測資將會少於502筆。每一組測字第一行是一個整數n,代表這組測資所描述的孟加拉序列
長度n。
接下來的n列定義了對應的每個位置所能放置的東西。
一個問號代表這個位置可以放任何的前n個英文字母。
如果某行輸入包含了一個或多個的英文字母而不是'?',這代表這些字母被允許放在這行
對應的位置。
舉例來說,第二組測資要求去找到長度4的孟加拉序列,他的第一個位置的字母只能是'A'
或'B',但其他位置的可以放置'A'.'B'.'C'.'D'。
當n==0時輸入結束,這組測資不必被處理。
Output
每組測資輸出一列。
這列需要包含其為第幾組測資及有多少組孟加拉序列符合輸入給的條件。
Sample Input Output for Sample Input
4 Case 1: 64
AB Case 2: 128
?
CD
?
4
AB
?
?
?
0
--
★nameofevil !!!Cool!!!加油(握拳)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_220.132.136.186(HiNet)
→ sa072686 推:其實這題不好做耶?等我 AC 後來貼解法吧∼ 07/11/14
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2007/11/15 Thu 07:39:19
作者: sa072686 at 07/11/15
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (才不會輸給你,等著吧)
標題: Re: [中譯] ACM#10513 (fwd)
時間: 2007/11/15 Thu 07:38:58
作者: sa072686 (才不會輸給你,等著吧)
標題: Re: [中譯] ACM#10513 (fwd)
時間: 2007/11/15 Thu 07:36:51
※ 引述《sa072686 (才不會輸給你,等著吧)》之銘言:
嗯,因為很感動所以來貼解法∼
嗯它不好解。感謝討論板提供的方法。
優化了很久,直接 DFS 硬搜還是過不了(遠目)
※ 引述《AikoSenoo (阿南大福′▽`))》之銘言:
> 孟加拉序列是一個最多有著十五個字的序列。在這個長度15的序列中被允許的字為A, B,
> C, D, E, F, G, H, I, J, K, L, M, N 和 O。同樣地長度四被允許的字為A,B,C,D;長度
> 5被允許的是A,B,C,D,E,以此類推。英文字母最前面15個字各自地有著65, 66, 67, 68,
> 69, 70, 71, 72, 73, 74, 75, 76, 77, 78 和 79 這些值。一個長度n的序列(n<16)被前
> n個英文字母組成且滿足下列任依條件稱作孟加拉序列。
> (多重的符合條件無傷大雅)
> a)如果兩個字是一樣的。所以ABAD是一個只符合這項條件的孟加拉數列
> b)如果在兩個不同位置差的絕對值和他們的值差的絕對值相同的話也符合。所以ABCD根據
> 這個條件是一個孟加拉序列。A的位置是1,B的位置是2,|2-1|=1且|A-B|=|65-66|=1,兩
> 者相同。
> c)如果任兩個相鄰的字的值差為2的就符合。
> d)如果兩個字在他們中間有另一個字,而他們之間的值差為1的話也符合。
> 你得去找出符合一些參數條件下的孟加拉序列個數。
> Input
> 測資將會少於502筆。每一組測字第一行是一個整數n,代表這組測資所描述的孟加拉序列
> 長度n。
> 接下來的n列定義了對應的每個位置所能放置的東西。
> 一個問號代表這個位置可以放任何的前n個英文字母。
> 如果某行輸入包含了一個或多個的英文字母而不是'?',這代表這些字母被允許放在這行
> 對應的位置。
> 舉例來說,第二組測資要求去找到長度4的孟加拉序列,他的第一個位置的字母只能是'A'
> 或'B',但其他位置的可以放置'A'.'B'.'C'.'D'。
> 當n==0時輸入結束,這組測資不必被處理。
> Output
> 每組測資輸出一列。
> 這列需要包含其為第幾組測資及有多少組孟加拉序列符合輸入給的條件。
> Sample Input Output for Sample Input
> 4 Case 1: 64
> AB Case 2: 128
> ?
> CD
> ?
> 4
> AB
> ?
> ?
> ?
> 0
嗯。
很簡單可以想到(或許光看 AC 率也想得到?)暴搜會掛掉…最多總共 15^15 種情形
我原本的想法是說,直接用 DFS 暴搜,但只要一符合孟加拉序列
就估計後面的可能排列數,然後直接加上去,就 cut 掉了…
這樣,n=15 的空盤大概跑 1s 上下,不過仍然不夠…
討論板說的方法,是先做預處理…
照板上所言,長度在 1 的時候是一定無解的。
在長度 2 到 9 之間,則是不管怎麼排,全都是孟加拉序列。
因此,湊一下排列數即可。
在長度 10 或以上才開始會有不是孟加拉序列的排列出現。
由於即使長度 15 空盤的非孟加拉序列也只有約 33000 種左右的情形
因此,可以先做這些出來,然後再去做字串匹配,算出排列數再扣除這些情形
這樣,1.7s 上下可以過。
DFS 就加那四個規則上去擋,符合其一就 cut 掉。
然後…我是用鏈結串列擋第一個規則加速,不用的話不確定會不會 TLE
嗯,以上。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2007/11/15 Thu 07:39:25
作者: sa072686 at 07/11/15
很好寫的一題。
翻譯一下。
給你一張 ASCII 圖,上面有很多方塊,方塊上可能什麼都沒畫,或畫著直線
或畫著一個直角的形狀。你不能夠搬動它們,但你可以旋轉它們。
如果可以從最左上角那塊,連成一條線到右下角那塊,就贏了。
問一張圖中可能有幾種解法?
/* 譯註:很像某種要旋轉水管使得水能流通的遊戲…看不懂可以看題目的圖 */
---- 分隔線 ----
其實很好做。直接判斷 ASCII 圖形就可以了。以一個九宮格來說的話
如果中間那格為空,則此格什麼都沒畫;若上下或左右同時不為空則為直線
否則為直角。若逢直角則可左彎右彎,若逢直線僅能前進,並且因為是一進一出
所以同一水管不能夠旋轉兩次。因此不會有交會的情形發生
所以其實也不用旋轉?直接判斷是彎的是直的就可以了。
如果走得到終點並且終點不為空則勝。用 DFS 枚舉看看有幾組解就行了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/15
秒掉了(驚)
翻譯一下。
當 n 非完全平方數時,它的開方不好計算,但是有方法可以很快算出近似值
它的開方會是一個平方後接近但小於它的整數,再加一個浮點數而成(詳見題目的圖)
sqrt(n) = a+dx
=> n = (a+dx)^2
=> n = a^2 + 2adx + dx^2
=> dx = (n-a^2) / 2a
這裡我們把很小很小,不影響太多的 dx^2 拿掉,就會變得容易計算。
現在請使用這方法來估計一個數開三方後的值。
---- 分隔線 ----
展開 pow(n,1/3.0) = a+dx 之後,把 dx 超過一次的全部去掉,移項之後
即可得所求…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: seanwu at 07/11/15
137 - Polygons
給你兩個凸多邊形(以順時針方向給點), 求兩個多邊形的差集(Xor)的面積
<Hint E>
差集面積=兩者面積和-2*交集部分的面積
求交集: 做出所有「可能」的點(利如:邊的交點、落在對方內的頂點)
然後直接做凸包求解
ps. 本問題有 O(n+m)的做法
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.13 (台狼一中桑靈餓)
作者: sa072686 at 07/11/15
嗯…好寫可是容易出錯的一題?
翻譯一下。
有個小孩正在玩著他所擁有的字母肥皂。之後他很驚訝地發現,如果他把一個排出來的
單字其中某些字母給換掉,它就會變成另一個單字。
給你 n 和 m 代表有 n 個單字,每個的長度是 m。這 n 個單字中第一個單字是開始的
單字,第二個是結束的單字。剩下還有很多單字,你得想辦法將原先的單字轉換到結束
的單字。轉換規則如下:每次只能從前一個單字改變一個字母,且改變之後必須要在
給你的一堆單字中找得到,而且每個字母都要變動,並且每個字母只能變動一次。
你必須輸出從開始單字轉換到結束單字的過程。據實測,wa 和 re 多次後發現:
字串長度在 1000 以上,2000 以下,單字數在 1000 以上,5000 以內。
---- 分隔線 ----
嗯,其實直接對開始字串做 DFS 就可以了。反正每個字母只能改變恰一次嘛…
因此我直接枚舉把其中一個字母改成結束單字中相同位置字母的情形,去做二分搜尋
如果找得到這單字,就再往下變換;否則就再看能不能改變其它字母。
簡單地說枚舉這 m 個字母的改變順序,配合鏈結串列,0.03s
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
→ DJWS 說:對 hamming distance 作排序即可 0419 18:59
作者: sa072686 at 07/11/15
嗯,不難寫的一題。
翻譯一下。
給你 n 和 m 代表腦中的 n 個區域(n <= 26,以大寫字母代表)以及 m 個連結
一開始會有三個字母代表現在醒著的三個大腦區域。接下來的 m 行每行有兩個字母
代表哪兩個大腦區域是相連著的。然後如果有一個大腦區域和三個或以上醒著的
大腦區域相連,則一年後它會醒過來,並且醒過來後不會再睡著。問所有大腦區域
要多久才會全醒?或是根本不可能全醒。
---- 分隔線 ----
嗯,用類似 10926 的方式做 DFS 就可以了…拓樸應該也可以。
不過記得用 DFS 的話要抓最早醒的三個區域來決定醒來的時間…
做一下記錄式的暴搜即可。記住不是所有大腦區域都會出現在 m 對連結中
可是它可能確實存在,因為給定的 n 的關係。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
作者: seanwu at 07/11/15
10514 - River Crossing
有一條河, 河的中間有一些島嶼
現在, 附近的居民想蓋一條公路橫跨這條河
當然, 蓋橋是很花錢的, 所以他們希望橋的總長度儘量短
河中間的小島, 是可以加以利用的 (見原題目中附圖)
請輸出橋的最小總長度
//嗯, 有趣的一題計算幾何
<Hint E>
做出任兩座島(岸)之間的最短直線距離, 再計算兩岸間的最短路徑
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-142.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/11/15
不難做的一題。
翻譯一下。
輸入包含許多組的測資。每組測資有兩份文件,文件中包含許多單字
單字都是小寫字母且以空白分隔,但不會有符號之類的東西。
單字的長度不會超過 30 個字母,並且以 '#' 為文件與文件之分隔。
對於這兩份文件,請輸出其最長共同子序列,以單字為單位。若有多組則任一皆可。
---- 分隔線 ----
嗯,直接做 LCS 然後回溯解即可。
回溯解的方式很簡單,往回搜尋即可。
在表中,若對應之兩單字相同,則知從左上來,就往左上走,然後輸出
否則,看是從左來還是從上來的,就選一邊可以走的回去
如果兩邊都行,那麼任一皆可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/11/15
10459 - The Tree Root
給一個tree, 在確定了樹根之後, 可以定義這棵樹的深度為 :
樹根到其它各點的路徑長度, 其中的最大者
對一般tree在搜尋上的應用來說, 我們會希望樹的深度越淺越好
給你一個tree, 你的任務是找出以哪些點當做樹根, 會使得深度最淺
另外, 也請列出會導致最深深度的那些點
//一階的作業, 結果拖到現在才寫 xd
<Hint E>
嗯.. 枚舉每個點當做樹根算深度不知道會不會過.. 沒試過
不過, 可以用DP做到O(N) 基本上是把狀態設為 dp[x,y]:
以點x 當做某個子樹的根, 並以點y 做為點x 的parent 時的子樹深度
這樣, 狀態只有2(N-1)個, 因為一棵樹只有N-1 條邊
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-142.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
▲ seanwu 改@2007/11/15 Thu 22:31:04
作者: sa072686 at 07/11/16
嗯…很難寫、很複雜的一題,不過看起來很容易 TLE,其實不會?
想了好久,優化了好久,沒想到是腦殘自己進無窮迴圈…改掉就 0.01s (汗)
翻譯一下。
有個遊戲叫四川省。它是把麻將擺成 n * m(注意這題是用座標系統,x 和 y 和一般
題目不太一樣…)的矩形,然後如果兩張麻將它們長得一樣,而且可以用一條不會超過
兩個轉折的直線相連(不可以有障礙物、直線只能走水平或鉛垂,只能轉折九十度)
則它們可以消掉。如果它們是直接相鄰的也可以消掉。給你一個盤面(n,m <= 20)
問你其中一種解法,或是無解。它會以 ASCII 代表不同的麻將,並且字元數無限制。
---- 分隔線 ----
雖然看起來很像 TLE 題,可是其實不太會 TLE…
只要用 DFS 硬搜就行了。不要判斷相連判斷錯都好…
試了六種版本,後來發現根本是自己進無窮迴圈…改掉後六個版本都過。
六個版本,其中三個是另外三個加上二分搜尋樹擋重覆的版本
這三種分別是:每次掃過整張圖的版本、每次抓所有字元去配對的版本以及第二種
加上鏈結串列的版本。實測發現:
掃整張圖 抓字元配對 抓字元配對加鏈結串列
有開二分搜尋樹 0.01s 0.0s 0.01s
沒開二分搜尋樹 0.01s 0.0s 0.01s
↑注意不是表情符號…
抓相連的部份,對每個 pair 差不多是 n*m。
這樣看來好像很好過?時間上不會太刁難的樣子。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/16
嗯,看起來很難,也不好想的一題…不過放心搜下去,其實不會 TLE 只是不好搜而已
翻譯一下。
/* 譯註:此題 AC 率 10% 上下,AC 人數 30 上下。不過一次 AC */
現在已知有一座山上面佈滿了鑽石礦。你正要去開採,並且你想全部開採完。
開採時要從外圍放一台機器讓它進去開採。但是由於機器本身性能限制,它只能夠
往東西向或南北向四個方向走,你必須找到一個方法開採所有的鑽石礦,可是
走的格子要盡量地少。最多有十組測試資料,每組測試資料給你一張 n * m 大小的圖
(n,m <= 11),圖中只包含 '.'(空地)、'*'(鑽石)、'#'(外圍)三種,
並且鑽石數在 1 到 11 之間。空地和鑽石一定嚴格地被 '#' 所包圍。
請輸出最少需要走幾個格子。解的大小保證不超過 20。並且,一定至少有一組解。
---- 分隔線 ----
它其實不好搜。不管怎麼想,greedy 都有反例可舉。
又幾乎沒什麼 cut 可用,很多估計的 cut 都有反例。
不過其實只要想到方法,直接去搜其實也不會 TLE 掉的。
首先先想,從外圍進去比較短的可以先做,並且挖的路徑不影響解
就題意而言,一台機器往下一定會挖到一個鑽石礦為止,中途轉向沒有意義
因此一定是從外圍進來到一個礦,或是從一個礦挖到另一個礦去
先用 BFS 把每個礦離外圍的最短距離計算出來,再透過座標計算礦與礦兩兩間的距離
然後每次都去抓一個離外圍最近的點為開頭去做 DFS,並且在抓了某些點(不一定
要抓多少,也不一定要全抓…因此最好試過所有組合)後再去抓一個離外圍最近的點
這樣,我只加了兩個 cut:
一、如果距離已經超過最佳解則 cut 掉
二、如果離目標礦的距離大於等於目標礦離外圍的最小距離,就不走那個礦
因為從外圍連進來至少不會比較差,所以就不選擇它了。從外圍連進來反而選擇較多
甚至還可以去連別的點。
這樣,0.0s
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
作者: sa072686 at 07/11/16
嘖嘖,好寫的一題,不過腦殘掉了…很冤枉地 wa 掉五次…
翻譯一下。
Mr. Black 是個怕黑的人。有一天他因為某些事太晚到家,結果除了進門第一個房間外
其它都是暗的。因為他很怕黑,所以他不敢進去暗的房間。又每間房間的燈的開關
有可能在其它房間,他必須能夠到達他的臥房,並且關掉除了臥房外的所有的燈。
給你三個數字 r、d、s,代表有 r 個房間(r 最大 10),接下來 d 列每列兩個數字
代表哪兩個房間相連。房間編號從 1 到 n,其中 1 為家門口第一間房,n 為臥房
接下來 s 列每列兩個數字 k、l,代表 k 房有 l 房的燈的開關。假設一開始
只有第一間房的燈是亮的。如果可以走得到臥房且關掉臥房外所有燈,則輸出
最少要幾步,並且輸出每一步做了什麼。如果你找得到多組解,輸出任一皆可,但不要
每一組都輸出,挑一組就好。走到另一間房間、開燈或關燈都分別算一步。
/* 譯註:其實我就只 wa 在不管開燈關燈都輸出 on 而沒改成 off… */
每組測試資料後,輸出一個空白列。
---- 分隔線 ----
嗯,不難做…用 BFS 就可以了。
狀態的數量不太多,最多十間房,又每間房的燈只有開和關兩種情形
因此房間狀態最多 2^11 種,主角所在位置最多 10 種,共計最多 10 * 2048 種
一開始的狀態是在第一間房,並且第一間房的燈亮著。
之後做 BFS 即可。在每間房間可以做的有前進到別間房,以及戳開關兩種動作
都可以透過位元運算來處理。擋重覆只要用陣列卡一下,狀態數不多,空間可以負荷
注意第一間房即臥室的情形。
回溯的話就看從哪裡來,便從哪裡回去,如果位置沒變就是戳開關,判斷一下就好
如果位置變了就是移動位置。用遞迴可以很簡單地完成它。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ DJWS 推:十間房間的燈只有開和關,應該只有2^10種狀態。 0908 13:50
→ DJWS 推:加上人可以在10個房間走動,故共有2^10 * 10種狀態。 0908 14:51
作者: sa072686 at 07/11/16
嗯,其實蠻簡單的…置底文歸類為 BFS,不過我覺得用 Warshall 比較好做…
翻譯一下
給你 m、n、p 代表有 m 個點,n 條邊和 p 次詢問。m <= 30,0 <= n <= m(m-1)/2
且 0 <= p <= 10。所有的邊都是雙向的,每個點都由兩個大寫字母組成,第二列
會給你 m 個點的名字,接下來才是 n 條邊,並且邊不會重覆給。
每次詢問給你兩個點的名字,然後一個數字 k,每經過一個點要 k 的 100 倍的價錢
問從一點到另一點最少要多少錢?或是不可能走得到。
---- 分隔線 ----
嗯,先用 warshall 跑過一遍…然後對每次詢問直接判斷輸出即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: Tommy at 07/11/17
※ 本文轉錄自 [Tommy] 信箱
作者: Tommy.bbs@newkshs.twbbs.org (Tommy)
標題: [奧義] submit
時間: 2007/11/17 Sat 16:57:02
作者: Tommy (Tommy) 站內: P_Tommy
標題: [奧義] submit
時間: 2007/11/17 Sat 16:52:12
測測看有沒有問題唄~
(此頁面只負責submit 所以要先自己登入XD)
http://s92035.myweb.hinet.net/ACM/submit.html
--
| | | | | | | ┌──────┐| | | | | | | | |
| | | | | | |│新.紅樓築夢│ | | | | | | | |
Origin: NewKSHS.twbbs.org └──────┘From: 220-129-144-107.dynamic.hinet.net
φ Tommy 轉:從 [Tommy] 信箱,于 2007/11/17 Sat 16:57:24
作者: sa072686 at 07/11/17
嗯,不太好想的一題…尤其是它的題意並不怎麼好理解。
翻譯一下。
Inspector Robstop 很生氣。昨晚又有銀行被搶,而且搶匪竟然讓他給跑了!
這已經是今年第三次了。即使他盡了最大的力量,用最快的速度封鎖城市,然後去搜索
搶匪─結果只得到手下的回報:找不到搶匪。他受夠了,因此他要透過已有的資訊去
推論搶匪在何時可能正在何處。這城市的外表是方形的,並且所有對外道路將被封鎖
t 的時間。並且你擁有一些資訊如下:在何時,搶匪並不在何處。假設搶匪每單位時間
最多移動一個單位長度,你的程式必須能判斷他在某個時間點時到底在哪裡。
給你三數 w、h、t 代表城市的大小以及道路封鎖時間(1 <= w,h,t <= 100)接下來
有個數字 n(n <= 100)代表接下來有多少訊息。每份訊息一列,告訴你 t1、l、t、r、b
(照這順序,代表在 t1 這時間點,搶匪不在某個以 l、t 為左上角,r、b 為右下角的
矩形範圍中,1 <= t1 <= t,1 <= l <= r <= w,1 <= t <= b <= h)並且城市最左上角
座標為(1,1),右下為(w,h)。對於每一組測試資料,判斷搶匪有沒有可能根本
不在城市中。若在,則如果在所有封鎖的時間點,有些特定時間點可以準確判斷
搶匪的位置,則依這些時間點的先後輸出。否則輸出訊息。
---- 分隔線 ----
嗯,其實它不太好懂…
不外乎是判斷,他是不是不可能還在城市中(因為移動速度不快,如果矛盾就是不在…)
以及每個時間點能否準確判斷位置。如果任一時間點都不能準確推論則輸出訊息
否則輸出某特定時間點的確切位置。不一定要連續。
拿 sample 講解:
time 1:
####
####
####
###*
time 4:
###*
####
####
####
那麼可知時間點 1 和 4 都只有一種可能的確切位置,又沒有其它訊息造成矛盾
因此確定這兩個時間點的位置…而時間點 2 和 3 並不確定,因為都有可能
可是,因為時間差的關係,他在時間點 2 和 3 必須往左移,才能在時間點 4 到達
那個位置,因此連帶也可以判斷出時間點 2 和 3 的確切位置。但不一定連續是指:
time 1:
####
####
##*#
####
time 3:
####
####
####
###*
這時,我們不能夠確定 time 2 他到底在(4,3)還是(3,4),所以這裡只能判斷
1 和 3 的確切位置,而 2 則不知道,因此只輸出 1 和 3 的確切位置。
也就是說如果某時間有多重解時則不輸出。每個時間都有多重解就輸出無法判斷。
解法上,可以先確定的是時間點 1…然後在某時間點 k 則可確定所有搶匪可能在的位置
都是由時間點 k-1 搶匪可在的位置過來的。即使時間點 k-1 有些位置並沒說搶匪不在
可是如果照其它訊息推論他不可能在,那也不會在那。
由於中間可能矛盾,因此先用 dp 跑過,設狀態 dp[k][i][j] 為時間點 k 搶匪有沒有
可能會在座標 i,j 上。則得狀態轉移方程:dp[k][i][j] = true 當 k-1 時四方向
以及原地有任一為 true 的時候。找完若無矛盾,則找時間點最晚的,能準確確定
搶匪位置的時候。然後從它開始做 BFS,然後做 BFS 依照建好的表判斷擴張可能。
若可以存在搶匪,則擴張它;最後若某時間點在 queue 中被 pop 出來,且整個 queue
只有它是這個時間點,則確定搶匪位置,否則就繼續往回擴張完所有時間點為止
最後再把這些確定的位置依時間點順序輸出即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/11/17 Sat 20:55:00
→ seanwu 推:算法藝術 p.34 1117 21:09
→ sa072686 推:咦…真的耶 1117 21:22
▲ sa072686 改@2007/11/17 Sat 21:41:33
→ sa072686 推:不好意思,因為有地方沒寫好就暫時密起來修… 1117 21:41
作者: pioneerlike at 07/11/17
※ 引述《Tommy (雄中電資98級公關湯米)》之銘言:
> ※ 本文轉錄自 [Tommy] 信箱
> 作者: Tommy.bbs@newkshs.twbbs.org (Tommy)
> 標題: [奧義] submit
> 時間: 2007/11/17 Sat 16:57:02
> 作者: Tommy (Tommy) 站內: P_Tommy
> 標題: [奧義] submit
> 時間: 2007/11/17 Sat 16:52:12
> 測測看有沒有問題唄~
> (此頁面只負責submit 所以要先自己登入XD)
> http://s92035.myweb.hinet.net/ACM/submit.html
順便推廣一下drazil學長寫的ACM Tools
http://tcirc.twbbs.org/acm/acm.html
配合Firefox 的 GreaseMonkey 套件;)
可以輸入題號直接view & submit
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by pioneerlike from 211.23.224.207 (發耿發發根據地)
→ dust 推:不過需要tcirc主機正常運作的時候... 1118 15:25
作者: seanwu at 07/11/17
10511 - Councilling
有一個城市, 每個人都恰屬於一個party, 但每個人可以參加不只一個club(0個奕可)
現在這個城市要舉辦一個會議, 每個club都要推派一名該club的成員參加會議
但是, 在會議中任何一個party的總人數必需少於會議人數的一半
另外, 每個club推派的人不能重覆, 即一個人只能代表一個club
請找出一份與會名單, 列出參加會議的人及他們各自代表的club
如果無解, 請輸出 Impossible.
//有深度的flow題, 重點在於建圖
<Hint E>
源->每一個party, 容量 = (club數-1)/2
每一個party->屬於該party的人, 容量 = 1
每一個人->他所參加的每一個club, 容量 = 1
每一個club->匯, 容量 = 1
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/11/17
喔,看似腦殘可是超心機的…以後出題這招要學(炸)
不知道哪個死心機出這種陰險測資…
翻譯一下。
給你一個數字 n,接下來 n 行每行給你一個字元和一個數字代表這字元的價值
再給一個數字 m,接下來 m 行(m <= 150000)是一篇文章(長度最長 10000)
問這篇文章共值多少錢?價值為每個字元的價值和。
---- 分隔線 ----
有可能有負的字元(-1 至 -128…)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gba356 推:太壞了啦XDrz 1118 21:19
作者: sa072686 at 07/11/18
嗯,不太好做…有一點點變形。嗯又有人因為打錯一個字元挖掉三次了…
翻譯一下。
因為一般西洋棋的騎士,它們的走法有時會讓人覺得有點無聊又不怎麼好用
因此,這裡研發出了更強的 dynamic knight(不知道怎麼翻好,可以翻動態騎士嗎XD)
它有三種行動方式:
型態 K:就像原本的騎士一樣。 /* 譯註:所以它繼承了原本的走法… */
型態 B:像主教一樣,不過只能走 x、y 座標均差 2 的那格。
型態 T:像瞬間移動一樣,它可以瞬間移動到棋盤上對稱的點
為了不讓型態 T 太過強悍,因此限制只能做水平對稱或鉛直對稱其中一種。
同時因為動態騎士太強了,所以我們限制它不能夠連續使用兩次同一型態的移動。
當然在一開始時,三種型態都可以使用。棋盤我們也改變了一下,將其大小設定為
2n * 2n(n 的範圍為 3..20),每組測試資料第一行給你 n 代表棋盤大小。
接下來兩行依序是動態騎士的起始座標以及終點座標。左上角為(1,1),右下角為
(2n,2n),接下來許多行為障礙物之座標,以(0,0)為結束。動態騎士不能夠
停留在障礙物上,但只要障礙物不是目的地就不會影響移動。n == 0 代表輸入結束。
請計算出從起始位置到終點位置最少需要走幾步,或是根本不可能。
---- 分隔線 ----
其實也不難做…老樣子用 BFS 即可。不過不難想到不能夠像一般的 BFS 直接把走過的點
給擋掉,因為走到某一點時還有一件事會影響結果─它用哪種型態的移動走到那格的。
不過也不難發現只要用相同型態的移動走到同一格就可以視為相同,因此狀態上
擋掉某一格用什麼型態的移動走進去的,這樣就可以了;或是使用位元運算節省
空間也是可以。在做的過程記錄使用了什麼型態的移動到達目的地,就可以擋掉
連續使用同一型態移動這點了。棋盤最多 40 * 40,每格最多用三種型態的移動走進去
因此最多 4800 種狀態。以此做 BFS 即可解之。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/18
嗯…這裡提供另一個解法。感謝 silentvow
以下轉載一個網址…感謝 gloompisces 學長
/* 抱歉沒先問你XD,不過放在知識+ 的話應該可以轉吧? */
※ 引述《seanwu (海恩吳)》之銘言:
> 11311 EXCLUSIVELY EDIBLE
> 有一個N*M的蛋糕,但其中有一個1*1的區域是爛的
> 現在Hansel和Gretel想吃這蛋糕,但顯然沒有人想要吃到那塊爛的部分
> 蛋糕的吃法是每次可以直切或橫切一刀,切下一塊來吃
> 兩個人輪流吃,由Hansel先開始切
> 給你N,M,及爛掉區域的座標
> 如果兩個人都有能力找出最佳的策略,問是誰吃到爛的區域
---- 分隔線 ----
參考 10165,把蛋糕左邊長、右邊長、上面長和下面長當作四堆石頭
如果拿到最後一顆石頭就贏了,因為這樣一來就只剩爛掉的蛋糕
設邊長 n,m 爛掉的座標 p,q 則得左邊和上面長 p,q 及右邊和下面長 n-p-1,m-q-1
那麼若這四堆 XOR 的結果為 1 則必勝,否則必敗
詳細證明請參考以下網址:
http://tw.knowledge.yahoo.com/question/?qid=1105060508843
感謝 gloompisces 學長(這篇是他回覆的唷)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/18
嗯,這裡講一下比較好做的做法…差不多,只是比較好做,好像會比較慢
※ 引述《seanwu (海恩吳)》之銘言:
> 589 Pushing Boxes
> 推箱子的遊戲,S是人的起點,B代表箱子,T代表目標,都各只有一個
> 你必須從S出發,把箱子推到T,由於推動箱子是很花體力的,
> 所以你希望找出推箱的步數最少的解法
> 如果推箱的步數一樣多,請找出總步數最少的解法
---- 分隔線 ----
> <Hint E>
> 可以用BFS,以推箱步數為主,不過這題有點苦工 ^^;
> 因為要推箱子,所以人一定是貼在箱子的某一個旁邊上
> 因此以箱子的座標加上人貼在哪一邊當做狀態就可以了(起點當例外)
也可以直接暴 BFS,用箱子座標和人座標當狀態,這樣狀態 16 萬種
雖然有時會重覆…掃過所有可能後,以推箱次數少者為最佳解回溯之
相同的狀態若推箱次數少,則可以重覆之,加上箱子只要卡死在角落就擋掉
這樣,加上重覆的狀態也還在 16 萬種情形以內。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/18
※ 本文轉錄自 [silentvow] 看板
作者: silentvow (It's funny, Peter) 看板: silentvow
標題: [學術] Huge Easy Contest with 黑暗兵法
時間: 2007/11/18 Sun 19:31:50
以下是一些簡單的題目, 但想一次AC卻不是那麼容易.
都說是超簡單比賽了 ... 真的不要想太多XDDD
11340 - Newspaper
給一些字元賦予價值, 求一篇文章之總價值.
char值可能為負數
11341 - Term Strategy
我有m小時卻要讀n科課程, 給讀i-th科j小時之所得分數,
求最高可能平均分, 若有任一科低於5分, 我將會被當掉.
浮點數誤差可能
11342 - Three-square
問n是否能分為i*i+j*j+k*k, 有則輸出字典序最小之(i,j,k).
此題無心眼
11343 - Isolated Segments
有很多線段, 求與任意線段皆無相交者總數.
判斷相交計算式可能有值大於int
11344 - The Huge One
問集合s是否皆為n之因數, n為大數.
此題無心眼
11345 - Rectangles
給很多矩形, 求所有矩形之交集面積.
此題無心眼
11346 - Probability
給a,b,s, |x|<=a, |y|<=b, 求所有符合前述條件之實數(x,y)中|xy|>s所佔百分比.
此題無心眼, 確認數學式之正確性和誤差可能
11347 - Multifactorials
n*(!^k) == n*(n-k)*(n-k) ... (n mod k) or (k),
求n*(!^k)之因數個數, 若大於10^18則視為無限大.
此題無心眼
11348 - Exhibition
很多人各有很多張郵票, 若一種類郵票僅一人持有即為unique stamp,
求所有人之unique stamp持有種類百分比.
種類並非張數
11349 - Symmetric Matrix
問一矩陣是否以中心為點對稱, 且由非負整數構成.
此題無心眼
11350 - Stern-Brocot Tree
左數a/b和右數c/d之中間數為(a+c)/(b+d), 最初之左右數 = 0/1, 1/0,
朝左走則以中間數為新右數, 朝右則反, 給一行走序求終點為何數.
正解可能超出int範圍
11351 - Last Man Standing
Joseph Problem, 305之n,k放大版.
此題無心眼
11352 - Crazy King
我要從王國A去王國B看女兒, 當然我沒有笨到被不會動的騎士攻擊,
問我是否能抵達和最短路徑長, 所有單位皆用西洋棋方式攻擊或移動, 我是國王.
騎士不會攻擊兩王國所處位置
--
╓───╖╓╖╓╖ 高中生 ─── 一種會全力作傻事的生物
║╓──╜║║║║ 而且很容易一頭熱,馬上又冷掉。
║╙──╖║║║║ ╖
╙──╖║║║║║ ╓─╖ ╖─╖ ╫─███ ▉ ▊ ▋ ▌ ▍ ▍ ▏
╓──╜║║║║╙──╖╟─╜ ║ ║ ║ ╖ ╓╓─╖╖╥╓
╙───╜╙╜╙───╜╙─╜ ╙ ╙ ╙╜ ╙─╜╙─╜╙╨╜
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 219.70.20.103 (和信超沒品)
▲ silentvow 改@2007/11/18 Sun 19:47:08
▲ silentvow 改@2007/11/18 Sun 21:12:20
→ sa072686 推:Peter, you shouldn't have played billiard that much. 1118 22:01
→ sa072686 推:是說借轉一下XDD 1118 22:01
φ sa072686 轉:從 [silentvow] 看板,于 2007/11/18 Sun 22:01:35
作者: sa072686 at 07/11/20
嗯…不是說很難寫的一題,不過直觀解會炸掉的樣子?
不知道,拿直觀DFS結果TLE過…可是這題總TLE次數那時還不到十次?
翻譯一下
彼得因為打撞球打太大而忽略了課業。因此他的課業遇到了危機…
所以他建了一張表,打算開始來讀書…現在總共有 n 科(n <= 10)要拼
他算了算距離考試的小時數,扣去每天五小時打撞球還剩下 m(m <= 100)小時
這張表有 n 列、m 行,第 i 列的 j 個數字代表科目 i 讀 j 小時後能得幾分?
分數從 0 到 10,只要有 5 或以上就可以過了。問彼得是否能在時間內把每科都
衝到 5 分或以上?如果可以,由於彼得很貪心,所以要這些科平均分數越高越好
假設某科讀的時數越長時,最多是沒有進步,但一定不會退步。
---- 分隔線 ----
直觀地拿 DFS 去搜所有時數組合會太慢…等於是把 m 小時分配給 n 科任意時數
不過由於可行分數只有六種(5 到 10),因此這 m 小時大部份都是重覆的數字
並且相同分數情形下,讀多久都一樣,所以不去考慮…建表記錄每科讀 k 分所需
最低時數,然後去組合這 k(5 <= k <= 10)分,這樣即可輕易通過時間限制。
雖然可能沒有用完給的 m 小時,不過這些拿去給某些科,分數也不會比較高
所以這些拿去打撞球好了,彼得(茶)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,好寫的枚舉題。不過沒考慮降維直接直觀地搜還是會炸掉的…
翻譯一下。
給你一個數,問是否能表示為三數之平方和?已知最多 10000 組詢問,詢問的數字
不大於 50000。此三數可以相等,但輸出順序必須是不遞減順序。
如果有多組解,依照字典順序挑第一組 /* 譯註:我針對字典順序去排序結果 wa 掉…
後來把 a、b、c 從小者開始枚舉起就過了… */。找不到請輸出 -1
---- 分隔線 ----
其實很容易…或許有更快的做法,我不知道
我是直接枚舉,50000 開方約在 220(48400)到 230(52900)
因此從小枚舉 0 到 230,然後內圈從第一數開始枚舉起,這樣可以避免第二數
小於第一數。然後第三數直接判斷是否為完全平方數,且開方後是否大於等於第二數
這樣 0.12s,如果要再優化,外圈枚舉到 50000/3 的開方,內圈到 50000/2 開方
這樣 0.08s,如果要再優化,外圈平方後三倍大於 n,內圈平方後兩倍加外圈平方
大於 n 都 cut 掉,這樣 0.07s,如果建表記錄每個數的平方直接調用是 0.05s
如果在以上的條件,不合就直接 break 則是 0.04s,31 名。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ gloompisces 推:我枚舉是從第三數開始,每找到一個就判斷他是不是比 1120 23:54
→ gloompisces 說:原來的好,0.02s 1120 23:55
→ Robin 推:大家都好快喔,我的是 0.85 Ranking 100 @@ 1127 17:11
作者: sa072686 at 07/11/20
很難寫、很難寫的一題…不過對於數學好的人或許不會?
翻譯一下。
如果兩個線段有一個或以上的共同的點時,則稱它們相交。如果一個線段
不和任一個線段相交則稱它獨立。問有幾個獨立的線段?座標在 1000 以內,線段長
必大於 0。
---- 分隔線 ----
嗯,請參考之前學弟 po 的文,計算線段交點的方法
不然直接拿行列式硬暴也是可以啦…嗯。
這裡還是大概提一下 USACO 的計算幾何部份教的方法。
設 ab 線段和 cd 線段,則可知:若 a、b 在 cd 線段之兩側,且 c、d 在 ab 線段
之兩側,則 ab 和 cd 兩線段相交。因此以向量方式判斷是否在同側或異側
若 a-c x d-c 與 b-c x d-c 異號(積小於 0),則 a、b 兩點在 cd 線段之兩側
x 為 cross 運算,也就是外積…將之 z 軸視為 0 即可運算,化簡後為 x1y2 - x2y1
(或許我記的是相反的(炸)不過反正相反了,判斷在兩側還是可以用…異號時還是
異號,同號時還是同號(茶))然後如果 cross 為 0,則表示在該線段所在直線上
若兩點其中有一點在上面,則可能交於端點;若皆在上面則表示共直線
交於端點情形視為異側,再去判斷 c、d 兩點…若皆在上面則看是否有重疊或交於端點
這時直接用座標判斷即可。不過此法注意算外積後判斷異號時有 overflow 之可能…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
▲ sa072686 改@2007/11/20 Tue 09:15:47
作者: sa072686 at 07/11/20
不難,是大數對小數取餘…感覺上似乎乘法還比較麻煩?
翻譯一下。
你的女朋友在程設老師丟的作業上碰到了困難。你程設很強,所以要幫助她對你而言
輕而易舉。理所當然地,因為你們週末要一起看電影,所以你當然不希望她花太多時間
在這份作業上。如果你幫她完成了,那麼她將會很感激地和你一起去看電影,甚至
還會更多…。這是不是對你而言是個很大的鼓勵?給你一數 m(m <= 10^1000)
以及一個集合 s(最多 12 個元素,值在 1 到 12 之間)
問你 m 是否能被集合 s 中所有數整除?
/* 呃,結果…只有一行半和題目有關耶(汗) */
原文為:a set S of different numbers from the interval [1;12]. */
---- 分隔線 ----
嗯其實不管怎樣做大數除法絕對錯不了…反正也慢不到哪去。
值在 1 到 12 之間,可以用簡單的判斷法則。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ gba356 推:"元素的範圍落在閉區間 [1,12] 之間 1120 17:24
→ sa072686 推:啊,謝謝,馬上修 1120 18:36
▲ sa072686 改@2007/11/20 Tue 18:37:24
作者: sa072686 at 07/11/20
很好寫的一題。…好像在哪看過類似題?之前好像有某題長得完全一樣…
記不起來了。有找到再推文。
翻譯一下。
這題沒有故事。(原文講的,不要打我…原文:This problem has no story.)
給你 m 個矩形(m <= 30)求它們共同的重疊區域面積?座標值在 -10000 到 10000 間
矩形表示法為:給你左下和右上的點座標。
---- 分隔線 ----
嗯,反正只看共同區域…每次拿共同的區域去和下一個矩形比較,再保留共同區域,…
如此繼續下去就好了,共同區域為 x、y 座標小者中取大、大者中取小,矛盾則無交集
(矛盾情形為:x、y 座標中小者大於大者…)
最後矛盾則面積為 0,否則相乘即可得解。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,不難寫…可是有個地方比較麻煩。
翻譯一下。
定義 n! = n * (n-1) * (n-2) * ...
n!! = n * (n-2) * (n-4) * ...
n!!! = n * (n-3) * (n-6) * ...
...
n!!!.....!(k 個) = n * (n-k) * (n-2k) * ... * m
if n%k == 0,m = k;else m = n % k
給你一個表達式,其中 ! 最多 20 個,整數部份最多 1000,問有多少因數?
若超過 10^18 個,則輸出無限。
---- 分隔線 ----
當然是分解成標準分解式再用算因數個數的方式。對於每個數分別計算各個質因數個數
再用公式:設標準分解式 n = a1^b1 * a2^b2 * a3^b3 * ...
則知因數個數 (b1+1) * (b2+1) * (b3+1) * ....
因此分別計算再加總可得每個標準分解式,再乘之;如何判斷大於 10^18?
反正它還在 long long 的範圍內,現在已知 n*m <= 10^18
則得 n <= 10^18 / m,故先除之一試即知會不會超過
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯…有點複雜麻煩的一題。苦工了點…
翻譯一下。
現在有 n 個喜歡集郵的人(n <= 50),每人最多擁有 m(m <= 50)張郵票
郵票以種類表示之(0 到 10000 之間整數),現在問每個人持有的特有的郵票比例為何
特有的郵票定義為:只有一個人擁有,而其它人沒有的。
---- 分隔線 ----
嗯,首先先看是不是唯一…由於考慮到一個人有可能擁有許多張特有郵票
因此,不能以郵票張數決定…以位元運算可計算之,2^n 還不會超過 long long 範圍。
以 or 運算來加入每張郵票的持有者,最後以 XOR 運算判斷特有與否
這樣,將一張郵票以二進位制視之,可得若某一位為 1 則表示該人擁有它。
若一張郵票特有,則 or 時因為同一個人,所以 or 之後會一樣
XOR 之後,持有的人那一位會消掉變成 0,而 0 XOR 0 也會是 0,所以不變…
如果只有一人持有,則 XOR 之後值為 0,否則不為 0,如此即可輕易判斷。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
好寫的一題,只是有那麼陰了一點…
翻譯一下。
給你一個 n * n 大小的矩陣,試判斷其是否為 Symmetric。
條件是:每個元素都是非負整數,且以中心點為對稱點,對稱到的點值必須相同。
例如:
5 1 3
2 0 2 對稱的位置均相等,故為 Symmetric。
3 1 5
5 1 3
2 0 2 由於 3 != 0,因此非 Symmetric。
0 1 5
n <= 100,但 -2^32 <= Mij <= 2^32
---- 分隔線 ----
對稱應該不用講…但 2^32 用 int 會炸,用 unsigned int 一樣會炸…
請開 long long
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
NPSC 出過的一題…而且其實它設計得很好寫。
翻譯一下。
有種 Stern-Brocot tree 可以表示所有的分數。設最右界為無限大(1/0),最左界為
0(0/1),中間為 1(1/1),然後往右則得點(1+1 / 0+1),往左得點(1+0 / 1+1),…
也就是說往哪邊就把那邊的邊界和中間分子加分子、分母加分母,然後繼續往下走…
給你一個字串(長度最大 90)只包含 L 和 R,若為 L 則往左,R 則反之
問最後得到的分數為何?
/* 譯註:如果還是不太清楚,看看題目的圖吧 */
---- 分隔線 ----
照做就好,別忘了 long long 就行。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ seanwu 推:左右相反了? 1121 18:10
→ sa072686 推:啊反了囧 1121 18:37
▲ sa072686 改@2007/11/21 Wed 18:37:34
→ sa072686 推:感謝∼ 1121 18:37
作者: sa072686 at 07/11/20
嗯,強化版啊。不好寫…請參考弗基斯特 programming 板第 31 篇。
翻譯一下。
大家熟知的 joseph,有 n 個人圍成一個圓圈,從第一個人開始,跳過 k-1 個人後,
把數到的人殺掉。給你 n(n <= 10^6)以及 k(k <= 10^9)問最後存活者是誰?
---- 分隔線 ----
請用遞迴解之,而不要暴力…應該不太可能會過。
公式為:f(n,k) = (f(n-1,k) + k) % n,f(1,k) = 0
詳細原因以及證明請見弗基斯特 programming 板第 31 篇。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,很好寫的一題。
翻譯一下。
國王彼得的女兒生小孩了,他很開心從所在的 A 國想趕快去女兒嫁去的 B 國看孫子
不過很不幸的路上有很多騎士正虎視耽耽。他知道如果一個不小心,被騎士抓到
就永遠見不到他女兒和孫子了。幸好他知道所有騎士的位置,請你規劃一條路線
使國王彼得可以安全到達 B 國,並且因為他等不及了,所以這條路要最短。
騎士攻擊的範圍和西洋棋一樣,不過他們不會移動,除非國王彼得進入攻擊範圍。
國王彼得能夠移動的方式和西洋棋的國王一樣。他不能夠踩到騎士,也不能進入攻擊
範圍中。但是在 A 國和 B 國所在的位置,騎士攻擊不到。因此若目的地是 B 國,
則不管有無騎士能攻擊到都可以走。地圖大小最大 100 * 100。
---- 分隔線 ----
先抓出所有騎士,再去判斷所有不能走的點,然後 BFS 就可以了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
很麻煩很苦工,可是很好寫的一題。
翻譯一下。
現在要做菜,有份菜單。第一行給你標題,第二行為三數 n、m、b(1 <= n,m <= 100,
1 <= b <= 10^6),接下來 n 列每列一個字串和一個數字代表材料名字和價錢。
接下來有 m 種菜,每種菜一開始一行給你名字,下一行一數 k,代表需要 k 種材料
每種材料一行,名字和需求量。對每一次要做菜的時候,請把標題換成全部大寫輸出
之後按照菜單上每種菜的價錢由小到大輸出,如果單樣菜價錢超過 b 就不要了。
如果價錢一樣請照名字的字典順序輸出。
---- 分隔線 ----
只要對每種菜,算出花費,然後排序,由小到大輸出,超過 b 就 cut 掉即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,很好寫的一題。
翻譯一下。
給你現在的時間,求下一個為迴文的時間為何時?注意現在的時間不算在內。
時間格式 hh:mm,h <= 23,m <= 59。判斷方式為將 hh 和 mm 視為一四位數字 hhmm
再去掉開頭多餘的 0,看看是不是迴文。注意 23:59 接下來是 00:00。
嗯…好像沒什麼要提的。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,不難的一題。
翻譯一下。
有兩種形狀蛋糕:一種是正方形,佔一單位長;另一種是 L 形,佔三單位大。
█ 和 ██
█
現在給你一個盒子(寬度為 2,長度則 <= 40)
問有幾種方式能裝滿蛋糕?
---- 分隔線 ----
已知可以用兩個一單位大的把長度 n-1 的拼成長度 n 的,也可以用一個一單位大、
一個 L 形的把長度 n-2 的拼成長度 n 的,且有四種拼法。另外有一種方式,
用兩個 L 形可把長度 n-3 的拼成長度 n 的,有兩種方式
... ○
... ●
... ○●
... ●●
... ●●
... ●○
... ●○
... ●●
... ●●
... ○●
... ○●●
... ○○●
... ○○●
... ○●●
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,不難寫的圖論題…雖然不知道為何傳的人相當少,不過其實蠻單純的。
翻譯一下。
給你一張地圖,你必須找出從一點到一點,延遲最小的路線。不管走得多長都無所謂
只要延遲小就行了。給你一整數 n 代表有幾個點(n <= 10),接下來 n 列
第 i 列一個數字 m 代表第 i 個點有幾條路,之後 m 對數字 x,y 表示 i 點
通到 x 點那條路平均延遲為 y。最後兩個數字代表要從哪一點走到哪一點。
給你的路都是單向的,並且同一條路不會給兩次,任兩點間除非方向不一樣,否則
不會有超過一條路直接連接。問延遲最小多久,及其路徑。本題保證每組測資
皆為單一解。
---- 分隔線 ----
用 dijkstra 即可。記錄每個點從誰過去的就從哪回去,就可以輕易回溯了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,不太好想的一題。
翻譯一下。
給你一個字串(長度最多 1000),問如果可以在任意位置插入任意字元
則最少需插入幾個字元才能使其變成迴文?並輸出該迴文,若多組解則任一皆可。
---- 分隔線 ----
首先去遞迴某一段 i,j
如果 s[i] 和 s[j] 是一樣的,那麼不用插入什麼,直接遞 i+1,j-1
否則,則看 i+1,j 和 i,j-1 哪一種插入次數比較少,取其加上插入一次並記下方向
最後邊回溯看要插入什麼字元在哪裡,邊輸出解
若是溯往 i+1,j 表示插入 s[i],反之為插入 s[j]…
不過跑得有些慢,新系統跑 1.38s
應該有更快的方法,還請各位高手們不吝賜教。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯…不是說很好想的一題。
翻譯一下。
有天 John 正忙著準備出程式設計比賽的題目。他想出了一題簡單到很誇張的一題:
給你一些非負整數,將其相加,和為多少?不過在他寫程式輸出測試資料的正解時
卻犯了一個常見的錯誤:忘了加上分隔。因此數字攪在一起變成一個超長整數。
於是他突然想到了一個好題目:把這超長整數切回 32-bit 有號整數,然後相加
則最大和為何?這超長整數不會超過 200 位。切的時候不得有開頭多餘的 0。
---- 分隔線 ----
嗯,不太好想…看似切最多位最佳,不過 greedy 似乎又不總是行得通。
畢竟相同位數下也有大有小,不好決定…因此試著用遞迴看看:
從第 n 位開始,如果第 n 位是 0,則知最大為從第 n+1 位開始時最大的解
否則,就試著從第 n 位開始,切一位、切兩位、…直到大於 2147483647 為止。
看切幾位,換算的數字多大,再去加上從那位起最多能得到多大的解
如此便可解此題。不過不難發現每個位數起最多可以有十種切法,這樣似乎多了點
因此為了避免重覆運算,使用 DP 建表記錄即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
很好寫的一題…
翻譯一下。
給你 n(n < 1000001),問有幾種方式可表達成 n = x + 2y + 2z?
例如:2 = 2 + 0*2 + 0*2,2 = 0 + 1*2 + 0*2,2 = 0 + 0*2 + 1*2 共計三種。
---- 分隔線 ----
不難看出:x 是影響奇偶的關鍵,因為 2y 和 2z 都是偶數
因此如果拆成 x 和 2(y+z) 則去判斷 y+z 的情形就知道了
若 m = y+z 則方法數共有 m+1 種
設 n 為偶數,則可為 0 + n,2 + n-2,4 + n-4,…,n + 0
對於每種 m 有 m+1 種可能,因此得到方法數為:
(n/2)+1 + ((n-2)/2)+1 + ((n-4)/2)+1 + ... + (0/2)+1
也就是從 1 加到 n/2+1,用梯形公式得 (1 + n/2+1) * (n/2+1) / 2
若 n 為奇數,則將 x 改變為 1,3,5,…,答案不變。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,不難寫的一題。
翻譯一下。
給你 n 代表有 n 個人,每個人有五個數字。
問選擇到最熱門的組合的人共有多少?
最熱門的組合,就是同時選那五個數字的人最多。如果平手則並列。
---- 分隔線 ----
要先把不同的排序弄成相同…然後去比較哪個熱門。
先對每個組合排序過,然後再對所有人選的組合排序
這樣相同的組合會湊在一塊,再去數哪個最熱門,邊數邊加總人數。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,不難做的一題。
翻譯一下。
一個 base-a pseudoprimes 是一個非質數 p,但卻可讓某整數 a 使得滿足以下式子
(a^p) % p == a % p,現在給你 p(2 < p <= 1000000000)以及 a(1 < a < p)
問 p 是否為 base-a pseudoprimes?
---- 分隔線 ----
請參考 374 的做法…判斷質數不難,反正 p > 2,所以偶數都不是質數
否則枚舉小於等於 p 的開方的奇數看能否整除,若有任一可以則 p 不為質數
對於非質數的 p 試做 a^p 即可。做法嘛…由於對乘法有分配率…
(a * b) % c = (a%c * b%c) % c
由此可知,可將次方拆成:
a * a^(p-1) if p%2 == 1
a^(p/2) * a^(p/2) if p % 2 == 0
以此遞迴即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/20
嗯,很腦殘的一題…雖然它題目有點長。
翻譯一下
有天某個王國裡養的某隻天鵝生下了一隻有著很多顆頭又會噴火的龍。雖然牠小時候
很可愛,可是長大之後就成了王國的一個大威脅。因此國王決心要消滅牠。於是他
問了消滅龍的方式:必須把牠的頭全部砍掉。他召集了許多騎士,但麻煩的是他剛
建完一座公園,所以並沒有太多的錢;已知一個騎士只能砍掉牠一顆頭,並且這位騎士
的身高必須大於等於那顆頭的直徑才砍得掉。每顆頭有著可能不一樣的大小,騎士的
身高亦是如此。國王想花最少的錢消滅那隻龍,給你 n 和 m(1 <= n,m <= 20000)
之後 n 列是每個頭的半徑(譯註:最多兩萬顆頭,這隻龍是怎樣…),之後 m 列是
騎士的身高。看有沒有辦法殺死牠,如果可以請輸出最小花費。
補充:聘請一位騎士的花費相當於那位騎士的身高。感謝 chensc。
---- 分隔線 ----
嗯,已知小的頭要用矮的騎士去砍…並且如果一顆頭可被一位騎士砍下,則非必要
的話不要再叫更高的騎士去砍。因此有個 greedy 的策略為:
從最小的頭開始,用最矮小但可砍下它的騎士去砍。如此枚舉完所有頭即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ chensc 推:補一下,花費就是用騎士的身高算,170cm就是花170元請來的 1120 20:14
▲ sa072686 改@2007/11/20 Tue 20:19:39
→ sa072686 推:已修正,謝謝一樓∼ 1120 20:19
→ chensc 推:不客氣 明天在來摳這題 現在不想開terminal了XD 1120 20:51
→ sa072686 推:那是啥XD 這題不用什麼特別的東西啊?XD 1120 23:06
→ chensc 推:終端機啊XD 1121 13:00
→ sa072686 推:喔…(茶) 1121 14:00
作者: sa072686 at 07/11/20
嗯…不難想的一題。不過直觀解會爆炸(雖然它會爆炸這件事也很直觀…)
翻譯一下。
給你一張圖,上面有 n 個點,編號從 A 開始,最多 26 個點。
然後每個點有兩條路連出去:一條是 0,一條是 1,現在參賽者從 A 開始走
每次回答一個問題,答對了就走 1 那條,答錯就走 0 那條,如果在 m 次
(0 <=m <= 30)移動後恰停留在特殊的點,則稱此人獲勝,否則則為落敗。
將一條路徑表示成一個長度為 m 的二進位制數字,則知有 2^m 種表示法
其中有幾種可以恰停留在特殊的點?
/* 譯註:特殊的點不只一個,我因為這點 wa 了一次… */
---- 分隔線 ----
2^30,DFS穩炸。
不過可以使用 DP,不管怎麼走,使用同樣的步數走到同一格的情形都能視為相同
因此,將狀態設為 DP[i][j] 表示第 i 步有幾種方式可以走到第 j 格
由於一開始出發時有 2^m 種,然後在每次回答後分歧成兩邊
因此,true 那條路就會多出 2^(m-1) 種,false 那條亦同。
如此最後把所有特殊的點上走 m 步的方法數加起來即為所求。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/11/20
10968 - KuPellaKes
給你一張圖, 其中最多有兩個奇點
請你在這張圖中刪掉一些邊, 使得每個點的度數都是偶數且不為0
問最少得刪掉幾條邊? (或者無解)
<Hint E>
做兩個奇點之間的最短路, 把這條路上的邊全部拿掉就是了
注意每個點的度數需>0, 所以如果一個點的度數=2, 就不能走
又如果一開始有兩個奇點, 任何點的度數<2等, 都是無解
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/11/21
很難寫的一題啊…很容易 TLE,昨天換了兩種方法都沒過…
後來爬討論板發現,板上講的兩種方法正好就是昨天用的兩種…結果都是寫炸…
翻譯一下。
給你 n 和 m(1 <= n,m <= 999)代表迷宮大小,接著 n 列有 m 個恰被一個空白
所隔開的數字,代表走到那一格上的 cost。cost 介於 0 到 9 之間。從(1,1)
出發,每次只能走東西南北四個方向,求走到(n,m)的最小花費為何?
/* 譯註:wa 了數次就因為忘了加上第一格的花費…請注意。sample 給 0 所以沒差 */
---- 分隔線 ----
感謝討論板上的強者們。以下是我想的兩種方法,後來板上證明都會過
只是一種被我寫壞,一種要優化 IO…嗯,所以只學到優化 IO?
不難想到用 BFS 的話會很難保證最短…不過由於重視的是 cost 而不是 shortest
因此,如果將 queue 改成 priority queue 是不是就可以保證 cost 最小呢?
嗯,這樣就演化成 dijkstra with heap 了。不過討論板說用 STL heap 和
STL priority queue 會 TLE,因此請乖乖自己寫…嗯。
這樣,dijkstra with heap 如果 IO 有用 string 的話…約在 2.3 至 2.5s 浮動
如果 heap 的向上、向下調整換用迴圈做而不用遞迴,會飄在 2.1 至 2.3s
不過之前有試著記錄每個點在 priority queue 中的位置,然後更動後直接對它
做向上調整,不過光記錄就會導致 TLE…因此直接不管三七二十一 push 會比較好。
IO 上…由於都是一個位數的數字,又恰被一個空白分隔,每列又恰 m 個
因此以 string 的形式讀入,再取偶數個字元即可。否則 dijkstra 會 TLE。
heap 的大小使用 450000 就可以過了。
另外一種方式是利用類似環狀的佇列…就想,反正只有十種數字,0 到 9。
那麼可以去思考看看…能利用這點優化什麼?後來想到,在使用 priority queue
的時候如果用 heap 去做,那麼每次取出來的一定最小…又加上去的數字最大 9 而已
因此,每次 priority queue 中必只存在 10 種數字…所以,就不要用 heap 做
priority queue 了,換用 10 個 queue 去實作 priority queue…
用 cost % 10 來判斷要放哪一個 queue,然後就用類似於環狀 queue 的方式去跑
這樣只要 O(1) 的時間便可以做插入了,比起 heap 的 O(log n) 的插入時間要好得多
改寫 priority queue 後,由於怕 mem 花太兇,用鏈結串列實作結果:0.57s
後來用陣列,將 10 個 queue 開到 450000(300000 會 re),0.33s
不過…這裡利用此法的高速,實測了一下兩種 IO 的差距
使用 scanf():1.06s
使用 gets():0.33s
由此可見,兩種 IO 方式相差甚大…
如果一直 wa 的,可以試試地圖大小為 1 * 1 時的情形?
也請注意把第一格的 cost 算進去…sample 的第一格是 0,所以沒差…可是要算。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
▲ sa072686 改@2007/11/21 Wed 12:14:35
作者: sa072686 at 07/11/21
嗯,不好推規律的一題…
lucky 貓有中譯。
---- 分隔線 ----
不難從圖上發現一些規律:例如對角線和完全平方數有關…
由於知道數字,鄰近數不好求,又想:如果有座標的話,恰可把 x 與 y 中取大者先走完
然後走小者時,其實很好計算…都是+1、-1的。
走大者時,可以用公式推論…也不難做。建表後可以直接查表。
座標的話,先找出它在直行還是直列中,可先判斷其中一個座標;再觀察關係式即可。
基本上就是把一圈看成一個單位,然後去判斷處於兩個直列和直行中哪一部份
取得座標後,再透過座標計算;座標的 x 與 y 能夠很輕易地算出數值。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/22
嗯,難想的一題。比較像有四星的樣子了…
lucky 貓有中譯。
---- 分隔線 ----
感謝討論板的強者們。
嗯,這題算是 DP。
不管怎樣的圖,都可以切割成兩個部份:
(A)B,A 和 B 皆為合法表達式。
設長度 n,深度 d 時,若深度要在 d 以內,則 A 的深度最大到 d-1,B 則到 d
因此枚舉任何長度的 B 搭配 A 來算排列數即可。由於左邊括號表達式固定是(A) 的形式
故計算上只要 A 的長度不一樣,情形就不會重覆。
若以狀態 dp[i][j] 記錄長度 i,深度最大 d 時有幾種情形,則得狀態轉移方程:
dp[n][d] = 0 if n < 0 || d < 0
dp[n][d] = 1 if n == 0
dp[n][d] = Σ(i=1 to n) dp[i-2][d-1] * dp[n-i][d]
因為枚舉左邊 (A) 的長度 i,可知 A 的長度需為 i-2,且最大深度 d-1
右邊 B 則只要長度 n-i,配上最大深度 d 即可。
若求長度 n 深度 m 的解,則可透過 dp[n][m] - dp[n][m-1] 得之。因為只要深度
小於等於 m 者都會存在 dp[n][m],可是扣去 dp[n][m-1] 便只剩深度 m 者了。
將一堆深度在 m 以內的扣去所有深度在 m-1 以內的,自然只剩 m。
不過因為要做大數,一個 int 塞四位還是 TLE…也可能我大數沒寫好,板上有強者
極限優化大數後,卡在 TLE 邊緣過了…不過我預處理 TLE 了。
輸入不多,又求 dp[n][m] 時,所有 dp[i][j],i<=n,j<=m 並非都是必要的資訊
因此直接以遞迴做記錄式的 top-bottom 式 DP 即可,5.8s AC。(時限 10.0)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ Tommy 推:可是你要用遞迴算大數嗎? 1122 08:04
→ sa072686 推:呼叫遞迴計算 => 建表存 => 直接從表拿出來算 1122 08:41
作者: sa072686 at 07/11/22
嗯…不太難寫的一題,雖然一開始很容易被嚇到XD
不過跑的秒數有點…,還請各位強者不吝賜教∼
翻譯一下。
酒既不能夠裝得太滿,留下的空間不夠多;也不能夠裝得太少,空氣留得太多會酸掉
因此每個酒瓶都有容量上下限,在此限制之內的酒才能保存得好。給你現在有多少
酒要裝,單位為公升(n <= 1000000)以及有 m 種大小的酒瓶。
接下來 m 列給你這些酒瓶的最大與最小容量。最小不會低於 350,最大不會超過 4500
並且最大與最小的比例不會低於 95% 也不會高於 99%。單位為毫升,試求裝不下的酒
共有幾毫升?假設每種瓶子都有無限多個。
---- 分隔線 ----
嗯,不難看出是背包問題…
不過,它麻煩了些:最多有 1000 * 1000000 毫升的酒。
嗯,分析一下會發現:使用一種瓶子時,看使用幾個,假設 m 個
那麼就可以覆蓋 (max-min) * m 這麼大的範圍。
又,(max-min) 最小最小是 1%,所以可以保證酒在某特定毫升數以上時
一定可以裝得完。透過這個判斷,表最多只要建到 45 萬就夠了,1.24s
不過應該有更好的方法才是。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/22
很醜的一題…
lucky 貓有中譯。
把 n 個組合數相乘(n <= 100),再把 m 個組合數相乘(m <= 100)
然後相除,問結果整除與否(不整除輸出 0),整除的話大於 100 位就輸出 -1,否則
輸出結果,組合數 n r(1 <= r <= n <= 5000)代表 C n 取 r
---- 分隔線 ----
建表存下 1! 到 5000! 的 所有因數個數,然後先做相加減…
如果有負的出現就表示不整除,否則就用大數乘起來…超過 100 位就 break 掉
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/22
嗯…想不出來的題目(炸)不過討論板有找到相關討論…
翻譯一下。
給你 n 求出 n 個字時,有多少 non-binary bracketing 的方法?
實例:
xxxx, (xx)xx, x(xx)x, xx(xx), (xxx)x, x(xxx), ((xx)x)x, (x(xx))x, (xx)(xx),
x((xx)x), x(x(xx))
前六個是 non-binary bracketing,後五個則是 binary bracketing
詳細定義在此:http://mathworld.wolfram.com/BinaryBracketing.html
感謝討論板的強者們。
---- 分隔線 ----
公式為:f(n) = supercatalan(n) - catalan(n-1)
supercatalan:
s(1) = 1
s(2) = 1
s(n) = (6n-9) * s(n-1) / n - (n-3) * s(n-2) / n
catalan:
c(1) = 1
c(n) = (4n-2) * c(n-1) / (n+1)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/22
好寫的一題簡單題…
翻譯一下。
給你 m(m <= 40)種硬幣,每種硬幣有兩種價值,問是否能夠湊出 s(0 < s <= 300)
假設每種硬幣數量都是無限大,計算的方式是兩種價值平方後開方。
比如說我有一些硬幣,其中第一種價值加起來為 3,第二種加起來為 4
那麼我就湊到了 5(sqrt(3*3+4*4) == 5)。如果湊得出請輸出使用的最小硬幣數
---- 分隔線 ----
嗯,其實只是找零問題二維版…
用 dp[i][j] 記錄第一種價值 i 元、第二種價值 j 元的情形下能用幾個硬幣湊出
轉移方程為:
若 dp[i][j] 可湊成,則用任一幣值之硬幣可用 dp[i][j] + 1 湊得 dp[i+v1][j+v2]
保留最佳情形即可。最後枚舉任一 i,j <= n,如果平方和恰為 n^2 則得一解
所有解中選小者即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/23
http://bbs.ice.ntnu.edu.tw/gemmore/Miles&F11CCJ2O&1
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/11/23
嗯,不太好想…而且 io 也不太好解決。
給你許多村莊以及之間的路的長度,每個村莊之間最多一條路徑。
兩個村莊間直接連通的路不會通過第三個村莊,最多 10000 個村莊
/* 譯註:實測結果,開 5000 * 19 可以過… */
輸入之間用空白列分隔,請注意可能有空村,輸入的最後一列有可能不是空白列。
問兩村莊間最短距離之最大者為何?
---- 分隔線 ----
任兩點之間路徑只有一條,因此會是一顆樹。
因此最遠的距離不難想到是任一節點上,路徑最長的兩個子樹的路徑和
因此做 DFS 就好了。
不過因為圖形上不一定是完全連通…因此有可能整個圖是個森林,也有可能是空的圖。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
▲ sa072686 改@2008/02/14 Thu 22:06:55
作者: sa072686 at 07/11/23
嗯,補充一下下…
※ 引述《seanwu ( )》之銘言:
> 給你一個只含有加減號的等式
> 加減號的位置不能移動,你只能改變數字的位置
> 請找出任意一組正確的解,無解則輸出no solution
---- 分隔線 ----
> <Hint 請按大E>
> DFS with 2^16
> 注意你可以先對等式移項或其它處理,會好寫很多
對等式移項…應該是指兩邊像是減號移到另一邊,然後分兩組
就變成把一些東西依照特定數量分成兩堆,兩堆要相等
故知,所有數字之和若為奇數則必無解,反之則可能有解
以此方法去分就變成 2^n 了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: devilqxect at 07/11/25
糟糕了...
NPSC決賽
* 高中組
日期︰12月22日
時間︰10:00 - 15:00
全國決賽...
資訊科:國立交通大學資訊工程學系,決賽日期訂於96年12月22日至12月23日。
王八蛋...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by devilqxect from 59.104.151.128 (種子電信)
→ gloompisces 推:那看來今年NPSC會很不精采XD 1125 17:22
→ gloompisces 說:或許可以逆向操作,參加NPSC搶筆電? 1125 17:25
→ devilqxect 推:筆電&(TOI一階免試+15000)哪個比較精采呢...XD 1125 17:27
→ devilqxect 推:可不可以寫信去問阿= =a 1125 17:28
→ sa072686 推:免試…對考得上的好像沒差?不過,決賽要兩天有點詭異… 1125 18:14
→ godgunman 推:決賽一直都是兩天阿 .. Orz 1125 18:20
→ godgunman 推:原來這一切的計算都在某國手之中 .. (茶) 1125 18:21
→ styhihs 推:樓上...xDDDDDDDDDD 1125 18:23
→ sa072686 推:咦 一直都是兩天嗎(思) 1125 20:03
→ gloompisces 推:其他科的全國賽大部分都是三天,似乎資訊地科例外 1125 20:38
→ pioneerlike 推:資訊確實都是兩天沒錯 1125 22:52
→ rhodon 推:樓上你有空跟我解釋一下...我看不懂...orz" 1126 00:50
作者: seanwu at 07/11/26
558 - Wormholes
公元2163年,科學家們發明了蟲洞
一個蟲洞的兩端可以連接兩個地點,之間可能有時間差
你想知道可不可能利用這些蟲洞,來做時光旅行
所謂時光旅行是必須到達同一地點的較早時間
給你N≦1000個地點和M≦2000個蟲洞
接下來M個蟲洞用 a b c 表示:從a到b(單向的),時間會增加c年(負值表示倒退)
問時光旅行有沒有可能實現?
<Hint E>
問圖上有沒有負圈,可以用bellman-ford
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-139.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 07/11/27
10615 - Rooks
N*N棋盤上有部份的格子標記了'*'號,請將標了星號的格子著色
使得每行、每列中沒有相同的顏色存在
問最少要幾種顏色,請輸出最少色數及任意一種著色方案
<Hint E>
建成二分圖,每一列各用一個點代表,每一行也各用一個點代表
如果某列某行有'*' ,則對應的兩點間有邊,這個問題轉化成
對二分圖的邊著色,相鄰邊之間不能同色
又二分圖屬於Vizing定理中的第一類圖形,故色數=最大頂點度數d
可以先把每一個點的度數都補到d,依Hall's Rule必存在完美匹配
而抽離掉這個匹配後的圖形每個點的度數變為d-1
故需做d 次匹配,複雜度為 O(d*N^3) => O(N^4)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-139.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: newmoon at 07/11/28
一直看這裡的題目翻譯
總覺得過意不去
我也來翻幾題吧
給一個N*N的地圖,接下來有M列,每列一個字母,問在地圖中由這個字母組成的
正方形有幾個?
如圖: .A. ..A.
A.A A...
.A. ...A
.A..
都算是正方形
輸出請參考OUT PUT
--
▲ newmoon 改@2007/11/28 Wed 08:56:46
→ godgunman 推:你是好人 1128 11:21
→ sa072686 推:感謝XD 如果大家都能幫忙就好囉∼ 1128 22:38
作者: newmoon at 07/11/28
求一串數字(環狀排列),使從每個位置開始的M個數所成的所有數列
為數字0到N-1的M個數的重複排列
如M=2,N=3時,001122102即為一例
因為00,01,11,12,22,21,10,02,20為所有的重複排列情形
其中N^M小於65536且N和M都是自然數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.167.199 (福爾摩沙固網)
→ seanwu 推:這題跟10244一樣 1129 19:25
→ newmoon 推:看來我看過的題目還不夠多 1129 19:31
作者: newmoon at 07/11/29
10529-Dumb Bones
在玩骨牌時,有一定的機率會往左倒或往右倒,由於是骨牌所以倒下時
會連同左邊或右邊的骨牌一起倒下,
DD__DxDDD_D
如上D為已擺上的骨牌,x為現在要擺上的骨牌,若往左倒,左邊也會跟著
倒一個,往右倒右邊有三個骨牌會跟著倒下,現在給你一個整數n代表你
要排出連續n個立起來的骨牌,併給你兩個實數Pl和Pr分別代表往左倒
和往右倒的機率求立骨牌次數的期望值
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 163.32.78.7 (高雄一中)
→ seanwu 推:要按順序擺嗎? 還是隨便? 1129 19:32
→ newmoon 說:隨便,使期望值愈小愈好 1129 19:33
作者: sa072686 at 07/11/29
感謝你的翻譯,所以捧場了一下。這裡補上解法。
※ 引述《newmoon (雄中的倒楣鬼)》之銘言:
> 一直看這裡的題目翻譯
> 總覺得過意不去
> 我也來翻幾題吧
> 給一個N*N的地圖,接下來有M列,每列一個字母,問在地圖中由這個字母組成的
> 正方形有幾個?
> 如圖: .A. ..A.
> A.A A...
> .A. ...A
> .A..
> 都算是正方形
> 輸出請參考OUT PUT
---- 分隔線 ----
嗯,正方形…因此就是取四個字母檢查其相對位置。
不難想到記錄下每個字母的位置,然後配對。
任意配出一對,然後可以算出剩下兩個的位置,再看這兩個位置放的是否為同一字母
因此一個正方形只要配一對就好。
這樣,最差情形是 O(n^4),不過會過就是了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/11/29
感謝你的翻譯。
※ 引述《newmoon (雄中的倒楣鬼)》之銘言:
> 求一串數字(環狀排列),使從每個位置開始的M個數所成的所有數列
> 為數字0到N-1的M個數的重複排列
> 如M=2,N=3時,001122102即為一例
> 因為00,01,11,12,22,21,10,02,20為所有的重複排列情形
> 其中N^M小於65536且N和M都是自然數
---- 分隔線 ----
嗯,我用 DFS 直接枚舉。
由於解似乎不難找,因此雖然看起來很可怕,不過跑起來挺快的…
解的分佈似乎相當地多,不用嘗試太多錯誤即可尋得其一。
枚舉的方式,由於狀態最多 65536 種…
因此就往下枚舉下去,一開始隨便設一種初始狀態
然後從這狀態後面逐次接一個字元,每接一個字元去檢查新產生的狀態有無重覆
如此即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:可以直接構造,不用DFS(其實你的DFS跟本沒有回溯) 1129 19:26
→ seanwu 說:"組合數學"好像有提到,不過我現在找不到了... 1129 19:28
→ DarkKnight 說:Euler circuit 啦 樓上不要裝弱 1129 19:30
→ newmoon 說:那是什麼東西啊? 1129 19:32
→ seanwu 推:對,就是歐拉圈 XD! 1129 20:41
→ seanwu 說:三樓我真的沒有想到 orz 1129 20:41
→ godgunman 說:歐拉圈 .. XDD 1129 21:29
→ sa072686 推:呃,不過我實測時好像有嘗試錯誤?不確定… 1129 22:42
→ sa072686 推:有空再翻翻相關文件,有心得再 po 一次XD 1129 22:43
→ seanwu 推:倒著找回來看看,應該就沒有了? 1129 23:15
→ godgunman 說:對了 什麼叫做 "直接構造" 1129 23:18
→ seanwu 說:就是...公式解,可以這麼說 1129 23:26
→ sa072686 推:咦如果是像302那題…我聽名字想不起來囧 1130 07:52
作者: newmoon at 07/11/30
10569-Number Theory
給一個數n,找出一個數f使得f^3能=N1^3+N2^3+...+Nn^3
其中f不能超過250位
若無解,先輸出-1 然後接著輸出n個0
否則,先輸出f,再輸出N1 N2 N3...Nn
----------------------------------------
很明顯是數學題
不過我想知道有沒有非數學的解法?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.146.233 (福爾摩沙固網)
→ devilqxect 推:不能不...?是最多250位吧...? 1130 06:48
→ sa072686 推:Your number f may be big, but it has at most 250 dig 1130 07:54
▲ newmoon 改@2007/11/30 Fri 09:55:01
作者: sa072686 at 07/11/30
其實…不會很難做的一題。
翻譯一下。
你要辨認一句話是否為 loglan sentence。
它們是由一堆單字或名字所組成,以逗點分隔。
loglan 的單字皆由母音結尾,但有一個例外:名字。只有名字以子音結尾。
其它單字則被分為兩種類型:扮演組成句子的結講用的較短的單字,以及名為
predicates 的單字,其必有五個字母,且為 CCVCV 或 CVCCV 兩種形式。
其中 C 代表子音,V 代表母音。
/* 譯註:接下來為語法規則…由於語法規則過長,又以圖片形式表示
故請自行參考題目中之圖片。圖片中看起來疑似小寫 c 者,應該都是 e… */
而你必須判斷一句話是否為 loglan 的 sentence。
/* 譯註:就是是否符合規則中的 <sentence>。 */
給你的句子每句單獨一行,包含許多單字,必以一逗點為結尾。
單字間必有空白分開,但可能不只一個。
若有一行只包含一 '#' 則表示輸入結束。
==== 分隔線 ====
嗯,用函數乖乖照做就可以了…。
有些地方有遞迴規則或不定長度的,參數丟左界和右界給它
然後枚舉一下中間分界線即可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
作者: sa072686 at 07/11/30
嗯,難寫的一題。長得像台南一中96年校內初選家長會那題…
翻譯一下。
你是個正被交通問題困擾著的市長,因此你打算重新規劃道路。
為了使道路更加寬廣,你想把它們設為單行道。這樣行車上更有效率。
這城市是方形的,由交錯的道路組成,每條道路都是南北向或東西向的。
你必須讓它們全部變成單行道,並且有幾個特定的重要位置都在道路的交會點
你必須使得所有特定的配對的點,能夠至少有一條 simple 的路徑。
simple 的路徑定義為:只需要一次轉折即可到達。
/* 譯註:詳細範例請見題目,有可通行、simple 路徑和不可通行三種例子的圖。 */
給你東西向和南北向的道路數(皆小於等於 30)和配對數(小於等於 200)
接下來給你 m 對點座標,問是否可能使得每一對間皆存在至少一條 simple 的路徑?
---- 分隔線 ----
嗯,用 DFS 可能會炸掉,不管是 2^60 或是 2^200 似乎都不太樂觀。
兩種我都寫過,都會炸掉…
只做可能的嘗試下,2^60 還是會炸。
或許有高手可能可以不炸,不過我沒辦法(汗)
不過可以使用 2-SAT。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
作者: sa072686 at 07/11/30
感謝 seanwu 學弟提供的資料。
用以解決某些配對問題的。例如 ACM 10319 這類題目。
給你一個集合包含 n 對的元素,設 e1 為其中一元素,則 e1' 為與其一對之元素。
必須找到其中的一個子集 s,使得 s 有 n 個元素,且只要任一元素 a 出現在 s
則 a' 必不在 s 之中。
其中,任一元素 a 有可能與另一元素 b 不能同時出現在 s 中。
以 10319 為例,任兩個點之間的兩條 simple path 為一對。
則若任兩條 simple path 剛好用到同一條路,並且方向相反
則知此兩條 simple path 不得同時被選擇。
因此知若 a 與 b 不得同時出現時,則 a 和 b' 必同時出現,b 和 a' 必同時出現
故可得到一些關係式,哪些元素出現時必伴隨著哪些元素的出現
這時,以圖論觀點視之,將元素視作點,兩元素必同時出現表示兩點相連。
則知如果選擇了圖中某一個點,則與其相連之所有點都必須被選擇。
故最後便能將問題轉成:在每一對 a 和 a' 中,都選出其中一個,並且選了之後
就要連帶地選擇與其相連的所有點。若這些點並不同時包含某對 e 以及 e'
則此點可以被選擇,否則不得選之。如果最後可以順利在每一對中
皆選出恰一點,且符合所有相連的點一起被選取的條件,則此為一解。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
作者: sa072686 at 07/11/30
是求單端最短路徑的方法。
效率差,但對於有負權重的圖依然適用,而不像 Dijkstra 有條件限制。
方法是:將所有點設為距離無限大,然後把起始點距離設為 1。
設有 v 個點,則知最少要更新這圖 v-1 次。
每次更新,設有 e 條邊,則逐次檢查這 e 條邊,看是否有一條邊可使得距離更加地短
則更新到該點的距離。
如果在 v-1 次的更新之後,再嘗試更新一遍,發現還有點能夠被更新到
則知此圖有負迴圈存在,故不存在最短路徑。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
作者: sa072686 at 07/11/30
難寫的一題,雖然很好想,可是複雜易錯…
翻譯一下。
請寫個程式讀入電話的撥出記錄,然後判斷花費。
如果是國際電話,則號碼開頭會是 00,然後有一至三碼的國碼,最後是四至十碼
的電話號碼。如果是區域電話,則號碼開頭會是 0,然後有一至五碼的區碼
最後是四至七碼的電話號碼。如果是本地的電話則不用錢。
輸入分成兩部份,一部份給你表格,另一部份是撥出記錄。
格式如下:
號碼△地區名$價格
其中 △ 代表空白,價格以每分鐘幾分錢表示。地區名長度在 25 以下。
如果碰到號碼為 000000 者即表示第一部份結束。
第二部份有許多行,每筆記錄一行。每行一開始是撥出的號碼,接下來是撥了幾分鐘
中間必有一個或以上空白作為分隔。號碼不會模稜兩可。
每筆記錄輸出撥出號碼、地區名、號碼、通話時間、每分鐘花費及總花費。
本地的電話不用錢,不合法則輸出花費 -1 元,地區名為 Unknown。
---- 分隔線 ----
討論板講了很多…不過,大部份都不是必要的,給的測資也大多數不合法。
首先,每筆記錄都在同一行,不會撥出號碼和時間分在兩行。
名字不會是空白…
不會有 00 這種…即使有也算在國際電話中。
記得判斷號碼長度。國際電話和區域電話的不太一樣。
大致就這樣。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
→ yuscvscv 推:地區超過1000個....//害我RE的元兇 0113 11:58
作者: sa072686 at 07/11/30
嗯,不難寫的一題…原以為暴搜會炸的,簡單的 prunning 就可以過了。
翻譯一下。
將某些字的字母重新排列,可以得到與原本的字完全不一樣的單字。
將某些句子的字母重新排列,也可以得到和原本的句子完全不相干的句子。
輸入分兩部份。
給你一個字典,最多 2000 字,每字至多 20 字母長。以單獨一 '#' 結束,
並且會依照字典順序給你。接著給你許多句子,以單獨一 '#' 結束。
每一句找出字典中所有子集合使得這些字的字母可重新排列成給你的句子。
若無則不要輸出任何東西,包括空白列。並且,子集合中不得有任一單字在原句子中出現
這些子集合必須以字典順序輸出每個單字,以單一空白分隔。
---- 分隔線 ----
用 DFS 枚舉所有子集合即可。若一發現不合則 prune 掉。
這樣,即可 AC。不過秒數在新系統仍跑了 1.12s,即使修正了一點也跑了約 0.6s
嗯,不知道有沒有更好的方法…或是說,使用 memcpy 和 memcmp 太慢?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: devilqxect at 07/12/02
好啦
壽星請吃的吧
//我要台塑
生日快樂XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by devilqxect from 211.74.83.55 (種子電信)
→ hugojay 推:台塑石化 耶~ 1202 17:10
→ sa072686 推:謝啦XD 雖然現在才看到文 不過倒是真的請了XDDD 1202 20:53
→ devilqxect 推:真的耶XDDDD 1202 21:10
→ sa072686 推:雖然不是台塑 不過剛好是牛排耶XDD 1202 21:11
作者: tong20212 at 07/12/02
噢 生日快樂
我是翻我的生日小本看道才來的
聽說上面沒有文
噢
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by tong20212 from 61.62.183.65 (所以內特)
→ sa072686 推:謝謝學妹XD 是說我的生日什麼時候被記在小本上的(驚) 1202 20:53
作者: ben196888 at 07/12/02
生日快樂XD
//其實可以出一題有關生日的題目耶XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ben196888 from 219-70-252-129.twt1.com.tw (沒有故鄉)
→ zenixls2 推:sa日快樂 1202 15:09
→ sa072686 推:謝謝學弟XD 有關生日的題目啊(思) 1202 20:54
→ sa072686 推:你害我想到lucky貓某題卡很久的幾何題了XD 1202 20:54
作者: PG at 07/12/02
阿 學弟生日快樂
祝賀你明年能把那很閃耀的夢想實現 ;)
---
我居然睡到現在才起床 st冏
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://PGTsai.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.81.198.54 (福爾摩沙固網)
→ sa072686 推:謝謝學長>///< 第二行不能低調一下嗎XDDD 1202 20:55
作者: zenixls2 at 07/12/02
小翻譯一下
sa日快樂==[sε]日快樂
給你一堆題目
要你把它解出
然後 拿全國一等獎~(逃)
感謝sa學長的指教
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.97.32 (中滑一番)
→ sa072686 推:謝謝學弟∼我會盡力的XD 你也要好好努力啊 1202 20:55
→ sa072686 推:少說拿個三等吧 不然太對不起我了(大誤) 1202 20:56
作者: gba356 at 07/12/02
學長生日快樂(爆)
據說十八歲可以考機車駕照+發光(?)
總之,學長生日快樂啦XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 125.232.232.34 (中滑一番)
→ gba356 推:話說我們的 ghostleader 學弟也是今天生日耶XD 1202 20:36
→ gba356 推:發人的生日都滿接近的XD //這位學弟是發四團長(驚) 1202 20:36
→ sa072686 推:謝謝學弟XD 是說發光是什麼鬼XDDD 1202 20:56
→ sa072686 推:還有,我很低調(正色) 1202 20:57
→ gba356 推:發光=千題+光 1202 21:00
→ gba356 推:神說:「要有光。」,於是世界上有了 sa 學長。 1202 21:07
→ sa072686 推:千題+光是什麼XD 1202 21:07
→ sa072686 推:什麼鬼XDDD 1202 21:07
→ gba356 更正:韓國人說:「要有光。」,於是世界上有了 sa 學長。 1202 21:08
→ sa072686 推:我那麼低調黯淡(遠目) 1202 21:09
作者: appolloford at 07/12/02
難道sa學長跟我同一天生日∼?
冏...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by appolloford from 122.123.144.211 (中滑一番)
→ sa072686 推:難道學弟和我同一天生日∼?\n\n冏... 1202 21:08
作者: veriw at 07/12/02
SA學長~~
生日快樂~~~~~~~~~~~~~~~~~~
十八了耶~~
值得紀念XDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by veriw from 61.62.191.174 (所以內特)
→ sa072686 推:謝謝學妹� 1202 21:36
→ veriw 推:=口=為什麼要問號 1202 21:44
→ ben196888 推:(驚)?! 1202 21:53
→ sa072686 推:咦…問號怎麼來的(驚) 本來是「∼」的XD 1202 22:08
→ veriw 推:XDD 1203 10:04
作者: chensc at 07/12/02
毫不遲疑地便選了 ACM 這個分類啦 XDD
超符合sa的呢!
sa 學長生日快樂啊∼∼
可想而知你的生日願望一定是寫更多題目(茶)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.216.249 (中滑一番)
→ sa072686 推:謝謝>////< 不過最後一句有點挖掉了XDDD 1202 22:18
→ sa072686 推:當然也想寫更多題目,不過最希望實現的不是它(茶) 1202 22:18
→ chensc 推:喔喔我懂了(瞎) 1202 22:20
作者: Zero at 07/12/02
對人類來說生日很重要對吧∼∼
所以特地跑來∼生日快樂 >w<
XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Zero from 122.124.42.238 (中滑一番)
→ sa072686 推:謝謝葛格 >////< 1202 22:23
→ sa072686 推:重要的不是生日本身,是可以得到祝福、有人記得的感動 1202 22:24
→ sa072686 推:還有慶生(羞) 1202 22:25
→ Zero 推:喜歡被阿? XD 1202 22:39
→ sa072686 推:咦不是那種慶生(驚) 1202 22:44
作者: mp607 at 07/12/02
學長生日快樂...(阿)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 202.132.77.125 (>\\\\我家////<)
→ sa072686 推:謝謝學弟∼ 1202 22:25
作者: snoopymei at 07/12/03
生日快樂 >ˇ<
******ˋ(  ̄▽ ̄)ˊ*****
抱歉這麼晚才來 >"<
--
★hrs113355 學妹你好可愛>//////////////////////////////////////////<
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by snoopymei from 220.142.103.41 (中滑一番)
→ snoopymei 推:慢了 32 秒囧 1203 00:00
→ sa072686 推:沒關係啦XD 謝謝學妹∼ 1203 00:23
作者: silentvow at 07/12/03
你不小心錯過了發人sa的生日, 少了一次發賀文嗆人的機會感到萬分懊悔,
為了避免再忘記, 所以你決定寫個會自動發賀文嗆人的程式.
Input
本題 no input
Output
輸出一行打算對版主說的話
Sample Output
生日快樂萬事如意學業進步題數破千閃光無限國手威能上台大發到銀河系泡泡十九連消
--
╓───╖╓╖╓╖ 高中生 ─── 一種會全力作傻事的生物
║╓──╜║║║║ 而且很容易一頭熱,馬上又冷掉。
║╙──╖║║║║ ╖
╙──╖║║║║║ ╓─╖ ╖─╖ ╫─███ ▉ ▊ ▋ ▌ ▍ ▍ ▏
╓──╜║║║║╙──╖╟─╜ ║ ║ ║ ╖ ╓╓─╖╖╥╓
╙───╜╙╜╙───╜╙─╜ ╙ ╙ ╙╜ ╙─╜╙─╜╙╨╜
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 219.70.26.102 (和信超沒品)
→ sa072686 推:是發彼得耶XD 謝啦∼ 1203 08:04
作者: devilqxect at 07/12/03
※ 引述《silentvow (It's funny, Peter)》之銘言:
> 你不小心錯過了發人sa的生日, 少了一次發賀文嗆人的機會感到萬分懊悔,
> 為了避免再忘記, 所以你決定寫個會自動發賀文嗆人的程式.
> Input
> 本題 no input
> Output
> 輸出一行打算對版主說的話
> Sample Output
抓到了!!!
> 生日快樂萬事如意學業進步題數破千閃光無限國手威能上台大發到銀河系泡泡十九連消
彼得你...
嘴巴說不要,身體倒挺誠實的嘛...﹏(ㄏ ̄▽ ̄)ㄏ
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by devilqxect from 192.168.4.16 (台狼一中桑靈餓)
▲ devilqxect 改@2007/12/03 Mon 08:01:10
→ sa072686 推:注音文嗎XDDD 1203 09:18
作者: sa072686 at 07/12/03
來爆個小料好了
當初有人以為這篇是板主寫的,後來發現是彼得(茶)
所以加上了倒數第二句,科科…
※ 引述《devilqxect (南一資訊98炸彈)》之銘言:
> ※ 引述《silentvow (It's funny, Peter)》之銘言:
> > 你不小心錯過了發人sa的生日, 少了一次發賀文嗆人的機會感到萬分懊悔,
> > 為了避免再忘記, 所以你決定寫個會自動發賀文嗆人的程式.
> > Input
> > 本題 no input
> > Output
> > 輸出一行打算對版主說的話
> > Sample Output
> 抓到了!!!
> > 生日快樂萬事如意學業進步題數破千閃光無限國手威能上台大發到銀河系泡泡十九連消
>
> 彼得你...
> 嘴巴說不要,身體倒挺誠實的嘛...﹏(ㄏ ̄▽ ̄)ㄏ
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ silentvow 推:那個人偷修文還修得很爛XD 1203 08:37
→ devilqxect 推:我被抓包了...( ̄▽ ̄#)﹏﹏ 1203 09:34
作者: sa072686 at 07/12/03
好像…寫掉好幾天了,不過一直忘了上來發文…好寫的一題。
翻譯一下。
給你很多棵在立體空間中的樹的座標,找出對於每棵樹而言與它距離最近的樹
它們距離是多少?統計距離在 1 以內、1 或超過 1 但不滿 2、2 或超過 2 但不滿 3、
…直到不滿十為止,共十種組別,問每組分別有幾棵樹?
例如,現在有一棵樹,已知離它最近的是 1.414 單位長度的樹
那麼,這棵樹算在 2 那組。
輸入最多 5000 棵樹,只有一組輸入。
==== 分隔線 ====
嗯,5000 棵用 n^2 是挺危險的,不過如果只有一組呢?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: web at 07/12/03
昨天忘記po了 =囗=|||
生日快樂阿XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by web from 140.112.247.157 (害羞網子學弟宿網三)
→ sa072686 推:啊、沒關係啦XD 謝謝學長∼ 1203 09:17
作者: sa072686 at 07/12/03
又陰險又麻煩又複雜的一題…雖然不怎麼難就是了。
翻譯一下。
給你一些路徑,路徑最多 26 條,以大寫字母 A 至 Z 表示之。
每條路徑又分別有至多 26 個不同的站,以小寫字母 a 至 z 表示之。
其中有些是交會的,比如說 A 的 b 和 B 的 d 是交會的。
每條路徑都可以任意往返行駛,有的還會是 cycle,即可以繞回原出發點。
要求任兩站之間的最小花費時間,前進一個站要一單位時間,換路徑則要三單位時間
換路徑只能在交會點換。input 給你兩個部份
一個部份以一數字 n 表示有幾條路徑,接下來 n 列告訴你每條路徑的名稱和內容
內容以一連串的小寫字母表示,若碰到=則表示交會,例如 a=Bf 表示 a 站和 B 路徑
的 f 站交會。如果是 cycle 則第一站和最後一站會相同。
並且,假設告訴你 Aa 和 Bb 交會,則不一定會再告訴你 Bb 和 Aa 交會。
接下來有許多列,以一僅含一 '#' 之列結束。每列表示起點站
和終點站,問最小花費時間及路徑。給你的測資保證只會有一組最佳解。
---- 分隔線 ----
用 dijkstra 或是 BFS 搜完所有情況也可以
每站不外乎往前往後與換路徑
因此 BFS 即可得解。需注意例如 Aa 和 Bb 交會且 Bb 和 Cc 交會
則 Aa 和 Cc 交會。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
作者: sa072686 at 07/12/03
又是複雜難寫麻煩加上陰險的一題…這附近的題目都這樣嗎囧
翻譯一下。
我們常常在日歷上亂寫亂畫的,來記錄一些日常生活中的事件。
比如說哪天有程設競賽之類的。但有一些比較重要的事件,例如同伴的生日、
結婚紀念日一類的就比較重要,必須牢記。
寫個程式提供這樣的服務。輸入會告訴你今年是幾年(範圍從 1901 至 1999)
所有年份為 4 的倍數的都是閏年,有二月二十九日。
輸入的第一行給你年份,再來給你一些日期。
如果開頭是 A 表示是周年紀念日(anniversaries)。
接下來會有三個數字 D、M、P 代表幾日、幾月以及
重要程度(1 至 7),表示在這個日子的幾天前就得開始準備。
最後是這周年紀念日的名稱,這些之間會以一個或以上空白隔開。
周年紀念日的名稱是從第一個非空白字元開始算起,直到行末。
一個日期會以 d 開頭,接著是幾日和幾月。
所有的周年紀念日都會出現在日期之前,並且沒有任一行長度總和會超過 255。
以包含一個 '#' 之一列為輸入結束。
輸出會分成好幾個區塊,每個日期一個區塊。每個區塊會包含日期以及需要準備的事件
輸出的 D 和 M 必須靠右對齊且長度 3,然後是相對重要性。如果是當日發生的事件,
則如下輸出;其餘的若是在明天則重要度不變,否則重要度減一,…
最後看重要度多少就輸出幾個 '*'。
If several events are scheduled for the same day,
order them by relative importance (number of stars).
如果有數個事件必須在同一天規劃,則依其相對重要性輸出(即星星數)
如果仍然相同,則依其在 INPUT 的順序輸出。詳細格式請見 sample。每個區塊間
以一空白列分隔之。
---- 分隔線 ----
感謝討論板。
做法:
一、把當日發生的事依輸入順序輸出之。
二、把當日須準備之事依相對重要性由大至小輸出之。
三、若相對重要性相同,則依剩餘天數先後由小至大輸出之。
特別附上原文那段是我之前會錯意的,照討論板的說法
是先排重要性再排日期…
然後小心因為單字 anniversaries 是周年紀念日,每年都會發生
所以,有可能跨到明年去…
當天的最優先,不過因為所謂的重要性是須要在幾天前開始準備
因此與當天發生的事重要與否完全無關。當天的事請依輸入順序輸出。
其餘則是由重要性去排列,相同者才依剩餘天數。
如果沒半顆星就不用輸出。
這題很容易會錯意,尤其這部份很容易看成先依日期再依相對重要性
討論板原文如下:
1. all anniversaries that happen today, order by input stream (not
importance!)
2. Then, all other anniversaries that has a number of display stars > 0,
order them first by decending number of stars, then ascending number of days
apart if the stars are the same.
3. Keep in mind that anniversaries wraps around years.
英文差點(像我…)還把第一點看成不重要,所以沒去管它囧
不過的確照這樣做就可以過了…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.74 (台狼一中)
作者: pioneerlike at 07/12/03
***ˋ(  ̄▽ ̄)ˊ***
//晚到還好意思撒花(敲)
轉眼間已經第二年祝賀發發大強者SA學長生日了:P
hm...
我想不出比彼得學長po賀文中的Sample Output更好的賀詞了XDDDD
祝學長生日後一天快樂>/////<"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by pioneerlike from 211.23.224.207 (發耿發發根據地)
→ sa072686 推:謝謝學弟XD 生日後一天快樂還挺特別的XDDD 1203 23:04
作者: sa072686 at 07/12/03
不難寫的一題…不過 PE 了一下囧
翻譯一下。
給你兩對單字,第一個單字擺橫的,第二個擺直的
試求最佳的擺法。最佳擺法為:找到一種方式讓它們有一共同的字元擺在一起
如果有多個共同字元則先找在橫的單字中最前面者,相同再找直的單字中最前面者
因此,不同的順序會造成不相同的結果。單字長度在 10 以內,一行兩對
以一個或以上空白分隔。輸出中兩對單字的橫者必置於同一列,且相距三個空白長度。
不要輸出行末空白,並且兩組測試資料間空一個空白列。若至少有一對排不出來
請參考 sample 輸出。
---- 分隔線 ----
暴力做吧…字串處理罷了。給你的兩對單字同時也決定好順序了。
座標上,同加某個夠大的數可以平移座標使得座標不為負
如此即可使用陣列儲存之。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/12/03
相當難懂的一題。不過,很令人欣慰的一點是這類題目通常討論板會有人問題意
然後就會有好人重新敘述甚至舉例說明…不過,在此還有好人中譯之。(眾毆)
翻譯一下。
「Beggar My Neighbour」 (有時叫 「Strip Jack Naked」) 是個傳統的撲克牌遊戲。
主要是設計來讓新手了解撲克牌用的。兩人玩,一副牌面向下發,第一張先發給非發牌者
然後第二張再發給發牌者,…依此輪流,直到發完為止,因此發牌者會拿到
最後一張牌。這樣兩人都會有一堆面向下的牌堆。
由非發牌者開始遊戲,一開始打出最頂端那張,也就是原本的倒數第二張牌,
面向上放在桌面上。發牌者必須同樣打出最頂端那張,面向上地覆蓋於其上
如此持續到出現 A、K、Q、J 為止。出現後,下一位玩家必須「蓋掉」它,也就是
必須在限定的數量內,打出一張 A、K、Q、J 之一。限定數量上,J 是一張
Q 是兩張,K 是三張,A 是四張。如果在限定數量內成功地「蓋掉」了
那麼馬上換成對手必須「蓋掉」它。如果在限定張數內無法「蓋掉」的話
則對手可以將這堆牌面向下地,放到自己的牌堆底下,並由對手重新出牌。
遊戲直到輪到其中一方出牌,可是他卻沒牌可出為止。這時對方勝利。
寫個程式模擬這遊戲。標準的撲克牌包含 52 張牌,分成四種花色,13 種數字
分別是 A、2-9、T(10)、J、Q、K
輸入有多組測試資料,給你一開始 52 張牌的順序(第一組 sample
遊戲一開始打出的第一張牌是 H2),每副牌會有四行,每行十三張牌。
每張牌兩個字元,第一個字元代表花色,第二個則是數字。
以僅含一 '#' 之一列為輸入結束。對每一組測試資料輸出一行包含兩個數字
第一個數字為勝利者(1 代表發牌者,2 代表先手玩家)及勝利者所剩之手牌數
(在打出去的牌堆中的不算),手牌數必須向右對齊且長度為 3。
/* 譯註:所以粗心的譯者又 PE 了… */
/* 以下為討論板挖到的好人測資。 */
input
H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3
H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3
H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3
H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3 H3
DQ H2 H4 D4 D5 HK D3 D4 H3 D5 D7 S3 S2
D2 H2 H4 D3 D5 H6 D3 D4 H3 D5 D7 S3 S2
D2 H2 H4 D3 D5 H6 D3 D4 H3 D5 D7 S3 S2
D2 H2 H4 D3 D5 H6 D3 D4 H3 D5 D7 ST S2
#
output
1 0
2 51
---- 分隔線 ----
嗯。其實不難做啦,只是很難理解和判斷勝負…,請注意並非一方打完手牌就輸
而是,該輪到他打卻打不出來才輸。所以如果手上最後一張是 A、J、Q、K 其一
則打出來之後由於馬上輪到對方,所以不會馬上輸…如果對方蓋不掉的話
還可以拿到桌面上的牌,所以未必輸,勝者也有可能是 0 手牌。
模擬時小心一下,應該還不難過,尤其上面的測資能過大概沒太大問題了…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/12/05
嗯…應該幾乎可說是寫過有史以來最難寫的模擬題了吧。
又難懂、又難寫的…討論板反覆爬了多次,又寫了四百多行、傳了三十多遍才過
翻譯一下。
When driving through a city, an intersection usually offers one the choice of
going straight on or turning left or right through 90 degrees. However some
cities have diagonal roads, thus at intersections involving these one may be
able to turn through 45 degrees (``half'') or through 135 degrees (``sharp'').
當開車在城市中時,如果碰到道路相交時則可以選擇要直走、向左轉九十度或是
向右轉九十度。然而有些城市有對角的道路,因此在這些路口可以選擇要轉
45 度(half)、135 度(sharp)。
Consider such a city with Avenues running north-south, Streets running
east-west and Boulevards running diagonally. The central Avenue and Street
are labelled Zero (A0 and S0). Other roads are labelled relative to these,
thus A3W is the third avenue to the west of A0. There are 6 Boulevards--two
passing through the centre of the city, and 4 others, one in each quadrant.
The diagram below shows the northwest quadrant of a small version of such a
city.
考慮一個有南北向的 Avenues、東西向的 Streets 以及斜 45 度的 Boulevards 的城市。
在最中間的 Avenue 及 Street 將被編上編號 0(A0 及 S0)。其它路則以相對
於它們的位置來編號。因此 A3W 則為 A0 數來西邊第三條。這城市有六條
Boulevard,有兩條通過城市的中心,其它四條則在各個象限。以下是這種城市
的西北象限的縮小版。(請配合原題目之附圖閱讀之。)
The roads marked in grey are considered to be throughways. These are elevated
for most of their length, thus it is possible to cross them easily, however
they always intersect each other at a circle, which is shared by all other
roads that meet at that intersection. You may only enter or leave them by
turning left (sharp left in the case of boulevards). You may not stop on them
for any reason. There are no restrictions on turns for other roads.
那些被標示成灰色的是 throughway。它們可以很輕易地被越過,然而它們總是
相交於一些與其它種類道路共同使用的圓環。你只能透過左轉 90 度來進入或離開
它們。如果是 boulevard 則必須是左轉 135 度。並且你不能因為任何原因在上面
停下來。其它道路則沒有轉向的限制。
This system allows a very simple method of determining one's current position
and a way of arriving at one's destination. Position can be specified in
terms of the last intersection you passed through (the numbers of the Avenue
and Street that meet there) and your current heading, which can be one of:
north (N), northeast (NE), east (E), southeast (SE), south (S), southwest
(SW), west (W) and northwest (NW). Directions can then be given in terms of
how many intersections to pass through and which turns to make. However, the
locals have an infuriating habit of giving incorrect or invalid directions,
although it cannot be determined whether this is deliberate or accidental.
Directions should (but don't always) conform to the following simple grammar:
這個系統允許使用很簡單的方法來決定某人現在的位置以及到某個目的地的方式。
位置為最後到達的路口(以交會於其上之 Avenue 和 Street 表示)以及你的面向。
面向可為北(N)、東北(NE)、東(E)、東南(SE)、南(S)、西南(SW)、
西(W)以及西北(NW)。而指示則可透過給你直走通過幾個路口或是轉向來決定。
然而,給你的有可能是正確的或錯誤的指示,儘管我們不能知道是有意還是無意。
指示應以(但不總是)以下簡單的語法所構成:
<command> ::= <turn_command> | <straight_command>
<turn_command> ::= TURN [HALF | SHARP] {LEFT | RIGHT}
<straight_command> ::= GO [STRAIGHT] n <= n <= 99
指令:轉向指令或直走指令
轉向指令:TURN (HALF 或 SHARP) LEFT 或 RIGHT /* ()中的不一定要出現 */
直走指令:GO (STRAIGHT) n (<= n <= 99)
/* 譯註:由於原題目也沒給 n >= 什麼…已知有可能出現 0,不過應該不影響 */
Write a program that will simulate driving through such a city, by tracking
your position and heading as you follow a set of directions (commands). Each
quadrant of the city will be 50 blocks by 50 blocks, thus the entire city
will be 100 blocks by 100 blocks, the outer throughways will be labelled
Fifty and the major and minor boulevards will cross at roads labelled
Twentyfive. You will be told your starting position and heading and then
given a series of directions. If a direction does not follow the above
grammar, or would involve an illegal or impossible turn then ignore it. At no
stage will directions take you out of the confines of the city.
寫個程式模擬開車在這城市上,從你目前的位置和面向沿著一連串的指示(指令)
行駛。每個象限有 50 * 50 個街區,因此整個城市有 100 * 100 個街區。
最外面的 throughway 將被編號為 50 且主要和非主要的 boulevard 會交會在編號
25 的道路。你將被告知開始位置、面向以及一連串的指示。如果一個指示並不符合
上述語法,或將讓你進入非法或不可能的轉向,那麼請忽略之。不會有任何指示將
指引你走出這個城市的範圍。
Input
Input will consist of a series of scenarios.
輸入會有很多個場景。
Each scenario will consist of a position and a heading and will be followed
by a series of directions (commands), each on a separate line. If either of
the roads involved is one of the central roads (A0, S0), they will be
labelled N or E as appropriate. Note that you may assume that you have just
left the intersection specified. The GO <n> command means that you pass
through <n> intersections.
對於每個場景會有一個起始位置和面向,然後會跟著許多行指示(指令),每個一行。
如果有任一道路為中央的道路之一(A0、S0)則應被標上 N 及 E。你可以默認
你剛離開開始的路口。GO <n> 指令表示你將經過 <n> 個路口。
Each scenario will be terminated by a line consisting of the word STOP.
每一個場景將由一個 STOP 為結尾。
The file will be terminated by a line consisting of the word END only.
輸入將由一行 END 為結尾。
Input data will follow the format shown below, except that more than one
space may occur where only one is shown. No line will be longer than 80
characters.
輸入會遵循以下的格式,除了可能會有超過一個或以上的空白,而以下只以一個代表之
沒有任何一行會超過 80 字元長。
Output
Output will consist of a series of lines, one for each scenario. Each line
will consist of a position and a heading in the same format as the input. If
the final stopping place is illegal, report `Illegal stopping place' as the
answer.
輸出會有好幾行,一個場景一行。每行使用和輸入相同的格式輸出最後的位置。
如果最後停下的位置是不合法的,輸出 Illegal stopping place。
/* 譯註:由於題目過於難懂,怕翻錯或翻不出意思,因此附上原文為對照… */
---- 分隔線 ----
事實上是…(附上實測心得)
一、起始位置一定先給 Avenue 再給 Street 再給面向,並且不會給錯的。
格式和 sample 一樣。
二、不符合文法者忽略之。記得 GO 有可能會給超過 99 的數字,此時請忽略。
三、給你的位置是代表你剛離開某路口並朝向某方向行駛。
四、給你的指示是在下一個路口該做的事情。
五、除了不符合文法的 GO 超過 99 以外不會讓你超出邊界,不用擔心。
六、圓環可以自由地繞行(繞過吧…)因此可任意轉向(總有方法可以繞到
進出 throughway 為左轉…)
七、進出 throughway 必須左轉 90 度方可,不過如果該 throughway 是 Boulevard
則必須左轉 135 度方可進出。
八、注意 Avenue 和 Street 在編號 0 時要分別使用 E 和 N。
九、給你的起始位置一定合法。
十、最後停下的位置如果在 throughway 則 Illegal
十一、STOP 和 END 不會用一些空白字元來刁難人。
以下轉譯自討論板:
http://online-judge.uva.es/board/viewtopic.php?t=4641&highlight=163
Ryan Pai:
Ok, I just got AC and I spent so much time on this problem that I would like
to make clear what the rules are:
嗯,我 AC 了,並且花了很多時間弄清楚規則。
First check if the turn makes sense at all (i.e. there is a road in the
direction you want to turn). If not then obviously the turn is NOT valid.
首先確認轉向是否可行(即,轉向後有沒有道路可走?)若否,顯然它不合法。
Next check if you are entering or exiting a throughway (remember the
throughways are the dark grey streets). If you are not entering or exiting a
throughway, then the turn IS valid. Entering is defined as starting the turn
on a non-throughway and ending it on a throughway. Exiting is just the
opposite, starting on the throughway and ending on a non-throughway.
接著確認你是否正要進入或離開 throughway(throuway 就是暗灰色的街道)。
如果你不是正要進入或離開 throughway,則轉向合法。進入的定義為:
從 non-throughway 開始,轉向後在 throughway。離開則反之,從 throughway 開始
在 non-throughway 結束。
The remaining case is that of entering or exiting. If you are at one of the
nine special circle intersections, then the turn IS valid (Thanks Per).
剩下的情形就是如果是進入或離開。如果你正在九個特殊的圓環之一,則轉向合法。
Finally if entering or exiting the turn is valid only in the following cases:
a) The turn is SHARP LEFT and the throughway involved is a boulevard
b) The turn is (normal) LEFT and the throughway involved is NOT a boulevard
最後,進出合法僅有以下情形:
a) 所牽涉到的 throughway 是 Boulevard 並且轉向為 SHARP LEFT
b) 所牽涉到的 throughway 不是 Boulevard 並且轉向為 (normal) LEFT
I hope this helps. If you have any other questions about it you can ask me.
希望它可以幫上忙。如果你還有其它任何問題可以問我。
/* 這是討論板的強者說的,不是我說的… */
_________________
I'm always willing to help, if you do the same.
簽名檔不予翻譯。
====
此討論串亦有測資可試。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
作者: sa072686 at 07/12/05
嗯,好寫的一題。乍看之下很難,可是其實它只不過是模擬罷了…
Volumn I 怎麼感覺模擬題多得不像話?幾乎每題都在模擬…
翻譯一下。
這題將重現 Theseus 與 Minotaur 的故事。
迷宮將由許多單向的走廊連接著許多洞穴而成。
為了困住 Minotaur,Theseus 準備了一堆蠟燭,因為 Minotaur 害怕它。
他四處尋找著,直到發現 Minotaur 出現。這時他點燃蠟燭追擊,而 Minotaur
則撤退到其它洞穴。Theseus 跟著,慢慢地前進,每走 k 個洞穴,就在該洞穴點燃
蠟燭。他有足夠的時間放置蠟燭在洞穴中央,並利用它再點燃一根,繼續追擊。
追擊繼續著,每 k 個洞穴都將被放置蠟燭,藉此限制住 Minotaur 的行動。
當 Minotaur 進到一個洞穴,會依照一個特定的順序檢查是否有其它洞穴可躲。
但是他會略過已被點燃蠟燭的洞穴,也不會回到剛剛走出來的洞穴。
如果牠被困住了,Theseus 就可以殺掉牠。
(範例請參考題目附圖)
寫個程式模擬 Theseus 的追擊。每個洞穴將以一大寫字母表示之,接著列出
所有此洞穴可通往之洞穴,並且依照 Minotaur 所選擇的順序列出。
接著會給你 Minotaur 和 Theseus 所在的洞穴,接著是數值 k。
輸入每組測資一行,每行不會超過 255 個字元。若只包含一 '#' 表示輸入結束。
輸入的格式如上。
輸出則為每個被點燃蠟燭的洞穴,依照被點燃的順序輸出。最後是 Minotaur 被困住
的洞穴。詳細格式請參考 sample。
---- 分隔線 ----
就…模擬吧。已知 Minotaur 不往回走,但走過的點可以再走,不過前提是
沒被點燃蠟燭。因此房間只會越來越少,最後一定會被困住。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
作者: seanwu at 07/12/05
11368 - Nested Dolls
你收集了許多(N<=20000)個大小不一的俄羅斯娃娃,
其中只要一個娃娃的寬和高皆小於另一個娃娃,則這個小的娃娃可以被放在大娃娃裡。
於是可以形成大娃娃裡有小娃娃、小娃娃裡有更小的娃娃...這樣一層層套疊起來
現在你想要把這些娃娃整理起來,將娃娃套疊起來後,組成的組數要盡量少,
問最少的組數是多少?
<Hint E>
Greedy,先對寬高排序後,考慮兩個「互不相容」的娃娃,
其放置順序是否有影響? 應該以怎樣的順序放置?
最後用tree或binary search 來實作它
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-149.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: newmoon at 07/12/05
10565 - Matrix
其實非常簡單的一題
AC人數卻不到100人
大意是給你m個相異數k1,k2,..,km,請你求出一個矩陣A,使得
(A+K1)*(A+k2)*..(A+km)為0矩陣
其中A+k代表矩陣A加上大小與A一樣的k倍單位矩陣,*為矩陣的乘法(請參考中學課本)
測試資料第一個數為t,代表以下有幾組測資
每組測資有一個數m(m<=30)下一行有m個數代表k1,k2,..,km,
請找出任一解A,並先輸出A的大小n,請注意,A中的元素皆必須為絕對值不大於1000的整數
,且A種非0的元素個數必須有n*n/2以上如沒有這樣的解,請輸出-1
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.135.127 (福爾摩沙固網)
作者: newmoon at 07/12/05
10574 - Counting Rectangles
給你直角座標上n個點,試問由這些點所組成的邊長與x,y軸平行的矩形共有幾組?
n<=5000,測試資料不會超過10組,座標範圍為0~10^9
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.135.127 (福爾摩沙固網)
▲ newmoon 改@2007/12/05 Wed 21:46:01
作者: zenixls2 at 07/12/05
http://rafb.net/paste
自動標色
上傳後會給你一個網址
專給code長的、需要debug的人用
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 220.142.105.112 (中滑一番)
→ sa072686 推:http://src.wtgstudio.com/ 這地方也不錯 1205 22:01
→ sa072686 推:雖然有些顏色有點亮…看起來不怎麼舒服囧 不過挺方便的 1205 22:01
作者: newmoon at 07/12/05
10570 - Meeting with Aliens
有n個外星人,編號為1~n
現在他們繞著圓桌而坐
先告訴你他們座位的順序
現在主席希望他們按照編號1坐在編號n和2之間
編號2坐在1和3之間
依此類推
問至少要交換幾次?
交換的方式為兩個人座位互換
不會超過100組測資
n不大於500
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.135.127 (福爾摩沙固網)
作者: sa072686 at 07/12/06
嗯…簡單的一題,不過腦殘錯了幾次…(汗)
翻譯一下。
現在你要用一堆清理用的機器人清理所有垃圾。
將場地劃分成 n 列和 m 行,給你所有垃圾的座標,以(0,0)為結束
由於機器人很貴,你希望用一台機器人清理掉最多垃圾。
座標原點(1,1)在最左上角,機器人只能往右或往下,從原點走到右下角(n,m)
就得報廢不得再使用。問最多可以清掉幾個垃圾?又,在清最多垃圾前提下有幾種方式?
接著,依清理順序輸出任一組可行解,以格子編號表示:
將格子從原點 1 編起,先往右編再往下編,因此得像:
2 (1,2), 4 (1,4), 11 (2, 4), 13 (2, 6), 25 (4, 4), 28 (4, 7), 41 (6, 7)
如果 n 和 m 皆為 -1 則為輸入結束。
---- 分隔線 ----
座標轉換公式很簡單,(r-1)*m + c
用 DP 做,對於每個點它可以在清掉座標在其左上者再來清掉它。
因此得轉移方程 dp[i] = max(dp[j]) + 1 for all j 之座標位於 i 之左上
次數計算則以累加方式即可,因此要記錄次數…
要回溯,所以要記錄上一個…
可以先編碼起來減少記憶體花費,再以 sort 決定順序
然後用鏈表建圖可以不用每次掃 r*c 大小區塊
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: zenixls2 at 07/12/06
0.000 in STL Map + C Rank 40
對每一組輸入qsort,使其維度內為遞增排序
將其存於map,會自動捨去重複的(不過要重新定義運算子),並作排序
再以LIS(n^2)作即可
鼓勵大家用STL+C寫code
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 192.168.6.118 (台狼一中)
作者: seanwu at 07/12/06
可以做到O(N*M^2)
(參照原篇中的解法)
每次可以不用掃整個 r*c
1 2 3 4 5 6 7
1 *
2 * * 這是原本在計算 * 時所掃的區域
3 *
4 * * *
5 *
可以變成
1 2 3 4 5 6 7
1 *
2 * *
3 *
4 * * *
5 *
方法是從右到左掃描,新的高度大於舊高度時就更新它 O(M)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-144.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/12/06
騙人的鳥題目…||||
翻譯一下。
現在有一隻公猴子給你一張清單,上面有很多母猴子的高度,依不遞減順序出現
請找到比牠略高與略矮者(也就是比牠高的裡面最矮的和比牠矮的裡面最高的)
另外,牠不要和牠一樣高的…
給你 n(n <= 50000)接下來有 n 個數代表母猴子的身高
再給你 m(m <= 20000)接下來有 m 組詢問,每組詢問輸出一行
每行兩個數字:略矮者高度與略高者高度。如果出現找不到的情形請輸出大寫 X
---- 分隔線 ----
題目明講用 cin/cout 將導致 TLE。
騙誰啊(翻桌)
由於用 scanf()/printf() 只跑 0.05s
就改成 cin/cout 看看…也不過 0.27s
啊,不過解法應該沒必要講了吧…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ silentvow 推:他的備註是用在舊系統吧XD 1207 00:46
▲ sa072686 改@2007/12/07 Fri 07:51:51
→ sa072686 推:就執行時間上來看,約差三倍上下(茶) 1207 07:52
→ Tommy 推:這我好像以前有寫過的樣子... 1207 10:02
→ zenixls2 推:可惡,寫了98行,排在sa後一名 1207 22:37
作者: newmoon at 07/12/07
10536 - Game of Euler
這是一個在4*4的紙板(?)上玩的二人遊戲,兩人輪流在紙板上插上別針
別針的大小有三種長度分別為1,2,3,有兩種插法
第一種是從邊緣插入,可以蓋住與別針長度相等的還沒被蓋住的格子
或者是從垂直紙板的方向插入,這樣可以蓋住任一個還沒被別針蓋住的格子
如下左邊兩個為第一種蓋法,右邊的為第二種蓋法
.... .... .... ....
xxx. xx.. .x.. x...
.... .... .... ....
.... .... .... ....
蓋到最後一個格子的人輸
給你玩到一半的盤面
問你接下來下的人必勝還必輸?這當然是假設在兩個人都絕頂聰明的情況下
不會給已經全部蓋住的盤面
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.134.149 (福爾摩沙固網)
→ silentvow 推:阿勝利條件咧 (敲碗) 1207 00:45
▲ newmoon 改@2007/12/07 Fri 00:49:26
→ newmoon 說:我竟然忘記這種東西... 1207 00:51
→ silentvow 推:一定是跳舞機打太多了 變腦殘 1207 01:03
作者: newmoon at 07/12/07
10581 - Partitioning for fun and profit
把一個正整數m分割成n個正整數a1,a2,a3,...,an,其中a1<=a2<=a3<=...<=an
對同一個m的兩種分割(皆分成m個)a1,a2,..,an與b1,b2,...,bn
若a1=b1,a2=b2,...ak=bk,但a(k+1)>b(k+1)
我們就把數列<b>排在數列<a>之前
給你三個數m,n,k
請求出把m分割成n個數2的第k種排列方式
一個數一行
其中1<=n<=10,1<=m<=220,1<=k<=所有排法數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 163.32.78.11 (高雄一中)
作者: gba356 at 07/12/07
Lucky 貓有中譯...
很標準的機率題(點頭)
< Hint E >
假設擲出特定事件的機率為 P ,其餘事件的機率為 P'( 即 1.000-P ),
則第 I 位玩家贏得遊戲的機率為
( P' )^( I-1 )• P [ 前 I-1 個人都未獲勝,且第 I 人擲出特定事件 ]
+( P' )^( n+I-1 )• P [ 前 n+I-1 個人未獲勝,第 I 人於第二輪贏得遊戲 ]
+( P' )^( 2n+I-1 )• P [ 前 2n+I-1 個人未獲勝,第 I 人於第三輪贏得遊戲 ]
+( P' )^( 3n+I-1 )• P [ 前 3n+I-1 個人未獲勝,第 I 人於第四輪贏得遊戲 ]
+ ......
+ ......
a
=( P' )^( I-1 )• P • ────
1 - r
無窮等比級數公式,此處 a = 1 , r =(P')^n
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 203.64.26.28 (台北一中電研社)
▲ gba356 改@2007/12/07 Fri 10:54:40
作者: gba356 at 07/12/07
本篇只有中譯。
↑(極嚴肅)
對了,這個題目和麥兜故事有關,
不信的話可以看看題目最底下,
是香港的一個大學辦的XD
Spring Field 學校的校長正在考慮為一些特定科目聘入新老師。
有許多老師來應徵,且每位老師可以指導一門以上的科目。校長希望每門科目至少有
兩位老師指導,並讓總花費最低。
輸入的第一行包含三個整數 S、M、N 。 S(≦8)是科目的數量, M(≦20)是在職老
師數量, N(≦100)是應徵老師的數目。
接下來的 M 行包含 C ,和一連串的科目編號。 C 表示僱用第 M[i] 位在職老師所
需的費用,後面跟著的科目代號,表示這位在職老師可以指導的科目。重要的是,校長
一定要僱用所有的在職老師,而應徵老師不一定。[ 科目編號是由 1 排到 S 。]
同樣的,接下來的 N 行格式也是一樣的,代表的是應徵老師所需的費用和這位應徵
老師可以指導的科目。
對每一組輸入,請你輸出最少的花費。
輸入在 S=0 時結束。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 203.64.26.28 (台北一中電研社)
→ sa072686 推:啊…謝謝學弟 >////< 1207 11:42
→ gba356 推:不會>///< 1207 11:45
作者: sa072686 at 07/12/07
算法藝術上的題目。不好解決…
翻譯一下。
有個遊戲目的是要消除方塊。有一堆方塊排成一列,然後依顏色分成數個區域。
一連串顏色相同的方塊算是同一個區域。一旦消除一個區域,就可以得到該區域
方塊數目平方的分數,並且這區域的兩邊會彼此靠近然後排在一起。
這時若兩邊同色,則會合為同一個區域。給你 n(n <= 200)和 n 個數字
代表不同顏色的方塊(方塊顏色以 1 至 200 的數字代表)你必須輸出在最佳情形下
能夠拿到的最大分數為何。
---- 分隔線 ----
嗯,使用 DP…
先將其相同顏色湊成同一個區域,並以 (m,n) 代表 m 色有 n 塊
考慮以 dp[i][j][k] 代表消去某一段 i,j 且最後一個區域與其後 k 個同色的方塊
一起消除的情形。
某一段 i,j 的最後一個區域要嘛直接消除,要嘛與前面某一段同顏色的一起消。
如果直接消除,可知分數為 dp[i][j-1][0] + (num[j] + k)^2
如果與前面某一段同顏色者一起消除,則得
dp[i][p][num[j]+k] + dp[p+1][j-1][0] for all i <= p < j-1
邊界條件易知 dp[i][j][0] = 0 for i > j
dp[i][i][0] = (num[i])^2
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: newmoon at 07/12/07
10577 - Bounding box
一群考古學家再挖掘遺蹟,已知遺蹟為一正N邊形,當他們已經挖掘出多邊形的三個頂點時
他們必須趕緊蓋上矩形的防護網
告訴你N及已挖掘的三個頂點
請求出最小防護網面積使得這個防護網能把所有頂點包住
防護網的邊必須平行X,Y軸
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.167.171 (福爾摩沙固網)
▲ newmoon 改@2007/12/08 Sat 06:04:07
作者: sa072686 at 07/12/08
嗯。
題目應該都抓得到…
所以就省略吧。
====
PA
暴力吧。
如果要把題目重講一遍
將字串每個字元編碼,再將碼轉成二進位制表示之,再連接起來
接著在規定大小的矩形中,自最左上角依右下左上的順序繞成螺旋狀
不足的話,餘下補 0
這樣講過一遍,該怎麼做也就很明白了。
自最左上角,方向依右下左上的順序變換,變換方向條件為:
填到底,或是填到填過的區域
就換方向。不足的地方補零這點
可以在初始化時就做。最後逐列輸出即可。
檢查碼忘了拿,爆掉一次。拿掉後一次 AC。
PB
給強者補充吧…不會寫。
PC
沒寫過。看起來是 BFS?
PD
沒寫過。聽說是簡單字串題,不過 strcat 會導致 TLE
PE
計算幾何。
若將題目重講一遍
給你目前所在位置,以及許多子彈的彈道,問是否有至少一個子彈的彈道
會通過所在位置?
換句話說
給你一個點以及許多線段,問此點是否在任何一線段上?
用計算幾何的方式。
感謝 usaco 3-4 的計算幾何文件。
一點是否在一直線上,看該點與該直線之距離。
如果是 0,則表示其在該直線上。
設檢查點 P 是否在直線 AB 上
若 (P - A) x (B - A) 為 0 則表示點 P 在直線 AB 上
但是這還不代表點 P 在線段 AB 上。
不過既然確定在同一直線上,那麼若 P 的 x 座標和 y 座標
皆在 A 點和 B 點之間,則點 P 在線段 AB 上。
PF
嗯。可以使用動態規劃解之…
已知對於某個字元 c,則此字元可能單獨自己是一個字母
或是與上一個字元合併來代表一個字母。
那麼,在單獨自己代表一個字母時,假設是第 n 個字元
則所有合法組合為前 n-1 個字元所能湊的每種組合再加上第 n 個字元
代表的字母,若是與上一個合併則同理取前 n-2 個字元
這樣,方法數就是前 n-1 個字元的方法數加上前 n-2 個字元的方法數
而且由於每次看的字元不一樣,因此必不重覆。
不過在有 0 出現時會比較特殊。
由於加密之時不會有字元被加密成 0,因此在第 n 個字元為 '0' 時
不可只取單獨一個來代表一個字母。
取兩個時,易知沒有任一字母加密後超過 26 的,因此超過 26 則不可行
但有另一條件:由於加密之時,不會有字母被加密成擁有開頭 0 的數字
因此,不得取任何開頭 0,故得前一個字元為 0 之時不得取兩個字元。
則得狀態表示法 dp[n] 記錄取前 n 個字元的方法數
轉移方式 dp[n] = dp[n-1] (條件 1) + dp[n-2] (條件 2)
條件 1:當第 n 個字元不為 '0'
條件 2:當第 n-1 個字元不為 '0' 且這兩個字元轉出來 <= 26
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: silentvow at 07/12/08
※ 引述《sa072686 (極大地。)》之銘言:
> PB
> 給強者補充吧…不會寫。
小的數學非常不好 xD 留給數學組解
> PC
> 沒寫過。看起來是 BFS?
Flood-fill by DFS or BFS
四邊皆高於原點處就放幫浦, 不夠則Impossible.
搜所有點至幫浦之最短路徑, 取其中最長者輸出.
> PD
> 沒寫過。聽說是簡單字串題,不過 strcat 會導致 TLE
照題目說的作就是了, 字串函式會從頭跑到尾保證是自取滅亡 ...
--
╓───╖╓╖╓╖ 高中生 ─── 一種會全力作傻事的生物
║╓──╜║║║║ 而且很容易一頭熱,馬上又冷掉。
║╙──╖║║║║ ╖
╙──╖║║║║║ ╓─╖ ╖─╖ ╫─███ ▉ ▊ ▋ ▌ ▍ ▍ ▏
╓──╜║║║║╙──╖╟─╜ ║ ║ ║ ╖ ╓╓─╖╖╥╓
╙───╜╙╜╙───╜╙─╜ ╙ ╙ ╙╜ ╙─╜╙─╜╙╨╜
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by silentvow from 219.70.26.102 (和信超沒品)
作者: seanwu at 07/12/08
隨便補一下
※ 引述《silentvow (It's funny, Peter)》之銘言:
> ※ 引述《sa072686 (極大地。)》之銘言:
> > PB
> > 給強者補充吧…不會寫。
假設其中兩個等式 a+bx=c+dy,化成 bx-dy=c-a,
則x,y的一組解(x0,y0),可以造得出來 (此板上"不定方程"一文)
則通解可以寫成關於t個參數式 x=x0+z*t, y=y0-z*t (z是多少,自己推..)
x=x0+z*t 代入 a+bx,結構上是一個新的a'+b'x,與下一式聯立,再往下解..
> 小的數學非常不好 xD 留給數學組解
> > PC
> > 沒寫過。看起來是 BFS?
> Flood-fill by DFS or BFS
> 四邊皆高於原點處就放幫浦, 不夠則Impossible.
> 搜所有點至幫浦之最短路徑, 取其中最長者輸出.
太弱了,依拓樸順序DP,就O(N^2)了
> > PD
> > 沒寫過。聽說是簡單字串題,不過 strcat 會導致 TLE
> 照題目說的作就是了, 字串函式會從頭跑到尾保證是自取滅亡 ...
關於這種[ ]錯誤...參見此文
http://tatzao.blogspot.com/2007/11/shlemiel.html
我認為c裡面的strcat大概就是像他寫的那樣,
畢竟c裡面的strcat沒有傳入跟字串長度有關的任何參數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-154.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ chensc 推:喔那個blog真不錯,訂起來先。 1208 23:00
→ gloompisces 推:pb,由於題目限定其中一個<=20,所以用brute force就 1208 23:43
→ gloompisces 說:可以了,不用用道不定方程 1208 23:43
→ Macaca 推:<==暴力解 1208 23:50
作者: seanwu at 07/12/08
※ 本文轉錄自 [seanwu] 看板
作者: seanwu (2,2-二甲基丙烷) 看板: seanwu
標題: [筆記] 不定方程尤拉問題遞歸解
時間: 2007/03/26 Mon 19:40:05
昨天推的副程式
輸入 (a,b) 後以參考值回傳 (x,y) 使 ax + by = d
並回傳 d 為 gcd(a,b)
int calc( int &a, int &b ) {
int d,x,y;
y = a%b;
if(y) {
x = b;
d = calc( x, y );
b = x-a/b*y;
a = y;
}else {
d = b;
a = 0;
b = 1;
}
return d;
}
令 ax + by = d , a = bq + r (r=a%b, q=a/b )
由歐拉法 bx' + ry' = d
=> bx' + (a-bq)y' = d
=> ay' + b(x'-qy') = d
比較係數得
x = y', y = x'-(a/b)y'
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 140.122.61.149 (台灣痴漢大學)
▲ seanwu 改@2007/12/08 Sat 22:57:32
φ seanwu 轉:從 [seanwu] 看板,于 2007/12/08 Sat 22:57:54
→ ben196888 推:借轉~ 1209 19:58
φ ben196888 轉:到 [ben196888] 看板,于 2007/12/09 Sun 19:58:26
作者: gba356 at 07/12/08
※ 引述《sa072686 (極大地。)》之銘言:
> 嗯。
> 題目應該都抓得到…
> 所以就省略吧。
> ====
恕刪....
對了..這個一定要新增一下XD
【 打不倒的空氣人 - 原 MV 】
[ http://youtube.com/watch?v=JCS0YTcfjqI ]
> PD
> 沒寫過。聽說是簡單字串題,不過 strcat 會導致 TLE
這是我的做法:)
char s[N],*ptr;
for( ptr=s+1 ; n-- ; ptr+=strlen( ptr ) )
cin>>ptr;
/* 然後對每個輸入的 n ,輸出 s[n] 即可 */
> PE
> 計算幾何。
> 若將題目重講一遍
> 給你目前所在位置,以及許多子彈的彈道,問是否有至少一個子彈的彈道
> 會通過所在位置?
> 換句話說
> 給你一個點以及許多線段,問此點是否在任何一線段上?
> 用計算幾何的方式。
> 感謝 usaco 3-4 的計算幾何文件。
> 一點是否在一直線上,看該點與該直線之距離。
> 如果是 0,則表示其在該直線上。
> 設檢查點 P 是否在直線 AB 上
> 若 (P - A) x (B - A) 為 0 則表示點 P 在直線 AB 上
> 但是這還不代表點 P 在線段 AB 上。
今天導出的三個小公式:
1. 若 P 在線段 AB 上,則 ( P-A )( B-P )≧0
2. 若向量 ( X,Y ) 、 ( X',Y' ) 同向(即斜率相同),
X X'
則 ───=───
Y Y'
即 X.Y' = X'.Y
6 6 31
3. 10.10 ≧ 2 (極嚴肅)
> 不過既然確定在同一直線上,那麼若 P 的 x 座標和 y 座標
> 皆在 A 點和 B 點之間,則點 P 在線段 AB 上。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 61.224.173.78 (中滑一番)
▲ gba356 改@2007/12/08 Sat 23:04:04
→ sa072686 推:啊…我用int直接對乘沒事? 1208 23:33
→ newmoon 推:原來不要用long long阿,我還以為要 1208 23:37
→ silentvow 推:應該要吧, 可能一樓判斷式剛好賽過 ... 1208 23:42
→ sa072686 推:呃,那PB一路overflow該不會是報應吧? 1208 23:46
→ gba356 推:用的話 coding 起來比較直觀,至少不用消一些東西XD 1208 23:47
→ gba356 推:pB 不是我寫的∼ 我寫 ACDE ∼ 1208 23:48
→ sa072686 推:好威XD 我只寫AEF 1209 00:28
→ sa072686 推:所以其它就想說給寫過的補(點頭) 1209 00:28
→ gba356 推:陳韋翰學長才威呢,我跟心宇居批不會寫圖論題,所以開始 1209 07:59
→ gba356 推:的時候就先請學長寫第二題,然後 0:39 的時候就他就秒掉了 1209 08:00
→ sa072686 推:那題喔…我們卡了好幾小時說XD 1209 09:54
→ sa072686 推:不過好像沒幾隊很白痴地先寫計算幾何的E(炸) 0:24 1209 09:55
→ sa072686 推:向量是好物! /* 雖然給快把向量忘光的人講出來 1209 10:07
→ sa072686 推:好像沒什麼說服力XDDD */ 1209 10:08
→ gba356 推:錯之甚矣!我們這對我開頭就先攻計算幾何XD 1209 10:34
→ gba356 推:我們這對好像怪怪的,都先把難的掛掉,然後卡簡單的XDD 1209 10:34
→ sa072686 推:就罰分計法而言這不太明智XD 還好我計算幾何沒寫太久 1209 22:16
→ sa072686 推:USACO 有寫到 3-4 的話,有那篇文這題就沒什麼了(茶) 1209 22:17
→ gba356 推:還沒開始動 USACO XD 1209 22:46
作者: sa072686 at 07/12/09
※ 本文轉錄自 [PG] 看板
作者: PG (肝指數上升中∼☆) 站內: PG
標題: [轉錄] [程設]printf("%*d",i,123);
時間: 2007/12/09 Sun 00:22:18
※ 本文轉錄自 [YiPo] 看板
作者: YiPo (正在研究 conio2.h) 站內: YiPo
標題: [程設]printf("%*d",i,123);
時間: 2007/12/08 Sat 23:58:21
沒想到平常想寫的這樣:
printf("%8d",123);
還可以寫成這樣:
printf("%*d\n",8,123);
不只是 %d 喔,%f、%s、... 統統可以用:
※ code:
---
#include <stdio.h>
int main() {
printf("%8d\n",123);
printf("%*d\n",8,123);
printf("%8.2f\n",3.14);
printf("%*.*f\n",8,2,3.14);
printf("%8s\n","XDrz");
printf("%*s\n",8,"Xdrz");
return 0;
}
※ output:
---
123
123
3.14
3.14
XDrz
Xdrz
所以,要這樣就可以很方便啦:
※ code:
---
#include <stdio.h>
int main() {
int i;
for (i=0;i<8;i++) printf("%*s\n",i+4,"XDrz");
return 0;
}
※ output:
---
XDrz
XDrz
XDrz
XDrz
XDrz
XDrz
XDrz
XDrz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by YiPo from 203.68.127.1 (台北大學)
→ ducksteven 推:Maple 裡面大量使用這招,因為有時候不知道有幾格XD 1208 23:59
→ YiPo 推:是呀?!我今天才知道的...呵 1209 00:01
→ YiPo 說:來源:blog.roodo.com/thinkingmore/archives/554197.html 1209 00:02
→ PG 推:借轉 XD 1209 00:22
φ PG 轉:從 [YiPo] 看板,于 2007/12/09 Sun 00:22:18
→ sa072686 推:借轉XDD 1209 00:38
φ sa072686 轉:從 [PG] 看板,于 2007/12/09 Sun 00:38:49
→ dust 推:這段我剛好昨天才在maple中看到 XD" 1209 16:06
→ sa072686 推:原本想說要自己用sprintf()造格式化字串的XD 1209 18:32
→ ben196888 推:借轉~ 1209 20:18
φ ben196888 轉:到 [ben196888] 看板,于 2007/12/09 Sun 20:18:26
作者: sa072686 at 07/12/09
※ 引述《gba356 (瑪利歐)》之銘言:
> 恕刪....
> 對了..這個一定要新增一下XD
> 【 打不倒的空氣人 - 原 MV 】
> [ http://youtube.com/watch?v=JCS0YTcfjqI ]
剛剛找到續作…
這傢伙有要幫忙的意思嗎?
http://youtube.com/watch?v=XvF-UlI2Duo&feature=related
喔喔愛弟那段一整個笑翻
很想大推一下怎麼丟都是武器能源XDDDDD
另外
http://zion.tfcis.org/~sa072686/mock.wmv
看起來挺輕鬆的啊(炸)
不過才剛傳,大概…要等個一、兩小時吧?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gba356 推:看來下一集就要做 Tango 了XD //俗稱糖果的那隻貓咪XD 1209 10:39
→ chensc 推:真的好好笑啊XDD 1209 11:20
作者: sa072686 at 07/12/09
嗯,好寫的一題…只要不被 sample io 的數字大小唬住的話XD
lucky 貓有中譯。
==== 一次兩條(?)分隔線 ====
難寫嗎?
看起來可怕嗎?
如果告訴你 6^24 <= 2^63-1 就不可怕了吧?
據說有數學公式解,不過又是 H 又是 C 的…
比較和謁可親的解法是利用動態規劃
已知投擲 n 個骰子出現 x 點的狀況,是由投擲 n-1 個骰子,出現 x-1、x-2、…
x-6 這六種情況的總和。很直觀地想法,就可以將其轉化為更小的問題。
已知投擲 0 個骰子出現 0 點的情形數為 1
則得狀態表示法 dp[i][j] 代表投擲 i 顆骰子出現 j 點的情形共有幾種
則知狀態轉移方程 dp[i][j] = sum(dp[i-1][j-k]) for all k=1 to 6
邊界條件:
dp[0][0] = 0
dp[i][j] = 0 for all j<i
機率則以總情況數減去符合之情況數即可得解。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/12/09
感謝學弟的翻譯 >////<
※ 引述《gba356 (瑪利歐)》之銘言:
> 本篇只有中譯。
> ↑(極嚴肅)
> 對了,這個題目和麥兜故事有關,
> 不信的話可以看看題目最底下,
> 是香港的一個大學辦的XD
> Spring Field 學校的校長正在考慮為一些特定科目聘入新老師。
> 有許多老師來應徵,且每位老師可以指導一門以上的科目。校長希望每門科目至少有
> 兩位老師指導,並讓總花費最低。
> 輸入的第一行包含三個整數 S、M、N 。 S(≦8)是科目的數量, M(≦20)是在職老
> 師數量, N(≦100)是應徵老師的數目。
> 接下來的 M 行包含 C ,和一連串的科目編號。 C 表示僱用第 M[i] 位在職老師所
> 需的費用,後面跟著的科目代號,表示這位在職老師可以指導的科目。重要的是,校長
> 一定要僱用所有的在職老師,而應徵老師不一定。[ 科目編號是由 1 排到 S 。]
> 同樣的,接下來的 N 行格式也是一樣的,代表的是應徵老師所需的費用和這位應徵
> 老師可以指導的科目。
> 對每一組輸入,請你輸出最少的花費。
> 輸入在 S=0 時結束。
==== 分隔線 ====
嗯,其實不是說很難做。
在職教師是每個都要聘的。所以直接聘就好
餘下的,可以使用動態規劃或者 Dijkstra(BFS with priority queue)
首先思考:差異在聘請的老師不同,而無關乎聘請之順序
所以,在聘請某些老師之後,若聘請的編號最大者相同時
則科目的狀態若相同則可視為相同。
因為,先聘 i 再聘 j 和先聘 j 再聘 i 是一樣的。
所以,決定在聘編號 n 之後不再聘編號 m <= n(重覆聘請無意義)
則聘請到第 n 位時,科目狀態相同者視為相同,因為再聘都是編號 > n 的
故知狀態 state[i][j] 表聘請到第 i 個應徵教師,科目狀態 j 時的情形
以聘請所有在職教師初始化每科科目的狀態,並以薪水為起始
以 Dijkstra 實作,狀態轉移:聘任一位編號 n > i 的教師
使得狀態從 j 轉移到 s 則生成新狀態 state[n][s],花費為原花費加上聘該老師
之花費。以 heap 實作 priority queue 可在 1.1s 跑完。
如果不在確立找到一目標狀態且其花費為最小時 prunning,也只花 1.4s
空間上至多八個科目,每個科目要嘛差兩人達成,要嘛差一人,要嘛已達成
將超過兩人以上教該科目的狀態全視為相同,則知有三種不同狀態
因此有 3^8 = 6561 種狀態,至多 100 個應徵教師,空間上是足夠的。
不過既然 state 這樣定義,且不會聘編號更小的教師
可以 dp[i][j] 代表聘到第 i 個教師時科目狀態 j 的情形
在 top-to-bottom 時需要去尋找所有狀態 dp[n][m] 且 n<i、並且聘第 n 個時
狀態可從 m 轉移到 j。
這樣太慢了,等於每次都要搜整張表…設有 n 位應徵教師、m 個科目
則時間複雜度 O((n*3^m)^2) 最差是 (100 * 6561)^2,太可怕了
不過如果採用 bottom-to-top
再將狀態修改成:dp[i][j] 表示產生狀態 j 且聘請老師編號均不大於 i 的最低薪水
注意到狀態上修正了什麼嗎?
將嚴格規定必須聘 i 改為聘的全部 <= i 就可以接受了。這樣一來…
從初始狀態開始,枚舉每個教師 i,每次決定是否在某狀態 j 聘請教師 i
以目前狀態 dp[i-1][j] 去決定聘了第 i 個教師得到的狀態 dp[i][s]
或是不聘的話以 dp[i-1][j] 決定 dp[i][s] 最後取較佳者
這樣枚舉 n 個教師,每個教師枚舉 3^m 種狀態
時間複雜度 O(n*3^m),最差是 100 * 6561,可以接受
空間複雜度由於是逐一枚舉,以兩個長度 6561 的陣列可承受
故空間複雜度可降為 O(3^m),執行時間約 0.1s
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/12/09
嗯,簡單易寫…可是不知道是不是有常數時間公式解還是什麼的
排名上不太好看…
翻譯一下。
給你 n、t、p 求以 n 個不小於 p 的整數加總得 t 之方法數為何?
已知 n、t、p 皆不大於 70
==== 分隔線 ====
或許有排組上的公式?
不確定…我是用動態規劃,可是排名一整個差
由於用 n 個數加總得 t 的話…可由 n-1 個數加總得 t-k 且第 n 個數為 k 時而來
這時限定 k >= p 即可。
可得狀態 dp[i][j] 代表用 i 個不小於 p 的數加總得 j 之組合數
則知狀態轉移方程 dp[i][j] = sum(dp[i-1][j-k]) for all j <= k <= p
以 bottom-to-top 跑了 0.25s
若以 top-to-bottom 加上剪枝掉 j-k < (i-1)*p
跑 0.08s,不過還是排到 250 以後了…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/12/09
不難寫的一題…雖然條件看起來有點嚇人,而且題目有些長
翻譯一下。
給你一個長度 n 的數列,則由任兩相鄰數之差可得另一數列,稱其為第一差數列
又第一差數列可再由相同方式得另一數列,稱之第二差數列
依此繼續下去,最後可得第 n-1 差數列,而這數列僅含一個數。
這時我們想要擴充它。給你 k(注意 k 並無上限,且不可能讓你有足夠的記憶體
可以存下擴充後的完整表格)求出每數列擴充 k 個數後,原數列(原本長度 n
之數列)擴充出來的最後一個數為何?並且,擴充之後的第 n+k 差數列(僅有一數
那個)必須為 0。不過注意一開始給的數列,生成的第 n-1 差數列,那數未必是 0。
n 不會超過 10,k 至少有 1 以上。
==== 分隔線 ====
嗯,不難想…只要由第 n-1 差數列開始逆推即可。
逆推時由於每次都是擴充一個數,並且每次擴充的數僅與該數列最後一個數
以及前一個數列新擴充的數有關,故…之前的數都不會再用到
因此,只要線性的記憶體便已足夠,並且與 k 無關。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: godgunman at 07/12/09
嘿 .. 我來推一個做法
math.h 裡面有一個叫做 atan2()的函式可以用
他會回傳 兩點與x軸夾角的 弳度(? 這其實我不確定)
所以說, 要判斷飛機有沒有在子彈的行經軌道上
只要把 子彈行走一單位的座標, 和飛機原來位置的座標, 跟子彈原點比較
若夾角相同, 就是在同條線上
設飛機座標 (x,y) 飛彈原座標 (px,py) 飛彈行走一單位座標(tx,ty)
if( fabs( atan2(y-py,x-px)- atan2(ty-py,tx-px) ) <=1e-8)
> > PE
> > 計算幾何。
> > 若將題目重講一遍
> > 給你目前所在位置,以及許多子彈的彈道,問是否有至少一個子彈的彈道
> > 會通過所在位置?
> > 換句話說
> > 給你一個點以及許多線段,問此點是否在任何一線段上?
> > 用計算幾何的方式。
> > 感謝 usaco 3-4 的計算幾何文件。
> > 一點是否在一直線上,看該點與該直線之距離。
> > 如果是 0,則表示其在該直線上。
> > 設檢查點 P 是否在直線 AB 上
> > 若 (P - A) x (B - A) 為 0 則表示點 P 在直線 AB 上
> > 但是這還不代表點 P 在線段 AB 上。
> 今天導出的三個小公式:
> 1. 若 P 在線段 AB 上,則 ( P-A )( B-P )≧0
> 2. 若向量 ( X,Y ) 、 ( X',Y' ) 同向(即斜率相同),
> X X'
> 則 ───=───
> Y Y'
> 即 X.Y' = X'.Y
> 6 6 31
> 3. 10.10 ≧ 2 (極嚴肅)
> > 不過既然確定在同一直線上,那麼若 P 的 x 座標和 y 座標
> > 皆在 A 點和 B 點之間,則點 P 在線段 AB 上。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by godgunman from 220.129.153.111 (中滑一番)
▲ godgunman 改@2007/12/09 Sun 22:31:41
→ styhihs 推:這超好用的xD 1209 22:31
→ godgunman 推:天阿!! 這是我第一篇文 .. XDDD 1209 22:32
→ csftwpt 推:天啊樓上告白了! 1209 22:46
→ gba356 推:我想問一下..如果斜率不存在呢?他會回傳多少啊? 1209 22:51
→ godgunman 說:180度是3.1415926麻 .. 所以90度就是前者的一半 1209 22:56
→ gba356 推:哦哦,對喔,是 arc tangent... 1209 23:02
作者: sa072686 at 07/12/09
不難做的一題。不過,它有些麻煩…可是沒有浮點數誤差這點寫起來很開心
翻譯一下。
比賽常有樹狀的賽程表,如下
1 Brazil -----+
+-- ? --+
2 Chile ------+ |
+-- ? --+
3 Nigeria ----+ | |
+-- ? --+ |
4 Denmark ----+ |
+-- ? --+
5 Holland ----+ | |
+-- ? --+ | |
6 Yugoslavia -+ | | |
+-- ? --+ |
7 Argentina --+ | |
+-- ? --+ |
8 England ----+ |
+-- World Champion
9 Italy ------+ |
+-- ? --+ |
10 Norway -----+ | |
+-- ? --+ |
11 France -----+ | | |
+-- ? --+ | |
12 Paraguay ---+ | |
+-- ? --+
13 Germany ----+ |
+-- ? --+ |
14 Mexico -----+ | |
+-- ? --+
15 Romania ----+ |
+-- ? --+
16 Croatia ----+
接下來,依序給你這十六隊的隊名,以及一個 16 * 16 的矩陣
第 i,j 個元素代表第 i 隊戰勝第 j 隊的機率。
問每一隊奪冠之機率?已知第 i,j 個元素加上第 j,i 個元素恆為 100
也就是不可能平手。計算方式上例如第一隊進四強的機率為
(1進八強之機率) * (3進八強之機率 * 1勝3之機率 + 4進八強之機率 * 1勝4之機率)
==== 分隔線 ====
嗯,用動態規劃可解之…
由於算第四強時要知道其它人八強的情形,算前二強要知道其它人四強的情形
所以逐步去做八強、四強和二強就可以了
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2007/12/09 Sun 23:59:13
作者: zenixls2 at 07/12/09
http://src.wtgstudio.com/?qTeyt4
可能是有東西我沒想到
要不然就是沒優化
反正不知為什麼會TLE-->難得用純C寫
/*
後來C in STL 也改過後,居然AC了。而且跑的比sa的純C快(冏)
而我原本用純C寫的倒是WA了.....
大家一起用C寫STL吧!!!
*/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.113.194 (中滑一番)
▲ zenixls2 改@2007/12/10 Mon 11:54:24
→ zenixls2 推:STL用dev C 4編譯,程式會非常小 1210 11:55
作者: sa072686 at 07/12/10
有。
不怪你。
while(scanf("%d", &k))
它會出事。
scanf() 的回傳值是,成功地讀到了幾個。
不過,如果 EOF 則會回傳 EOF,也就是 -1
因此,可以寫作
while(scanf("%d", &k) == 1)
或是
while(scanf("%d", &k) != EOF)
或是
while(scanf("%d", &k) != -1)
但是寫
while(scanf("%d", &k))
就準備炸吧…出不去滴
※ 引述《zenixls2 (丁丁叮叮)》之銘言:
> http://src.wtgstudio.com/?qTeyt4
> 可能是有東西我沒想到
> 要不然就是沒優化
> 反正不知為什麼會TLE-->難得用純C寫
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/12/10
很好寫的一題…AC 率低似乎是低在 PE 人數多(比 AC 多)可是修的人少吧
翻譯一下。
只有一組測資,輸入分成兩個部份。
給你一堆城市間的飛機航班,每個航班一列,每列四個區域,以逗號隔開。
前兩個區域為有飛機航班的兩個城市,後兩個區域分別是飛機類型和距離。
以一列空白列分結束,接下來有許多列,分別代表一組詢問
對每組詢問輸出一份報告,給出最短的路徑。以 EOF 結束。
城市至多 100 個,航班至多 200 個。給你的兩個城市必有路相連。總距離
在 16-bit 整數的範圍內。每份報告輸出路徑,並且每份報告前空兩個空白列
(第一份報告亦不例外)格式是前兩個區域長度 20,靠左對齊
後兩個區域分別是長度 10,靠左對齊以及長度 5,靠右對齊,四個區域間
皆有一個空白分隔之。詳細格式請參考 sample io。
==== 分隔線 ====
嗯,反正邊不多,甚至和點的數量差沒多少…
再加上它的種種特性,例如回溯時還要註明飛機類型之類的鬼東西
所以乾脆直接開 Bellman-Ford
反正,也沒差多少嘛…n^2 是 100 * 100,nm 也不過 100 * 400
再算上隱含常數其實沒差多少…實測也是 0.0s,不過好寫得多
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/12/10
不難寫的一題。雖然又要算線段相交之類的東西
可是有很簡單的算法,而且沒誤差…所以不算難寫
翻譯一下。
在座標系中,一個 10 * 10 大小的迷宮其左邊界為 x=0,右邊界為 x=10
其中有 k(k <= 18)道牆,每面牆有恰兩個門,你必須找到從入口到出口
的最短路徑。入口座標(0,5)而出口座標(10,5),每道牆給予五個實數
第一個是 x 座標(0 < x < 10)然後是兩對實數,分別代表兩個門的起迄
座標,以不遞減順序出現。輸出到小數點以下兩位,代表最短的距離為何。
==== 分隔線 ====
可以用相似來判斷能不能一直線通過數道牆…
這樣,自左到右,從每個門的兩端點去掃在它右邊的所有點即可
不過知道兩端點,要判斷與某鉛直線相交的座標可以用相似
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ seanwu 推:翻過了 1210 21:20
→ sa072686 推:啊囧…真是不好意思(汗) 1210 21:32
→ seanwu 推:嗯沒事@@ 只是提醒一下 1210 22:24
作者: sa072686 at 07/12/10
很陰險的一題…
翻譯一下。
給你高度為 n(n <= 100)的三角形,其最底下寬 2n-1,再來 2n-3,…,1
其中有些是黑的,有些是白的。求只包含白色的最大的三角形面積為何?
(詳見題目的圖)
三角形的尖端向上也可以被接受,如 sample input 第二組。
輸入只包含 '#' 和 '-' 和 ' ' 分別代表黑色和白色。空白只用來對齊而已。
每個三角形都會是倒三角形,格式像 sample input 一樣。
每組測資後輸出一個空白列。
==== 分隔線 ====
注意一下圖形…
△ ▽
形如 △△ 是合法的,可是緊鄰的 ▽▽ 卻不是合法的。
形如以上的合法三角形,如果底下那格不是黑的,那麼就是底下的左和右三角形中
取最大者再加 1。這個要觀察一下…有點難解釋。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
▲ sa072686 改@2007/12/10 Mon 15:41:08
作者: seanwu at 07/12/10
※ 引述《sa072686 (極大地。)》之銘言:
> 嗯,簡單易寫…可是不知道是不是有常數時間公式解還是什麼的
> 排名上不太好看…
> 翻譯一下。
> 給你 n、t、p 求以 n 個不小於 p 的整數加總得 t 之方法數為何?
> 已知 n、t、p 皆不大於 70
> ==== 分隔線 ====
首先,每個數皆不小於p,所以把每個數都減p,然後t-p*n = t'
變成不管每個數的值為何,去組成t'的方法數
這個可以用組合算,考慮底下的:
**|***|***|**
可以對應於 2+3+3+2 = 10 ,有三條槓切成四塊,對應於n=4
所以,變成 有t'+n-1個*號,基中n-1個要改為|,有幾種方法?
即 C(t'+n-1,n-1)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.13 (台狼一中桑靈餓)
作者: seanwu at 07/12/10
※ 引述《sa072686 (極大地。)》之銘言:
> 不難寫的一題…雖然條件看起來有點嚇人,而且題目有些長
> 翻譯一下。
> 給你一個長度 n 的數列,則由任兩相鄰數之差可得另一數列,稱其為第一差數列
> 又第一差數列可再由相同方式得另一數列,稱之第二差數列
> 依此繼續下去,最後可得第 n-1 差數列,而這數列僅含一個數。
> 這時我們想要擴充它。給你 k(注意 k 並無上限,且不可能讓你有足夠的記憶體
> 可以存下擴充後的完整表格)求出每數列擴充 k 個數後,原數列(原本長度 n
> 之數列)擴充出來的最後一個數為何?並且,擴充之後的第 n+k 差數列(僅有一數
> 那個)必須為 0。不過注意一開始給的數列,生成的第 n-1 差數列,那數未必是 0。
> n 不會超過 10,k 至少有 1 以上。
不需要用腦的暴力數學解 pagedown
它說 n+k 必須為 0,意思就是說,原數列必為一個多項式
用原數列的n項造一個n-1次多項式,再代入k+n就是了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-136.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: newmoon at 07/12/11
10598 - Find the Latitude
立體幾何題
地球的半徑為R,有一個人,她從地球的某個地方往北走n公里,
再往東走n公里,最後再往南走n公里
又回到原地,請問它原本所在地的緯度,我們當然知道南極點是其中一個解
但這不是我們所要的,若有很多解,請輸出最小的10個
每組測試資料一列
有兩個數,分別是R和n
其中0<R<100000,R/100<n<R/8
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.145.202 (福爾摩沙固網)
作者: gba356 at 07/12/11
Xenosemantics - 外來語義學
人類最後終於和外星智慧取得聯繫了!接受到來自 Procyon IV 的訊息流,再經過
地球上最優秀的外來語學家解讀,我們對這種新語言的格式,得到了以下明確的結論:
這些訊息以位元組為單位地分,重要的內文由小寫英文字母表示,而分離字元由其他
字元表示,分離字元會隨著訊息內容而改變,但是一個由特定分離字元分隔出的單字,
將不會包含分離字元。另外,概念上,我們有 "joker spacer", "wild spacer",舉例
而言,在訊息" xwrxwtx "中包含三個單字,"wr"、"wt" 和 "rx"; "wrxwr"
則不是一個單字。但是如果這段訊息片段出現在訊息的開頭,那麼"xw" 和 "xwrxw"
就可能是一個單字。然而,由相同字母組成的單字,可能經過重新排列過後出現在文章
的另個地方,因此這種語言中也有"虛詞"的概念,像是英文中的 err..., umm... 。
在這種新語言中,真詞的條件為包含至少兩個、不超過 250 個字母,並且和某個真詞
重疊,即和某真詞由相同的字母們組成。
在以上所示的例子中,如果( wr 或 rw )和( rx 或 xr )出現在文章某處,則
"wr"和 "rx"都是真詞,因為他們和擁有相同組成的單字重複出現了。
同理,wt 將會是個真詞,若 wt 或 tw 出現在文章某處。
請你寫一個程式讀入一串訊息,並將訊息中的真詞照著出現的順序輸出,若兩個字
發生重疊現象,請先輸出較早結尾的。請記得,訊息的開頭和結尾都應該視為一個分隔
字元。你的程式需要具備處理一千個字的能力。
Input
輸入將包含一個以上的訊息,每則一行以上。每行將不會超過六十個字元,並包含
小寫字母和其他字元。若一則訊息以 dash (-)收尾,則表示這個訊息接續著下一行。
小寫 'a' 到 'z' 以外的字元則不構成訊息的一部份。
輸入單行 # 結束。
Output
請將真詞依上述順序輸出,每個一行。並對應每則訊息輸出單行 * 。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 61.231.52.38 (中滑一番)
▲ gba356 改@2007/12/11 Tue 23:31:06
▲ gba356 改@2007/12/13 Thu 14:58:21
→ sa072686 推:謝謝學弟的翻譯 >////< 1213 14:59
→ gba356 推:這題也太複雜了吧orz 1213 15:02
作者: sa072686 at 07/12/12
大暴力一題。不過忘了加結尾條件、忘了擋指標,炸兩次…
翻譯一下。
給你一連串的指令,問指令是否為 instruction?
判斷方式請見題目。題目中以粗體寫著的表示要和它的字完全相同
否則就是某種特定型態的字串。
.. 代表範圍,比如說 A .. Z 就是在 A,B,…,Z 之間。
| 就是滿足其中一種就好。注意 nnn 和 s-word 分別是個別處理數字和字母用的。
在 "" 中可能有些空白,這些不用理它,在 . 前後、第一個 " 後和第二個 " 前
不會有空白。
==== 分隔線 ====
嗯,應該是沒什麼特殊技巧…
函數海硬上就好,AC 率低應該是因為出 bug 很難處理的關係。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/12/12
嗯,並不會很難寫的一題…四則運算的,可是不必管運算優先順序。
翻譯一下。
給你一個運算式,請計算最後變數的更動。符號請見題目的表。
每個運算子的優先度都一樣,不過是右邊先算。
當然括號要先算,而且括號的深度沒有限制。
兩個運算子不會相鄰出現,即使中間隔著括號也一樣。
賦值符號的左邊一定是變數,並且最左邊的運算子一定是賦值。
為了可讀性,除了負號與運算元之間可以任意地加入空白。
負號永遠不會出現在變數左邊。所有變數初始值皆為 0。
寫個程式計算運算式並且判斷變數的值的改變。當然同一個運算式
有可能對一個或多個變數進行一次或多次賦值。
給你許多合法運算式,每行長度在 100 以內,以僅含 # 的一列為結束。
對每列的輸入,輸出一行,哪些變數在這次運算之後值改變了
如果有多個變數改變了,請依字母順序輸出,並以逗號分隔之。
一個變數的值改變僅當其在此運算式之前的值與此運算式之後的值不一樣。
如果在運算式中同一變數改變了多次,以最後的值為準。
如果沒有任何變數改變,請輸出 No Change
/* 註:注意運算式中的除法是整數除法。 */
==== 分隔線 ====
嗯…要小心以下幾點
一、括號優先運算,可是平行並列的括號右邊的先算。
二、小心括號匹配的問題。
其它沒太多要注意的地方。運算時以遞迴較為方便。
用 recursion(l,r) 回傳字串中從 l 到 r 這段的值為何
這樣會比較便於計算。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.6.117 (台狼一中)
作者: seanwu at 07/12/12
11122 - TriTri
給你兩個三角形,判斷兩個三角形是否相交?
如果相交的部分只有一個點或一條線,不視為相交
<Hint E>
試試這組 0 0 10 0 9 1 9 0 9 10 10 0 答案是 yes
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-153.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/12/12
嗯…難寫難懂的一題。即使懂了有的地方也很難判斷…
翻譯一下。
現在有兩支程式 Paskill 和 Lisper 在網路上跑著。
每到一個節點,Paskill 就會對那節點動手腳,踩上這節點的程式就會被反編譯而死。
而 Lisper 則會使每個節點壞掉以致不能再走。然而,Paskill 會記得他到過哪些節點
因此不會再走進去。如果他們走到同一個節點則會同歸於盡。只要其中一個(或兩者)
停了下來,那麼整個移動就會停下來。如果沒有節點可以走了就會停下。
兩支程式移動速度相等。每個節點都被標上大寫字母 A 到 Z 來分辨。
在移動時,Paskill 會從目前節點開始依字典順序往大者搜尋,Lisper 則反之。
如果 Paskill 找到底了,則從頭找;Lisper 找到頭了則從尾再開始。
如果有超過一個事件,則 Paskill 的優先輸出。
輸入有許多列。每列代表一個網路以及兩支程式的出發點。一個網路由句點 . 結束
中間有許多節點以及與該節點相連的點,以 ; 分隔不同的點。每個點開頭是該點的
代表字母,一個冒號 : 後連接一個或多個相連的點。任兩點連接的邊至少出現一次。
邊是雙向的,因此不一定每個節點都會被描述到。句點後是 Paskill 的出發點
然後是 Lisper 的。沒有任何一行會超過 255 個字元,輸入以一列包含 # 的為結束。
每組測資輸出一列。每列包含結束時的事件以及發生的節點。結束事件包含以下三者
其中之一或二:
* Lisper destroyed in node ?
* {Paskill/Lisper} trapped in node ?
* Both annihilated in node ?
==== 分隔線 ====
題目講得有些亂。這裡整理一下重點:
一、Paskill 走過的點踩到會死,可是它自己知道走過的點,所以只有 Lisper
不知道,可能因此死去。而 Lisper 走過的只是壞掉不能再走罷了。
二、移動是同步的。所以即使先判斷 Paskill 的移動,Lisper 正踩著的節點
也已經壞了。故在 Paskill 被困住的同時,Lisper 也可能同時被困住
或者死去,甚至走到被困住的 Paskill 所在節點而同歸於盡。
三、同歸於盡不算是踩到 Paskill 設下的陷阱而死,因此兩種訊息只能擇一。
四、是有可能一開始就踩在同一節點上的。
因此…
一、一開始踩在同一節點上,則兩者同歸於盡,但來不及被困住。
二、雙方皆移動的同時同歸於盡的話,則不可能被困住。但可能 Paskill 被困住
可是 Lisper 踩到它。因此 Paskill 被困與同歸於盡可以同時發生。
三、不管任何情形,只要 Paskill 被困住一定先輸出。
四、任一事件發生後即停止。但 Paskill 被困之後別忘了判斷 Lisper 同一回合的情形
因為,確認 Paskill 被困時 Lisper 也正同步行動。
五、沒有任一事件發生時,則雙方皆繼續往下走。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/12/13
296 行…相當煩的一題,不過好像沒什麼陷阱…所以沒出過幾次 bug。
翻譯一下。
有個知名的心理學實驗,使用一個遊戲讓玩家在裡面可以選擇與其它玩家交易,
或是欺騙其它玩家。如果雙方都選交易,則雙方都各加一分;若有一方交易,
一方欺騙,則交易之一方損失兩分,欺騙的一方得到兩分。若雙方都欺騙,則各
損失一分。
有許多不一樣的策略可以自由運用。雖然大部份人不可能找到勝利的策略,
或是,一直使用相同的策略。但是可以透過電腦來模擬。每個策略都由一個自動機
來模擬。自動機每個都先輸入一個程式決定策略,以及儲存前幾次相遇情形的記憶體
和一個記錄分數的計數器。計數器從零開始,根據規則在每次相遇時改變。記憶體
可以儲存至多兩次的相遇情形。
寫個程式讀入至多十個不同的策略,並分別與自身以外其它策略相遇十次,然後
輸出最後的分數。策略將使用一個簡單的程式,遵循以下的語法:
<program> ::= <statement>.
<statement> ::= <command> | <ifstat>
<ifstat> ::= IF <condition> THEN <statement> ELSE <statement>
<condition> ::= <cond> | <cond> <op> <condition>
<op> ::= AND | OR
<cond> ::= <memory> {= | #} {<command> | NULL}
<memory> ::= {MY | YOUR} LAST {1 | 2}
<command> ::= TRADE | CHEAT
注意 LAST1 是上次的相遇情形以及 LAST2 是上上次的相遇情形。MY 和 YOUR 的意思
很明顯。空白和換行符號可因可讀性而出現在任何地方。符號 '#' 代表不等於
NULL 代表並無該次相遇的資料。以下是合法的程式:
CHEAT.
IF MY LAST1 = CHEAT THEN TRADE ELSE CHEAT.
IFYOURLAST2=NULLTHENTRADEELSEIFYOURLAST1=TRADETHENTRADE
ELSECHEAT.
輸入
輸入會有許多個程式。每個程式不會超過 255 個字元,並且有可能因方便
而切成數行。最多十支程式。僅包含 '#' 的一列表示輸入結束。
輸出
輸出會有許多列,每支程式一列。每列輸出該程式最後的分數,長度三靠右對齊。
==== 分隔線 ====
嗯,首先是語法分析…就暴力來吧(汗)
至於儲存的方式,由於每次不是回傳決策,就是 IF 成立時,或是 ELSE。
因此,可想到使用二元樹來儲存。固定在 IF 成立時放哪邊,ELSE 放哪邊
如果是決策則直接回傳。這樣在走訪時便可輕易決定對策。
至於條件由於可使用 AND 和 OR 邏輯運算,且可連續多個。
由於運算的先後順序,應該先計算 AND 再計算 OR
因為 AND 和 OR 的運算順序並不相等,因此不能自左而右地運算。
因此…建二元樹倒還輕鬆,分析一下就好,約 50 行。
判斷 IF 的條件是否成立就傷腦筋了,寫了 150 行上下。
也可能我的 style 比較吃行數啦,嗯…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: sa072686 at 07/12/13
※ 引述《gba356 (瑪利歐)》之銘言:
> Xenosemantics - 外來語義學
> 人類最後終於和外星智慧取得聯繫了!接受到來自 Procyon IV 的訊息流,再經過
> 地球上最優秀的外來語學家解讀,我們對這種新語言的格式,得到了以下明確的結論:
> 這些訊息以位元組為單位地分,重要的內文由小寫英文字母表示,而分離字元由其他
> 字元表示,分離字元會隨著訊息內容而改變,但是一個由特定分離字元分隔出的單字,
> 將不會包含分離字元。另外,概念上,我們有 "joker spacer", "wild spacer",舉例
> 而言,在訊息" xwrxwtx "中包含三個單字,"wr"、"wt" 和 "rx"; "wrxwr"
> 則不是一個單字。但是如果這段訊息片段出現在訊息的開頭,那麼"xw" 和 "xwrxw"
> 就可能是一個單字。然而,由相同字母組成的單字,可能經過重新排列過後出現在文章
> 的另個地方,因此這種語言中也有"虛詞"的概念,像是英文中的 err..., umm... 。
> 在這種新語言中,真詞的條件為包含至少兩個、不超過 250 個字母,並且和某個真詞
> 重疊,即和某真詞由相同的字母們組成。
> 在以上所示的例子中,如果( wr 或 rw )和( rx 或 xr )出現在文章某處,則
> "wr"和 "rx"都是真詞,因為他們和擁有相同組成的單字重複出現了。
> 同理,wt 將會是個真詞,若 wt 或 tw 出現在文章某處。
> 請你寫一個程式讀入一串訊息,並將訊息中的真詞照著出現的順序輸出,若兩個字
> 發生重疊現象,請先輸出較早結尾的。請記得,訊息的開頭和結尾都應該視為一個分隔
> 字元。你的程式需要具備處理一千個字的能力。
> Input
> 輸入將包含一個以上的訊息,每則一行以上。每行將不會超過六十個字元,並包含
> 小寫字母和其他字元。若一則訊息以 dash (-)收尾,則表示這個訊息接續著下一行。
> 小寫 'a' 到 'z' 以外的字元則不構成訊息的一部份。
> 輸入單行 # 結束。
> Output
> 請將真詞依上述順序輸出,每個一行。並對應每則訊息輸出單行 * 。
==== 分隔線 ====
嗯。很麻煩的一題呢…
整理一下。
true word 的條件:字元數介於 2 到 250,重覆出現過,與其它true word 有 overlap
前兩個容易。第三個嘛…只好去暴力判斷了…
小寫字母外不構成訊息的一部份。因此先將小寫字母外的全部拿掉。
然後,先判斷 word 再判斷是否有重覆出現,再判斷 overlap
最後把 overlap 過的全部輸出。
重覆出現這點我是用 int 型態 array 記錄某一個 word 每個字母的出現次數
然後善用 memcpy 和 memcmp 來建表並排序找重覆出現…
再將重覆出現的 word,其每一段都去填在一張表上:哪幾個字母被出現兩次或以上
的 word 使用過,則再次被其它 word 使用時即為 overlap。
因此記錄它被哪一個 word 用過,則再次被使用時將該 word 及自己設為 true
最後檢查所有 word 一次即可。為了方便我除了記錄字母出現次數
也記錄是從哪一個位置到哪一個位置,這樣判斷 overlap 時可用,也可用於
維持穩定排序,最後輸出時用。輸出時按結束位置再排序一次:
如果兩個 word 沒 overlap,則先出現先結束,後出現後結束。
如果 overlap,則選先結束者,這是題目講的。
有沒有可能結束位置相同?不可能。
結束位置相同則設短 word 為 n,長 word 為 m
短 word 後面的 spacer 必須與前面的 spacer 相同
則矛盾,因為這樣一來長 word 的後面的 spacer 必與裡面字元重覆。
如果要說結尾是訊息尾端,那麼如果它第一次出現在訊息尾端
則不可能出現兩次或以上。
至於有沒有可能相同的 word 自己 overlap?
也不用擔心,這樣在 spacer 上亦會矛盾。
overlap 的話則 spacer 必須出現在 word 中才行。
這樣暴力判斷就可以了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
作者: seanwu at 07/12/13
11353 - A Different Kind of Sorting
我們定義一種比較兩個數字大小的方法:
計算它們的標準分解式中質因數的個數,數量少者比較小,如果數量相等再比較數字大小
例:
20 = 2*2*5 (3個) 35 = 5*7 (2個) ==> 35<20
18 = 2*3*3 (3個) 8 = 2*2*2 (3個) ==> 8<18 (相等時比較原數字大小)
請用這個規則把1~2000000排序好
給你N,問第N個數為多少?
<Hint E>
x的質因數個數 d[x] = d[x/p]+1 (p是任意一個質數,利用篩法求出)
排序時也可以用 bucket sort,會快很多 (qsort會過)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-131.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
▲ seanwu 改@2007/12/13 Thu 19:00:40
→ gloompisces 推:這題有完全不用sort的方法 1213 20:50
作者: newmoon at 07/12/13
132 - Bumpy Objects
苦工題,但行數不會超過100
先給一個多邊形(可以是凹的)的名字,然後給這個多邊形的質心座標,
接下來依逆時針方向依序給你多邊形的頂點,以0 0做為結束
把這些頂點一輸入順序從1開始編號
現在把這個多邊形立在一直線上,可能有很多方法不讓此多邊行左右傾倒,
注意當質心對下來剛好在接觸直線的兩端時也算會傾倒
每一種立法多邊行至少會於直線焦於兩個點
請求出所有立法中接觸頂點編號最大的數字中的最小值
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.173.4 (福爾摩沙固網)
作者: seanwu at 07/12/13
11359 - Guards, Imbecile Guards
你現在要從起點S到終點T,你有一張地圖,上面的'#'為障礙物
其中有數個(<=3)個衛兵在之間巡邏, 在地圖上以'X'表示
巡邏的方式是這樣的:一開始每個衛兵都會朝右移動,直到撞到障礙物或邊界,
變成向左移動,撞到障礙後又向右移動。衛兵不會相撞
你的移動速度為每秒一格,衛兵也是
你不能被衛兵抓到,所謂被抓到是:在同一時間站在同一格,或者
移動前後兩人的位置恰好交換
每次你可以選擇移動到相鄰的格子上或不動(時間還是照常計算)
問從S到T的最短時間?
<Hint E>
BFS,狀態可以放得下的,10*10*(20^3) (可以再更小)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-131.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 07/12/13
嗯,不難寫可是超級暴力,不難過只是有些陰險。
翻譯一下。
許多研究者正面對著文章數的快速增長。這使得他們很難去尋找及閱讀他們所想要的
資料。然而,你有能力提供這樣的服務。有個簡單的搜尋方法:判斷一份文件的標題
是否有一對關鍵字一起出現,並且位置相近。關鍵字由搜尋者來決定,並且附上一個
數字代表至多可以有幾個單字出現在一對關鍵字之間。因此一個對洞穴中的畫感到興
趣的考古學家可以搜尋 "0 rock art" 代表她希望找出所有標題中關鍵字 "rock" 及
"art" 成對出現,並且在它們之間僅有 0 個單字的文件,也就是彼此相鄰。因此,
不但會找到 "Rock Ary of the Maori" 也會找到 "Pop Art, Rock, and the Art of
Hang-glider Maintenance"。
寫個程式讀入許多組搜尋,接著是許多的標題,並且判斷哪些搜尋會找到哪些標題。
如果某個標題至少出現一對關鍵字,可滿足在它們之間的單字不超過指定個數的條件
則它將被該搜尋找到。一個單字代表一個或多個,以空白或換行符號開始與結束的字
母。
輸入
輸入包含不超過 50 組搜尋,接下來有不超過 250 個標題。每組搜尋和標題分別依
出現的順序被編上編號,從 1 開始。雖然這些數字並不會出現在輸入中。
* 每組搜尋以 "P:" 為開頭,且會包含一個數字,接著有兩個或以上的關鍵字,以
小寫字母表示。
* 每個標題以 "T:" 為開頭,接著是一個以 '|' 為結尾的字串。'|' 並不會在字串
結尾以外的地方出現。不會有任何標題超過 255 個字元,但它可能被切成超過一
行。不會有任一行超過 80 個字元,並且每個標題除第一行以外一定以至少一個
空白為開頭。換行字元只會出現在單字與單字之間。
所有非字母的字元必須被忽略。因此標題
"Don't Rock -- the Boat as Metaphor in 1984" 必須被視為
"Dont Rock the Boat as Metaphor in" ,且
"HP2100X" 必須被視為
"HPX"。輸入以僅含一 '#' 之一列為結束。
輸出
輸出包含了許多行,每組搜尋一行。每行有它的編號(即出現在輸入中的順序)
接著是 ":" 以及一個空白,然後是它所找到的標題的編號,由小到大輸出,以
逗號分隔,但不該有空白。
==== 分隔線 ====
嗯。首先…處理好輸入吧。
由於無視大小寫,所以請把標題全換成小寫字母。
拿掉字母外字元時,記住就範例來看,這些字元只是被忽略
並不會被拿來當成單字間的分隔。
由於以單字為單位,因此就以單字為單位儲存…
然後直接四層迴圈暴搜(汗)
題目說是 pair 也就是一對關鍵字
所以,假設搜尋 rock art 則 rock rock 不會被搜到。
可是…只要一對關鍵字就好了嘛。
那麼如果我搜 rock rock art 則 rock rock 就會被搜到了。
這個有注意到的話,應該要 AC 就沒什麼問題了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 07/12/14
答應了某些事。
只能先說對不起了。
也許等承諾的時間過後,也不會將心力擺在這了。
第 1400 篇文。
不過,欠下的會還的。
一定。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: seanwu at 07/12/14
10556 - Biometrics
有一種人臉辨識的技術是這樣的,利用臉部上某些特殊部分的相對位置相似度,
例如左眼、右眼、左耳、口、鼻之間的位置關係等等,可以用於辨識兩個人是否相似
現在給你兩組座標,每組中依序分別為兩個人臉上每個特徵的座標
把兩組座標分別依序連起來得到一多邊形,若兩多邊形相似則稱這兩個人相似
所謂多邊形相似,可以讓多邊形旋轉、縮放但不能翻轉
而且相同的特徵部位必需依序對應... 左眼對上右耳後相似,顯然是沒什麼意義的...
<Hint E>
隨便找一條邊對在一起,然後看其它點的合不合就可以了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-153.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: newmoon at 07/12/14
不知道是題目沒搞清楚還是怎樣
一直wa
幫忙看一下好嗎?
CODE REMOVED AFTER AC
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 124.8.165.226 (福爾摩沙固網)
▲ newmoon 改@2007/12/19 Wed 15:43:29
作者: seanwu at 07/12/15
※ 引述《sa072686 (藝術)》之銘言:
> 很難寫的一題啊…很容易 TLE,昨天換了兩種方法都沒過…
> 後來爬討論板發現,板上講的兩種方法正好就是昨天用的兩種…結果都是寫炸…
> 翻譯一下。
> 給你 n 和 m(1 <= n,m <= 999)代表迷宮大小,接著 n 列有 m 個恰被一個空白
> 所隔開的數字,代表走到那一格上的 cost。cost 介於 0 到 9 之間。從(1,1)
> 出發,每次只能走東西南北四個方向,求走到(n,m)的最小花費為何?
> /* 譯註:wa 了數次就因為忘了加上第一格的花費…請注意。sample 給 0 所以沒差
其實這一題有很簡單的做法,重點在於如何善用 "cost 介於 0 到 9 之間" 這個事實..
把每一個點 X 拆成 X1,X2,X3...Xcost ,不會超過9個
像這樣 3-5-1
就可以變成 (1-1-1)-(1-1-1-1-1)-(1)
於是每條邊的權重都一樣了,直接做BFS就好
(當然不是真的拆點下去做...記憶體也不夠,直接在狀態上多加一個cost就行了)
還有0的時候要處理好
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-144.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
▲ seanwu 改@2007/12/15 Sat 17:35:56
作者: zenixls2 at 07/12/16
http://src.wtgstudio.com/?b7a80G
我自己測沒什麼問題
卻不知發生什麼事WA了
假如有人可以提供心機測資也不錯
(討論版上沒任何測資)
對了,我玩map玩出新寫法
可以當multimap用,且更易操作...都在code中
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 218.165.118.22 (中滑一番)
▲ zenixls2 改@2007/12/16 Sun 13:53:47
→ sa072686 推:這一定要紀念一下…(茶) 1217 08:31
→ zenixls2 推:Case打成Caes了,這也太難debug了吧.... 1217 08:38
→ sa072686 推:對啊…我一開始也只是看Yes和No的大小寫XDDD 1217 08:38
作者: seanwu at 07/12/17
11354 - Bond
Bond又有新任務了,這次的任務中他需要在從某個城市S到達另一個城市T
城市間以道路相連,並且M不會耍他... 也就是說,從S一定可以到達T
但每條道路的危險程度不同,不過M以經幫他評估好每條路的危險程度了
Bond從S到T的危險度,定義為他所走的路徑上的每條道路危險度的最大值
給你S和T,問Bond的危險度,最低是多少?
城市數目<50000、道路數目<100000、接下來有<50000個詢問,每個詢問包含S和T
//這跟卡恩的 TWN + NPSC Practice Contest 4 中的pf一樣XD
<Sol pagedown>
1.首先... bond走的路一定是沿著MST (不失一般性的假設圖形連通)
原因是把邊由小到大排序後,用disjoint-set做像kruscal的東西.. 嗯..
(原本的問題是min-bottleneck path,找itoa會有)
2.考慮MST上的一條邊,這條邊把MST分成兩部分,左部到右部一定要經過這條邊
所以,如果這條邊是MST中的最大邊,很顯然若S,T分別在左部、右部,則邊值就是答案
進一步考慮,被切開後的左部、右部,兩邊中都可以再找最大邊,然後再分割下去
3.看底下的例圖,這是一個MST
1 5 2
A-----B-------C----------D
/ \
2 / \ 3
/ \
E \
F
依照2.中的分割方式,如果我把它轉成這樣
((A) 1 (B)) 5 ((((E) 2 (C)) 2 (D)) 3 (F))
=> 1 5 2 2 3
A B E C D F
注意我們的目標是找出S,T之間的最大邊,現在在這個序列裡,
取兩點間序列的RMQ,就是兩點間會經過的最大邊
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-159.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: zenixls2 at 07/12/18
你可能會好奇為什麼大部分的生物,像是人類,但在外貌上(如身高、膚色、耳)會有所不
同,甚至有些沒有人類的特徵;他們可能會有幾何或非幾何的形狀,如方塊、油滴狀或雲霧
狀。
有一個怪人提出基因的概念,說之所以會不同是因為DNA不同的關係
給你一些DNA序列,以字串表達。你的工作是找出"最長"的共同子字串,為多於一半組數
(n/2)的DNA序列之子字串。
標準的輸入包含數組測資。每組測資先給組數n,1=<n<=100,接下來n行為全小寫的DNA序
列,每組DNA至少一字至多1000字。n==0表輸入結束
輸出該子字串,若有多於一組,請把它們都輸出(依照字典順序)
若找不到該字串,請輸出"?"。測資間請空一行。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 192.168.4.20 (台狼一中桑靈餓)
→ zenixls2 推:只是翻譯..閒閒沒事做 1218 14:21
▲ zenixls2 改@2007/12/18 Tue 16:40:24
→ seanwu 推:這題很難 1218 18:35
→ godgunman 推:噢原來是這題 .. XD 1218 19:58
→ zenixls2 推:48人solved it 1218 22:39
→ godgunman 推:噢對, 似乎是子"字串" 不是 子"序列" 1218 23:07
→ zenixls2 推:我原本打字串...可是sa叫我改序列 1219 13:42
→ godgunman 推:是substring (字串)沒錯, 而且還要做suffix array 1219 14:20
→ sa072686 推:澄清:我沒看題目,可是學弟問我LCS的中文… 1219 14:22
▲ zenixls2 改@2007/12/19 Wed 14:23:56
→ godgunman 推:XDDDDDD 1219 14:24
作者: newmoon at 07/12/19
※ 引述《seanwu ( )》之銘言:
> 給一個複數(a+bi),其中a,b為整數
> 問這個複數的最少幾次方會是一個整數(0次方不算)
> 且這個整數的絕對值不大於2^30,如果找不到這樣的數,
> 請輸出 TOO COMPLICATED
> <Hint 請按大E>
> 暴力乘乘看就好
這題連用乘的都不用
只有在複數平面上與實數軸的交角為45度的整數倍才有解
稍微判斷一下就好了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 163.32.78.11 (高雄一中)
作者: gba356 at 07/12/20
嗯..除了題目用詞偏科學造字外,
這題適合當作第一題 Floyd-Warshall / Dijakstra (心)
Floyd-Warshall 或 Dijakstra 基本練習題。
中譯:
【 MPI Maelstrom 】
BIT has recently taken delivery of their new supercomputer, a 32 processor
Apollo Odyssey distributed shared memory machine with a hierarchical
communication subsystem. Valentine McKee's research advisor, Jack Swigert,
has asked her to benchmark the new system.
BIT 最近收到了他們的新玩意兒,一台三十二處理器的超級電腦。這台電腦採用了名
叫「阿波羅-奧德賽」的記憶體共用分配技術,並結合了階級訊息傳遞系統。
Valentine McKee 的研究顧問, Jack Swigert ,現在收到命令對新系統作效能評
估。
`How is Apollo's port of the Message Passing Interface (MPI) working out?''
Swigert asked.
"新的阿波羅訊息傳遞介面運作的怎麼樣?"
``Not so well,'' Valentine replied. ``To do a broadcast of a message from one
processor to all the other n-1 processors, they just do a sequence of n-1
sends. That really serializes things and kills the performance.''
"不太妙耶," Valentine 答道,"要將一個訊息從一個處理器廣播到剩下的 n-1 個
處理器,我們需要作一連串 n-1 次傳送。而這卻打斷了系統原本的工作。"
``Is there anything you can do to fix that?''
``Yes,'' smiled Valentine. ``There is. Once the first processor has sent the
message to another, those two can then send messages to two other hosts at
the same time. Then there will be four hosts that can send, and so on.''
"那有什麼方法可以修復的嗎?"
"有的,"她微微一笑。"的確有。當一個處理器將訊息送到另外一個時,這兩個可以
同時發訊息給再另外的兩個,因此我們現在有四個發訊端了,依此類推。"
``Ah, so you can do the broadcast as a binary tree!''
"啊,那我們便可以將它視為二元樹來廣播訊號了!"
``Not really a binary tree -- there are some particular features of our
network that we should exploit. The interface cards we have allow each
processor to simultaneously send messages to any number of the other
processors connected to it. However, the messages don't necessarily arrive at
the destinations at the same time -- there is a communication cost involved.
In general, we need to take into account the communication costs for each
link in our network topologies and plan accordingly to minimize the total
time required to do a broadcast.''
"並不完全是二元樹,這裡面還有更多"網路"的性質值得我們去開發。在這種介面卡下,
它允許我們瞬間將訊息廣播至任意數量的處理器。然而,這些訊息並不是瞬間抵達目的
地的,我們還需要考慮傳播訊息的花費。一般而言,我們需要將這些花費納入考量,
並取用最小花費的方法來完成我們的廣播。"
輸入
每筆輸入包含一個正整數 n ,表示著網路中的處理器數目。接下來會有一個下三角
矩陣,代表著這個網路的相鄰矩陣左下半。請將這個網路視為無向的,且
A[i][j] 和 A[j][i] 相等, A[i][i] = 0 。另外,輸入 x 代表著此兩點不相連。
以輸入範例為例,
5 // 網路中處理器數目
50
30 5
100 20 50
10 x x 10
表以下相鄰矩陣:
0 50 30 100 10
50 0 5 20 x
30 5 0 50 x
100 20 50 0 10
10 x x 10 0
輸出
對每一筆輸入,請輸出從第一部處理器廣播開始,至所有處理器收到訊息所需要的
最小總時間。
< Hint E >
Floyd-Warshall / Dijakstra ,需要注意的是,不可以讓定義的 INF 相加超過 int
範圍。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 61.231.54.38 (中滑一番)
作者: gba356 at 07/12/23
今天在一個怪網站看到的,
可以用來探測資裡面一個整數的末三位元:
/***************************
* Milk Judge (Valladolid) *
***************************
* Stop the program in one of 8 possible ways, essentially
* giving back the 3 lowest bits of 'n', whatever n is.
**/
void milkJudge( int n )
{
switch( n & 7 )
{
case 0: exit( 0 ); // Wrong Answer
case 1: assert( false ); // SIGABRT
case 2: *( int* )( n - n ) = 0; // SIGSEGV
case 3: n /= ( n - 3 ); // SIGFPE
case 4: while( 1 ); // Time Limit Exceeded
case 5: while( 1 ) malloc( 1024 * 1024 ); // Memory Limit Exceeded
case 6: malloc( 32 * 1024 * 1024 ); while(1); // 32MB + TLE
case 7: while( 1 ) printf( "." ); // Output Limit Exceeded
}
}
可惜現在 RE 都不給 Signal 了XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 125.232.238.80 (中滑一番)
作者: gloompisces at 07/12/23
強者sa一等獎!!!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.241.8 (台北帝國大學)
→ gloompisces 推:seanwu二等獎!!! 1223 21:04
→ masnec 推:恭喜啦!!學弟們果然強大!!! 1223 21:06
→ godgunman 推:恭喜版主 賀喜版主!! 1223 22:39
→ gba356 推:恭喜版主(賀) 1223 22:54
→ ben196888 推:賀喜老爺 1223 23:00
→ AikoSenoo 推:恭喜啦′▽`) 1223 23:17
→ pioneerlike 推:賀!! 1223 23:18
→ veriw 推:學長好厲害~~~ 1223 23:25
→ sa072686 推:謝謝大家XD /* 囧,發文者會不會太詭異了… */ 1224 00:02
→ SRX 推:賀一個 gloom被說詭異了XD 1224 00:05
→ gloompisces 推:如果不是樓上提供消息我哪裡會知道啊XD 1224 00:06
→ PG 推:恭喜 XD 1224 00:09
→ silentvow 推:賀!! 版主好強~ 1224 00:14
→ hpttw 推:恭喜鴨 1224 09:56
→ csftwpt 推:恭禧! 1224 23:56
→ newmoon 推:恭喜? 1224 23:58
→ rhodon 推:恭喜~!!!!!!!!!! 1228 12:45
→ kub 推:路人推~ 1228 18:57
作者: zenixls2 at 07/12/25
X^2 % M = 1
可改寫成
(X - 1)(X + 1) % M = 0
即 (X-1)(X+1)=M N,N屬於正整數+{0}
假設M可分解成 a*b
令(X-1)=a*x,(X+1)=b*y
得 by - ax = 2 就變成NPSC初賽那一題 (in gcd)
/////忘了說明,這代表要先建出因數表,只需掃sqrt(M)個數
又 (M - X + 1) 、 (M + X -1)可看成新的一組 (X + 1)、(X - 1)
所以對於M所有因數,只需掃小於 M/2 的解
////對於解只需做出一半的數量,其他可用減的
就算數字很大,也不怕 TLE or 溢位
莫名奇妙想出來的XDD
////我說過這方法不會TLE,我只是少寫一些步驟~~XDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 192.168.4.20 (台狼一中桑靈餓)
→ DarkKnight 推:你這樣只省掉一半 還是會 TLE(如果是我來做測資) 1225 13:20
→ seanwu 推:一定TLE 1225 13:25
→ seanwu 說:你可以到sqrt(N) 1225 13:25
→ Tommy 推:因數分解吧... 1225 16:30
→ DarkKnight 推:不好 1225 17:42
→ gloompisces 推:應該是因數分解 1225 19:45
→ zenixls2 推:找因數不會啊?!我寫的方法就是要找因數的 1226 14:17
→zenixls2 推:沒想到省一些字會造成別人的誤解.... 1226 14:54
→ sa072686 推:這點以後要改啊XDD 1226 18:30
▲ zenixls2 改@2007/12/26 Wed 18:45:57
作者: seanwu at 07/12/25
X^2=kM+1
令X=y+1,代入展開y^2+2y+1=kM+1 => y(y+2)=kM
若 M=pq ,設 y=a*p, y+2=b*q ,則k=ab
換言之即是對於每一(p,q)找出所有(a,b)使 0<y+1<=M
又 b*q - a*p = (y+2) - y = 2
即可解出 (a,b) 的參數式使 b*q-a*p = 2 (參閱 不定方程 一文)
x = y+1 = a*p+1 = p*a(t)+1
用迴圈直接跑t,找出所有 0<x<=M 的解 (會重覆,所以排序後再輸出)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ seanwu 說:X是不用換成y+1,不過算了... 1225 22:15
作者: seanwu at 07/12/28
※ 引述《zenixls2 (丁丁叮叮)》之銘言:
> 你可能會好奇為什麼大部分的生物,像是人類,但在外貌上(如身高、膚色、耳)會有所不
> 同,甚至有些沒有人類的特徵;他們可能會有幾何或非幾何的形狀,如方塊、油滴狀或雲霧
> 狀。
> 有一個怪人提出基因的概念,說之所以會不同是因為DNA不同的關係
> 給你一些DNA序列,以字串表達。你的工作是找出"最長"的共同子字串,為多於一半組數
> (n/2)的DNA序列之子字串。
> 標準的輸入包含數組測資。每組測資先給組數n,1=<n<=100,接下來n行為全小寫的DNA序
> 列,每組DNA至少一字至多1000字。n==0表輸入結束
> 輸出該子字串,若有多於一組,請把它們都輸出(依照字典順序)
> 若找不到該字串,請輸出"?"。測資間請空一行。
這題可以用:
Suffix array
http://www.iis.sinica.edu.tw/~hil/bioinfo/team7.ppt
把每個字串的Suffix全部混在一起後sort (QSort就過了...)
於是所有可能是最佳解的 "LCS" (這題的 S 是 substring)
都會連在一起
於是可以用兩個變數p,q來掃,類似於NPSC 2007 final的那題找a~z的做法
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-150.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ zenixls2 推:這招太帥了 1230 13:04
作者: sa072686 at 07/12/28
※ 本文轉錄自 [devilqxect] 看板
作者: devilqxect (我翹課了快來加我~) 站內: devilqxect
標題: [程設][轉錄] (C 指標) 使徒五攻略小祕笈 (上)
時間: 2007/12/28 Fri 21:38:32
※ 本文轉錄自 [PG] 看板
作者: PG (肝指數上升中∼☆) 站內: PG
標題: [轉錄] [轉錄][情報] (C 指標) 使徒五攻略小祕笈 (上)
時間: 2007/12/28 Fri 19:11:18
※ 本文轉錄自 [ducksteven] 看板
發信人: chitsaou.bbs@snow.ice.ntnu.edu.tw (人生的旋轉木馬) 看板: ducksteven
標 題: [轉錄][情報] (C 指標) 使徒五攻略小祕笈 (上)
發信站: 白色情迷 (2007/12/28 Fri 17:49:35)
※ 本文轉錄自 [chitsaou] 信箱
作者: ducksteven.bbs@ptt.cc (ducksteven.bbs@ptt.cc)
標題: [情報] 使徒五攻略小祕笈 (上)
時間: 2007/12/28 Fri 17:47:39
作者: ericsk (使徒亂殺一通) 看板: b93902xxx
標題: [情報] 使徒五攻略小祕笈 (上)
時間: Tue Oct 19 22:29:43 2004
有鑑於今天很多乖寶寶馬上就問了我很多關於指標, 陣列的事,
在此我就先寫一點小秘笈, 以便同樣的問題不必重覆回答 :p
[陣列跟指標]
當我們宣告一個陣列時, 其實它的名稱就是一個指標, (或許說法不嚴謹)
那它指向哪裡呢? 它指到陣列第一個元素的位址。
以下面的code為例:
int a[5];
這宣告了一個陣列, 名為 a, 大小為 5 個 int.
我假設它在記憶體裡長這樣:
─┬──┬──┬──┬──┬──┬─
...│a[0]│a[1]│a[2]│a[3]│a[4]│...
─┴──┴──┴──┴──┴──┴─
我們知道可以用 name[index] 這樣的形式來取值, 這正
是陣列天生的性質 -- 連續的記憶體位置, 所以才能直接
透過 index 算出來..(超秘: index[name] 也是一樣的效果唷!!)
而前面提到的, 陣列的名稱是一個指標, 所以呢, 下面的
等式是成立的:
a == &a[0] == &(0[a])
*a == a[0] == 0[a]
我們都知道 & 當作一元運算子(unary operator, 也就是只有
一個運算元的運算子)時, 在 C 裡是作為 "取位址" 的用途,
所以 &a[0] 自然是解釋作 取第一個元素的位址, 也就等於 a
的值了。而 * 作一元運算子時, 就是 "從這個位址取值" 的
意思, 所以 *a 就是取第一個元素的值, 當然就等於 a[0] 囉
既然 name[index] 幫我們作了記憶體計算的工作, 我們當然
也可以用指標來做類似的動作, 像上面的例子, 如果我有了 a
的值, 要怎麼算出 a[1] 的位址呢? 很簡單:
a + 1
咦? 不是說 int 佔 4 bytes嗎?, 為什麼 +1 就好了而不是 +4 ?
因為 compiler 看得出來左邊的運算元是一個 int *, 所以它在
做加法時, 會自動對應 sizeof(int) 的值來作 offset, 所以
a 和 a+1 的值, 你輸出後其實是相差4的 (可以自己實驗..)
所以導出下列等式:
a + i == &a[i] == &i[a];
*(a+i) == a[i] == i[a];
所以我們在函式間傳遞陣列時, 可以把它當成 int * 來傳,
就是這個道理 (多維陣列下面會講)
至於多維陣列呢? 我以一個二維陣列來做說明
int b[3][2];
這樣我們該怎麼解讀呢? 其實可以一步步來, 好比一維陣列的解
讀一樣: b[3] 是一個 int[2] 的陣列, 所以在記憶體中是長這樣:
← b[0] →← b[1] →← b[2] →
┬────┬────┬────┬────┬────┬────┬─
... │ b[0][0]│ b[0][1]│ b[1][0]│ b[1][1]│ b[2][0]│ b[2][1]│...
┴────┴────┴────┴────┴────┴────┴─
而其記憶體計算的方式跟上述一維陣列的例子相仿:
b == b[0] == &b[0][0]
*(*(b+1)) == b[1][0] == *(b[0] + 2)
// 你可以看得懂上面這行就表示你懂了
因為這樣, 所以在函數傳遞時, 除了第一維以外, 其它維度的大小
都必須宣告清楚, 否則compiler根本不知道該怎麼計算像 b[0] + 1
的結果 (以此例而言, 它一定要知道 b[3] 是一個 int[2], 才知道
b[0] + 1 是要加 8啊)
所以本來我們都會這樣做:
void foo(int array[][2])
{
....
}
int b[3][2];
foo(b);
但是學會指標後我們可以這麼做:
void foo(int** array, int size1, size2)
{
.....
}
int b[3][2];
foo( (int **)b);
不過這樣的話, 在 foo 裡面就要自己計算記憶體位址了,
再更高維的就以此類推吧...
[ Pointer array / Pointer to array]
這裡開始進入火星文區
以下兩個例子:
int* a[3];
int (*b)[3];
你知道它們差別在哪裡嗎? 用文字敘述的話就是:
int* a[3]; 是一個陣列名為 a, 有三個元素, 每個元素的資料型態是 int*
int (*b)[3]; 則是一個指標名為 b, 它指向一個 int[3] 的陣列
用圖形來看就是:
int data[3];
int* a[3]; int (*b)[3]; b = &data;
a → ├─┤ b → data → ├────────┤
│ → │data[0]==(*b)[0]│
├─┤ ├────────┤
│ → │data[1]==(*b)[1]│
├─┤ ├────────┤
│ → │data[2]==(*b)[2]│
├─┤ ├────────┤
我想看圖之後就會非常了解了吧 :)
如果這個圖沒有問題的話, 那麼你陣列跟指標的觀念應該是算及格了 :p
---------待續
[預告] 下集再推出 function pointer 篇
--
我愛妳不是因為妳是誰,而是在妳面前我可以是誰。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.166.141
推 pojan:助教可以寫書了... 140.112.239.62 10/19
推 greydust:推助教,圖文並茂啊!! 140.112.30.83 10/19
推 hiqhbinder:先推再看! 140.112.244.86 10/19
推 doudi:助教好神 203.64.26.200 10/19
推 zdk7r: 助教我們敬佩你....給你好人卡 140.112.239.142 10/19
推 loveayux: 助教我們敬佩你....給你好人卡 140.112.247.57 10/19
推 zdk7r: 助教我們敬佩你....給你好人卡XD 140.112.239.142 10/19
推 ckclark: 助教我們敬佩你....給你好人卡 61.229.66.132 10/20
※ 編輯: ericsk 來自: 218.166.166.141 (10/20 00:08)
推 ckclark: 助教我們敬佩你....給你好人卡 61.229.66.132 10/20
推 ader888:那個…b==b[0]是對的嗎…? 218.166.55.170 10/20
→ ader888:我印*b跟*b[0]會印出不同的.後者是b[0][0] 218.166.55.170 10/20
→ ader888:前面的就不知道爆到哪邊去了 218.166.55.170 10/20
推 springgod:助教我們敬佩你....給你好人卡 140.112.251.218 10/20
推 iippchen:助教我們敬佩你....給你好人卡 140.112.239.241 10/20
※ 編輯: ericsk 來自: 218.166.166.141 (10/20 20:01)
推 zdk7r: 助教我們敬佩你....給你好人卡 140.112.239.142 10/21
→ PG 推:借轉 1228 19:11
φ PG 轉:從 [ducksteven] 看板,于 2007/12/28 Fri 19:11:18
→ devilqxect 推:借轉~ 1228 21:38
φ devilqxect 轉:從 [PG] 看板,于 2007/12/28 Fri 21:38:32
φ sa072686 轉:從 [devilqxect] 看板,于 2007/12/28 Fri 22:52:59
作者: sa072686 at 07/12/28
※ 本文轉錄自 [devilqxect] 看板
作者: devilqxect (我翹課了快來加我~) 站內: devilqxect
標題: [程設][轉錄] (C 指標) 使徒五攻略小祕笈 (下)
時間: 2007/12/28 Fri 21:39:20
※ 本文轉錄自 [PG] 看板
作者: PG (肝指數上升中∼☆) 站內: PG
標題: [轉錄] [轉錄][情報] (C 指標) 使徒五攻略小祕笈 (下)
時間: 2007/12/28 Fri 19:11:22
※ 本文轉錄自 [ducksteven] 看板
發信人: chitsaou.bbs@snow.ice.ntnu.edu.tw (人生的旋轉木馬) 看板: ducksteven
標 題: [轉錄][情報] (C 指標) 使徒五攻略小祕笈 (下)
發信站: 白色情迷 (2007/12/28 Fri 17:51:43)
※ 本文轉錄自 [chitsaou] 信箱
作者: ducksteven.bbs@ptt.cc (ducksteven.bbs@ptt.cc)
標題: ◇ [情報] 使徒五攻略小祕笈 (下)
時間: 2007/12/28 Fri 17:48:41
作者: ericsk ([閒聊用]助教) 看板: b93902xxx
標題: [情報] 使徒五攻略小祕笈 (下)
時間: Wed Oct 20 20:42:39 2004
冥王星文的下集...
[指標的資料型態]
當我們在宣告一個指標(pointer)時, 這個指標本身也是一個變數,
它存著某個記憶體位址, 所以我們可以利用這個位址來取值或是做
其它的記憶體上的運算。那這個變數在記憶體中佔幾個 byte 呢?
這個答案跟 int 一樣: machine-dependent, 以現在32-bit的系統
及 compiler 而言, 指標變數也是佔32bits == 4 bytes的大小,
而它內容, 也是用2進位表示的整數(unsigned)。所以以下的每一個
指標都是 4bytes 的變數:
char* a; short* b; int* c; double* d;
它們的差異, 就在透過它們來取值時, 依照它指向的資料型態, 來
取出 n bytes 來取值。比方說 *d 就是從 d 開始抓 8bytes 出來
並且照 IEEE 754 的表示法來得到這個浮點數的值。
陣列的話, 陣列指標(陣列名)就是第一個元素的位址。
就算以後教到 struct 也是同樣的道理。
[函數指標]
既然, 基本型態的變數, 陣列 等等都有其對應的指標, 那為什麼
函式會沒有呢? 它一樣要在記憶體中佔個位子, 所以當然也會有
指標指到它的位址呀, 不然你要怎麼呼叫它??? <---- 對! 重點來
了, 你呼叫函數的時候, 不就是用它的名字來呼叫嗎? 它就像陣列
一般, 函數的名稱就是它的pointer, 而一個函數如果像這樣:
char foo(short a, int b, float c, double d, int f[]);
那麼 foo 就是這個函數的指標, 那它指到什麼資料型態呢? 它指到
char (short, int, float, double, int [])
這個資料型態, 也許你會覺得很奇怪, 但回想一下上集中陣列的例子
int **a;
int data[3];
int (*b)[3];
b = &data; /* 注意: 跟函數指標有點出入的地方! */
a = &((int *) data); /* 補充範例 */
b 就是一個指到 int [3] 的指標呀, 同樣的精神就可以套用在 foo
上面啦。而如果我們要宣告一個這樣資料型態的指標, 就可以如下所示:
char (*p2f)(short, int, float, double, int []);
p2f = foo; /* 注意: 跟陣列的例子有出入 */
/* p2f = &foo 也可以, 你可以想想為什麼 */
這樣一來我們就可以用 p2f 指到 foo 這個函式了, 所以也就可以
char ch;
ch = p2f(a, b, c, d, e, f);
/* 同上 ch = (*p2f)(a, b, c, d, e, f); 也一樣*/
就好像真的去使用 foo 一樣, 雖然我們是用 p2f。
所以呢, 利用這樣的觀念, 就可以輕易解決掉使徒五最關鍵的部分
-- functions 的宣告及設定。(再說下去就要變答案了....orz)
[typedef]
typedef 關鍵字是用來替資料型態取個「別名」(alias), 好比說
你叫出 「上官林傑」、「ericsk」、「無敵親切超級帥氣助教」
都可以指到我, 除了上官林傑是我的本名之外, 其它的就是我的別名 (挺)
比方說我們可以
typedef long long INT64;
typedef int INT32;
這樣表示幫 int 型態取了個別名 INT32, 之後我們就可以用它來
宣告變數。(也幫 long long 取了個別名叫 INT64)
為什麼要介紹這個呢?這樣便可以幫我們簡化一些東西, 像之前
的例子: int (*b)[3]; 我們知道 b 是一個指標指向 int[3]
可是我們卻不能用 int[3] *b; 來宣告 b, 這樣實在不是很直覺,
但若是用了typedef
typedef int (*P2I3)[3];
P2I3 b;
b = &data;
如此一來, 這個例子中的 b 就跟 int (*b)[3]; 的 b 是一樣的
資料型態, 而函式指標也可以這麼做: (引上述例子)
typedef char (*PF)(short, int, float, double, int[]);
PF p2f;
p2f = foo;
所以用這樣的表示法, 是不是就直覺多了呢?
[後記]
其實打這兩篇, 除了賺P幣之外, 就是一次回答多數同學的疑問 (FAQ)
除了能讓大家輕鬆解決使徒五之外, 也能再多多練習暴走的指標..
希望大家都能快樂學習 迅速成長 :D
by 不色助教
--
呼...
--
人們總是無法從歷史引以為鑑
我們只記住了名稱及時間,卻沒有記取教訓。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.166.141
推 rockpower:辛苦啦~助教真是個好人^^* 218.166.62.161 10/20
推 greydust:為什麼要強調"不色助教"啊.... 140.112.30.83 10/20
推 CorruptAngel:應該說foo會傳回一個函數指標(指向自己) 140.112.30.82 10/20
→ CorruptAngel:這樣應該會好一點 140.112.30.82 10/20
→ CorruptAngel:然後函數指標 & 函數都有支援()運算子orz 140.112.30.82 10/20
→ CorruptAngel:嗯..大概是為了要隱藏某種真相吧@_@ 140.112.30.82 10/20
推 ericsk:隻^二樓: 因為聽說有人說我是色助教 = = 218.166.166.141 10/20
推 CorruptAngel:誰說的?助教不要在意,他們只是忌妒而已:D 140.112.30.82 10/20
推 pojan:這樣不會此地無銀三百兩嗎..(逃) 140.112.30.96 10/20
→ ericsk:我待人以真誠, 誤會我叫做不厚道 :p 218.166.166.141 10/20
推 borisC: 助教最真誠了...助教最棒了.大家都愛助教 140.112.240.3 10/20
推 pangfeng:助教實在太認真了, 應該發勳章表揚. 220.137.82.29 10/20
推 as1986:好人勳章(逃) 140.112.249.234 10/20
推 ericsk:XD 我只是做好本分而已 218.166.166.141 10/20
推 sgc929:推不"戽斗" 218.161.62.45 10/20
φ PG 轉:從 [ducksteven] 看板,于 2007/12/28 Fri 19:11:22
→ devilqxect 推:借轉~ 1228 21:38
φ devilqxect 轉:從 [PG] 看板,于 2007/12/28 Fri 21:39:20
φ sa072686 轉:從 [devilqxect] 看板,于 2007/12/28 Fri 22:53:04
作者: sa072686 at 07/12/28
※ 本文轉錄自 [devilqxect] 看板
作者: devilqxect (我翹課了快來加我~) 站內: devilqxect
標題: [程設] [轉錄] (C 指標) 使徒五小faq
時間: 2007/12/28 Fri 21:39:54
※ 本文轉錄自 [PG] 看板
作者: PG (肝指數上升中∼☆) 站內: PG
標題: [轉錄] [轉錄] (C 指標) 使徒五小faq
時間: 2007/12/28 Fri 19:11:26
※ 本文轉錄自 [ducksteven] 看板
發信人: chitsaou.bbs@snow.ice.ntnu.edu.tw (人生的旋轉木馬) 看板: ducksteven
標 題: [轉錄] (C 指標) 使徒五小faq
發信站: 白色情迷 (2007/12/28 Fri 18:01:59)
※ 本文轉錄自 [chitsaou] 信箱
作者: ducksteven.bbs@ptt.cc (ducksteven.bbs@ptt.cc)
標題: ◇ [心得] 使徒五小faq
時間: 2007/12/28 Fri 17:49:42
作者: ericsk (On My Own) 看板: b93902xxx
標題: [心得] 使徒五小faq
時間: Fri Oct 22 16:26:07 2004
雖然我已經在小秘笈中cover了不少faq...
但還是有一堆寶貝蛋錯一樣的東西, 所以就 post 出來給大家參考..
如果還沒成功擊退使徒的人可以試試看bug是不是出現在這個地方:
一堆人都丟水球或是寄信給我說他自己試sample input/output都對,
為什麼傳上批改魔時卻抱了十顆鴨蛋呢?
看了很多人的 code, 除了鍋貼那種小學生錯誤 (把min/max寫錯) 以外,
都是錯在 sort 的部分...
關鍵在於: 大部分的同學都很乖地用了老師教的 bubble sort (聽說這是片語?)
所以就用了兩層迴圈很歡樂地跑呀跑....
可是都忘了注意到是不是不小心跑出陣列範圍了?
比方說有人就會寫: (其實這好像不是標準的bubble sort ?)
for (i = 0; i < len; ++i)
for (j = len-1; j >= i; --j)
if ( data[j] > data[j+1] ) { /* swap */ }
看出問題了嗎? 當 j == len-1 時, data[j+1] 不就變成 data[len] 了嗎?
元素個數為len的陣列, 其元素是從data[0] ~ data[len-1]的呀...
這樣不就是在sort時多拉了一個不相干的人進來了嗎?
當然結果會全錯囉 (所以根本不是助教心機~)
聽說這種狀況在 VC 下會察覺不出來, 事實上我自己是沒用 VC 實驗過...
但那些 "在自己電腦上用vc編好的執行檔跑沒問題, 批改魔卻不給過" 的同學..
似乎都是疏乎了這些地方, 很明顯的 bug 在 vc上卻隱形了....
所以建議大家上傳到批改魔前能用 gcc 或是 dev-c++ (因為它也是用gcc)
測試一遍, 才能確保執行結果能最接近批改魔
當然啦, 平常寫程式時要很小心自己的邏輯有沒有錯....
希望大家在問問題之前先仔細檢查自己的 code 一遍, 才不會犯粗心之錯 :)
--
之後用陣列 指標的機會愈來愈多, 寫程式也要愈來愈小心才是呀 :)
--
人們總是無法從歷史引以為鑑
我們只記住了名稱及時間,卻沒有記取教訓。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.31.143
推 lapras: 鍋貼被表了~ 140.112.30.119 10/22
推 ericsk:誰教他偷偷婊我是心機助教.... 140.112.31.143 10/22
推 borisC:話說..我錯的根鍋貼依樣耶 140.112.240.3 10/22
推 lapras:那就一起表吧 XD 61.231.106.133 10/22
推 borisC:嗚~~..... 140.112.240.3 10/22
φ PG 轉:從 [ducksteven] 看板,于 2007/12/28 Fri 19:11:26
→ devilqxect 推:借轉~ 1228 21:39
φ devilqxect 轉:從 [PG] 看板,于 2007/12/28 Fri 21:39:54
φ sa072686 轉:從 [devilqxect] 看板,于 2007/12/28 Fri 22:53:10
作者: seanwu at 07/12/29
10807 - Prim
給你一個無向帶權圖 (|V|<=10, |E|<=25)
在這個圖上找兩邊集 E1, E2 使得 E1∩E2=ψ,且E1連通所有的點,E2亦然
問E1,E2中的所有邊總和最小可以是多少?
<Hint E>
E1,E2皆是樹
暴搜E1,剩下的求MST當做E2,暴搜隨便加一點cut就會過了
又聽說這題的測資很爛,所以random選E1,MST做E2也會過,而且更快
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-150.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 07/12/29
718 - Skyscraper Floors
現在有一棟大樓 (高度F<50000000),有 E 部電梯,
每座電梯是從一特定樓層開始Y,往上每X樓都會停
例如(X,Y)=(4,7),則這部電梯會停的樓層有 7,11,15,19,23....
給你 F, E, A, B,問你可不可能從A樓搭到B樓 (可以透過多部電梯轉達)
<Hint E>
X太小直接模擬會TLE,X太大用算的會overflow,所以...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-150.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: gba356 at 07/12/29
雖然學長精華區裡面有詳解了,
還是小小補充一下讀入的小技巧(小小聲)
1. 有關空白和換行的部分,可以使用 scanf("%c") / cin>>c 直接忽略,很安全的。
2. 第一個整數可以用 scanf("%d") / cin>>n( n 為整數 )直接讀入,但是節點中
的數字要自己用字元判斷,因為數字和左括號可能緊連著。另外,負數需納入考量。
3. 有關可能會不小心吃到括號的問題,可以用 ungetc( ) 處理:
以下是 ungetc() 的函式原型:
int ungetc ( int character, FILE * stream );
也就是說,只要不小心讀到左括號,便可以這樣丟回 input ,就好像沒讀到過:
ungetc( '(',stdin );
然後,以下是我的遞迴式作用: < Hint PageDown >
bool TreeRead( int current_sum );
讀入一個左括號起點,右括號結束的子樹,並回傳一布林值表其是否為空樹。
因此判斷一節點是否為葉,則判斷其左子樹和右子樹是否都是空樹就可以了(點頭)
這樣一來一切都變的很愉快了XD
以下節錄 World of Seven - Method to Solve 的 common mistake 說明:
112 - Tree Summing (with help from: Andras Bizco)
You must determine whether in a binary tree of integers, there exists a
root-to-leaf path whose nodes sum to a given integer. This is naturally can
be solved using tree recursion, just beware of the common mistakes below
Common Mistake:
1. "0 ()" is false since "an empty tree has no root-to-leaf paths, any query
as to whether a path exists whose sum is a specified integer in an empty tree
must be answered negatively".
1. 對 "0 ()" 應輸出 "no" 因為 "一個空樹沒有根到葉的路徑",因此任何空樹
有關的詢問都應輸出 "no" 。
2. "-1 (-1()())" is true because the value can be negative
2. 對 "-1 (-1()())" 應輸出 "yes" ,因為節點上的數值可能為負。
3. "77 (77(1()())())" is false because even though we have equal value 77=77
in the root, this value is not a full root-to-leaf path.
3. 對 "77 (77(1()())())" 應輸出 "no" ,因為雖然我們在根節點上有 77=77 ,
但這並不是一條根到葉路徑。
4. "-77 (-77()())" is true, be careful with input parsing
4. 對 "-77 (-77()())" 應輸出 "yes" ,請小心的完成 parsing 。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 218.161.127.117 (中滑一番)
作者: seanwu at 07/12/30
11371 - Number Theory for Newbies
對於任意的正整數 N ,如果我們重新排列它,變成另一個數字 X
則 N-X一定是 9 的倍數。
現在給你 N,請找出 N的兩個排列 a,b,使得 a-b的值最大
注意字首不得為 0
<Hint E>
1200: 2100 - 1002 = 1098 = 9 * 122
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-150.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ devilqxect 推:請用long long做 1230 19:28
→ seanwu 推:呃...當然 1230 20:24
作者: seanwu at 07/12/30
11373 - Happy Birthday
現在有一個半徑為R,高度為H的圓形蛋糕
在上面切兩刀後 (以切痕上的任意兩點定義切痕,這兩點不一定在蛋糕的邊緣上)
蛋糕被分成四塊,問最大塊的體積和最小塊的體積 (這四塊的體積皆>0)
(切痕不一定過圓心)
<Hint E>
令圓心O,圓上兩割點A,B(A->B為逆時針方向),兩切痕交點P
PAB面積 = 扇形OAB - △OAP - △OPB
△OAP中O、A、P的順序不要換,以行列式計算面積,逆時針為正,順為負
△OPB亦然
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-150.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 07/12/30
11374 - Airport Express
給你一個有 N(2<=N<=500) 個點的圖,你要從S到E
圖上有 M(M<=1000) 條路是可以直接走的,以 X Y Z 表示X和Y之間有一條長度Z的雙向路
另外有 K(K<=1000) 條路是需要票的,你只有一張票
問你從S到E的最短路徑? 用票的地點(可能不用,依原題目輸出)? 最短路長?
<Hint E>
令X為任意點,預先算出不需要票時 S->X、E->X的最短路
對於每條需要票的邊 (u,v),S-u-v-E或S-v-u-E即是過此邊的最短路
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-150.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 07/12/30
479 - Irrigation Flow Rates
現在有一部機器 (如原圖所示)
上面有數個加水的源,中間有一些控制閥,下面有數個輸出
控制閥可以把水導往左端,或是右端
每組測資的第一行有n,m,v,代表有n個源,m個輸出,v個控制閥
下一行有n個數字,代表每個水源送出的水量
接下來有n行,每行兩個字串,分別代表水源的名稱、和這個水源會接向哪裡
接下來有m行,每行一個字串,代表輸出端點的名稱
接下來有v行,每行三個字串,分別代表控制閥的名稱、左端接向哪、右端接向哪
再接下來有數行 (以僅有'*'的一行結束)
每行有v個'L'或'R',依序表示每個控制閥的輸出方向
最後如果 n>=9999 時結束
印出每個輸出的水量
<Hint E>
單純的模擬題
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-150.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
▲ seanwu 改@2007/12/30 Sun 18:13:49
作者: ben196888 at 07/12/30
22000 / 30267 = 0.72686424......
還在找有沒有更簡單的分數...
我空虛了... (鞭小力點)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ben196888 from 219-70-252-129.twt1.com.tw (沒有故鄉)
→ gloompisces 推:322 / 433 = 0.7268623.. 1230 23:27
→ gloompisces 呸:不對是322 / 443... 1230 23:28
→ ben196888 推:我在找循環小數... 目前最接近的 : 1231 00:09
→ ben196888 說:3220110 / 4430161 = 0.72686072... 1231 00:09
→ seanwu 推:329/1671 1231 12:55
→ ben196888 推:我嘴腳不爭氣的上揚了... 1231 20:52
→ sa072686 推:嘴腳… 1231 21:25
→ ben196888 說:囧...b5c的錯 哭哭 1231 21:29
→ PG 推:我看不懂QQ 1231 21:33
作者: seanwu at 08/01/12
翻一下我確定的題目
Problem A:
一種密碼是這樣的,分為兩行,第一行是一些費氏數,第二行是一個字串
如果第一行中第i個數是第j個費氏數,就代表字串中第i個字元,會出現在解密後的
字串中的第j個字元
只考慮大寫字母,其餘忽略
如果數列中缺少第j個費氏數,解密後的字串中第j個字元為空白
Problem B:
給你N<=5000個正整數,問其中x+y=z的數對(x,y,z)有多少個?
Problem C:
所謂三正則圖形,是說圖上的每個點的degree都是3
給你N(N<=100),請你構造一個有N個點的三正則圖,若無解輸出Impossible
Problem D:
給你(x,y),找出一組(a,b)使得gcd(a,b)=x且lcm(a,b)=y
若有多組解,請輸出a最小者,若無解則輸出-1
Problem E:
公司有N個司機,早上有N個班次,晚上也有N個班次,
每個司機都要分別負責早上和晚上各一個班次
如果一個司機的總工作時間超過d小時,公司就要付加班費,每超出一個小時r元
請安排每個司機需負責的早晚班次,問公司的總開銷最少是多少
Problem G:
一個最大4*4的盤面 + n個棋子
棋子的移動方式僅限於跳躍,必須跨越一棋子,且目標格需空 (八方向移動)
被跨越的棋子將從棋盤上移除
遊戲目標是讓盤面剩一棋子,問有幾種方法可達成目標
沒有兩棋子處於同位置之測資
Problem H:
我們用(a,b)定義一個數字串為:
33333333333.....333333300000000000....00000000000 有a個3,b個0
給你0<k<1000000,找出一組(a,b)使得對應的數字串為k的倍數
如果有多組(a,b),輸出a+b最小者,如果又相同,輸出a最小者
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-133.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ godgunman 推:從簡體翻成正體真是太白吃了XD 0112 23:20
作者: seanwu at 08/01/12
防雷
※ 引述《seanwu (海恩吳)》之銘言:
> 翻一下我確定的題目
> Problem A:
> 一種密碼是這樣的,分為兩行,第一行是一些費氏數,第二行是一個字串
> 如果第一行中第i個數是第j個費氏數,就代表字串中第i個字元,會出現在解密後的
> 字串中的第j個字元
> 只考慮大寫字母,其餘忽略
> 如果數列中缺少第j個費氏數,解密後的字串中第j個字元為空白
模擬就好了... 小心不要寫錯就是
> Problem B:
> 給你N<=5000個正整數,問其中x+y=z的數對(x,y,z)有多少個?
對於每個z,在排序好的數列中,比較a[p]+a[q]與z的大小關係,可能是p++或q--
注意有相同數字時的處理 .. O(N^2) 1.2sec,又聽說 O(N^2 logN)也可以過
> Problem C:
> 所謂三正則圖形,是說圖上的每個點的degree都是3
> 給你N(N<=100),請你構造一個有N個點的三正則圖,若無解輸出Impossible
因為邊數=n*3/2,所以如果 n%2!=0 就無解 (還有n<4)
從n=4開始,接下來每次加入兩個點x,y,在目前的圖中找出邊(a,b),(c,d),a,b,c,d相異
拆掉(a,b),(c,d),加入(a,x),(b,y),(c,x),(d,y),(x,y)
> Problem D:
> 給你(x,y),找出一組(a,b)使得gcd(a,b)=x且lcm(a,b)=y
> 若有多組解,請輸出a最小者,若無解則輸出-1
如果 y%x!=0 輸出 -1,否則輸出 x,y
> Problem E:
> 公司有N個司機,早上有N個班次,晚上也有N個班次,
> 每個司機都要分別負責早上和晚上各一個班次
> 如果一個司機的總工作時間超過d小時,公司就要付加班費,每超出一個小時r元
> 請安排每個司機需負責的早晚班次,問公司的總開銷最少是多少
大配小,小配大
> Problem G:
> 一個最大4*4的盤面 + n個棋子
> 棋子的移動方式僅限於跳躍,必須跨越一棋子,且目標格需空 (八方向移動)
> 被跨越的棋子將從棋盤上移除
> 遊戲目標是讓盤面剩一棋子,問有幾種方法可達成目標
> 沒有兩棋子處於同位置之測資
要dp,而且每次測資重新dp還不會過...開個 dp[4][4][65536],只做一次
> Problem H:
> 我們用(a,b)定義一個數字串為:
> 33333333333.....333333300000000000....00000000000 有a個3,b個0
> 給你0<k<1000000,找出一組(a,b)使得對應的數字串為k的倍數
> 如果有多組(a,b),輸出a+b最小者,如果又相同,輸出a最小者
質因數2,5只有 0000...0000 那段可以提供,所以 b 就可以決定了
令n=(k除掉所有2,5)*3,由小到大枚舉a,看 10^a % n == 1 <==> 33333...33 % k == 0
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-153.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
▲ seanwu 改@2008/01/12 Sat 22:36:59
作者: sa072686 at 08/01/13
C可以不用那麼麻煩的。
==== 防雷 ====
直接構造:
(1,2)
(2,3)
(3,4)
…
(n-1,n)
(n,1)
(1,1+n/2)
(2,2+n/2)
(3,3+n/2)
…
(n/2,n)
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:漂亮,11268可以用類似的想法解 0113 01:08
→ SRX 推:樓上構造王阿~ 0113 01:46
→ sa072686 推:一二樓都是強者XD 0113 02:05
→ gloompisces 說:不要拿我和真強者比orz 0113 02:07
→ seanwu 推:good 0113 13:06
作者: sa072686 at 08/01/13
它到底是backtracking
還是backtracing?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Robin 推:backtracking 0113 11:07
作者: seanwu at 08/01/13
11393 - Tri-Isomorphism
定義兩個圖形G,H同構:
存在雙射 f:V(G)→V(H),使G上每個頂點對應到H上每個頂點,且
若且唯若邊(u,v)屬於E(G),則邊(f(u),f(v))屬於E(H)
(就是說,兩個圖形在不拆開、撕開的前提下,可以扭轉、翻面、扭曲、變形成一樣)
定義完全圖 K(n):有n個頂點,任兩頂點間皆有邊 (所以有 n*(n-1)/2 條邊)
定義圖G的分解:一個子圖的集合,使圖G的每條邊恰屬於一個子圖
給你n,問你K(n)能不能被分解成三個子圖,且這三個子圖兩兩同構
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-141.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 08/01/18
3D版…
http://youtube.com/watch?v=rzsmacq80Qg&feature=related
果然強者很多啊(遠目)
另外,『打不倒的XXX』這類影片似乎很多?
※ 引述《sa072686 (極大地。)》之銘言:
> ※ 引述《gba356 (瑪利歐)》之銘言:
> > 恕刪....
> > 對了..這個一定要新增一下XD
> > 【 打不倒的空氣人 - 原 MV 】
> > [ http://youtube.com/watch?v=JCS0YTcfjqI ]
> 剛剛找到續作…
> 這傢伙有要幫忙的意思嗎?
> http://youtube.com/watch?v=XvF-UlI2Duo&feature=related
> 喔喔愛弟那段一整個笑翻
> 很想大推一下怎麼丟都是武器能源XDDDDD
> 另外
> http://zion.tfcis.org/~sa072686/mock.wmv
> 看起來挺輕鬆的啊(炸)
> 不過才剛傳,大概…要等個一、兩小時吧?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/01/20
※ 本文轉錄自 [seanwu] 看板
作者: seanwu (【反無名,愛吾民】) 站內: seanwu
標題: [轉錄] ACM分類列表 12/30
時間: 2006/12/05 Tue 15:16:49
※ 本文轉錄自 [PG] 看板
發信人: PG.bbs@cpu.tfcis.org (PG) 看板: PG
標 題: ACM分類列表 12/30
發信站: 2005/11/12 Sat 23:16:36
作者: vgod (我抱抱:P) 看板: Prob_Solve
標題: ACM分類列表 12/30
時間: Wed Dec 29 12:43:30 1999
更新日期:12/30
花了點時間把ACM所有題目作了整理..
當然只是整理出來我已經寫過或看得懂得題目
還有很多題目都未整理,這些都放在文末的地方
也歡迎大家補上這些未整理題目及指正一些錯誤^^
白爛題系列(不需要什麼演算法,單純的直覺想法就行的(其實就是暴力拉^^))
100 The 3n + 1 problem
119 Greedy Gift Givers
139 Telephone Tangles
145 Gondwanaland Telecom
161 Traffic Lights
187 Transaction Processing
264 Count on Cantor
272 TEX Quotes (大白爛)
278 Chess
294 Divisors
344 Roman Digititis
347 Run, Run, Runaround Numbers
382 Perfection
391 Mark-up
414 Machined Surfaces
492 Pig-Latin
495 Fibonacci Freeze
499 What's The Frequency, Kenneth?
537 Artificial Intelligence?
541 Error Correction
543 Goldbach's Conjecture
591 Box of Bricks (大白爛二號)
686 Goldbach's Conjecture (II)
簡單題(比白爛題需要多花些腦筋來想想ㄉ,但也不難)
102 Ecological Bin Packing
105 The Skyline Problem
120 Stacks of Flapjacks
123 Searching Quickly
128 Software CRC
140 Bandwidth
144 Student Grants
202 Repeating Decimals (循環小數)
275 Expanding Fractions (循環小數)
276 Egyptian Multiplication
320 Border
325 Identifying Legal Pascal Real Constants
377 Cowculations
389 Basically Speaking (N進位轉換)
392 Polynomial Showdown
394 Mapmaker
398 18-Wheeler Caravans (aka Semigroups)
399 Another Puzzling Problem (只有唯一一種拼法)
418 Molecules
422 Word-Search Wonder
440 Eeny Meeny Moo
441 Lotto
556 Amazing
575 Skew Binary
576 Haiku Review
581 Word Search Wonder
613 Numbers That Count
殺人遊戲(就是環狀queue而已)
130 Roman Roulette
133 The Dole Queue
305 Joseph
402 M*A*S*H
所有排列的問題
124 Following Orders
146 ID Codes
153 Permalex
195 Anagram
417 Word Index
日期、時間計算的問題
150 Double Time
158 Calendar
300 Maya Calendar
505 Moscow time
518 Time
602 What Day Is It?
比較數學點的(這種題目通常也不難的)
106 Fermat vs. Pythagoras
107 The Cat in the Hat
113 Power of Cryptography
138 Street Numbers
160 Factors and Factorials (階乘)
188 Perfect Hash
190 Circle Through Three Points
256 Quirksome Squares
324 Factorial Frequencies (階乘)
350 Pseudo-Random Numbers
369 Combinations ( C(n,m) )
371 Ackermann Functions
374 Big Mod
386 Perfect Cubes
406 Prime Cuts
408 Uniform Generator
412 Pi
415 Sunrise
427 FlatLand Piano Movers
438 The Circumference of the Circle
504 Random number
516 Prime Land
530 Binomial Showdown
535 Globetrotter
557 Burger
568 Just the Facts
照著題目模擬的題目
101 The Blocks Problem
114 Simulation Wizardry
118 Mutant Flatworld Explorers
141 The Spot Game
339 SameGame Simulation
340 Master-Mind Hints
379 Hi-Q
395 Board Silly
411 Centipede Collisions
559 Squares (II)
573 The Snail
577 WIMP
587 There's treasure everywhere!
589 Pushing Boxes
603 Parking Lot
617 Nonstop Travel
玩撲克牌的問題(ACM這類題還不少^^..都不難就是了)
127 ``Accordian'' Patience
131 The Psychic Poker Player
162 Beggar My Neighbour
170 Clock Patience
178 Shuffling Patience
181 Hearts
462 Bridge Hand Evaluator
555 Bridge Hands
有關資料結構的問題
112 Tree Summing
115 Climbing Trees
514 Rails
540 Team Queue
615 Is It A Tree?
排序的問題
103 Stacking Boxes
299 Train Swapping
612 DNA Sorting
Search的題目(DFS,BFS,Back Tracing皆歸在此類)
125 Numbering Paths
165 Stamps
167 The Sultan's Successors
185 Roman Numerals
193 Graph Coloring
197 Cube
291 The House Of Santa Claus
307 Sticks
310 L--system
317 Hexagon
321 The New Villa
387 A Puzzling Problem
519 Puzzle (II)
529 Addition Chains
532 Dungeon Master
539 The Settlers of Catan
560 Magic
562 Dividing coins
幾何問題(算多邊形面積,判斷線段相交)
109 SCUD Busters
137 Polygons
142 Mouse Clicks
143 Orchard Trees
184 Laser Lines
191 Intersection
270 Lining Up
273 Jack Straws
361 Cops and Robbers
378 Intersecting Lines
688 Mobile Phone Coverage
Greedy的問題
311 Packets
DP問題(動態規劃)
108 Maximum Sum
111 History Grading
116 Unidirectional TSP
136 Ugly Numbers
164 String Computer
165 Stamps
326 Extrapolation Using a Difference Table
348 Optimal Array Multiplication Sequence
413 Up and Down Sequences
437 The Tower of Babylon
439 Knight Moves
443 Humble Numbers
485 Pascal's Triangle of Death
497 Strategic Defense Initiative
531 Compromise
542 France '98
585 Triangles
換零錢的
147 Dollars
166 Making Change
357 Let Me Count The Ways
最短路徑(用Warshall,Dijstra和一些變形)
104 Arbitrage
117 The Postal Worker Rings Once
125 Numbering Paths
157 Route Finding
186 Trip Routing
314 Robot
383 Shipping Routes
393 The Doors
436 Arbitrage (II)
534 Frogger
544 Heavy Cargo
567 Risk
雜項Graph的問題
200 Rare Order (拓樸排序)
274 Cat and Mouse
336 A Node Too Far
345 It's Ir-Resist-Able!
380 Call Forwarding
515 King (find negative cycle)
558 Wormholes (find negative cycle)
563 Crimewave (Max Flow)
572 Oil Deposits
593 MBone
遞迴問題(D&C之類ㄉ)
110 Meta-Loopless Sorts
112 Tree Summing
122 Trees on the level
129 Krypton Factor
155 All Squares
174 Strategy
183 Bit Maps
254 Towers of Hanoi (大數+遞迴)
442 Matrix Chain Multiplication
536 Tree Recovery
574 Sum It Up
586 Instant Complexity
618 Doing Windows
語法檢查的問題(檢查特殊的語言語法)
134 Loglan-A Logical Language
171 Car Trialling
271 Simply Syntax
384 Slurpys
401 Palindromes
大數運算
254 Towers of Hanoi (大數+遞迴)
338 Long Multiplication
424 Integer Inquiry
619 Numerically Speaking
苦工題(題目不難但是output很煩而以)
126 The Errant Physicist
159 Word Crosses
312 Crosswords (II)
337 Interpreting Control Sequences
338 Long Multiplication
381 Making the Grade
400 Unix ls
403 Postscript
614 Mapping the Route
四則運算,運算式剖析的問題
172 Calculator Language
198 Peter's Calculator
327 Evaluating Simple C Expressions
397 Equation Elation
533 Equation Solver
字串處理
148 Anagram checker
156 Ananagrams
175 Keywords
179 Code Breaking
277 Cabinets
306 Cipher
333 Recognizing Good ISBNs
385 DNA Translation
390 Letter Sequence Analysis
409 Excuses, Excuses!
466 Mirror, Mirror
486 English-Number Translator
554 Caesar Cypher
689 Napoleon's Grumble
要想通式或解法的
121 Pipe Fitters
135 No Rectangles
177 Paper Folding
366 Cutting Up
434 Matty's Blocks
571 Jugs
580 Critical Mass
588 Video Surveillance
608 Counterfeit Dollar
616 Coconuts, Revisited
未歸類ㄉ
132 Bumpy Objects
149 Forests
163 City Directions
168 Theseus and the Minotaur
169 Xenosemantics
173 Network Wars
176 City Navigation
180 Eeny Meeny
182 Bonus Bonds
189 Pascal Program Lengths
192 Synchronous Design
194 Triangle
196 Spreadsheet
199 Partial differential equations
301 Transportation
302 John's trip
303 Pipe
304 Department
308 Tin Cutter
309 FORCAL
313 Intervals
315 Network
316 Stars
318 Domino Effect
319 Pendulum
322 Ships
323 Jury Compromise
328 The Finite State Text Processing Machine
329 PostScript Emulation
330 Inventory Maintenance
334 Identifying Concurrent Events
346 Getting Chorded
349 Transferable Voting (II)
388 Galactic Import
396 Top Dog
404 Radar Scopes
405 Message Routing
407 Gears on a Board
410 Station Balance
416 LED Test
419 Matching Meetings
420 Supercomputer Selection, The Sequel
421 Polygonal Puzzle
423 MPI Maelstrom
425 Enigmatic Encryption
500 Table
501 Black Box
502 DEL command
503 Parallelepiped walk
517 Word
520 Append
521 Gossiping
538 Balancing Bank Accounts
550 Multiplying by Rotation
561 Jackpot
564 Gaston
565 Pizza Anyone?
566 Adam's Genes
569 Horse Shoe Scoring
570 Stats
590 Always on the run
592 Island of Logic
600 A Duckpin Tournament
601 The PATH
604 The Boggle Game
606 Keeps Going and Going and ...
607 Scheduling Lectures
609 Metal Cutting
611 Parallel Deadlock
692 BUT We Need a Diagram
--
╭╮
╭═╮ │ ╭═╮ ◆星際個體: 未來最舊小棧
│ │ ┼ │ │ ◆通訊頻率: <<Birding.twbbs.org>> <140.112.251.84>
╰═╯ │ ╰═╯ ◆來源座標: a3.timbl.tcfsh.tc.edu.tw
│
╯
φ PG 轉→到 [TFcis7] 看板 ,于 2005/11/12 Sat 23:16:57
φ PG 轉→到 [TFcis8] 看板 ,于 2005/11/12 Sat 23:17:05
φ masnec 轉→到 [masnec] 看板 ,于 2005/11/12 Sat 23:19:52
φ ming1053 轉→到 [ming1053] 看板 ,于 2005/11/12 Sat 23:25:41
φ brucehsu 轉→到 [brucehsu] 看板 ,于 2005/11/12 Sat 23:40:30
φ YiPo 轉→到 [YiPo] 看板 ,于 2005/11/13 Sun 00:15:11
Ω georgemouse 寄→到 <george.mouse@msa.hinet.net>
φ seanwu 轉:從 [PG] 看板,于 2006/12/05 Tue 15:16:49
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/02/08 Thu 11:58:29
φ sa072686 轉:從 [seanwu] 看板,于 2008/01/20 Sun 01:58:24
φ truth 轉:到 [truth] 看板,于 2009/04/29 Wed 13:37:30
φ jack1 轉:到 [jack1] 看板,于 2010/01/26 Tue 19:18:45
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:13:38
作者: seanwu at 08/01/21
10428 - The Roots
給你一個N次多項式(N<=5),求它的根?
本題的輸入中,對於N次多項式保證有N個相異實根
<Hint E>
我不知道直接去夾會不會出事....不知道有沒有那種兩個根靠的很近的
所以,根據題目,根一定落在相鄰的相對極大和相對極小值之間
找出區間後,二分搜就可以直接抓到「一個」根了
找極值?取導數,遞迴下去解 N-1次多項式,就是了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-157.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 08/01/21
嗯,有鑑於這裡是公開板,而且是個人板
所以自動默認把文發表在這裡的話
應該是可以轉載的。
有鑑於會使用BBS的人不多
老師說想把這板上的文章放在網頁上
讓更多人可以看到這些文章
由於以上的默認,又覺直接轉載不當
故決定在此公告,並已將打包後的資料轉交出去
若日後放置完成後,將在此貼出連結
如果不願意自己所發表的文章被放上去的話
請推文、回文或來信告知,則放置時將略過此作者
所發表的任何文章。
若沒有告知,則在此默認同意轉置於網頁上。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/01/21 Mon 23:30:42
→ gloompisces 推:放在什麼網頁上? 0122 01:46
→ sa072686 推:這我就不知道了…只知會轉成網頁格式 0122 08:24
→ sa072686 推:只是可能會苦了那些被他教到的高一小學弟們XDDD 0122 08:24
→ chensc 推:喔看到樓上我笑了XDDDD 0122 10:57
→ Tommy 推:真糟糕...有幾個人看得懂 seanwu 的 hint 嗎? 0122 11:24
→ gloompisces 推:大推樓上XDD 0122 11:30
→ zenixls2 推:有的我看的懂,有的要親自講解 0122 12:02
→ sa072686 推:說不定過個幾天就連自己都看不懂了(誤) 0122 12:18
→ Tommy 推:其實seanwu知道蠻多好玩的algorithm 0122 12:50
→ silentvow 推:難怪他那麼腦殘 0122 13:18
→ godgunman 推:難怪他這麼腦殘 0122 13:26
→ seanwu 推:五樓,比起卡恩,這樣已經夠多了... 0122 17:22
→ seanwu 推:而且我的hint全部都有提到重點 0122 17:22
→ silentvow 推:樓上難得中肯一回 //卡恩好威 0122 17:48
作者: sa072686 at 08/01/22
為何greedy地塗1、2兩色會wa、而要塗到九種、十種顏色?
實在不太明白…另外,這題有除了建樹以外的更好的方法儲存嗎?
我是用浮動長度陣列…嫌建樹有點麻煩
還有其它好方法嗎?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Robin 推:試試看可找到反例,每層選一點往下畫,有些僅1點有些很多點 0122 22:16
→ Robin 說:但我不知道怎麼看要幾種顏色才夠 0122 22:17
→ seanwu 推:10是我試出來的數字... 另外我猜可能有色數 ~ logN 之類的 0122 22:30
→ seanwu 推:我沒有做tree。由每個邊上只有兩點,又只有O(N)條邊 0122 22:31
→ seanwu 說:而且一條邊的兩端各為一棵子樹 0122 22:32
→ seanwu 說:所以... 其實我的struct存邊不是存點 0122 22:36
作者: ducksteven at 08/01/23
※ 引述《sa072686 (倒數。)》之銘言:
> 3D版…
> http://youtube.com/watch?v=rzsmacq80Qg&feature=related
> 果然強者很多啊(遠目)
> 另外,『打不倒的XXX』這類影片似乎很多?
『ドナルドが倒せない』Ver1.2
http://jp.youtube.com/watch?v=RdtFcpAtLYk
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ducksteven from 140.122.230.73 (台灣師範大學)
作者: sa072686 at 08/01/23
作者 vgod (好想妳...) 看板 Prob_Solve
標題 ACM白爛題列表來了..
時間 Sat Dec 4 19:02:24 1999
───────────────────────────────────────
啦啦啦~~剛才在PTT發現ㄉ:P
沒想到白爛題算一算也有百題ㄌ^^
呵呵~~大家加油ㄅ
作者 ledia ( 黑夜不懂白天 )
標題 [轉錄]◇ ACM簡單題及題目分類
時間 Sat Dec 4 11:42:23 1999
───────────────────────────────────────
※ [本文轉錄自 ledia 信箱]
這是由 smartboy 整理的 供大家參考... :)
題目中譯網頁 http://smile.m1.ntu.edu.tw/cacm/
很簡單
272 TEX Quotes
將 "abc" 換成 ``abc'' ...
591 Box of Bricks
很難找到比上面這兩題還簡單的題目...
494 Kindergarten Counting Game
492 Pig-Latin
587 There's treasure everywhere!
541 Error Correction
573 The Snail
576 Haiku Review
340 Master-Mind Hints
145 Gondwanaland Telecom
401 Palindromes
485 Pascal's Triangle of Death
495 Fibonacci Freeze
499 What's The Frequency, Kenneth? 看懂題目就很簡單 :p (看不懂就跳過去)
400 Unix ls
424 Integer Inquiry 大數加法(正整數)
154 Recycling
102 Ecological Bin Packing
解數學問題(大部分數學都不會太難,總之是數學,跟程式的難度關係不這麼大 ^^;)
106 Fermat vs. Pythagoras
160 Factors and Factorials
254 Towers of Hanoi
557 Burger 算機率
128 Software CRC
374 Big Mod
這兩題差不多
256 Quirksome Squares
616 Coconuts, Revisited
107 The Cat in the Hat
580 Critical Mass
382 Perfection
386 Perfect Cubes
294 Divisors
438 The Circumference of the Circle
190 Circle Through Three Points
這兩題差不多
378 Intersecting Lines
369 Combinations
530 Binomial Showdown
這兩題差不多
求質數
406 Prime Cuts
543 Goldbach's Conjecture
686 Goldbach's Conjecture (II)
這兩題差不多
照著題目要求寫
379 Hi-Q
395 Board Silly
照著題目說明模擬
114 Simulation Wizardry 模擬彈珠臺
127 ``Accordian'' Patience 撲克牌
170 Clock Patience 撲克牌
339 SameGame Simulation
思考:) 想出來程式很簡單
278 Chess
588 Video Surveillance
434 Matty's Blocks
113 Power of Cryptography
排序
299 Train Swapping
612 DNA Sorting
轉圈圈
440 Eeny Meeny Moo
151 Power Crisis
130 Roman Roulette
133 The Dole Queue
---
這幾類的題目可以想想看, 之前沒想過/學過的話比較難...
動態規劃(Dynamic Programming,DP)
108 Maximum Sum
111 History Grading
116 Unidirectional TSP
164 String Computer
348 Optimal Array Multiplication Sequence
357 Let Me Count The Ways
585 Triangles
遞迴(Recusion)
110 Meta-Loopless Sorts
129 Krypton Factor
155 All Squares
167 The Sultan's Successors
較複雜幾何問題
142 Mouse Clicks
137 Polygons
109 SCUD Busters
圖學問題
---
也是不難的題目
394 Mapmaker
105 The Skyline Problem
603 Parking Lot
514 Rails
537 Artificial Intelligence?
575 Skew Binary
408 Uniform Generator
555 Bridge Hands
439 Knight Moves
466 Mirror, Mirror
320 Border
324 Factorial Frequencies
326 Extrapolation Using a Difference Table
350 Pseudo-Random Numbers
344 Roman Digititis
389 Basically Speaking
264 Count on Cantor
152 Tree's a Crowd
187 Transaction Processing
159 Word Crosses
417 Word Index
--
╭╮
╭═╮ │ ╭═╮ ◆星際個體: 未來最舊小棧
│ │ ┼ │ │ ◆通訊頻率: <<Birding.twbbs.org>> <140.112.251.84>
╰═╯ │ ╰═╯ ◆來源座標: ts6-5.tceb.edu.tw
│
╯
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:最好400是白爛題啦.. 0123 22:14
→ chensc 推:竟然沒有我最厲害的10055... 0123 22:20
→ sa072686 推:400還好啊…最好那些幾何題是白爛題啦… 0123 23:04
→ sa072686 推:回二樓:從題號分布來看,也許那個年代沒有10055… 0124 09:09
→ pioneerlike 推:vgod大神...-.- 0124 10:01
→ sa072686 推:不認識… /* 四處亂找的… */ 0124 10:15
→ ducksteven 推:借轉 xdRZ 0124 13:14
φ ducksteven 轉:到 [ducksteven] 看板,于 2008/01/24 Thu 13:14:34
→ SRX 說:神的白爛定義當然跟人不太一樣阿 0124 14:26
→ sa072686 推:推樓上,所以我的白爛定義會比較中肯(點頭) 0124 16:05
→ dust 說:10055當年或許還沒出 XD" 0127 15:38
→ aytawgf 推:借轉~ 1230 04:24
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/12/30 Tue 04:24:29
作者: sa072686 at 08/01/24
雖然還沒…
來看多久後會被爆料?XDDD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: PG at 08/01/24
恭喜達成四位數的目標
學弟好威阿
以後有問題還要多請教你了 XD
--
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://blog.pixnet.net/smartPG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 192.168.4.55 (台狼一中桑靈餓)
→ sa072686 推:謝謝學長XD 如果幫得上忙的話很樂意∼ 0124 10:59
→ Robin 推:竟然在發文的時候被搶先了XD 恭喜恭喜 0124 11:05
作者: Robin at 08/01/24
6191203 388 Galactic Import TFcis•sa... Accepted ANSI C 0.010
2008-01-24 02:48:27
User Statistics
avatar TFcis•sa072686 (sa072686)
SUBMISSIONS PROBLEMS TRIED PROBLEMS SOLVED FIRST SUBMISSION LAST SUBMISSION
5997 1011 1000 2005-09-16 2008-01-24
恭喜SA^^ ACM 破千!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Robin from 203.75.133.9 (沒有故鄉)
→ Tommy 推:好強~ 0124 11:05
→ chensc 推:好威啊 0124 11:37
→ sa072686 推:竟然連第一千題是什麼都被揪出來了(驚) 0124 11:58
→ chensc 說:因為樓上發啊 0124 11:59
→ xlaws 推:學長好威阿阿阿 0124 11:14
→ newmoon 推:最近破千的人愈來愈多了 0124 13:08
→ gba356 推:恭喜學長∼ 0124 14:54
作者: gloompisces at 08/01/24
http://uva.xgd.dk/
給它測資,他會跑出正確的答案
目前裡面有868題可以測試。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.241.8 (台北帝國大學)
→ chensc 推:借轉>///< 0124 12:50
φ chensc 轉:到 [chensc] 看板,于 2008/01/24 Thu 12:50:43
→ godgunman 推:這好強 .. @@ 0124 13:10
→ ducksteven 推:借轉 @___@ 0124 13:13
φ ducksteven 轉:到 [ducksteven] 看板,于 2008/01/24 Thu 13:13:30
φ ducksteven 轉:到 [ducksteven] 看板,于 2008/01/24 Thu 13:15:06
→ sa072686 推:這東西好耶…(筆記)以後看能不能把我所有AC CODE 0124 15:34
→ sa072686 推:都做成這個樣子XD 0124 15:34
作者: sa072686 at 08/01/24
腦殘題一題,標準的「題目要你做什麼,照做就對了」然後你就會AC的題目
題目有點長,寫起來倒是還好,還能輕鬆控制在百行內。
----
Making the Grade
做分數
Mr. Chips has a simple grading scheme that lends itself to automated
computation. You will write a program that will read in his students' grades,
bonus points, and attendance record, compute the student's grades, and output
the average grade point of the class.
Chips 先生有一個簡單的成績表,希望能自動處理分數。你將要寫個程式,
讀入他班上學生的成績、加分以及出缺席記錄,然後決定這個學生的成績,
並輸出這個班的平均成績。
Mr. Chips grades as follows. All tests are based on 100 points and all test
grades are between 0 and 100 points. If he has given more than 2 tests then
he will drop the lowest test grade for each student before computing student
averages. After computing student averages he computes the overall class
average (mean) and standard deviation (sd). The cutoff points for grades are:
an average tex2html_wrap_inline53 one sd above the mean is an A, an average
tex2html_wrap_inline53 the mean but < one sd above the mean is a B, an
average tex2html_wrap_inline53 one sd below the mean but < the mean is a C,
and an average < one sd below the mean is a D.
Chips 先生是這麼計分的:所有的考試滿分為 100,且分數均介於 0 到 100 分之間。
如果他給了超過兩次考試,則他會在計算學生平均分數之前,將最低的一次考試分數
給捨棄掉。在計算完每個學生的平均分數後,他會計算班級平均分數(mean)
以及標準差(sd)。分段標準如下:如果平均大於等於班平均加標準差
(average >= mean + sd)則得到 A。如果平均小於班平均加標準差,但大於等於班平均
(mean <= average < mean + sd)則得到 B。如果平均小於班平均,但大於等於
班平均減標準差(mean - sd <= average < mean)則得到 C。如果平均小於班平均
減標準差(average < mean - sd)則得到 D。
For every two bonus points accrued by a student Mr. Chips increases their
computed average by 3 percentage points. Thus, if students have one bonus
point, their averages are not bumped at all. If they have 4 or 5 bonus
points, their averages are bumped by 6 percentage points, and so on. Bumping
of averages based on bonus points takes place after the grade cutoff points
have been determined.
每兩個加分點數可以增加三分的平均分數。因此,如果一個學生擁有一個加分點數,
則他的平均分數並不會有任何改變。若他們擁有四或五個,則平均分數可以增加六分,
依此類推。加分點數的計算應在計算分段標準之後。
Finally, for every 4 absences, students lose one letter grade (from A to B, B
to C, C to D, and D to F). For example, if they have 9 absences they will
lose two letter grades. Students cannot get a grade lower than F. If students
have perfect attendance, they gain one letter grade; although they cannot get
a grade higher than an A. During his computations, Mr. Chips always rounds
his results to the nearest tenth. In summary, Mr. Chips drops a student's
lowest test grade if more than 2 tests have been administered, computes each
student's average, computes the class mean and sd, adjusts the students'
averages based on bonus points, determines the student's unadjusted grades,
and then adjusts the grades based on attendance.
最後,每四次缺席將會扣去一個等級(從 A 到 B,從 B 到 C,從 C 到 D,或是
從 D 到 F)。舉例,如果他們擁有九次缺席記錄,則將會被扣去兩個等級。
學生的等級不會低於 F。如果他們擁有完美的出席記錄,則可以增加一個等級,
雖然他們不能夠得到比 A 更高的等級。**(這行看不太懂,我是無條件捨去AC的…)**
總而言之,Chips 先生在有兩次以上考試時,會先將每個學生最低的成績捨棄掉,
然後計算每個學生的平均分數,再計算班平均及標準差,再依照加分點數調整學生的
平均分數,再決定每個學生未調整前的等級,最後依出缺席記錄調整等級。
The average grade point (avg grd pnt) of a class is determined by using 4
points for each A, 3 points for each B, 2 points for each C, 1 point for each
D, and 0 points for each F. The total points for the class are added together
and divided by the number of students in the class (which is always at least
2).
一個班的平均成績(avg grd pnt)依照以下方式計算:每個 A 四分,每個 B 三分,
每個 C 兩分,每個 D 一分以及每個 F 零分,然後把每個班的所有人的分數加起來,
然後除以學生數目(至少兩個)。
The standard deviation sd of a list of numbers tex2html_wrap_inline65 is:
標準差的計算方式如下:
sd = sqrt(sum((average[i]-mean)^2)/n)
If the calculated standard deviation is less than 1 then Mr. Chips uses 1 in
place of the standard deviation for grade calculation.
如果標準差小於 1,則使用 1 代替標準差作為計算成績之用。
Suppose Mr. Chips has 5 students and has given 3 tests. The following table
shows the grades, number of bonuses and days absent, plus the computed
average (with lowest test dropped), the adjusted average (with bonus), the
unadjusted grade and the adjusted grade (with attendance). The mean and sd
used to determine letter grade cutoffs are 69.0 and 20.1. For example, for an
unadjusted B, one's average must be greater than or equal to 69.0 and less
than 89.1.The avg grd pnt is 2.2
假設 Chips 先生有五個學生,並且給了三次考試。則以下的表格將列出分數、加分點數
以及缺席的日子,計算後的平均(已捨去分數最低的一次),算出用加分點數調整後之
平均分數,再計算未調整過的等級以及利用出缺席記錄調整後之等級。用來決定
分段標準之班平均及標準差分別為 69.0 及 20.1。舉個例,未調整後的 B 分數必須
大於等於 69.0 且小於 89.1。班平均成績(avg grd pnt)為 2.2。
Input
輸入
The first line contains an integer N between 1 and 10 describing how many of
Mr. Chip's classes are represented in the input. The first line for each
class contains two integers S and T. S is the number of students in the class
(1 < S < 31) and T is the number of tests the students took (1 < T < 11). The
next S lines will each represent one student in the class. A student line
first lists each of their T test scores as integers between 0 and 100
inclusive, and then lists their bonus points and their number of absences.
第一行包含一範圍在 1 至 10 的整數 N,表示 Chips 先生有幾個班。每個班的第一行
會有兩個整數 S 及 T。S 是學生數,T 是考試數。接下來的 S 行每行代表一個學生。
每行前 T 個數字為該學生 T 次考試的分數,為 0 至 100 間(含頭尾)的整數。
接著是他們的加分點數以及他們缺席次數。
Output
輸出
There should be N+2 lines of output. The first line of output should read
MAKING THE GRADE OUTPUT. There will then be one line of output for each of
Mr. Chip's classes showing that class's average grade point. The final line
of output should read END OF OUTPUT.
必須有 N+2 行輸出。第一行為 MAKING THE GRADE OUTPUT,接著每個班輸出一行
包含該班級的平均成績。最後一行必須為 END OF OUTPUT。
----
什麼?要解法?
題目本身就是解法。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/02/06 Wed 12:09:31
▲ sa072686 改@2008/02/06 Wed 12:33:09
作者: sa072686 at 08/01/25
終於肯一次顯示同Volumn的所有題目啦
之前都要一直選頁,麻煩死了…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ silentvow 推:希望他把submit頁面改回來 ... 0125 02:55
→ sa072686 推:希望有AC題目列表。 // 希望有生之年等得到… 0125 03:03
→ sa072686 推:改版之慢有目共睹(茶) 0125 03:03
作者: ducksteven at 08/01/26
http://nana.tfcis.org/~chitsaou/acmXD/
XDrz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ducksteven from 140.122.230.73 (台灣師範大學)
→ sa072686 推:啊這XDrz 這這這樣不太好吧XDrz 0126 09:43
→ sa072686 推:是、是說,應該是「壯」觀? 0126 12:29
→ ducksteven 推:啊錯字 XD 謝謝 0126 13:28
→ Tommy 推:怎麼沒有我 QQ 0131 12:53
作者: seanwu at 08/01/26
951 - The Pieces of the Puzzle
給你一些由1*1方塊組成的拼圖,問能不能拼成指定的圖形,
拼圖可以旋轉+翻轉,拼圖不能重覆使用且所有的拼圖都要用到
■ ■ ■■■
■ ■ ■ ■
■ ■ ■■■
■ ■ ■
■■■■■
<Hint E>
dfs,決定每個格子要由哪一塊拼圖來覆蓋
一開始可以預先算好每個格子能放的拼圖有哪些,可以減少枚舉的數量
還有先預先檢查拼圖的重覆,包括兩塊拼圖重覆及旋翻轉後重覆等
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-130.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 08/01/26
五分鐘後開始 :P
http://www.hsin.hr/coci/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-147.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: sa072686 at 08/01/26
某文中說,「思考題,想出來後程式很簡單。」
那麼不是我太笨,就是250行還算很簡單。
該死的幾何…寫了五六個小時有
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/01/27
到底怎樣才能看每一題解題狀況的圓餅圖啊…
現在都要特地開Opera看…Orz
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:Firefox 應該有支援 svg 吧 @__@? 0127 17:43
→ ducksteven 推:Safari 可以看喔 (毆) 0127 17:43
→ chensc 推:我的可以看耶 XD http://0rz.tw/533zi 0127 17:52
→ sa072686 推:樓上欺負我(淚奔) 0127 17:56
→ seanwu 推:把cookies清掉就可以了 0217 11:34
作者: sa072686 at 08/01/28
唔、四處找的…(汗)整篇拿過來應該沒關係吧?
原封不動的話,在哪轉也就很明白了,嗯…
----
作者 DJY (黑色閃電) 站內 ICE_Program
標題 [轉貼]acm題目分類
時間 Mon Oct 20 20:14:53 2003
------------------------------------------------------------
Graph Theory:
------------------------------------------------------------
- Topological Sorting:
00200 Rare Order Find the correct ordering of an alphabet
10305 Ordering Tasks Provide some ordering of tasks
- Trees
00112 Tree Summing Navigate through a LISP encoded binary tree
00115 Climbing Trees Figure out the relationships between people
00122 Trees on the level Produce level-order traversals of binary trees
00615 Is It A Tree? Determine whether or not the graph is a tree
10308 Roads in the North Find the longest distance (diameter) of a tree.
- Eulerian Graphs
00117 The Postal Worker... Minimize a cost tour for a postman
(Simplified Chinese Postman problem)
- Cycles
00125 Numbering Paths Count number of paths in a directed graph
00626 Ecosystem Find/Print all cycles of size 3
- Polygon Intersection
00137 Polygons Find the XOR of two polygon areas
- Maximum Flow
00563 Crimewave Solve the escape problem
- Minimum Spanning Trees
10307 Killing Aliens in Bor.. Find least cost way to assimilate all
------------------------------------------------------------
Dynamic Programming:
------------------------------------------------------------
- Memotization
00101 The 3n + 1 Problem Find the size of the longest sequence
00371 Ackermann Functions Find the size of the longest sequence
00547 DDF Output the longest Decimal-Digit Factor
- Longest Asc/Desc Subsequence
00103 Stacking Boxes Find the longest desc. subsequence in n-dims.
00111 History Grading Find marks for a chronologic ordering question
- Longest Common Subsequence
00531 Compromise Find the LCS for two texts
- 1D Minimize/Maximize
00222 Budget Travel Minimize the cost of a road trip
- 2D Minimize/Maximize
00104 Arbitrage Find a successful arbitrage sequence
00108 Maximum Sum Find the sub-rectangle with largest sum
00116 Unidirectional TSP Find the minimal path through a 2D field
00585 Triangles Find the largest triangle in a trianglular field
00590 Always on the run Find the minimum cost for flying city to city
00526 String Distance & Transform... Find the string distance and path
10285 Longest Run on a Snowboard Find the longest snowboarding path in a 2D
field
10306 E-coins Find minimum number of 2D coins to get certain sum
- Change Making
00147 Dollars Count # of ways to make change
------------------------------------------------------------
Modelling/Simulation:
------------------------------------------------------------
- Object State Modelling
00102 The Blocks Problem Manipulation of blocks with robot arm
- Planar World Modelling
00114 Simulation Wizardry Simulate a idealized pinball machine
00118 Mutant Flatworld Explorers Simulate robots moving on a plane
00407 Gears on a Board Simulate gears on a plane
00411 Centipede Collisions Simulate centipedes on a plane
00824 Coast Tracker Simulate coastal robots on a plane
- Geometric Structure Modelling
00201 Squares Count the number of squares in a grid
00209 Triangular Vertices Model triangular coordinates
- Record Keeping / Bookkeeping
00119 Greedy Gift Givers Keep track of everyone's net gain/loss
00123 Searching Quickly Keep track of keywords in titles of books
00139 Telephone Tangles Keep track of telephone bill
00145 Gondwanaland Telecom Keep track of telephone bill
00405 Message Routing Keep track of where routing goes
00603 Parking Lot Keep track of cars in a parking lot
00645 File Mapping Print out a file directory
- Josephus Rings
00130 Roman Roulette Find the survivor
00133 The Dole Queue Find the order of selected people
00144 Student Grants Find the order of students getting grants
00151 Power Crisis Find the step such that a certain region
surviv
es
- Card Games
00127 "Accordian" Patience Simulate Accordian Patience (Solitaire)
00131 The Psychic Poker Player Determine the best Poker hand
00451 Poker Solitaire Evaluate some Poker hands
00462 Bridge Hand Evaluator Evaluate some Bridge hands and suggest a
mo
ve
00635 Clock Solitaire Count winning Clock solitaire games
- Board Games
00141 The Spot Game Figure out who wins the Spot game
00633 A Chess Knight Figure out how many moves for a dynamic knight
00647 Chutes and Ladders Figure out who wins a game of Chutes and
Ladder
s
10284 Chessboard in FEN Figure out number of unattacked squares
- Parsing:
00134 Loglan-A logical Language Check to see if sentences are in the
gramma
r
00171 Car Trialling Check to see if sentence is valid instruction
00620 Cellular Structure Identify the type of organism.
00622 Grammar Evaluation Evaluate/Parse a [+,*,(,)] math expression
- Calendar/Time Modelling
00150 Double Time Convert between two calendars
00419 Matching Meetings Find suitable meeting times for department
- Sports Games
00584 Bowling Calculate a bowling game score
- Data Type Modelling
00540 Team Queue Implement a efficient TeamQueue (buddy system)
- Print/Font Formatting
00403 Postscript Implement "fonts" with formatting
00416 LED Test Determine if there is a valid LED countdown
00426 Fifth Bank of Swamp County Output the bank record sorted in 3 columns
00433 Bank (Not Quite O.C.R) Check LED version of bank number
- Text Manipulation
00373 Romulan Spelling Fix some spelling mistakes
00444 Encoder and Decoder Encode/Decode according to certain rules
00464 Sentence/Phrase Generator Generate phrases according to grammar
rules
00625 Compression Compress some source code
00628 Passwords Rule replacement
00641 Do the Untwist Untwist an encrypted string
- Assembler Modelling
00448 OOPS! Convert hexcode to assembly code
------------------------------------------------------------
Arithmetic:
------------------------------------------------------------
- Fractions
00202 Repeating Decimals Figure out length of repeat period of fraction
00834 Continued Fractions Convert fraction to a continued fraction
- Pythagorean Triples
00106 Fermat vs. Pythagoras Generating/Counting Pythagorean triples
- Additive/Multiplicative Series
00107 The Cat in the Hat Calculate the number of cats in the hat
00138 Street Numbers Find special house numbers
10302 Summation of Polynomials Find the sum of the first N cubes
- Exponentiation/Logarithms
00113 Power of Cryptography Find integer roots of large numbers
00545 Heads Find 2^-n = x.xxxE-y for large n
- Polynomials
00126 The Errant Physicist Multiply polynomials of x and y
00586 Instant Complexity Calculate the complexity of a program
- Long Division/Multiplication
00128 Software CRC Calculate the CRC value for a string of
text(di
vide)
00550 Multiplcation by Rotation Find shortest factor with
rotamult-property
00465 Overflow Determine whether numbers overflow an int
- Combinatorics:
00135 No Rectangles Find a suitable block design
00146 ID Codes Find the next permutation
00153 Permalex Convert between indices and words sorted in lex.
or
der
00580 Critical Mass Count number of binary strings with 3
consecuiv
e 1's
00527 The partition of a cake Count the number of partitions made by
cake
cutting
10294 Arif in Dhaka (First Love pt2) Count the number of necklace/bracelets
of size N with T colors
10303 How Many Trees? Count the number of binary trees (Catalan
numbe
rs)
- Primes/Factorization
00136 Ugly Numbers Find the 1500th ugly number factors(2,3,5)
00583 Prime Factors List the prime factorization of a number
effici
ently
10311 Goldbach and Euler Determine if a number is sum of 2 primes
- Probability
00542 France '98 Figure out the probability that a team will win
10288 Coupons Figure out probability that you will win
- Number Bases
00619 Numerical Speaking Convert between words and numeric index
- Partitioning
00668 Parliament Find maximum distinct partition product
------------------------------------------------------------
Direct:
------------------------------------------------------------
- Counting:
00102 Ecological Bin Packing Find minimum number of bottles to move
00154 Recycling Find station that minimizes items moving
00278 Chess Count number of non attacking pieces
00413 Up and Down Sequences Count the number of up and down runs
00613 Numbers that Count Find out if numbers are self-inventorying
00637 Booklet Printing Figure out which pages go where in a fold-over
booklet
00696 How Many Knights Find max # of knights to place on n*m board
10293 Word Length and Frequency Count length and freq of words
10300 Ecological Premium Count premiums for farmers
- Sorting:
00110 Meta-Loopless Sorts Produce Pascal programs that do sorting
00120 Stacks of Flapjacks Sort a stack of flapjacks using flips
00514 Rails Sort a train using a station
00538 Balancing Bank Accounts Figure out who owes who what
00612 DNA Sorting Sort some DNA based on some trait
00632 Compression (II) Perform a Burrows Wheel Transform
- Recursion
00155 All Squares Count number of squares surrounding a point
00432 Modern Art Generate some modern triangular art
- Palindromes
00401 Palindromes Determine the type of the word
- String manipulation/comparision
00644 Immediate Decodability Determine if the code set is immediately
de
codable
------------------------------------------------------------
Geometry:
------------------------------------------------------------
- Z-Buffering
00105 The Skyline Problem Construct a skyline vector
00142 Mouse Clicks Determine which windows was clicked
- Convex Hulls
00109 SCUD Busters Determine regions with power after a war
00132 Bumpy Objects Find a stable position for shapes
- Circles
00121 Pipe Fitters Calculate the most pipes that can fit
00149 Forests Determine viewable trees in an infinite forest
10301 Rings and Glue Determine number of intersecting circles
- Points in Polygons
00143 Orchard Trees Determine numbers of points in triangles
00634 Polygon Determine if a point is in a polygon
- Distance
00152 Tree's a Crowd Generate a histogram of tree distances
10310 Dog and Gopher Find out if the golpher can get to hole
- Art Gallery Problem
00588 Video Surveillance Determine if a camera can see all walls
- Spheres/Globes
00535 Globetrotter Find distance between two points on earth
- Polar/Azimuth Coordinates
00404 Radar Scopes Figure out warnings for planes using radar
- Area of polygons
00428 Swamp County Roofs Calculate area of trapezoidal roof tiles
- Pure Geometry
10283 The Kissing Circles Determine areas associated with circles in
circ
les
10286 Trouble with a Pentagon Find the length of largest square in a
pent
agon
10287 Gifts in a Hexagon Box Fit circles inside a regular hexagonal box
- Center of gravity
10291 Cut the Legs Cut a table so that it balances
- Line intersection
00834 Water Falls Figure out where water will land
----------------------------------------------------------------------
Searching:
----------------------------------------------------------------------
- Constraint Satisfaction
00124 Following Orders Find all consistent orderings
00129 Krypton Factor Find special "hard" sequences
- Brute Force Searching (no pruning)
00140 Bandwidth Check all 8! sequences
00418 Molecules Find the largest molecule that can be made
00565 Pizza Anyone? Satisfy all topping requests if possible
00616 Coconuts, Revisited Find the maximum number of people on island.
00629 Test Find all "non different" sets
00638 Finding Rectangles Find all rectangles in alphabetical order
- Search with pruning
00624 CD Find set of songs which fit best on tape
10309 Turn the Light Off Find min. # of pushes to turn off lights
- Anagrams
00148 Anagram Checker Find possible anagram sentences from
dictionary
00630 Anagrams(II) Find possible anagrams for words
00642 Word Amalgamation Find possible anagrams for words
- Word Searches
00581 Word Search Wonder Find words in a grid
00409 Excuses, Excuses! Find key "excuses" in a sentences
00425 Enigmatic Encryption Find the password from a text
00604 The Boggle Game Find matching words in 2 Boggle boards
- Greedy Algorithms
00410 Balance Station Minimize Imbalance for a centrifuge
00100-00155
--
╭╢師大資訊。白色情迷╟┬─ ☉ Origin : snow.ice.ntnu.edu.tw
├╨→ 140.122.77.49←╜╰─ ☆ From : rise.dorm1.ntnu.edu.tw
├→ cong 推:DOMO感謝∼∼∼
03/10/21
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:疑 原來有這個 XDD 0128 19:51
作者: gloompisces at 08/01/28
problem F : The Sultan’s Feast
你想舉辦一個宴會,有可能出席的有N個人 (N<=100)
但是你對每個人的喜歡程度不同,從 -10000 到 10000 不等
而每個客人都有各自的朋友,如果他出席,他會把他所有的朋友都拉來
Input 的第一行是 T (T<=100) 代表有T組測資
每一組測資的第一行是N
接下來有N行,每一行的第一個數字是你對那個人的喜歡程度
第二個數字R代表他有R個朋友,接下來的R個數字是他的朋友的編號
你希望邀請能讓"喜歡程度"最大的一些人,問最大的喜歡程度是多少
如果不管你怎麼邀請喜歡程度必<0,輸出 : Alas, sultan can't invite anyone!
<Hint E>
backtracking
我有另外建一個表存 "如果某人被邀請,有誰會一起來"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.226 (不失敗大學)
作者: sa072686 at 08/01/28
嗯,有分類、有標示難度。
不過,似乎都不會太難…所以也不太多?
http://ww.acmbeginner.tk/
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ sa072686 推:不對,它不太中肯,最好10023適合入門…有些也不好想。 0129 12:12
→ gloompisces 推:10023...我到現在還沒做 0129 12:24
→ gloompisces 說:好吧或許我太弱了orz 0129 12:24
作者: sa072686 at 08/01/30
又被它害死了…花了好幾個小時,結果把strtok()拿掉,自己手動分析就過了…
整人啊Orz
是說,到底它為什麼在某些題目會出事啊?
有些會、有些不會,至今仍找不到合理的原因解釋…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:UVa OnlineJudge 神秘地帶 0130 00:50
→ gba356 慫恿:邁向 stringstream 吧(爆) 0130 11:31
→ chensc 推:不能再同意樓上更多 0130 15:57
→ zenixls2 推:全國賽我就是這樣爆的.... 0130 16:25
作者: sa072686 at 08/01/30
看了好久都看不懂,這題的題目到底在講什麼…?
完全搞不清楚它到底要求些什麼…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/01/30
幾何題!因為竟然推得出公式,感動之餘就po一下…
難度?連我都解得出來,當然不會太難…
----
Globetrotter
As a member of an ACM programming team you'll soon find yourself always
traveling around the world: Z詉rich, Philadelphia, San Jos眤, Atlanta,...
from 1999 on the Contest Finals even will be on a different continent each
year, so one day you might get to Japan or Australia.
身為一個 ACM 隊伍的一員,你發現你總是旅行於世界各地: Z詉rich、Philadelphia、
San Jos眤、Atlan …等等。從 1999 年起,你甚至會發現每年決賽的地點都在不同的
大陸上。所以也許有一天,你必須到日本或是澳洲去。
At the contest site it would be interesting to know how many miles you are
away from home. For this sake, your job is to write a program to compute the
geographical distance between two given locations on the Earth's surface.
你對於比賽地點究竟離家多遠很感興趣。因此,你想寫一個程式計算在地球表面上,
兩個不同地點在地理上的距離為何。
We assume that the Earth is a perfect sphere with a radius of exactly 6378
km. The geographical distance between A and B is the length of the geodetic
line segment connecting A and B.
我們假設地球是個半徑 6378 公里的完美圓球體。A 和 B 兩點間的地理距離為地球上
所測量出來的線段的長度。
The geodetic line segment between two points on a sphere is the shortest
connecting curve lying entirely in the surface of the sphere.
這球體上兩點間的測量距離為一恰落在球面上的曲線。
The value of pi (π) is approximately 3.141592653589793.
圓周率約為 3.141592653589793。
Input Specification
輸入
The input file will consist of two parts: a list of cities and a list of
queries.
輸入檔包含兩個部份:城市列表以及詢問列表。
City List
The city list consists of up to 100 lines, one line per city. Each line will
contain a string ci and two real numbers lati and longi, representing the
city name, its latitude and its longitude, respectively.
城市列表最多一百行,一個城市一行。每行有一個字串 ci 以及兩個實數 lati 和
longi,表示城市的名字,緯度和經度。
The city name will be shorter than 30 characters and will not contain
white-space characters. The latitude will be between -90 (South Pole) and +90
(North Pole). The longitude will be between -180 and +180 where negative
numbers denote locations west of the meridian and positive numbers denote
locations east of the meridian. (The meridian passes through Greenwich,
London.)
城市的名字將短於 30 個字元,並且不會包含空白字元。緯線在 -90 度(南極)
到 +90 度(北極)之間,經度則在 -180 度至 +180 度之間,負數代表在國際換日線
西邊,正數則表示在國際換日線東邊(國際換日線通過英國倫敦格林威治天文臺)。
The city list will be terminated by a line consisting of a single ``#".
城市列表將以僅包含一 '#' 字元的一列為結束。
Query List
Each line will contain two city names A and B.
每行包含兩個城市名 A 和 B。
The query list will be terminated by the line ``# #".
詢問列表將以一行 "# #" 為結束。
Output Specification
For each query, print a line saying ``A - B" where A and B are replaced by
the city names. Then print a line saying ``x km" where x is replaced by the
geographical distance (in km) between the two cities, rounded to the nearest
integer.
對於每一個詢問,輸出一行 "A - B",A 和 B 則代換為城市的名字。接下來輸出一行
"x km",x 則代換為兩城市地理上的距離(以 km 為單位),四捨五入到整數位。
If one of the cities in the query didn't occur in the city list, print a line
saying ``Unknown" instead.
如果詢問中有任一城市並未在城市列表中出現,則輸出一行 "Unknown"。
---- 分隔線 ----
我的方法是先算出每個城市的座標,再以直線距離公式得到距離。
則將兩城市連到球心,將兩城市視為在同一圓上,以球半徑為圓半徑,
以餘弦公式配合兩點直線距離求得角度,再以此計算圓弧長則可得解。
至於座標,以緯度可求得z座標,以及該緯線的半徑。之後可由經度一次求得x, y。
過程只要會換算弧度、會距離公式、會用反三角函數又會餘弦公式就可解了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/01/31
呼呼,我發現不只這樣子…
它還可以搜尋想要的題型呢,比如說想找DP就打DP上去…
真是不錯。
※ 引述《gloompisces (變成了恆星 永不會變)》之銘言:
> http://uva.xgd.dk/
> 給它測資,他會跑出正確的答案
> 目前裡面有868題可以測試。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/01/31
嗯,不難做的模擬題,沒什麼特殊情形。
----
WIMP
A window manager takes care of the details of creating, displaying, moving,
and resizing a collection of windows in a graphical user interface. It also
handles input events (like mouse clicks) related to these window management
tasks. Your project is to write a WIndow Manager Program (WIMP).
一個視窗管理程式必須要能夠處理使用者圖形介面上的,許多視窗的產生、顯示、移動、
以及變更大小。它必須能夠處理與視窗相關的輸入的事件(像是滑鼠點擊)。你的專案
是要寫一個視窗管理程式(WIMP)。
The WIMP controls a screen of size $1024 \times 1024$ (measured in pixels),
with the upper left-hand pixel at (0,0). The x-coordinates range from 0 at
the left edge of the screen to 1023 at the right edge, and the y-coordinates
range from 0 at the top of the screen to 1023 at the bottom. All coordinates
are integers. The user can create and manipulate rectangular windows by
moving the mouse and clicking the mouse button. A window has 4 distinct areas:
WIMP 控制一個大小為 1024 * 1024 像素大小的畫面,左上角為(0,0)。X 座標範圍
自左至右為 0 到 1023,Y 座標則是自上至下 0 到 1023。所有座標皆為整數。使用者
可以透過移動和點擊滑鼠來開啟和處理這些矩形視窗。一個視窗有四個區域:
Area Location and Size
Close box upper left hand corner of the window ( $25 \times 25$ pixels)
Zoom box upper right hand corner of the window ( $25 \times 25$ pixels)
Motion bar fills the top 25 pixels of the window, excluding zoom and close
boxes
Data area remainder of the window
關閉按鈕:左上角 25 * 25 大小的區域
縮放按鈕:右上角 25 * 25 大小的區域
標題列:除了關閉按鈕及縮放按鈕外,佔據最頂端的 25 像素的區域
資料區:視窗中剩餘的區域
A window will always be at least $51 \times 26$ so that all four areas are
nonempty. Each window is assigned a unique integer identifier, starting at 0
(the first window created has id 0, the second one created has id 1, and so
on). Identifiers are not reused.
一個視窗至少有 51 * 26 的大小,因此四個區域皆不為空。每個視窗將會被賦予一個
唯一的整數代表身份,從 0 開始(第一個開啟的視窗為 0,第二個為 1,依此類推)
並且這些不會被重覆使用。
The WIMP accepts the following events:
WIMP 接受以下的事件:
Event Meaning
DN x y user pressed mouse button at location (x,y)
UP x y user released mouse button at location (x,y)
AT x y user moved mouse to location (x,y)
CR l t r b create new window with positions left, top, right, and bottom
RE redraw all windows from back to front
ZZ exit the WIMP
DN x y 使用者在(x,y)按下了滑鼠左鍵
UP x y 使用者在(x,y)放開了滑鼠左鍵
AT x y 使用者將滑鼠移到了(x,y)
CR l t r b 在 left,top,right,bottom 處開啟一視窗。
RE 自後而前重繪所有視窗。
ZZ 離開 WIMP
The values x, y, l, t, r and b are all nonnegative integers within the
dimensions of the screen.
x、y、l、t、r、b 皆為非負整數,並且在畫面範圍中。
The CR event always generates a properly formed window. Because windows can
overlap, on a RE event they must be redrawn from back (least recently on top)
to front (most recently on top). This ensures that they appear correctly
overlapped to the user.
CR 事件代表開啟一個視窗。由於視窗可以重疊,在 RE 事件時必須從後方(最久沒被
放到最前面)至前方(最晚被放到最前面)重繪一次所有視窗。這確認它們被正確地
重疊。
It is the job of the WIMP to keep track of all windows, even if some are
overlapping. The rules it uses are:
WIMP 的工作是管理所有視窗,即使它們有些已被蓋住。規則如下:
1.
A new window is always completely visible (`on top' of all other windows).
一、新視窗總是能被完整地顯示(在所有視窗的最前方)。
2.
A DN event anywhere on a visible part of a window selects that window and
puts it on top, making the entire window visible. A DN event that is not in
the visible part of any window does not affect the currently selected window.
二、DN 事件能讓被點選到的視窗移到最前方,使得整個視窗都是可見的。對於沒有被
點選到任何可見部份的視窗不產生任何影響。
3.
Closing and zooming both require a DN event followed by an UP event in
the appropriate box. There may be one or more AT events in between. The DN
and UP events must be in the same box, but they don't have to be in the exact
same location.
三、關閉和縮放都必須要有一個 DN 事件接著一個 UP 事件,點在同一個按鈕上。也可能
會有一個或多個 AT 事件在兩事件之間。DN 和 UP 事件必須在同一個按鈕上,但不一定
要在同一個點。
4.
Closing a window removes it from the screen.
四、關閉一個視窗,將會從畫面中移除它。
5.
Zooming is a toggle that either makes the window occupy the entire
screen, or returns the window to its initial size.
五、縮放可讓一個祝窗佔據整個畫面,或是將其恢復至初始大小。
6.
A DN event in the motion bar allows the window to be relocated. The
motion stops with an UP event. The window moves the same distance and
direction that the mouse moved between the DN and UP events.
六、DN 事件如果點在標題列,則可讓該視窗移動。移動將在 UP 事件中結束。在這期間
視窗將移動與滑鼠移動相同的方向以及距離。
7.
AT events while moving a window must output the window's current
position. AT events at any other time do not generate any output.
七、在移動中,AT 事件必須回報視窗目前位置。其它狀況下 AT 事件不必輸出任何東西
8.
Windows occupying the full screen cannot be moved.
八、全畫面狀態下的視窗不能移動。
9.
Windows can partially move off the visible screen.
九、視窗可以有部份移出畫面。
10.
AT events happen.
(這句看不懂,基本上不影響解題…)
Input
The input file contains one or more lines, each of which contains a single
event. A ZZ event signals the end of the input. The events are all part of
the same session.
輸入會有一或多行。每行是一個單獨的事件,以 ZZ 事件為輸入結束。所有事件都是
同一次執行。
Output
For each user action, output the corresponding message. On an RE event, the
location of all windows must be output from back-to-front using the format
shown.
對於使用者每個動作,輸出相對應的訊息。在 RE 事件,所有視窗都必須依後至前的順序
一一輸出它們的位置。
Action Message
Create window ` Created window n at l, t, r, b'
開啟視窗
Select window ` Selected window n'
選取視窗
Close window ` Closed window n'
關閉視窗
Move window ` Moved window n to l, t, r, b'
移動視窗
Zoom window ` Resized window n to l, t, r, b'
縮放視窗
Redraw ` Window n at l, t, r, b'
重繪
----
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:聽說有人明天要考試= =+ 0131 13:55
→ sa072686 推:正要去看考場…啊哈哈哈(心虛) 0131 14:17
作者: devilqxect at 08/01/31
加油!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by devilqxect from 59.104.150.253 (種子電信)
→ sa072686 推: 加油! 0131 21:54
→ hugojay 推:加油! 0131 22:09
→ ducksteven 推: 加油! 0131 22:16
→ zenixls2 推:加油 0131 22:30
→ xlaws 推: 加油! 0131 22:30
作者: zenixls2 at 08/02/03
http://projecteuler.net/index.php?section=about
可以用mathmatica 和matlab寫
反正只要做出解即可
全數學題
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 192.168.4.20 (TFcis 校內寒訊)
→ PG 推:借轉 0203 08:57
φ PG 轉:到 [PG] 看板,于 2008/02/03 Sun 08:57:24
作者: sa072686 at 08/02/03
借轉XD
以下為gba356學弟譯自英文維基百科的,原出處為弗基斯特的programming板。
----
以下是剛剛整理完成的,我將他PO在這:
=======
=約瑟夫問題=
=======
約瑟夫問題(或約瑟夫排列)是一個資訊科學和數學的理論問題。
有n個帶處決的人圍成一個圓圈,當一個人被處決時,往下數過k-1個人,並處決第k
人。重複此步驟,直到只剩一人留下並獲得自由。
我們的任務是給定n和k的值,求出生存者的編號。
==歷史==
這個問題是源自於弗拉維奧.約瑟夫斯(Flavius Josephus),一個一世紀的猶太
歷史學家。根據傳說,他和四十名同夥的士兵被羅馬士兵困在一個洞穴中。他們決定為成
一個圈,用間格為三的方式一個一個的自殺。但約瑟夫並不想死,他想和他的隨從投降羅
馬大軍。
但事實上,他們並不是取間隔為三輪流自殺的。他們也沒有站成一個圈或是正方形
,這個傳說也沒有告訴我們,約瑟夫擁有高人一等的代數能力。我們唯一知道的是,約瑟
夫活下來了,但原因可能是運氣好或是神的庇祐,或可能是剩下的人投降羅馬人了。
==問題解==
我們假設每數兩人便處決一人,也就是說,k=2。我們以遞迴表示我們的解法,令f(n)表
示在最初n人情況下的生存者。第一次走完圈圈時,編號偶數的人都會死,第二次是新的
第二個人處決,然後是四次…以此類推。 若初始人數n為偶數,則跑完一次圓圈位置x的
人,原來是站在2x-1。因此我們得到以下遞迴式:
f( 2n ) = 2f( n ) - 1
又若初始人數n為奇數,則每次站在一號的人都會死。因此目前站位置 x 的人,原先站在
2x+1,因此我們有以下遞迴關係:
f( 2n+1 ) = 2f( n )+1
因此我們對n和f(n)的關係建表:
n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
f(n) 1 1 3 1 3 5 7 1 3 5 7 9 11 13 15 1
因此我們可以得到f(n)=1若n是二的次方。因此如果我們善取m和l,且
0 <= l < 2^m
則
f( n ) = 2l+1
表中的值滿足了以上的式子。但數學需要嚴謹的證明,以下我們給了一個以歸納法完成
的證明:
====
=定理=
====
若n = 2^m + l 且 0<=l<2^m,則f( n ) = 2l + 1。
====
=證明=
====
這裡我們使用的是對n的完全歸納法。已知n=1時等式成立,我們只需要分別討論n是
奇數和偶數的情況就可以了。
1.若n是偶數,則選定l[1]和m[1],使得n/2=c^m[1]+l[1]且 0<=l[1]<2^m[1]。
注意,l[1]=l/2。我們得到f(n) = 2f(n / 2) - 1 = 2((2l[1]) + 1) - 1 = 2l + 1,且
此式滿足我們的假說。
2.若n是奇數我們取l[1]和m[1],滿足(n-1)/2=2^m[1]+l,且滿足 0<=l[1]<2^m[1]。
注意l[1]= (l - 1) / 2。因此同理我們可以得到,f(n) = 2f((n - 1) / 2) + 1 =
2((2l1) + 1) + 1 = 2l + 1。
由1.和2.我們可以完成完全歸納的證明,得証。
另外,如果n以二進位制表示成n=b0 b1 b2 b3… bm,則f(n)=b1 b2 b3…bm b0。這個證
明來自於n=2^m+l。
最容易完成這種題目的方法是使用動態規劃,我們得到以下遞迴關係:
f(n,k) = (f(n - 1,k) + k)模 n, 且 f(1,k) = 0
不証自明,這個演算法的時間複雜度 O(n),但對於小的k和大的n,有另外一種演算法。
第二個方法使用的也是動態規劃,但是時間複雜度為O(klogn)。他的演算法是建構在殺掉
k-th人,2k-th人,floor( n/k )-th人。
以上就是今天完成的啦,有錯請務必指正啊!
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ chensc 推:好強…借轉 0203 14:20
φ chensc 轉:到 [chensc] 看板,于 2008/02/03 Sun 14:20:10
→ PG 推:借轉 XD 0203 15:42
φ PG 轉:到 [PG] 看板,于 2008/02/03 Sun 15:42:26
→ gba356 推:學長怎麼把譯者去掉了...原文是英文維基百科.... 0204 11:45
→ sa072686 推:唔、抱歉,轉得太倉促了… 0204 12:35
▲ sa072686 改@2008/02/04 Mon 12:36:13
→ b821213 說:借轉~ 0424 15:13
φ b821213 轉:到 [b821213] 看板,于 2011/04/24 Sun 15:13:50
作者: sa072686 at 08/02/03
有種東西叫%.s
和一般的%3d之類的一樣,是限string的位數的。
例如,%.5s
寫囧rz時拿來用了。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 210.70.137.244 (台南一中繞一圈回來)
→ ducksteven 推:還有 %-s, %-*s 之類的 0203 20:44
作者: gba356 at 08/02/04
Stern-Brocot 樹是一種用來產生所有最簡分數的優美方法。由 0/1 和 1/0 兩個分
數開始,並重複以下步驟:
將 ( m+m' ) / ( n+n' ) 插入至 m / n 和 m' / n' 之間。
因此數列將如此成長:
0/1, 1/1, 1/0
0/1, 1/2, 1/1, 2/1, 1/0
0/1, 1/3, 1/2, 2/3, 1/1, 3/2, 2/1, 3/1, 1/0
如圖,我們可以依此規則作出一個二元樹:
http://icpcres.ecs.baylor.edu/onlinejudge/external/100/p10077j.gif
事實上,這種 Stern-Brocot 樹就是有理數的集合,且每個有理數恰出現一次。
若依照樹的走訪規則,我們可以為每個數字作出特定的編碼:
以 1/1 為起點,往左走為 L ,往右為 R 。故 LRRL 代表著,往左走至 1/2 ,往
右走至 2/3 ,再往右走至 3/4,再往左走至 5/7。因此我們可以用 LRRL 表示 5/7 。
又 1/1 為起點,故我們將 1/1 以空字串表示。
我們的問題是,給你一個有理數,請你將他以 Stern-Brocot 數字系統表示。
< Hint E >
利用 m / n < ( m+m' ) / ( n+n' ) < m' / n' 的特性,
BinarySearch 即可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 61.224.173.180 (中滑一番)
→ sa072686 推:2006NPSC決賽XDDD 0204 19:41
→ gba356 推:是喔@@ //我是寫 Binary Search 寫到的XD 0204 22:41
作者: sa072686 at 08/02/05
http://www.ice.ntnu.edu.tw/~u91029/
嗯,有很多演算法、資料結構以及練習題的地方。
需要找特定題型題目時可以來找找看∼
感謝gba356學弟推薦XD
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/02/05 Tue 10:31:29
→ zenixls2 推:我記得這luckycat 參考連結就有了 0205 11:01
作者: gba356 at 08/02/05
嗯..這題用詞比較精確,我將他翻的比較容易理解,因此可能跟原文有些出入..
例如:
geometric progression(幾何級數)譯為等比級數,
equilateral triangles(等邊三角形)譯為正三角形..等。
一個平面上平鋪著多個邊長成等比級數的正三角形,且如圖,邊長比滿足一多項式
關係。你可以假設以下兩點:
a) 邊長可以忽略
b) 這些三角形的排列會如圖中方向排列,盡量靠近。
// b) 原文:"這些三角形會盡量排列成不同大小的五邊形。"意思為,這些三角形會
// 如圖中順著一個方向旋轉,而不會出現隨便亂走的情況。
//※注意,以下與原文不同,較為通順
如圖所示,三角形由小到大編號為 1, 2, 3 ......,因此請你計算:
令 L 為第 I 個三角形邊長:
a) 若 L < 1000000000 (1e9) ,請輸出 L 。
b) 否則輸出 L 在十進位下的位數數。
譯注:
Output 中,輸出的值皆無條件捨去(原文:rounded down to the nearest
integer),請不要四捨五入。
< Hint E >
二分法,配合以下兩個條件列方程(方程式就不點破啦XD):
1) 邊長成等比級數關係
2) S[1] + S[5] = S[6] ,[] 中數字為足碼
要如何計算 D 呢?
1. 設公比為 r ,
2. 則第 I 個三角形邊長 L = S * pow( r,I-1 )
3. 因此 L 共有 log10( L ) + 1 位
= log10( S * pow( r,I-1 ) ) + 1
= log10( S ) + log10( pow( r,I-1 ) ) + 1
= log10( S ) + ( I-1 ) * log10( r ) + 1
4. D = log10( S ) + ( I-1 ) * log10( r ) + 1
另外,epislon 請設 1e-15 。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 218.161.126.179 (中滑一番)
▲ gba356 改@2008/02/05 Tue 11:01:32
作者: AikoSenoo at 08/02/06
//詳解留給馬力歐學弟補了′▽`)
Q10668:Expanding Rods
當一根長度為L的細竿子被加熱了n度,它會膨脹到一個新的長度L'=(1+n*C)*L,其中
C是竿子材質的膨脹係數。
當細竿子被放在兩個堅固的牆之間被加熱時,它會膨脹而變成圓形的一部分,原始的
竿子則會成為一段弦。
你的任務是去計算弧跟弦的中心點之間的距離。
(題目的圖:http://icpcres.ecs.baylor.edu/onlinejudge/external/106/p10668.jpg)
input
輸入包含多筆測資。每一行測資包含了三個非負的數值:竿子的初始長度、變化的溫
度、以及膨脹係數。輸入的數值保證不會膨脹到大於原來的1.5倍。最後一行包括了三個
負數,且這筆測資不需要被處理。
Output
對於每一筆輸入,請輸出弧跟弦中心點之間的距離(精確度到小數點後三位)
Sample input
1000 100 0.0001
15000 10 0.00006
10 0 0.001
-1 -1 -1
Output for sample input
61.329
225.020
0.000
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by AikoSenoo from 122.116.50.107 (中滑一番)
→ Robin 說:修一修精準度不是WA就是TLE.. 0206 22:52
→ AikoSenoo 推:誤差修正好像要到1e-10 要用二分搜尋來做∼ 0206 22:54
→ sa072686 推:我用1e-10,平移1e-15,就AC了 0206 22:58
→ Robin 推:! 那是搜邊長還是角度? 0207 00:18
→ sa072686 推:弧度 0207 00:22
→ gba356 推:我回台北以後會發詳解,精確度 1e-10 可以過。搜角度。 0208 17:16
作者: AikoSenoo at 08/02/06
*什麼是Union Set?
根據電腦辭典的注釋來翻,Union Set稱為「併集」或是「和集」,簡體中文則譯為
「并查集」,總之呢,他是用到「聯集」的概念(事實上Union Set好像就是聯集的英文)
,也就是把有關係的元素圈在一起。比如說,A跟B是朋友,B跟C是朋友,那A跟C也是朋友
,他們三個就可以綑成一個朋友圈。
*處理的概念
Union Set用到了Tree的概念。基本上,如果要看兩個人是不是有關係,那麼只要追
本溯源地回到它們的root(根)的那一層,看看兩者的根是不是相同,就可以知道他們有沒
有關係了。
如果用樹來表示,可以想成樹狀圖的族譜,一個家族分成許多枝節的後代,在回溯回
去他們的始祖時就會發現他們都是來自同樣的祖先,那樣就是有關係了。
*實際的操作
雖然用到了樹的概念,Union Set卻可以很單純地用一個一維陣列來處理。
也就是存一個一維陣列,記錄每個元素的root。
當告訴你兩個元素有關係時,就要先追本溯源地看看他們本來有沒有關係,如果發現
他們的root不同的話,那就要把其中一個移枝到另外一個,也就是將其中的一個元素
的root改成另一個元素的root。
至於追本溯源,基本上可以使用遞回操作之。如果是單純的處理也可以用迴圈,然而
,使用遞回的話,我們可以一邊追本溯源,一邊把樹的深度降低,也就是本來可能在
紀錄時,A的root是B,而B的root是C,如果使用遞迴,就可以在找到最上面的root時
,將這個root回傳,然後把一路指上去到這個root的元素們的root都改成現在找到的
最上面的這個root,這樣紀錄的陣列就會變成只要找一層就可以找到他的始祖,而不
用一路一個個的找上去。
*簡單的例題
ACM Q793 Newwork Connections
c時使用union set把有關聯的電腦接在一起,而q時就追本溯源地看兩者的最上
層root是否相同
ACM Q10583
用union set把人們捆在一起後,再一次掃過去看看有哪些是元素是根,即是一類。
ACM Q10608
把人們捆在一起後,再全部跑一次,邊跑可以邊計算、邊降深度,以及邊找最大值。
深入應用以後再加′▽`)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by AikoSenoo from 122.116.50.107 (中滑一番)
作者: AikoSenoo at 08/02/06
分析一下這題的難度
首先,這題因為題目很長
所以判讀不易。
解釋一下題義
1.輸入的第一行,代表有多少筆測資
2.接下來每組測資的第一行,第一個數字代表有多少學生S,
第二個數字為總共考試的次數T
3.接下來S行,每一行前T個數字是每個學生T次的考試成績,
後兩個數字分別是加分點與缺席次數
4.要先算出每個學生的平均分數,但是如果T>2,那麼就要扣除一次最低的分數
這種情況下,平均用(T-1)次來算
5.把每個學生的平均分數相加再除以人數,就是每個班的班平均(mean)
而班內的標準差(sd)公式為sd = sqrt(sum((average[i]-mean)^2)/S)
6.計算完班平均與標準差後,學生的平均與班平均、標準差的關係如下:
平均分數range 等第
average>=mean+sd A
mean+sd>average>=mean B
mean>average>=mean-sd C
mean-sd>average D
7.等第標準算出來之後,要先處理每個學生的加分點
每有兩個加分點,平均分數可以加三分。
但這個加分不影響先前所算的mean與sd
8.加分點算上去後,可以計算等第。等第計算完之後,要再處理缺席次數
每有四次缺席次數,等第就降一等(A->B,B->C,C->D,D->F,沒有E)
而如果該學生的缺席次數為零次,等第可往上升一等,但最高仍是A等。
9.計算完一個學生真正的等第之後,就要換算一個班的avg grd pnt(平均分數點)
A=4,B=3,C=2,D=1,F=0
所有學生的分數點加起來的總和即為此題所須輸出的答案。
如果讓初學者來做這題,
基本上有幾個可能的問題
1.型態轉換的問題
因為其中有不少牽扯到浮點數與整數的運算,初學者很容易遺忘。
2.忘了要include<math.h>
sqrt()屬於這個標頭檔。
3.不知道怎麼樣刪掉成績
我用的方法是邊讀成績邊看哪個成績最小,也邊加總
如果T>2就把紀錄的最小值減掉,除的時候除以(T-1)
4.需要不少的if判斷式
5.對初學者來說程式碼偏長,我的約85行
總結,對於新手來說,這題要寫對、寫好,除非常寫
否則真正要過,也許要花上一整天
至於已經習慣寫程式的人們
這題也會考驗一點細心以及耐心
大致是這樣′▽`)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by AikoSenoo from 122.116.50.107 (中滑一番)
作者: AikoSenoo at 08/02/07
/*據說這題不好寫,其實連題意都很難懂*/
/*大概翻是這個樣子,還有點不順 有問題可以問這樣′▽`)"*/
/*不過我不會寫 我只負責看題目=w=)/*/
/*徵求英文強者潤修他XD*/
310 L-system
一個D0L系統是由一個符號(字母)集合Σ、一個處理過程集合P以及一個初始字串ω
所
組成的。在P集合裡的處理過程的形式是x→u,其中x屬於Σ,而u屬於Σ+(u被稱為該處理
過程的右邊),Σ+是一個由Σ裡所有的符號所組成的字串的集合(但不包括空字串),這些
處理過程代表著將x轉換成字串u。對於每一個屬於Σ的符號x,P都恰好包含著一個處理過
程將之轉換成u。從u1衍生到u2的過程是把u1裡每個屬於Σ的符號x取代成每個符號所屬的
處理過程的右邊。D0L系統的語言是由所有從起始字串ω經由一系列的直接衍生變換所生
成的字串組成。
假設符號集合包含了兩個符號:a與b。所以處理過程集合就包含著兩個處理過程:a→
u,b→v,其中u和v屬於{a,b}+,且起始字串ω也屬於{a,b}+。你可以回答在D0L系統的語
言中,是否存在一個形式為xzy的字串(其中x,y屬於Σ*,Σ*為所有Σ裡的字串且包含空
字串;z為另一個給予的字串)嗎?很明顯地,你可以。寫支程式來解決這個問題吧。
Input
輸入檔案由許多有四行的測資組成,而連續的測資之間不會有空白行。每組測資的第
一
行是a的處理過程的右邊,第二行則是b的處理過程的右邊,第三行是初始字串ω且第四行
為另一個給予的字串z。以上四者至多長15個字元。
Output
對於每組輸入的測資應該輸出包含YES或NO的一行。
YES或NO則根據問題的結果來回答。
Sample Input
aa
bb
ab
aaabb
a
b
ab
ba
Sample Output
YES
NO
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by AikoSenoo from 122.116.50.107 (中滑一番)
作者: sa072686 at 08/02/07
The goal of this problem is to write a program which will take from 1 to 5
puzzle pieces such as those shown below and arrange them, if possible, to
form a square. An example set of pieces is shown here.
這個問題的目標是寫個程式,將 1 到 5 個積木塊排成正方形。以下是個例子:
█ █
███ █ █ █
█ █ ██ █ ██
█
A B C D
The pieces cannot be rotated or flipped from their original orientation in an
attempt to form a square from the set. All of the pieces must be used to form
the square. There may be more than one possible solution for a set of pieces,
and not every arrangement will work even with a set for which a solution can
be found. Examples using the above set of pieces are shown here.
這些積木塊不得旋轉與翻轉,且每一塊都要用到。一組積木塊可能有許多種排法,
也可能排不出來。以下的範例將使用上述的積木塊。
AAAB AAAB
ACAB D ADAB
╳CBB D CDBB
╳╳╳B DD CDDB
Input
The input file for this program contains several puzzles (i.e. sets of puzzle
pieces) to be solved. The first line of the file is the number of pieces in
the first puzzle. Each piece is then specified by listing a single line with
two integers, the number of rows and columns in the piece, followed by one or
more lines which specify the shape of the piece. The shape specification
consists of `0' and `1' characters, with the `1' characters indicating the
solid shape of the puzzle (the `0' characters are merely placeholders). For
example, piece `A' above would be specified as follows:
輸入包含許多待解測試資料。每組第一行告訴你這組有幾塊積木,接下來是每一塊的
描述。每塊第一行有兩個整數,代表這塊大小為幾列、幾行,接下來為該積木塊的外形。
外形包含 '0' 和 '1','1' 代表積木的部份,'0' 只是填充空白部份用。例如上述的
積木塊A將會用以下的形式:
2 3
111
101
The pieces should be numbered by the order they are encountered in the
puzzle. That is, the first piece in a puzzle is piece #1, the next is piece
#2, etc. All pieces may be assumed to be valid and no larger than 4 rows by 4
columns.
這些積木塊將依它們在輸入中出現的順序編號。第一塊是#1,下一塊是#2,…依此類推。
每塊都將是合法的,並且不會大於 4 * 4。
The line following the final line of the last piece contains the number of
pieces in the next puzzle, again followed by the puzzle pieces and so on. The
end of the input file is indicated by a zero in place of the number of puzzle
pieces.
若有一組積木塊數為 0,則表示輸入結束,並且這組不需要處理。
Output
Your program should report a solution, if one is possible, in the format
shown by the examples below. A 4-row by 4-column square should be created,
with each piece occupying its location in the solution. The solid portions of
piece #1 should be replaced with `1' characters, of piece #2 with `2'
characters, etc. The solutions for each puzzle should be separated by a
single blank line.
你的程式需如範例一般回報一種可能的解,使得能將所有積木排成一 4 * 4 大小的
方形。第一塊所擺放的地方將要輸出 '1',第二塊則為 '2',依此類推。每組測試資料
間需以一空白列隔開。
If there are multiple solutions, any of them is acceptable. For puzzles which
have no possible solution simply report ``No solution possible''.
如果有多組解,任一皆可。如果無解,則回報 "No solution possible"。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ seanwu 推:我改了951的code去傳它.. 0211 17:33
作者: AikoSenoo at 08/02/08
185 Toman Numerals
早期羅馬人使用的最原始的書寫數字非常的簡單但是卻很麻煩。許多字母被用來代表
一
些重要的數字,且這些字母被綁在一起時可以代表另外一個數字(這些綁在一起的字母,
其值是從左至右單純地遞減)。他們用的字母和代表的數值列在下表:
I 1 V 5
X 10 L 50
C 100 D 500
M 1000
因此,1993這個數字用羅馬數字表示即為MDCCCCLXXXXIII。這個系統後來被一個部份
改
變的系統所取代,這個改變的地方就是上面提到的遞減規則被打破了:較低的數值放在較
前面,它代表的意義便是負的,並且會從他的下一位較高的數值減去它的值。在這個系統
中,1993便常被寫成MCMXCIII。至於什麼字母可以放在其他的字母前仍是有爭議的,但是
為了這題的目的我們假定了下述的限制:
1.表格左欄的字母不能出現在一列中出現三次以上,而出現三次的字母只能在其他地
方
至多出現一次。
2.表格右欄的字母不能出現超過一次。
3.當一個字母被用在「負」的位置時,所有接下來的字母(除了它的下一個之外)都不
能
比這個字母大。
所以,我們可以把1993寫成MXMIII或是把294寫成CCXCIV,然而,我們不能把54寫成
ILV
或是把99寫成LIL。記住299可以被寫成CCXCIX或CCIC。
給一個羅馬數字的加法,我們可以把它解釋成羅馬數字,或是轉成一個阿拉伯的加法
。
因此V+V=X可以被解釋成一個含糊不清的加法:當V屬於{1,2,3,4}且X=2*V時,上式皆成立
。同樣地,X+X=XX可以被解釋成一個正確的羅馬數字加法,但是我們不可能找到一個對應
的阿拉伯數字使得上式成立(除了把X定義成0之外)。而XX+XX=MXC是一個不正確的羅馬數
字加法,但是他卻能夠有效地被轉成阿拉伯數字後使得等式成立。(此時M=1,X=9,C,也就
是99+99=198)
寫支程式來讀取羅馬數字加法,然後判斷他們是否是正確的羅馬數字加法,並且判斷
能
否找到一組正確的轉碼將之轉成阿拉伯數字的加法後成立(不可能即為impossible,多組
可能為ambiguous,唯一解為valid)。並且我們假設數字開頭的字母不可能代表0,且一個
字母只能代表一個數字。
Input
輸入包含許多行,每一行由一個格式正確無誤的羅馬數字加法所組成,換言之,即為
一
個有效的羅馬數字,一個+號,另一個有效的羅馬數字,一個=號,另一個有效的羅馬數字
這些所組成。沒有羅馬數字的長度會大於9個字母長,而輸入檔案的最後將會由單獨包括#
的一行所組成。
Output
輸出包括許多行,每一行對應一行輸入,且每一行包含了兩個字。第一個字應為
(Correct, Incorrect)的其中之一,代表羅馬數字加法是否正確。第二個字與第一個字之
間空一格,且為(impossible, ambiguous, valid)的其中之一,代表(無、有不只一組、
有唯一)轉碼正確的阿拉伯數字加法。
Sample input
V+V=X
X+X=XX
XX+XX=MXC
#
Sample output
Correct ambiguous
Correct impossible
Incorrect valid
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by AikoSenoo from 122.116.50.107 (中滑一番)
作者: seanwu at 08/02/11
※ 引述《sa072686 (如果可以的話,我想…)》之銘言:
> 嗯,這題想了好久。至少有半天吧。
> 翻譯一下。
> 給你一個整數 k,求一種擺法使得一個大小為 n 的棋盤,每行每列都擺 k 個棋子
k不是任意整數,是k=p+1,其中p=0,1或質數
> 並且其中任意四個棋子皆無法為一矩形之四頂點
> 已知至少 n 要有 k^2 - k + 1 才夠放,但很明顯地也不需要超過。
> 給你 k,輸出 n 行,每行 k 個數字代表這一列要放哪幾行
> 每組輸出間要空一列
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 08/02/11
※ 引述《sa072686 (約定。)》之銘言:
> 不難寫的一題。算字串題?
> 翻譯一下。
> 給你很多個由 0 和 1 組成的字串,要算出每個 group 是否是要求的類型
> 一個 group 以一行 "9" 結束。每個 group 彼此不相干。字串長度最長 10 最少 1
> 判斷一個 group 中是否每個字串都不是其它字串的前綴
> 前綴的定義為長度為 n 的字串 a 恰與另一長度 >= n 之字串 b 之前 n 個字元相同
補個歪解好了...
用trie,0.060
XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 08/02/12
作者 tmt514 (tomato) 看板 EverydayACM
標題 [ACM★★★☆] 415-Sunrise
時間 Sun Jul 1 01:44:19 2007
───────────────────────────────────────
415 Sunrise
假設某個發光的星體是一個平面的圓盤(planer disc)
一個行星距離該星 92,900,000 miles,
且兩星的距離方向垂直於發光的星體,
假設行星是正球體且半徑為 3950 miles,
發光的星體半徑為 432,000 miles.
行星赤道上特定的某個地點被第一道光線照射到的時間為基準 (0秒),
之後的 t秒鐘,請問有多少百分比(面積)的發光星體有光線照射到
行星赤道上的該點?
行星自轉周期24小時,不公轉
t<=600
<不用想也知道是 MATH= =>
好難理解的題目..."
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
→ seanwu 推:我修一下 0212 21:13
▲ seanwu 改@2008/02/12 Tue 21:17:38
▲ seanwu 改@2008/02/12 Tue 21:47:18
→ gloompisces 推:這題頗討厭XD 0212 22:32
作者: seanwu at 08/02/13
515 - King
一個有N個數的整數序列:
a1, a2, a3, a4, ... , an
給你N和一些條件式,問符合所有條件式的序列存不存在?
條件式的形式有兩種:
x y "gt" z => a(x) + a(x+1) + a(x+2) +...+ a(x+y) > z
或 x y "lt" z => a(x) + a(x+1) + a(x+2) +...+ a(x+y) < z
如果符合條件的N項整數序列存在,輸出 "lamentable kingdom",
如果不存在,則輸出 "successful conspiracy"
<Hint E>
定義 s(x) = s(x-1)+a(x), s(0) = 0
則條件式"lt"可寫為 s(x+y)-s(x-1)<=(z-1),"gt"可加上負號轉為"lt"
建立一個有 n+1 個點的圖G,頂點編號為 0~n
如果有條件式 s(v)-s(u)<=w,則G中存在邊 (u,v)=w
如果圖中有負圈,則序列不存在,反之序列有解
(對於(u,v)多重邊的處理,可以直接取(u,v)=min(each w))
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-154.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: seanwu at 08/02/14
775 - Hamiltonian Cycle
我們說一個圖是 "dense" 的:
對於圖上任兩個不相鄰的點 u,v,皆有d(u) + d(v) >= n
其中d(u)是u的degree數,n是圖中的點數
一個圖的漢米頓圈,是從圖上的任意一個點出發,經過每個點恰一次後回到出發點的路徑
給你一個dense的圖(n<256),求它的任意一個漢米頓圈,如果無解則輸出'N'
<Hint E>
dfs...一定有解
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.13 (台狼一中)
作者: sa072686 at 08/02/17
390 Letter Sequence Analysis
Cryptographic analysis makes extensive use of the frequency with which
letters and letter sequences occur in a language. If an encrypted text is
known to be in english, for example, a great deal can be learned from the
fact that the letters E, L, N, R, S, and T are the most common ones used in
written english. Even more can be learned if common letter pairs, triplets,
etc. are known.
密碼學的分析使得關於字母與字串的出現頻率的運用變廣了。舉例而言,一份英文文件
最常出現的單字為 E,L,N,R,S 和 T。甚至是兩個字母、三個字母或更長的字串中,
較常出現的也已被發掘。
For this problem you are to write a program which accepts as input a text
file of unspecified length and performs letter sequence analysis on the text.
The program will report the five most frequent letter sequences for each set
of sequences from one to five letters. That is it will report the individual
characters which occur with the five highest frequencies, the pairs of
characters which occur with the five highest frequencies, and so on up to the
letter sequences of five characters which occur with the five highest
frequencies.
這在題你得寫個程式接受一份文件作為輸入,然後分析並回報字串的出現頻率。
這個程式將回報分別長度一至五的字串中,最高的五種頻率。即,回報最高的五種頻率
分別是哪些單獨出現的字母、成雙出現的字母、…,到五個連續的字母。
The program should consider contiguous sequences of alphabetic characters
only, and case should be ignored (e.g. an `a' is the same as an `A'). A
report should be produced using the format shown in the example at the end of
this problem description. For each sequence length from one to five, the
report should list the sequences in descending order of frequency. If there
are several sequences with the same frequency then all sequences should be
listed in alphabetical order as shown (list all sequences in upper case).
Finally, if there are less than five distinct frequencies for a particular
sequence length, simply report as many distinct frequency lists as possible.
Print a blank line between two analises.
這程式只考慮連續的字母,且大小寫視為相同。回報格式必須如底下的範例所示,
對於長度一到五的字串,必須以遞減順序列出最高的五個頻率及擁有這些頻率的字串。
而出現頻率相同的字串應依字典順序一一列出,並且所有字串皆需以大寫字母表示。
最後,如果不同的頻率不足五種,則列出僅有的即可。兩份分析報告中必須有一空白列。
Examples
When a text file containing simply the line ``Peter Piper Picks Pickles!'' is
used as input, the output should appear as shown here:
如果以單一行 "Peter Piper Picks Pickles!" 為輸入,輸出必須如下:
Analysis for Letter Sequences of Length 1
-----------------------------------------
Frequency = 5, Sequence(s) = (P)
Frequency = 4, Sequence(s) = (E)
Frequency = 3, Sequence(s) = (I)
Frequency = 2, Sequence(s) = (C,K,R,S)
Frequency = 1, Sequence(s) = (L,T)
Analysis for Letter Sequences of Length 2
-----------------------------------------
Frequency = 3, Sequence(s) = (PI)
Frequency = 2, Sequence(s) = (CK,ER,IC,PE)
Frequency = 1, Sequence(s) = (ES,ET,IP,KL,KS,LE,TE)
Analysis for Letter Sequences of Length 3
-----------------------------------------
Frequency = 2, Sequence(s) = (ICK,PIC)
Frequency = 1, Sequence(s) = (CKL,CKS,ETE,IPE,KLE,LES,PER,PET,PIP,TER)
Analysis for Letter Sequences of Length 4
-----------------------------------------
Frequency = 2, Sequence(s) = (PICK)
Frequency = 1, Sequence(s) = (CKLE,ETER,ICKL,ICKS,IPER,KLES,PETE,PIPE)
Analysis for Letter Sequences of Length 5
-----------------------------------------
Frequency = 1, Sequence(s) = (CKLES,ICKLE,PETER,PICKL,PICKS,PIPER)
When the first three paragraphs of this problem description are used as
input, the output should appear as shown here:
如果用題目敘述的前三段為輸入,則輸出需為如下所示:(註一)
Analysis for Letter Sequences of Length 1
-----------------------------------------
Frequency = 201, Sequence(s) = (E)
Frequency = 112, Sequence(s) = (T)
Frequency = 96, Sequence(s) = (S)
Frequency = 90, Sequence(s) = (R)
Frequency = 84, Sequence(s) = (N)
Analysis for Letter Sequences of Length 2
-----------------------------------------
Frequency = 37, Sequence(s) = (TH)
Frequency = 33, Sequence(s) = (EN)
Frequency = 27, Sequence(s) = (HE)
Frequency = 24, Sequence(s) = (RE)
Frequency = 23, Sequence(s) = (NC)
Analysis for Letter Sequences of Length 3
-----------------------------------------
Frequency = 24, Sequence(s) = (THE)
Frequency = 21, Sequence(s) = (ENC,EQU,QUE,UEN)
Frequency = 12, Sequence(s) = (NCE,SEQ,TER)
Frequency = 9, Sequence(s) = (CES,FRE,IVE,LET,REQ,TTE)
Frequency = 8, Sequence(s) = (ETT,FIV)
Analysis for Letter Sequences of Length 4
-----------------------------------------
Frequency = 21, Sequence(s) = (EQUE,QUEN)
Frequency = 20, Sequence(s) = (UENC)
Frequency = 12, Sequence(s) = (ENCE,SEQU)
Frequency = 9, Sequence(s) = (FREQ,NCES,REQU)
Frequency = 8, Sequence(s) = (ETTE,FIVE,LETT,TTER)
Analysis for Letter Sequences of Length 5
-----------------------------------------
Frequency = 21, Sequence(s) = (EQUEN)
Frequency = 20, Sequence(s) = (QUENC)
Frequency = 12, Sequence(s) = (SEQUE,UENCE)
Frequency = 9, Sequence(s) = (ENCES,FREQU,REQUE)
Frequency = 8, Sequence(s) = (ETTER,LETTE)
*註一:扣除題名不算,我的 AC CODE 把這題題目敘述那三段(也就是到EXAMPLE之前)
作為輸入,出來的答案是:
Analysis for Letter Sequences of Length 1
-----------------------------------------
Frequency = 206, Sequence(s) = (E)
Frequency = 115, Sequence(s) = (T)
Frequency = 98, Sequence(s) = (S)
Frequency = 91, Sequence(s) = (R)
Frequency = 89, Sequence(s) = (N)
Analysis for Letter Sequences of Length 2
-----------------------------------------
Frequency = 37, Sequence(s) = (TH)
Frequency = 34, Sequence(s) = (EN)
Frequency = 27, Sequence(s) = (HE)
Frequency = 24, Sequence(s) = (RE)
Frequency = 23, Sequence(s) = (NC)
Analysis for Letter Sequences of Length 3
-----------------------------------------
Frequency = 24, Sequence(s) = (THE)
Frequency = 21, Sequence(s) = (ENC,EQU,QUE,UEN)
Frequency = 12, Sequence(s) = (NCE,SEQ,TER)
Frequency = 9, Sequence(s) = (CES,FRE,IVE,LET,REQ,TTE)
Frequency = 8, Sequence(s) = (ETT,FIV)
Analysis for Letter Sequences of Length 4
-----------------------------------------
Frequency = 21, Sequence(s) = (EQUE,QUEN)
Frequency = 20, Sequence(s) = (UENC)
Frequency = 12, Sequence(s) = (ENCE,SEQU)
Frequency = 9, Sequence(s) = (FREQ,NCES,REQU)
Frequency = 8, Sequence(s) = (ETTE,FIVE,LETT,TTER)
Analysis for Letter Sequences of Length 5
-----------------------------------------
Frequency = 21, Sequence(s) = (EQUEN)
Frequency = 20, Sequence(s) = (QUENC)
Frequency = 12, Sequence(s) = (SEQUE,UENCE)
Frequency = 9, Sequence(s) = (ENCES,FREQU,REQUE)
Frequency = 8, Sequence(s) = (ETTER,LETTE)
雖然不太一樣,但仍可以AC。猜是題目敘述有改,可是範例忘了改。
解法看TLE人數暴力應可。
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/02/17 Sun 13:00:43
→ seanwu 推:我算的也是89 0217 13:57
作者: seanwu at 08/02/20
10818 - Dora Trip
大雄遇上大麻煩了,他現在得去市場買菜、去郵局收包裹...還有其它一大堆雜事要做。
他不想在路上遇上老師或者技安,因此他決定找哆啦A夢幫忙。
很不幸的,這個時候任意門通常會壞掉而且竹蜻蜓會沒電。不過哆啦A夢還有一樣道具
可以用,這是一張地圖,地圖上會標示出街道路線 (以 # 表示牆壁)
和老師或技安可能出現的地點 (以 X 來表示),
大雄家則標示為 S,他所要去的地點標為 *
請幫大雄規劃一條路線:從他家出發,經過儘量多的「 * 」最後回到他家
如果有多組解,輸出字典順序最小者 (以E,W,S,N表示移動方向)。
如果到不了任何一個「*」,輸出 Stay home!
(地圖長寬皆<=20,「*」數量<=10,答案長度<=200)
<Hint E>
預先以bfs算出各個*之前的最短路走法,然後dfs吃*的順序
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-160.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
作者: gba356 at 08/02/23
嗯..Union-Find 變形另解..< PageDown >
<-- 防雷線 -->
1.
考慮成為朋友的唯一方法為,"擁有共同的敵人",因此任兩個團體之間的情況只會
出現"不認識"、"敵對"兩種。
2.
若三個人之間出現三角敵對關係,則其中任一個人都不可邀請,假設這種情況稱做
腐敗,那麼若三人之間出現這種關係,則他們的敵人,他們敵人的敵人,他們敵人的敵人
的朋友的敵人的朋友(夠了= =)都會酸掉,也就是說,只要他"認識"-不管敵對或朋
友-都不可以邀請,否則那會讓婚禮出現複雜的三角對幹場面。
因此團體分成了三類,腐敗、中立、成對敵對。
因此要邀請的團體為,所有中立人士加上匹配的敵對團體中,勢力較大的那方,
這就是正解。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 61.224.173.24 (中滑一番)
作者: PG at 08/02/23
這是高等程設的功課
也是我進資工系以來第一次寫到比較像樣的程式...
我翻譯一下題目
//////////////////////////////////////////////////////
兩個點 (x1,y1) (x2,y2) 如果 x1!=x2 y1!=y2
那我們稱呼這兩個點"獨立"
給一張正方形的表格
從裡面選出n個"獨立"的點 的方法數有n!種
在這n!種裡面 如果每種方法選出來的數字都一樣
那我們稱呼這張表格為 homogeneous
給一張n*n的表格 1<=n<=1000
問這張表格是否 homogeneous
PS: cin cout容易TLE 該死的三秒限制....
Hint:
應該是數學 有請強者星魂來提出漂亮的解法 XD
我自己是用隨機方法挑出數字來比較 如果挑出來的組合都一樣那就homogeneous
簡單的排列組合算一下就知道說 不小心判斷錯的機率其實不高 XDD
--
透き通る 夢を見ていた やわらかい 永遠 TFcis7教學 PG
我夢見了一個透明清澈的夢 柔軟的 永遠的夢 在西子灣大學資訊工程系
風のような かすかな䟕が 高い空から僕を呼んでいる 醉生夢死中
有如微風一般柔弱的聲音 從高空呼喚著我 http://PG.miko.tw
このまま 飛び立てば 何𠯆にだって行ける
就這樣子 飛向天空的話 無論哪裏都能到達 メグメル Clannad OP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 219.80.136.135 (福爾摩沙固網)
→ seanwu 推:好題推一個 0223 17:29
→ gba356 推:對了,用cin/cout不會爆:cin/cout .sync_with_stdio(0); 0223 19:18
→ zenixls2 推:cin/cout .sync_with_stdio(0)是用c的輸入輸出嗎? 0227 22:46
→ gba356 推:哦不是..cin/cout 會慢的原因是他要一次處理 cin/cout 0228 13:44
→ gba356 說:和 scanf()/printf() 兩種輸入輸出,如果只純用 cin/cout 0228 13:45
→ gba356 說:的話,就不需要把時間花在同步上了,因此效率上跟 C 的 0228 13:45
→ gba356 說:十分接近。 //cin.sync_with_stdio(false); 這樣 0228 13:46
→ gba356 說:  ̄ ̄↖同步 0228 13:46
→ zenixls2 推:所以仍可用C++的string嘍! 0229 09:40
→ gba356 推:當然沒問題^^ //只是不可以跟 stdio 混用,順序會亂~"~ 0229 11:35
作者: seanwu at 08/02/23
> Hint:
> 有請強者星魂來提出漂亮的解法 XD
我不是強者星魂,不過我先寫完我先提XD
檢查是否所有的 A[i][j]+A[i+1][j+1]==A[i+1][j]+A[i][j+1]
如果是則為 homogeneous
(基於,任兩個選定的數(x1,y1),(x2,y2),改為選(x1,y2),(x2,y1)仍是合法的選法)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from pc21-150.hwai.edu.tw.21.68.203.in-addr.arpa (中華醫事學院)
▲ seanwu 改@2008/02/23 Sat 17:28:52
→ gba356 推:優美。 0223 18:22
→ PG 推:原來如此 0223 18:25
→ gba356 推:偷偷的補充一下..假設有以下部分 2x3 區塊: 0223 18:27
→ gba356 註:a b c 0223 18:27
→ gba356 說:d e f 0223 18:27
→ gba356 說:且 a+e = b+d, b+f = c+e ,則可得 a+f = c+d(等量公理) 0223 18:28
→ gba356 說:因此這個演算法是正確的,得証 seanwu 強者(嚴肅) 0223 18:29
→ gloompisces 推:這題是強者SRX教我的XD 0223 19:31
作者: gba356 at 08/02/23
在自然界中存在許多食物鏈。食物鏈的開頭為植物性生物,小型動物以這些植物為食
,大型動物以這些小型動物為食。食物鏈中也可能存在著循環,例如當某些動物死去時,
植物們就會將他們的遺體轉換分解為礦物質,並獲得能量。
在這個問題中,請找出最大的食物鏈。
Input
輸入包含多筆測資,每筆測資的第一行包含兩個正整數 C (1≦C≦5000) 和 R (
1≦R≦5000)。 C 代表著生物的種類數目, R 代表著「獵食-被獵食」的關係數。接
下來的 C 行為生物的名稱,並緊跟著 R 對獵食關係。每個名稱不會超過三十個字。
輸入中不會有自己獵補自己的關係, C = R = 0 時結束。
Output
請對 Input 輸出最大的食物鏈中所涉及的生物種類數目。
// 註:假設共有三種生物,A、B、C ,且 A→B 、 C→B ,則這個食物鏈的「大小」為三
//。也就是說,只要相關的生物都要納入計算,而不是求最長的食物鏈「長度」。
<-- Hint PageDown -->
Union-Find。單純的 Union-Find 即可解題,比較麻煩的是輸入的字串處理,可以使
用 map 或 sort 。注意這個題目的時間限制不是給定的 40 秒,而是新系統下的三秒,
因此請用 Hash 或 Binary Search ,另外,討論區上說要用 STL 才能過,不過我用
<string> 和 <algorithm> 下的 sort() 寫出來的結果是 TLE ;而 qsort() 、
bsearch() 、 和 strcmp() 混用則寫到了和第一名一樣的 0.160 ,可以試試看。
※ Optimizations
注意到他的名稱長度最長為三十,因此最少需要開到三十一,因此可以開到 32 ,
並利用這個特性作 bsearch()>>5 的運算,可以小小的加速。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 61.224.173.24 (中滑一番)
作者: sa072686 at 08/02/27
太可怕了(抖抖)
ptt joke板18174篇,或可搜作者名OdieX
是…ASCII版「打不倒的空氣人」,畫得超像的啊啊啊啊
真是太神了(拜)
※ 引述《ducksteven (涼啟超)》之銘言:
> ※ 引述《sa072686 (倒數。)》之銘言:
> > 3D版…
> > http://youtube.com/watch?v=rzsmacq80Qg&feature=related
> > 果然強者很多啊(遠目)
> > 另外,『打不倒的XXX』這類影片似乎很多?
> 『ドナルドが倒せない』Ver1.2
> http://jp.youtube.com/watch?v=RdtFcpAtLYk
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ dust 推:原作的話是發表在BBSMovie 0228 16:04
→ chensc 推:XDDDDDDDD 0229 13:13
作者: sa072686 at 08/02/29
這題有沒有什麼比較好的方法呀?
我跑了1.400才跑完,好像太慢了點…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中)
→ sa072686 推:好像有找到了,找天考慮重寫一下 0301 22:19
作者: sa072686 at 08/03/03
10604,該死的一題囧
a+b != b+a是怎樣…
是因為該死的化學總有該死的例外嗎?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/03/07
這題怎麼做比較好?
我好像怎麼搜都TLE,每次加prune不是不夠快就是丟失正解
該怎麼做呢?
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中)
作者: DJWS at 08/03/10
※ 引述《sa072686 (變笨中)》之銘言:
> 這題怎麼做比較好?
> 我好像怎麼搜都TLE,每次加prune不是不夠快就是丟失正解
> 該怎麼做呢?
[轉貼我自己很久以前的跟別人通信的文章]
這個問題叫做 Mrs. Perkins's Quilt
我在網路上尋找文獻時
看到了一支寫的不錯的程式
註解相當的詳細 heuristic交代的很清楚
你可以參考看看他的做法∼
題目
http://acm.uva.es/p/v102/10270.html
程式
http://www.mathpuzzle.com/Mrs.zip
Mrs. Perkins's Quilt (from mathworld)
http://mathworld.wolfram.com/MrsPerkinssQuilt.html
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 140.112.90.81 (台北帝國大學)
▲ DJWS 改@2008/03/10 Mon 14:44:20
→ sa072686 推:喔喔,太好了,謝謝你提供的資料 //DJWS耶(大驚) 0310 15:59
→ DJWS 推:嗯嗯..今天才剛註冊的∼ 0310 16:11
→ Robin 推:@@ 0310 16:45
→ SKYLY 推:是DJWS大神耶!!! 有神快拜!! 0311 02:06
→ DJWS 推:樓上的也太誇張了吧 XD 0311 08:40
→ zenixls2 推:0rz 0rz 神rz 0311 14:47
→ Tommy 推:(拜) 0311 18:19
→ csftwpt 推:(拜) 0311 21:26
→ gba356 推:(拜) 0312 15:01
→ godgunman 推:(拜) 0312 21:17
→ pioneerlike 推:(拜) 0312 22:18
→ chensc 推:(拜) //大家攏咧拜,來參一咖 0312 22:25
→ tmt514 推:(拜) 0315 01:11
→ ben196888 推:(拜) 0315 01:55
→ kelvin 推:(拜) 0315 17:14
→ math120908 推:(拜)m(_ _)m 0315 19:07
→ devilqxect 推:(拜) 0317 09:04
→ gba356 推:(拜) //順便再拜十三十五樓(拜拜拜拜拜) 0321 17:21
作者: sa072686 at 08/03/13
新系統跑1.8耶…好慢Orz
有什麼更快的方法嗎?我直接枚舉所有線段取最短距離,結果跑很慢…
--
台南一中資訊社九七級低調害羞的小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.15 (台狼一中)
→ seanwu 推:我也是啊... 枚舉所有線-線、線-點、點-點 0313 18:22
→ seanwu 說:可是我的快很多XD 可能是計算方法的問題 0313 18:22
作者: chensc at 08/03/13
ACMAP.cpp
跟我的那顆HDD一起消失了 所以重寫一份吧
還是我明天有空再co一份
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.216.249 (中滑一番)
作者: sa072686 at 08/03/24
是師大耶 >////////<
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.88 (台灣師範大學)
→ Tommy 推:好發XD 0324 17:51
→ bruce3557 推:好發XD 0324 17:52
→ styhihs 推:好發 0324 17:54
→ Michelle 推:好發XD 0324 17:55
→ ducksteven 推:是帥大耶 >\\\\\< 0324 22:20
→ newmoon 推:可惜我不喜歡半途而廢,所以就沒去了 0325 01:38
→ sa072686 推:喔,我是不喜歡有人佔名額不去XD 0325 07:35
→ newmoon 推:這是一種取捨啊,當初誰知道運氣那麼好兩個都進呢? 0325 13:02
作者: kub at 08/03/25
sa大大您好 第一次在您版PO問問題 有冒犯還請包涵@"@
昨天跟某學長討論演算法(其實只是稍微提到一點點)
「現在有 A 台發電廠 每台發電廠的發電量不一樣
每座發電廠提供一單位的電量所需要的cost也不一樣
現在你需要 B 單位的電量
請問要怎麼求出每個發電廠的發電量 滿足需求並使總cost最小」
我說用DP解? 他回答「不行 因為這個問題沒有最佳子結構」
問他為什麼他也講不出來 說是人家講的 要用什麼演化世紀還什麼去解@@"
請問一下某問題是否存在optimal substructure要怎麼判斷呢?
以前遇到問題 很多都是人家說可以用DP解 我就去想遞迴式看要怎麼設計
遞迴式出來就差不多了(要是人家已經給了 那.....就抄)
沒去想過是不是存在最佳子結構 大多是「經驗」
請問你對這問題的看法怎樣?
感謝 m(_ _)m
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kub from 140.115.189.20 (中央大學)
▲ kub 改@2008/03/25 Tue 13:25:09
→ sa072686 推:我覺得它是greedy,從單位花費最小的開始用起? 0325 13:44
→ gloompisces 推:恩看起來像greedy 0325 15:35
→ PG 推:greedy 0325 17:04
→ sa072686 推:最佳子結構的話嘛,一般都是經驗或是分析吧? 0325 17:37
→ DJWS 推:有greedy的話其實就會有最佳子結構了~ 0327 20:41
→ DJWS 推:另外這個問題就是背包問題 0327 20:47
→ sa072686 推:似乎是背包問題中最簡單的一種,可以只取部份而不必全取 0327 21:36
作者: kub at 08/03/26
突然想到學長沒說「每台發電廠供應的最大電量使否有極限」
這點我再去問他...拍謝><
先假設有極限好了
這題我本來覺得可用greedy 但後來又不太確定了 原因如下
背包問題有兩種(其實有很多種啦 我是說比較常見的的那兩種)
第一種是 fractional knapsack problem ---(a)
解法是greedy
第二種是 0/1 knapsack problem ---(b)
解法是DP (不保證複雜度,因為是NPC)
剛開始想用greey,因為覺得這題發電廠是(a)
但其實題目是說「每單位發電量的cost XXX」
重點是「每單位」 也就是電量是一個單位、兩個單位、三個單位...這樣拿
就不能拿fraction了耶 所以greedy好像會破功?
而且題目明顯不是0/1 knapsack problem 所以要DP的話遞迴就要自己想了
思考如下
N1F1+N2F2+...+NAFA = B 所求為min(N1C1+N2C2+...+NACA)
其中:
Ni: 第 i 廠發電次數
Ci: 第 i 廠發電一次的 cost
Fi: 第 i 廠發電一次所產生的電量
要判斷是否存在 optimal substructure 其實這一題可以舉一個例子
A = 3
F1 = 1
F2 = 2
F3 = 5
C1 = 0.5
C2 = 2
C3 = 5
B = 11
最小的 cost 是 兩個 F3 + 一個 F1, cost 是 10.5
有 optimal substructure表示
欲求 i,能從 i - 1 之前的答案湊出來
當然之前的 i-1 都找到 optimal solution
而且組出來的 i 也會是 optimal solution
但是以這個例子
假如我求 B/2 = 5.5
B/2 = 5.5 的 optimal solution 應該是 一個 F3 + 一個 F1 = 5.5
雖然多產生了 0.5 的電量 但它的確符合要求
但不見得這兩個 B/2的 optimal solution 組出來的 B=11 會是最佳解
因為這樣組出來的解是 11
但最佳解卻是兩個 F3 + 一個 F1
所以就算它有重覆的子問題 也很難拿來做 DP 至少我想不大到
PS. 請問怎麼推文呀 這邊跟ptt不一樣好不習慣QQ
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kub from 140.115.52.48 (中央大學)
▲ kub 改@2008/03/26 Wed 20:41:10
→ sa072686 推:輸入% 0326 20:47
→ kub trying:trying 0326 20:53
作者: sa072686 at 08/03/26
就我的理解,我講一下好了。
如果題意有理解錯再跟我講一下。
簡單地說,因為同一間發電廠每單位電都一樣貴嘛。
同樣每單位電量當然greedy取最便宜的。
取到發電極限後,再找次便宜的,…,持續下去即可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.173 (台灣師範大學)
→ kub 說:喔QQ 0326 21:12
→ kub 說:我耳殘 學長說的是「演化式計算」(ex:基因演算法) 0327 17:46
→ sa072686 推:唔,沒聽過的東西(思) 0327 19:36
作者: sa072686 at 08/03/28
喔,感謝drazil跟我解釋了題意
之前誤會了,以為每單位是指每間發電廠的單位電量都一樣多,
如果不一樣的話就不能用了,可能要用knapsack來做。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.45.79 (台灣師範大學)
→ PG 推:....|| 我也是以為可以分割 0328 09:40
→ gloompisces 推:和ACM 990是類似的題型? 0328 10:15
→ sa072686 推:差不多吧,舉個例是某發電廠可以發電5單位,1單位電量3 0328 12:08
作者: kub at 08/03/28
以下是跟學長的回信:
「
真是用功好學啊 @@
> 1. 每個發電廠的最大供應量是否有極限?
是,而且每個電場的最大供電量都不一定。
> 2. 所需之供電量是否為整數?
否,都是 real number,基本上這一個題目是一個 real parameter
optimization 的型式。
> 但是每座發電廠供應的假如都是整數 那複雜度應該較高
否,每個電廠發的電量是 real number。
> 3. 有沒有我沒有想到的問題細節?
基本上這不是我在做的題目,所以我也算是一知半解,附檔有之前我們 lab
在研究的人出的paper,如果想更了解一點的話可以看一下。
這個題目通常叫做 economic dispatch problem (ED problem)
可以去 google scholar 找找看,如果你有興趣的話啦。
」
附檔我傳到便當狗惹Q<>Q
http://www.badongo.com/file/8510391
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kub from 140.115.52.48 (中央大學)
→ DJWS 推:如果是real number,那就用greedy解就行啦。 0328 23:15
作者: sa072686 at 08/03/29
main(){};
這世界病了…
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.173 (台灣師範大學)
→ godgunman 推:超阿 0329 15:24
→ PG 推:借轉 囧 0329 15:28
φ PG 轉:到 [PG] 看板,于 2008/03/29 Sat 15:28:37
→ chensc 推:靠 真的過了=口= 0330 10:18
作者: sa072686 at 08/04/02
到底怎麼寫好呢?我估了一下DFS的複雜度是3^11*80字元上下,約1000萬吧
還是該把數字全部轉存下來,然後線性時間跑過去呢?
跑好慢,一直TLE。TLE人數明明就不多…而且前面跑好快…
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.61.14 (台灣師範大學)
→ seanwu 推:沒cut第四 = = 0403 10:44
→ seanwu 說:線性時間跑過去是什麼意思啊? 0403 10:44
→ sa072686 推:直接存整數的意思,我現在是存表達式然後分析 0403 11:01
作者: kelvin at 08/04/08
其實我想了很久應該在版主的哪個版報到
不過看來看去好像都是ACM文居多@@
板主真認真啊XDD
總之抱歉斷了認真文啊XD
更低調害羞的球主來報到啦~
順便祝二階加油!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kelvin from 61.230.196.195 (中滑一番)
→ devilqxect 推:球主好威阿!!! 0408 14:01
→ sa072686 推:喔喔好威的球主來報到了XDDD 其實這裡的文斷好久了(茶) 0408 14:20
→ sa072686 推:最近都在弗基斯特的個板XDDD 這裡等上大學有時間再來好 0408 14:21
→ sa072686 推:好經營這樣∼ 0408 14:22
作者: sa072686 at 08/04/09
作者 sa072686 ( ) 站內 sa072686
標題 [筆記] 名單
時間 2008/04/09 Wed 22:43:26
姓名 學校 年級
吳彥德 國立臺南第一高級中學 3
吳哲仰 國立臺南第一高級中學 2
林均達 高雄市立高雄高級中學 3
邱榮斌 臺北市私立延平高級中學 3
姜俊宇 臺北市立建國高級中學 2
高皓成 國立臺中第一高級中學 3
許祐程 國立臺灣師範大學附屬高級中學 2
郭冠宏 高雄市立高雄高級中學 3
陳冠文 臺北市立成功高級中學 3
陳碩甫 高雄市立高雄高級中學 3
楊涵傑 臺北市立建國高級中學 3
鍾明家 國立臺南第一高級中學 2
合計12名
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌────────────────────
─
by_sa072686 from_203.204.38.30(和信超媒體)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ ducksteven 推:大大好棒! 0409 23:24
→ DJWS 推:改天版主上來北部 我請你吃頓飯吧 XD 0410 10:36
→ sa072686 推:喔喔謝啦XD 不過選訓營都要九點才放人耶,出不去XD 0410 10:39
→ DJWS 推:這麼嚴格呀 @@" 0410 10:46
→ sa072686 推:嗯,而且沒有休假的 0410 11:25
→ bruce3557 推:其實清明節可以耶XD,可是大家都懶 0410 20:58
→ sa072686 推:還要請假太麻煩了啦XDDD 不如開團大戰幾場(?) 0410 21:11
→ kelvin 推:推樓上XDDD 0410 21:23
→ godgunman 推:推樓上上XDDD 0410 22:11
→ devilqxect 推:球主要殺人啦~快逃啊啊啊~~~ 0410 22:20
→ kelvin 推:超越神的應該是ggm吧XD 0410 22:25
→ bruce3557 推:這就讓我想到社長 0410 22:31
→ bruce3557 推:從殺人如麻變被殺如麻 0410 22:31
→ csftwpt 推:還好啦,這幾天已經可以殺一兩隻了 XD 0411 21:40
→ drazil 推:我還沒殺過半隻QQ 0412 00:11
→ sa072686 推:我一場只能殺一兩隻XD 不過如果沒選到威角就被殺假的 0412 09:17
→ drazil 推:威角= =+ 有這東西@@?? 0412 11:29
→ sa072686 推:呃,也許該說有的角色是輔助殺人、本身比較難殺人XD 0412 11:49
→ drazil 推:哪個哪個????? 0412 14:28
→ sa072686 推:我也很難跟你講哪個啊,而且會玩的玩起來還是很威XDDD 0412 17:34
→ sa072686 推:我也算是新手,這問題給高手們回答好了(炸) 0412 17:34
→ devilqxect 推:簡單!新手我建議先玩遠距離的,如黃忠.貂禪.于禁... 0412 20:18
→ devilqxect 推:都是敏英,而且6等大絕都很好殺人..強力推薦!! 0412 20:19
→ gba356 推:啊..魔獸三國已經取代泡泡了呀.. 0412 20:33
→ sa072686 推:多人同樂 >> 雙人同樂… 0412 20:52
→ devilqxect 推:樓上高手說得泡泡是...? 0412 20:52
→ bruce3557 推:puyo!!!!!!!!! 0412 21:20
→ sa072686 推:樓樓上未免太不專業…XD 0412 21:53
→ gba356 推:我玩了整個高一下還只會用司馬懿XD 0412 22:23
→ sa072686 推:其實我還沒玩過三國…(茶) //或者說很久前玩過兩次 0412 22:33
→ drazil 推:然後我還是沒得到答案QQ 0414 20:34
→ sa072686 推:你可以多爬ptt和巴哈的魔獸板,或是多丟水球問人吧XD 0414 22:08
→ sa072686 推:喔不,這篇快因魔獸而被推爆了XDDD //難得有文被推爆耶 0414 22:08
→ gba356 推:到多少會爆呀? 0414 22:26
→ kelvin 推:不然dotA九十隻腳色每隻都玩一次就知道了XDDD 0414 22:26
→ SKYLY 推:到 Z 就差不多了吧XD 0415 00:38
→ SKYLY 推:據說推爆會變成 ∞ ?? 0415 00:39
→ tmt514 推:真的嗎? 0415 00:49
→ PG 推:最後一推? 0415 03:30
→ PG 推:爆了 XD 0415 03:30
→ sa072686 推:啊這…XDDD 0415 07:37
→ godgunman 推:再來補一推!! XDDD 0415 09:58
→ sa072686 推:被咻碰到爆了啦XDDD 0415 10:20
→ DarkPrinces 推:說我現在沙王大部分都可以血積石charge30以上了 0420 14:44
作者: PG at 08/04/17
給你一個數,求出具有相同質因數的下一個數字
看範例比較快
例如說 100
100= 2^2 * 5^2
那麼 你就是要用2跟5湊出比100大的最小數字
最好的解答是 2^4 * 5^1 = 160
另外,這題其實時間限制不嚴格,不要被嚇到了 囧
(我的跑1.多秒)
就...just do what you want
昨天被討論版上的人嚇到,花了很多時間下去研究有沒有比較快的歪解....
--
透き通る 夢を見ていた やわらかい 永遠 TFcis7教學 PG
我夢見了一個透明清澈的夢 柔軟的 永遠的夢 在西子灣大學資訊工程系
風のような かすかな䟕が 高い空から僕を呼んでいる 醉生夢死中
有如微風一般柔弱的聲音 從高空呼喚著我 http://PG.miko.tw
このまま 飛び立てば 何𠯆にだって行ける
就這樣子 飛向天空的話 無論哪裏都能到達 メグメル Clannad OP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 140.117.183.63 (PG的妄想鄉)
作者: PG at 08/04/24
話說
這題如果用Greedy一直取兩人距離最短的組合
應該是錯的吧...
我也覺得是錯的
可是目前我居然舉不出反例 Orz
有人可以幫忙想一下反例嗎
--
透き通る 夢を見ていた やわらかい 永遠 TFcis7教學 PG
我夢見了一個透明清澈的夢 柔軟的 永遠的夢 在西子灣大學資訊工程系
風のような かすかな䟕が 高い空から僕を呼んでいる 醉生夢死中
有如微風一般柔弱的聲音 從高空呼喚著我 http://PG.miko.tw
このまま 飛び立てば 何𠯆にだって行ける
就這樣子 飛向天空的話 無論哪裏都能到達 メグメル Clannad OP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 140.117.183.63 (PG的妄想鄉)
→ DJWS 推:Minimum Weight Perfect Matching 0424 21:02
→ DJWS 推:反例...(1,1)(5,5)(6,6)(10,10) 0424 21:08
→ PG 推:瞭解了,十分感謝∼ 我是用DP過這題拉 不過我有同學說他要用 0424 21:15
→ PG 推:Greedy 當時我居然想不出反例 QQQQ 0424 21:15
→ PG 推:另外 這題有機會用網路流來解嗎,總覺得有點像是配對問題QQ 0424 21:16
→ DJWS 推:借問一下用DP要怎麼寫啊? 0424 23:38
→ PG 推:不能算是DP 0424 23:54
→ PG 推:應該是說 DFS+Memorize 0424 23:55
作者: sa072686 at 08/04/25
嗯,反例有了…
DP 的話嘛,以 bit-mask 記錄狀態為哪些人已有組隊、哪些人仍未組隊,
然後記錄在該狀態下,最佳配對方式的花費為何。
轉移方式為,枚舉拿掉兩個狀態為「已有組隊的人」組成一隊,
再算上剩下的人的最佳配對方式,取最佳者為最佳解。
是 2^n 的 DP。
※ 引述《PG (行走在消逝中)》之銘言:
> 話說
> 這題如果用Greedy一直取兩人距離最短的組合
> 應該是錯的吧...
> 我也覺得是錯的
> 可是目前我居然舉不出反例 Orz
> 有人可以幫忙想一下反例嗎
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.122.45.241 (台灣師範大學)
→ DJWS 推:恩...了解囉 謝謝 :) 0425 12:44
作者: jacky at 08/04/25
我在寫「516:Prime Land」上傳發生 Runtime Error,
範例測資輸入時都沒問題,最大值也不會錯。
能不能請大家看看?
這是我的程式碼:
http://rafb.net/p/WIg6f451.html
不過,中文部分有問題,以下是註解: (由上而下)
//建質數表 (有檢查過,應該沒問題)
int a, b; //用來存切出來的數
flag = true; //藉 flag 來用 -> first
//flag = true -> 第一次輸入,不加空白 (對一行而言)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by jacky from 192.168.4.35 (台狼一中桑靈餓)
→ sa072686 推:呃,strtok() 有可能回傳 NULL 吧…這樣寫有點危險 0425 13:35
→ sa072686 推:data[i] 也有可能會是 0 吧?很多地方沒填到。 0425 13:37
→ jacky 推:data[i]應該會填滿for(int i=41;d<=3512;i++) 0426 13:21
作者: Tommy at 08/04/26
啊哈XDD
1500 啦 XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.145.48 (中滑一番)
→ Michelle 推:湯米超幼稚的(指) //其實自己也一樣 XD 0426 14:49
作者: ducksteven at 08/04/28
http://i154.photobucket.com/albums/s279/chitsaou/Picture1.png
這是在我們學校的傳單
學弟你紅了 (誤)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by ducksteven from 140.122.230.57 (台灣師範大學)
→ SKYLY 推:學長你紅了!!(茶) 0428 23:09
→ sa072686 推:啊這,我紅了XDDD 0429 07:42
作者: DJWS at 08/04/30
不知道是為啥會錯
麻煩各位幫忙看看
註解寫的非常簡略...請多見諒
http://src.wtgstudio.com/?30170b
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 140.112.90.81 (台北帝國大學)
→ windows2k 推:我哪知道(誤) 0502 12:29
→ DJWS 推:樓上... 0502 12:55
→ windows2k 推:這位不是DJWS大神 @@~~ 0502 16:20
→ DJWS 推:可以幫忙看看嗎 (^_^")> 0502 17:43
→ windows2k 推:等到我在O2交到新朋友再說 XD 0502 18:33
→ SKYLY 推:等 sa 學長回來看吧 XD" 0502 19:03
→ DJWS 推:結果還是沒下文 看來大家都想不出個結論來 XD 0505 11:21
→ sa072686 推:呃,c[v]++邊算minimum會出事吧?XD 0505 12:41
→ DJWS 推:AC 0505 12:46
→ DJWS 推:AC了∼ 感謝sa幫忙 XD 0505 12:47
→ sa072686 推:不會啦XD 很高興能幫得上忙,恭喜∼ 0505 12:49
作者: sa072686 at 08/05/05
嗯,我想這邊強者群應該很多吧…
想來問一下,是否有人有意願和我合作完成這個 project 的?
內容大致如下:
----
嗯,命名一直是最頭痛的事…但這次是我自己要開發的。
反正拿不到企劃書了,也就不好沿續那名字。
畢竟目的還是一樣的,嗯。那麼…
暫定「AC Island」吧(茶)
主要功能嘛,差不多等於 web 版的 sa072686 板 in sony.tfcis.org。
以擺放演算法與資料結構,和各地題庫的題目翻譯與解法為主。
同時會加入帳號的制度,將量身打造一些方便於自己筆記、統計
以及存放程式碼的功能,也會有討論用的地方。
預計使用語言是 Ruby on Rails。
如果有意合作,請用站內信或是水球和我聯絡。
同時這篇應該會想辦法轉到各大 bbs 去拉人合作。
----
大致是這樣,要幫忙生產文章也非常歡迎∼
如果可以的話,幫我轉到各大 bbs 或其它地方幫忙拉拉人吧∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.54 (台狼一中桑靈餓)
→ sa072686 推:噢對了,開板了喔…我解隱好了 XD 0505 18:57
→ sa072686 推:板名AC_Island 0505 18:58
→ windows2k 推:其實我把不到妹之前都在做類似的事情 0505 19:46
→ windows2k 推:不過現在還是把不到妹, 科科 0505 19:46
→ windows2k 推:不過我是弱者, 請洽DJWS去 0505 19:47
作者: sa072686 at 08/05/06
首頁的公告。
Quick Submit
Now you can submit your codes without having to go through the problem's
description. Just click on the 'Quick Submit' option in the left menu, fill
in the form and... there you go!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.54 (台狼一中桑靈餓)
作者: sa072686 at 08/05/10
嗯以下開始放以後要擺 AC_Island 的文吧。
盡量同步,但不保證會不會漏XDrz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/05/10
ACM 387 - A Puzzling Problem
難易度:6
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/3/387.html
這個問題的目標是寫個程式,將 1 到 5 個積木塊排成正方形。以下是個例子:
█ █
███ █ █ █
█ █ ██ █ ██
█
A B C D
這些積木塊不得旋轉與翻轉,且每一塊都要用到。一組積木塊可能有許多種排法,
也可能排不出來。以下的範例將使用上述的積木塊。
AAAB AAAB
ACAB D ADAB
╳CBB D CDBB
╳╳╳B DD CDDB
輸入:
輸入包含許多待解測試資料。每組第一行告訴你這組有幾塊積木,接下來是每一塊的
描述。每塊第一行有兩個整數,代表這塊大小為幾列、幾行,接下來為該積木塊的外形。
外形包含 '0' 和 '1','1' 代表積木的部份,'0' 只是填充空白部份用。例如上述的
積木塊A將會用以下的形式:
2 3
111
101
這些積木塊將依它們在輸入中出現的順序編號。第一塊是#1,下一塊是#2,…依此類推。
每塊都將是合法的,並且不會大於 4 * 4。
若有一組積木塊數為 0,則表示輸入結束,並且這組不需要處理。
輸出:
你的程式需如範例一般回報一種可能的解,使得能將所有積木排成一 4 * 4 大小的
方形。第一塊所擺放的地方將要輸出 '1',第二塊則為 '2',依此類推。每組測試資料
間需以一空白列隔開。
如果有多組解,任一皆可。如果無解,則回報 "No solution possible"。
提示:
用 DFS 嘗試所有可能情況即可。
詳解:
使用 DFS 來解,嘗試所有可能情形就可以了。嘗試的時候有個技巧,那就是它要求的,
每一格都要填滿。故可在 DFS 枚舉時,掃過地圖上的每一格,如果還沒填滿就試著放還
沒放過的積木,並且放了之後要讓這格填滿。如果有沒填滿的格子,每塊積木都不能讓它
被填滿,則此格以後一定也無法被填滿,就可以不要再往下試了。
資料結構的部份,搭配這個做法,記下所有積木時可以用一個array來記,而不用二維的
圖來記。就是,把積木非空的地方減去最左上角的座標,這樣可以將座標標準化為從(0,
0)開始,而(0,0)必不為空。這樣在放積木時,才不容易造成積木難以對齊以填滿我們想
填滿的格子的窘境,也可以略過檢查積木空的部份的時間,一舉數得。
在新系統可以跑0.050,名次是第一。
----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/05/11 Sun 00:10:07
作者: sa072686 at 08/05/11
ACM 519 - Puzzle (II)
難易度:7
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/5/519.html
小 Barborka 正要學怎麼拼拼圖。她從只有十五塊的小拼圖開始,而她父親也試著
玩拼圖。為了讓拼拼圖更有挑戰性,他把所有的拼圖都蓋了起來,因此他看不到拼圖上面
的圖案。現在他正試著把它拼回去,可是呢,一般而言拼圖是必定存在解沒錯,
但他現在不確定 Barborka 是否有把其中一些拼圖給換成另一塊拼圖的。請寫個程式
讀入拼圖的描述後,可以判斷此拼圖是否可以拼成某種特定大小的矩形,來幫助他吧。
輸入
測試資料包含許多個區塊。除了最後一組以外,每個區塊都描述了一個拼圖。在區塊
的第一行將會有兩個整數 n 和 m,0 < n, m <= 6,中間以空白分開。這兩個整數
分別代表列數和行數,接下來 n*m 行則描述所有的小拼圖塊,每塊為寬三公分、
長四公分的矩形,但四個邊可能會有凹凸。一個邊只會有以下其中一種情形。
* 這個邊並沒有凹凸,也就是說,它是平的。這只在該邊作為拼圖邊界時出現。
* 這個邊在中間的部份是凸的。
* 這個邊在中間的部份是凹的。
如我們平常所知,兩塊拼圖能拼在一起僅當它們相鄰的邊恰為一凹一凸時。我們會以 F
代表平的,O 代表凸的,I 代表凹的,每塊拼圖以四個字母分別代表它的上、右、下、
左四個邊。為了簡化問題,這些拼圖將只能照它們被描述的方式來拼,也就是說,
它們並不能被旋轉。
每一個區塊之後均有一空白行。最後一個區塊只包含一行 0 0,也就是說,兩個 0 中間
以一個空白分開。
輸出:
輸出需依據輸入的區塊,給出 YES 或是 NO 代表相對應的區塊有沒有解。對於最後一個
區塊,也就是「空的」區塊,不需要輸出任何東西。
提示:
用 DFS 嘗試所有可能情況即可。
詳解:
使用 DFS,首先可知拼圖最多只有 3^4 = 81 種,因此可將同種類的拼圖合併,
如此在拼的時候不會出現重覆試了數次相同的拼圖,尤其擁有邊緣的並不多,
因此重覆性是相當大的。如果直接嘗試效率可能不夠高,將重覆視為相同就可以 AC 了。
----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/05/11 Sun 00:13:34
▲ sa072686 改@2008/05/11 Sun 00:13:55
作者: SKYLY at 08/05/11
ACM 673 - Parentheses Balance
難易度:3
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/6/673.html
中譯:詳見 Lucky Cat 的 ACM 園地
( http://luckycat.kshs.kh.edu.tw/homework/q673.htm )
輸入: 詳見中譯。
輸出: 詳見中譯。
提示: 堆疊 (stack) ; 若遇到右括號時,則要匹配成功的條件是...?
詳解:
經典的括號匹配問題。 看起來無從下手,但其實很簡單。 我們只要仔細看看所謂
匹配成功的條件為何,接著我們利用題目的定義來想想怎麼樣才會匹配成功。此時,我
們發現,當遇到右括號時,如果要匹配成功,則有以下兩種情況:
1. ()[] // 這樣遇到右括號時,左邊都剛好是可以配對的左括號(同一種),
故配對成功。
2. [()[]] // 另外這種成功的情況則是當遇到右括號時,左邊是數對「完整的括
號」,接著是一可以配對的左括號(同一種),這樣亦成功。
如此了解了匹配成功 (即題目所言之「正確的運算式」) 的條件及情況後,我們不難發
現,若我先只考慮第 1 種情況,則當遇到一個右括號時,必須前面正好是相呼應的左
括號,此時,如果我們將已配對完成的括號略去不看的話,則像第 2 種情況,其實就會
自然的被簡化成是第一種情況了,即 []。
由上面的討論我們知道可以使用資料節構 -- 堆疊 (stack) 來處理這個問題,因為
堆疊的「後進先出 (LIFO)」特性非常適合這個問題。 做法很簡單,我們從頭開始讀取一
運算式,每當遇到左括號如 ( 或 [ 時便放入堆疊,遇到右括號如 ) 或 ] 時便檢查堆疊
頂端是否為相呼應的左括號,如果是的話,彈出 (pop) 此左括號,再繼續讀下一個字元
(意思即為剛剛所說的「已配對完成的括號略去不看」) ;若堆疊頂端不是相呼應的左括
號,則匹配失敗並停止判斷。如此這般從頭檢驗到尾便可以判斷括號是否有匹配成功了!
而這個問題值得令人注意並需要小心的地方有幾點:
1. 注意只剩下左括號的情況 (即檢查完整條運算式後堆疊裡還剩下左括號) ,則應
該是匹配失敗才對。
2. 也要注意在堆疊已空時還遇到右括號的情況,這樣會讀不到堆疊的東西,很容易
會 Runtime Error。(但其實只要在查看堆疊頂端時先檢查是否為空堆疊即可)
3. 因為待測資料不只一組,故每判斷完一組就要清空堆疊,否則剩下來的左括號可
能會影響到下一組。
實際執行時間: 0.030 sec. ( 0.050 sec. with STL )
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by SKYLY from 123-194-150-166.dynamic.kbronet.com.tw (沒有故鄉)
▲ SKYLY 改@2008/05/25 Sun 16:34:30
作者: sa072686 at 08/05/11
ACM 560 - Magic
難易度:6
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/5/560.html
一個廣為人知的大型電腦工廠正在進行一件非常秘密的專案。該專案非常機密,
以致於我們不能告訴你製作者的名字,但我們可以告訴你一些關於它的事情。
它被稱為:Non-Deterministic Magic Holistic New Age Computer (NDMHNAC)。
這是一個電腦的重大突破,它將顛覆所有傳統的資訊領域的觀念以及硬體的設計。
其中一個能力便是,它能夠用很快的速度計算非常大的數字。
不幸的是,它有點小瑕玭。它的線路是基於魔法力的,因此它的計算會像傳統的線路
受磁場干擾一般,也會被魔法力所干擾。就我們所知,3 和 7 有著非常強大的魔法力。
因此這些數字應該避免使用,因為它們會干擾、甚至破壞該機器的線路。該機器
內部使用的演算法並不會產生我們所不希望的數字,唯一的問題就是怎麼去避開輸入
中所出現的,我們不樂見的數字。
為了解決這個問題,我們使用一台普通的電腦作為預處理用。這台機器必須將我們
所不希望的數字,轉換為可以被接受的數字。(也許你會懷疑,改過輸入之後,
電腦怎麼能夠算出正確答案?這問題顯示了你還陷在對於電腦的舊思維中。
即使輸入是錯的,這台電腦也可以得到正確答案!(而傳統的電腦則常常給予錯誤
的答案,即使輸入是正確的!))
數字將會是非負整數,可能非常大,以十進位表示。如果符合以下條件,則我們
不希望這數字出現。
* 它可以被 3 或 7 整除。例如,6、14、21。
* 在十進位制的表示法中,有 3 和 7 出現。例如,13、27、37。
* 在十進位制的表示法中,有同一數字連續出現了三次或七次,例如:2411145,
10000000。
注意:數字 0 並不需要避免。
這些我們不希望出現的數字,可以透過以下的規則被轉化為我們可以接受的數字。
* 如果一個數可以被 3 整除,則把它除以 3。
* 如果一個數可以被 7 整除,則把它除以 7。
* 如果十進位制表示中有 3 出現,則拿掉它,即使可能造成數字以 0 開頭。
* 如果十進位制表示中有 7 出現,則拿掉它,即使可能造成數字以 0 開頭。
* 如果十進位制表示中有一位數連續出現 3 次,則拿掉它,即使可能造成數字
以 0 開頭。
* 如果十進位制表示中有一位數連續出現 7 次,則拿掉它,即使可能造成數字
以 0 開頭。
* 如果最後沒剩下半個數字,則視作 0。
現在已經聘了一位傳統的程式設計師來實作這些規則。在閱讀完之後,他開始抱怨
這些規則非常地不清楚。例如,第三條規則是拿掉一個 3,然而應該要拿掉所有的 3,
還是任意一個,或是只有第一個?又,每條規則是可以重覆使用,還是應該先全部跑過
一遍再從頭來,又以何種順序?有太多種的方法,甚至可以給出幾千種不同的答案。
新機器的設計者們回答,只要合法都可以接受,答案是什麼都無所謂。聽完之後那位
程式設計師覺得很不舒服,於是設計者們便說:「好吧,那給我們最大的答案好了。」
於是那位程式設計師便自找麻煩地多了一個要求。
寫個程式照著以上的規則,對於給予的數字,找出最大的可被接受的數字。
輸入:
第一行代表接下來有幾組測試資料。接下來的 n 行每行分別有一個數字。數字絕不會
超過 21(21 = 3 * 7) 個字元。數字不會以 0 開頭。
輸出:
輸出有 n 行,每行輸出對應的測試資料計算出的,最大可被接受的數字。
範例輸入
3
999
273
2331
範例輸出
11
2
11
提示:可用 DFS。
詳解:
可以用 DFS 嘗試所有可能的數字。規則要照著做,因為之後產生數的變數很大,
所以不要錯過任何一條看起來「可能比較不好」的規則。在做的時候每次都要
試過所有規則,但計算過的數字可以不必再計算。可輔以二元搜尋樹或是雜湊表,
來判斷是否重覆,整體上不會太難,不過規則處理上相當繁瑣。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/05/11
ACM 274 - Cat and Mouse
難易度:5
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/2/274.html
在一個有很多房間的屋子中住著一隻貓和一隻老鼠。他們分別選擇了一個房間作為牠們
的「家」。牠們常在屋子中四處走,但是貓必須要走「貓門」才可以從某一房間走到
下一房間,而且貓門是單向的。老鼠亦同,必須走「鼠門」而且也是單向。貓門不能
被老鼠通過,鼠門亦不能讓貓通過。
給你一張地圖,你必須寫個程式回答:
一、是否存在一條路徑可使得貓和老鼠在某一個房間相遇,或是
二、是否老鼠可以找到一條散步路徑,從牠的家開始,走過至少兩個房間,然後再走回
牠的家,並且路上不會遇到貓。(即,不管貓怎麼走,老鼠都不可能遇上貓。)
(詳見題目的圖)
舉個例,在此地圖中,貓可以在房間 1、2、3 遇到老鼠,而老鼠可以走房間 5 到 4
再走回來,而不會遇上貓。
輸入
輸入第一行有一個數字代表有幾組測試資料,描述於下。第一行之後有一個空白行,
每組測試資料間亦有一空白行。
輸入包含許多整數,用以描述屋子。第一行有三個以空白分隔的整數:第一個整數為
房間數,第二個為貓的家,第三個則為老鼠的家。接下來有零或多行,每行有兩個
正整數,以空白分隔。這些正整數對 A,B 表示有貓門可以從房間 A 走到房間 B。
在這些之後會有一行包含兩個以空白分隔的 -1,接下來零或多行代表鼠門,格式
同貓門。
最少有一間房間,最多不會超過 100 間,所有房間從 1 開始依序編號。你可以默認
輸入的所有正整數均為合法房間編號。
輸出
對於每組測試資料,輸出必須依照以下所述之格式。連續兩組測試資料的輸出間,
需有一空白行分隔之。
輸出包含以空白分隔且以換行字元結尾的兩個字元。如果貓和老鼠有可能在某一房間
相遇,則第一個字元為 Y,反之則為 N。如果老鼠可以有一條路徑從家開始,
經過至少兩個房間後回到家,且絕不會和貓相遇,則第二個字元為 Y,否則為 N。
提示:找出所有走得到的地方,就輕鬆了。
詳解:
找出所有貓和老鼠所能走到的地方,然後就可以輕鬆判斷第一個問題了。
這可以透過 DFS 來完成,只需要 O(n)。第二個問題也不難,看以 DFS 還是 BFS
實際走走看,把貓走得到的視作不能走,如果還能走回家就是了。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: SKYLY at 08/05/11
ACM 10959 - The Party, Part I
難易度:4
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/109/10959.html
中譯:詳見 Lucky Cat 的 ACM 園地
( http://luckycat.kshs.kh.edu.tw/homework/q10959.htm )
輸入: 詳見中譯。
輸出: 詳見中譯。
提示: 廣度優先搜尋 (BFS) ; 由主人開始一層層向外擴展。
詳解:
這題是標準的 BFS 題目,照題目敘述把主人當作開頭,然後一層一層的向外擴展。
我的做法是開一個記錄廣度 (在這題即為要求的 Don Giovanni number) 的整數變數,
然後每外擴展下一層,它的廣度就是上一層的廣度加一,並在 visit 每一點時將其廣度
記錄到一個記錄陣列中,如此這般,當 BFS 走訪結束後,每一個人在紀錄陣列中所對應
到的值,即為他的 Don Giovanni number 。
這題使用 BFS 恰恰符合題目的定義,即「和 Don Giovanni number 是 n 的人跳過
舞『且沒有和 Don Giovanni number 比 n 小的人跳過舞的人』,他們的 Don Giovanni
number 是 n+1」而因為 BFS 走訪的特性,某一個節點必定會在跟 Don Giovanni number
為 m 的人跳過舞前,先跟 Don Giovanni number 為 n 的人跳過 ( m ≧ n ) ,故不用
擔心有這種衝突的情況發生。
實際執行時間: 0.000 sec.
Rank: 10 / 409
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by SKYLY from 123-194-150-166.dynamic.kbronet.com.tw (沒有故鄉)
作者: SKYLY at 08/05/11
ACM 11015 - 05-2 Rendezvous
難易度:5
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/110/11015.html
中譯:詳見 Lucky Cat 的 ACM 園地
( http://luckycat.kshs.kh.edu.tw/homework/q11015.htm )
輸入: 詳見中譯。
輸出: 詳見中譯。
提示: 圖論 (graph) 之 求最短路徑長 (shortest path)。
詳解:
給人名跟距離要找最少的總耗費量 (其實就是一點對其他點之最短總距離) ,故我
們可以使用 Floyd-Warshall 演算法來求每一點對各點之最短路徑長。
我的做法是先將人名用一個字串 (string) 陣列分別記錄下來,然後再利用 Floyd-
Warshall 演算法將每一點之間的最短路徑長求出來。而所謂 A 的總耗費量,就是 A 到
其他點的距離總和,故只要找出最小總耗費量的端點,再印出相對應的人名即可。
實際執行時間: 0.000 sec.
Rank: 7 / 526
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by SKYLY from 123-194-150-166.dynamic.kbronet.com.tw (沒有故鄉)
▲ SKYLY 改@2008/05/11 Sun 18:46:14
作者: sa072686 at 08/05/11
ACM 345 - It's Ir-Resist-Able!
難易度:6
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/3/345.html
在電子電路學中一個常見的元件是電阻器。每個電阻器有兩個端點,在電流流過時,
部份電流會被阻擋住並發出熱。至於程度則看它的數值,稱之為電阻,單位稱為歐姆。
以下為電阻器的圖形表示法:
<IMG>
當兩個電阻器如下圖一般串聯起來,則相當於一個電阻器,擁有它們兩個的電阻和。
舉個例子,如果現在有一個電阻 100 歐姆和一個電阻 200 歐姆的電阻器串聯起來(
下圖 A 點到 B 點)將會擁有 300 歐姆的點阻。當然,串聯更多的電阻也一樣。
<IMG>
電阻器也常被並聯,如下圖所示:
<IMG>
如果有兩個電阻器,電阻分別為 100 和 150 歐姆,則並聯之後,A 點到 B 點的電阻
相當於:
1 1 1 300
─────── = ─────── = ─── = ── = 60 歐姆。
1/100 + 1/150 3/300 + 2/300 5/300 5
並聯三個電阻器也使用相同的規則,所以 100 歐姆、150 歐姆和 300 歐姆的電阻器
並聯後會是 50 歐姆,如下:
1
───────────
1/100 + 1/150 + 1/300
在本題中會給你許多電阻器的描述以及連結方式。每個連結點(即電阻器的一端)
將以不重覆的正整數命名之。每個電阻器則以其兩端的點的編號,以及它的電阻表示之。
例如以下的輸入
1 2 100
告訴我們有個 100 歐姆的電阻器接在點 1 和點 2 之間。一對被串聯的電阻器
將以如下方式表示之:
1 2 100
2 3 200
這裡,我們將 100 歐姆的電阻器連結在點 1 和 2 之間,200 歐姆的則連結在點 2 和 3
之間。兩個電阻器並聯的話則如下:
1 2 100
1 2 150
一旦你知道各電阻器的電阻以及它們連結的方式,就能夠利用以上的規則輕易地
計算出兩端點間的總電阻。當然,有些連結方式光是利用以上的規則是不夠的;不過
它們並不會出現在此題目中就是了。
註:
一、注意有些測試資料中,部份電阻器並沒有電流流過。例如最後一組範例
試資料,連結點 1 和 2 的電阻器並沒有被使用到。必須處於能從一個端點流到
另一個端點的路徑上的電阻器,才會有電流流過。
二、沒有任何一個電阻器的兩端會接在同一點上。意即,電阻器兩端點的編號
必不相同。
輸入
可能有一或多組測試資料,每組以包含三數字 N、A、B 的一行開始。A 和 B 代表
要求電阻的兩端點的編號,N 則是電阻器數目,並且不會超過 30。在最後一組測試
資料之後,會有一行僅包含三個 0 的一行。每一行 N A B 接下來的 N 行,均代表
一個電阻器所連結的兩個端點,以及它的電阻,以實數方式表示。
輸出
對於每組測試資料,先輸出一行包含測資編號(為從 1 開始的連續整數),以及
該圖中精準到小數點以下兩位的電阻。
提示:
建圖之後,將並聯的部份內縮為一個節點,不連通者捨棄,變成全部串聯。
詳解:
將要求的兩端點先縮掉所有頭尾串聯的點,設縮完後,兩端點為 x, y,
則將所有連到 x 的點找出來,設 z,遞迴計算所有 x=>z + z=>y 即可。
需注意有可能電阻為 0,除下去會爆炸,但是仍算連通,就當作是線路。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/05/14
ACM 10092 - The Problem with the Problem Setter
難易度:6
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/100/10092.html
翻譯:
參加今年 Intra-BUET Programming Contest 的學生非常多。實驗室中無法收容這麼多的
學生,因此只好舉行一個比賽來篩選。比賽為筆試,共有至多 100 道題目,被分成至多
20 種類別,而我則被指派為分類者。
一開始,這工作看似非常簡單,我只需要將大約 1000 道題目歸類到適合的類別即可。
但是問題來了:當我收到題目後,發現有些出題者並不確定這些題目確切的類別,因此
便寫下了許多種類別。由於一道題目只能夠放在一種類別中,分配這些題目便變得不是
那麼容易。
我知道可以寫個程式幫我自動解決這個問題,但我並不喜歡寫程式,因此我需要你的幫
助。
輸入
輸入將包含許多組測試資料。每組測試資料第一行有兩個整數 nk 和 np(2 <= nk <= 20
,nk <= np <= 1000),nk 為類別數,np 則為題目數。第二行有 nk 個整數,第 i 個
整數代表第 i 個類別需要有幾題。你可以保證這 nk 個整數的和不會超過 100。接下
來的 np 行,第 j 行給的是第 j 題的分類資訊。分類的資訊以一個不大於 nk 的整數
開始,代表這題可以歸類到多少個類別去。接下來是這題可以被歸類的類別,這些類別
為不大於 nk 的正整數。
一組測試資料的 nk 和 np 皆為 0 時,代表輸入結束。
輸出
對於每組測試資料,輸出 0 或 1 表示是否可以在給定的限制下,成功地歸類所有題目。
1 代表成功,0 代表失敗。如果成功的話,則再額外輸出 nk 行,列出所有被歸類在這
個類別的題目。題目以不大於 np 的正整數代表,且兩道題目間需以一個空白隔開。任
何一組合法的答案都可以被接受。
提示
一道題目配給一個類別,可化為二分圖的形式。
詳解
一道題目配給一個類別,且類別必須配足夠的題目,可轉化為二分圖的形式,做好二分
圖匹配即可解決。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/05/14 Wed 17:40:39
作者: sa072686 at 08/05/14
ACM 911 - Multinomial Coefficients
難易度:2
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/9/911.html
在國中,我們學到了 (a + b)^2 = a^2 + 2ab + b^2。接著,我們得知這是一個形如
(a + b)^n 展開的特例,而 a^k * b^(n-k) 的係數為從 n 件物品中取出 k 件的方法
數。我們還不知道(至少我還不知道…)如果將 a + b 換作 a + b + c + ... + x,
會發生什麼事。
你的工作是寫個程式,給你 m = a[1] + a[2] + ... + a[k], k >= 1,求 m^n 展開後
的係數。接著給予 k 個整數 z[1], z[2], z[3], ... ,分別代表每一項的次數,總和
為 n。試求此項的係數為何,例如 a * b^2 * c 在 (a + b + c)^4 的係數為 12。
輸入
輸入包含多組測試資料,一組三行。第一行為 n,第二行為 k,第三行有 k 個整數,
分別是 z[1], z[2], z[3], ...,k <= 100 且係數一定 < 2^31。
輸出
對於每組測試資料,輸出一行,表示 a[1]^z[1] * a[2]^z[2] * ... * a[k]^z[k] 在
(a[1] + a[2] + ... + a[k])^n 中的係數為何。
提示:
排列組合,搭配因數分解可避免大數和溢位。
詳解:
將 m^n 展開可得 m * m * m * ... * m,共 n 個,已知 a[i]^z[i] 要有 z[i] 個提
供 a[i],所以從中取出 z[i] 個提供 a[i],餘下再提供別的,…
得到解為
C(n, z[1]) * C(n-z[1], z[2]) * C(n-z[1]-z[2], z[3]) * ... * C(z[k], z[k])
展開時記得做因數分解,先約分再計算,最後便能得到正解。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gba356 推:我建議用 a[i] 表達足碼 ai ,清楚得多∼ 0515 08:42
→ sa072686 推:有道理,感謝∼轉 web 版可以用下標時就清楚了 XD 0515 17:47
▲ sa072686 改@2008/05/15 Thu 17:49:54
作者: sa072686 at 08/05/14
ACM 925 - No more prerequisites, please!
難易度:5
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/x/xxx.html
現在我負責學生們關於資訊領域的學分的指引。我請同事們給我一些他們所負責的課程
的資訊,其中一個便是對於課程 c,學生們必須先學過些什麼課程作為前置,才能夠學
習。
一些熱心的同事甚至告訴我太多資訊,以致於超出我的需求…,我來解釋一下:
ca, cb, cc, cd, ce 為我們資訊領域要求的學分。
ca 為 cb 的前置,cb 和 cc 為 cd 的前置,而 cd 則為 ce 的前置。
負責 cd 的 John 告訴我 cd 的前置為 ca, cb, cc。
負責 ce 的 Elizabeth 告訴我 ce 的前置為 ca, cb, cc, cd。
但我只想知道 cd 的前置為 cb, cc,因為 ca 已是 cb 的前置!而 ce 我只想知道它的
前置為 cd,因為 ca, cb, cc 已是 cd 的前置!
不幸的是,並不是所有同事都來問我是否要最少的前置,而是去問了 John。而他回答:
「越多越好!」
我實在沒有勇氣告訴他們,這麼做只會讓我在整理他們給的資訊時更累而已…
噢我好想要一隻機器人可以餵給它們資訊,然後自動回答我最少的前置為何呀…
不會太遲的。
你的工作是,寫個程式,給予課程的名字和前置,你必須回答每一個課程最少的前置
為何。
輸入
第一行包含數字 C 代表以下有幾組測試資料(0 < C < 1000)。
每組測試資料第一行有一數字 k(0 < k <= 120)代表接下來有多少課程要處理。接
下來的 k 行為這些課程的名字,一課一行。接下來有一數字 j(0 <= j <= 120),
代表有多少課程有前置課程。接下來 j 行每行依序為:有前置的課程、有多少前置、
以及所有前置的課程,以一個空白分隔。
課程名最長 20 個字元,不會有空白,並且一定在集合 {'a'..'z'} 中。
前置不會有迴路出現,也就是說,不會有兩個課程互為前置關係。
輸出
對於每組測試資料,你必須輸出所有有前置的課程的資訊。每行必須包含課程的名字、
最少的前置有幾個,以及那些前置的名字,以一個空白分隔。
對於每組測試資料,需依課程名稱的順序來列出,前置課程也必須依名稱的順序列出。
提示:
想辦法判斷兩課間是否有其它課。
詳解:
將兩課間的前置與否建成單向圖,若 i=>j 亦可是 i=>k=>j,則 i=>j 便打掉。
簡單點可以使用 Floyd-Warshall 來做,直接枚舉任兩點再枚舉有沒有可以插在
中間的也是可以,還可以及早 prune 掉一些。若一開始在輸入時,便對課程名
排序,則對課程名編號時,也可以使用二分搜尋,速度會較快,在輸出時也只要
依序輸出即可,不用再排序,會方便很多。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/05/17
ACM 11067 - Little Red Riding Hood
難易度:4
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/110/11067.html
我想大家應該都知道小紅帽的童話故事,以及她如何拜訪她的祖母。但在路上,她遇到
了一頭狼,最後雖被狼吃了,但被英勇的獵人救了。但是,如果小紅帽一開始沒有遇上
狼,那麼她將會免去很多麻煩(既不用被吃掉,英勇的獵人也不需要救她)。她會遇上
狼,只是因為她缺乏資訊,她只是不知道在哪會遇上狼罷了。
連結小紅帽的家與她祖母的家的路是個矩形網格,她的家座落於最左下角,而她祖母的
家則在最右上角。由於對數學的堅持使得小紅帽一定會走最短路徑走到她祖母家。這使
得小紅帽只能往右或往上走,如此可以保證一定是最短路徑。如果她已經知道哪裡可能
會遇到狼,則她便能選擇一條不會遇上狼的路徑。
現在給你矩形的大小,以及狼可能出沒的地點(奇怪的是,狼只有可能在路的交點出現)
請計算在只能往右、往上走,並且不遇上狼的前提下,有幾種可能的方式,可以讓小紅帽
走到她的祖母家?
(詳見題目圖)
輸入與輸出
輸入會有很多組測試資料。第一行會給予矩形寬 w(1 <= w <= 100)以及矩形高 h
(1 <= h <= 100)。最後一組測試資料 w = h = 0 並且不需要處理。下一行會有一整
數 n(0 <= n <= 100)表示有多少個地點可能有狼出沒,接下來的 n 行為可能出沒的
地點的座標,第一個整數為 x(0 <= x <= 100),第二個整數為 y(0 <= y <= 100)
小紅帽的家在座標(0, 0),而祖母的家在(w, h),這兩個地方不會有狼出沒。
每組測試資料輸出一行,代表是否有超過一條路,或是根本就沒有路。
輸出路徑數則用如下的格式:
There are X paths from Little Red Riding Hood's house to her grandmother's
house.
如果恰一條的話:
There is one path from Little Red Riding Hood's house to her grandmother's
house.
否則
There is no path.
路徑數恆 <= 2^32 - 1。
提示:
由於一個點只可能由左或下過來,所以…
詳解:
每個點都有兩個分歧,直接試走的話情形數會太多…
但是每個點都只會由左或下過來嘛,所以…
如果我們確定走到左和下那一格的路徑數各有多少,我們就會知道這個點有多少種方式。
已知小紅帽家有一種方式,也就是完全不移動。
利用這一點,我們可以慢慢依序推出每一格的路徑數。
注意題目保證的是 2^32 - 1,請使用 unsigned int 或是 long long。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/05/17 Sat 17:50:48
作者: DJWS at 08/05/17
※ 引述《seanwu ( )》之銘言:
> 嗯...有趣的一題...共匪書有翻譯 p.308 [例題1]
剛剛寫過了這題
補充一下
根據seanwu的提示
我想到了一個方法
可以利用添加過程式碼的 O(V^3) Floyd-Warshall 演算法
直接求出所有兩點之間的花費
每個query只需O(1)
程式碼可以寫得很漂亮
但是程式跑得不快 XD
(因為這個問題的edge很少,劉先生採用Heap+Dijkstra來省下了時間,比這方法快)
<Hint 請按大E>
求 Floyd-Warshall 時,由花費最小的城市開始做 relaxation。
一邊算最短路徑,然後順便也利用目前算出的最短路徑長,來更新最小花費。
配合著seanwu的提示,各位就能理解這麼做的原因了。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 140.112.90.81 (台北帝國大學)
▲ DJWS 改@2008/05/17 Sat 18:01:48
▲ DJWS 改@2008/05/17 Sat 18:12:54
→ Robin 推:嘿 我就是寫O(V^3) code看起來還好,跑出來是0.030 Rank 1 0517 22:21
→ DJWS 推:我也覺得應該要跑很快 結果我跑0.240 Rank 41 XD 0517 22:29
作者: sa072686 at 08/05/18
ACM 10198 - Counting
難易度:4
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/101/10198.html
Gustavo 知道怎麼數數,但他才剛開始學著寫數字。他是個很厲害的學生,因此已經學
了怎麼寫 1、2、3 和 4。可是他還不知道 4 和 1 的差別,所以他覺得 4 是 1 的另一
種寫法而已。此外,他自創了一個小遊戲並樂在其中:利用已學的四種數字寫出一個數,
並且把它們每個位數加總起來,例如:
132 = 1 + 3 + 2 = 6
112314 = 1 + 1 + 2 + 3 + 1 + 1 = 9 (注意:Gustavo 認為 4 = 1)
在寫出了許多數字之後,他突然想知道他可以寫出幾種數字,位數總和為 n。例如,n = 2
時他可以寫出五種:11, 14, 41, 44 以及 2(雖然他知道怎麼數,但是他不知道怎麼寫
5 這個數字)。然而,他卻無法求出 n > 2 時的數字個數,所以他尋求你的幫助。
輸入
輸入會包含很多組測試資料,每組一個數字 n(1 <= n <= 1000)。你必須讀到檔案結尾
為止。
輸出
對於讀入的每個數字,你必須輸出另一個數字,代表 Gustavo 可以寫出多少數字,它們
每個位數的總和為讀入的數字。
提示:
考慮數字每位數總和為 n 的,能否拆解看看?
詳解:
可以使用動態規劃,數字每位數和為 n 者,可由每位數和為 n-1 者,在後頭添上 1、4
而來,或由每位數和為 n-2 者,在後頭添上 2 而來,…依此類推。
這樣一來,由於每種方式產生的數字,最後一個位數均不相同,故絕不會重覆計算。
由此可知 f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-1),當 n < 0 時 f(n) 為 0,
f(0) = 1。原因是,n < 0 時不可能寫得出來,怎麼加都不會是負的。n == 0 的話,
只要不寫就好了。其它情況,都可以透過 n 較小的情形,在後頭補上 1、2、3、4 而來。
注意本題答案會相當大,在 n == 1000 時約有 400 多位。請使用大數。
本題由於每次的詢問,計算的都是一樣的東西,因此,在一組測資算過的答案,
其它組仍然可以用,不必每次輸入都重算。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/05/18 Sun 11:29:35
作者: sa072686 at 08/05/18
ACM 10036 - Divisibility
難易度:5
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/x/xxx.html
給予任意一個整數序列,相鄰者兩兩之間可以放 + 或 -,則可產生出非常多不同的
運算式,計算出非常多種不同的值。例如,現在有一個序列:17,5,-21,15,則有八
種可能的運算式,如下:
17 + 5 + -21 + 15 = 16
17 + 5 + -21 - 15 = -14
17 + 5 - -21 + 15 = 58
17 + 5 - -21 - 15 = 28
17 - 5 + -21 + 15 = 6
17 - 5 + -21 - 15 = -24
17 - 5 - -21 + 15 = 48
17 - 5 - -21 - 15 = 18
一個數列能否整除於 K,是看它能否有一種擺法,使得這個序列計算出來的值能整除於 K
在上述的例子,該序列整除於 7(17 + 5 - (-21) - 15 = -14),但不整除於 5。
你必須寫個程式判斷一個序列是否整除於某個數。
輸入
輸入的第一行有一整數 M 代表你得分析幾組情形。接下來有 M 組測試資料,每組的第一
行有兩個整數 N 和 K(1 <= N <= 10000, 2 <= K <= 100),以一個空白分開。第二行
有 N 個整數,兩兩間以空白分開,每個整數的絕對值都不會超過 10000。
Output
For each case in the input file, write to the output file the word
"Divisible" if given sequence of integers is divisible by K or "Not
divisible" if it's not.
輸出
對於每組測試資料,如果該序列可以整除於 K 則輸出 Divisible,否則輸出
Not divisible。
提示:
雖然運算出來的數字很多種,但是如果除以 K 之後的餘數相同的話,可以視為相同。
詳解:
數字是很多種,但實際上除以 K 之後同餘都可以視為相同。所以,算到第 N 個數字時,
若前 N-1 個數字可以算出數字 X,則知第 N 個數字可以算出 (X-a[N]) mod K,以及
(X+a[N]) mod K。把所有可能的 X 值都試過一遍就可以了,而前 N-1 個數字還可以再
往下分解,直到 N == 1 時,只有 a[1] mod K 一種可能。因此,可使用動態規劃。
這裡由於算過 N 之後,N-1 的答案就不會再用到,故也可以使用交叉掩護的技巧。
此外需注意,直接用 C/C++ 的 % 運算子,在負數的計算上會出錯。對負數取餘時,
請將餘數變號。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/05/20
ACM 990 - Diving for Gold
難易度:5
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/x/xxx.html
John 是位潛水員,同時也是寶藏獵人。他剛發現一隻裝滿寶藏的海盜沉船,他船上的聲
納系統則可以幫助他了解每個散落的寶藏的位置、深度以及價值。但很不幸的是,他忘
了帶 GPS 系統來記錄位置,如果先回去則很難再找到這裡了。因此,他決定自己潛水去
把寶藏帶上來。不幸的是,他只有一個氧氣桶。
因此他希望靠著這個氧氣桶,能夠帶回的寶藏要總價越高越好。寫個程式幫助 John 選
擇該帶回哪些寶藏,以讓寶藏的總價最高。
此題目有以下的限制:
* 有 n 個寶藏,{(d1, v1), (d2, v2), ..., (dn, vn)},以數對 (深度, 價值)
表示之,最多 30 個寶藏。
* 氧氣桶只能讓你潛水 t 秒,t 最多 1000 秒。
* 每次的潛水,John 都能把某一個寶藏完整地帶上來。
* 下潛時間為 td[i] = w * di,w 為常數。
* 浮上時間為 ta[i] = 2w * di,w 為常數。
* 由於設備的限制,所以數字皆為整數。
輸入
輸入包含了一堆整數。有許多組測試資料,每組的第一行皆有兩數 t 和 w,第二行則
為寶藏的數目,接下來的每一行都代表一個寶藏的深度以及價值。
每組測試資料間以一空白行分隔之。
輸出
每組測試資料輸出的第一行為 John 最多可以帶回的寶藏的價值,第二行有帶回的寶藏
數,接下來每一行輸出帶回的寶藏的深度與價值,且必須照著輸入的順序來輸出。
不同測試資料的輸出間需以一空白行分隔之。
*
在範例輸入中,氧氣桶可供潛水 200 秒,常數 w 為 4,共計三個寶藏。第一個在深度
10 公尺的地方,價值 5 枚金幣;第二個則在深度 10 公尺的地方,價值 1 枚金幣;
第三個則在深度 7 公尺的地方,價值 2 枚金幣。
提示:
雖然聽說這題使用 greedy 也是可以過的,不過那是錯誤的。
雖然使用 DFS 搜得好也是可以過的。
如果觀察一下,限制你可使用秒數,每取一個寶藏便會花去一些秒數,
但可以獲得一些金幣…
是不是很像某種經典題型?
詳解:
限制可使用秒數,每取一個寶藏便花掉一些,並獲得一些金幣…
那麼和限制你背包大小,每取一個物品便佔去一些空間,但你也獲得那些物品,
是不是很像呢?
因此,可將本題視為背包問題的一種,用背包問題的 DP 解決即可。
這題測試資料並不嚴,使用 DFS 也可以在時間內跑完。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/05/20
ACM 10304 - Optimal Binary Search Tree
難易度:5
題目:
原文:http://icpcres.ecs.baylor.edu/onlinejudge/external/x/xxx.html
給一個含有 n 個相異元素的集合 S = {e1, e2, ..., en} 並且 e1 < e2 < ... < en,
對於一棵以 S 集合的元素構成的二元搜尋樹而言,查詢頻率越高的,要越接近樹根越
好。
在 S 構成的二元搜尋樹中,查詢一個元素 ei 的花費為從根開始,一直到元素 ei 所
在的位置,所要經過的邊的個數。給你 S 集合中,每個元素的查詢頻率 {f(e1), f(e2),
..., f(en)},則我們說一棵樹的總花費為
f(e1)*cost(e1) + f(e2)*cost(e2) + ... + f(en)*cost(en)
在這種情形下,擁有最小的花費的樹,便是 S 的最佳搜尋樹。因此,它將被稱為最佳
二元搜尋樹。
輸入
輸入包含許多測試資料,一行一組。
每行以一數字 n(1 <= n <= 250)開始,代表 S 集合的大小。接下來同一行中,將
有 n 個非負整數,代表 S 每個元素的查詢頻率 f(e1), f(e2), ..., f(en),
0 <= f(ei) <= 100。輸入以 EOF 結束。
輸出
對於每組測試資,輸出一行,為最佳二元搜尋樹的總花費。
提示:
要構成樹,就得先抓出什麼?找出來之後,可以怎麼去處理剩下的部份呢?
依據二元搜尋樹的神妙遞迴定義去想吧。
詳解:
如果要構成一棵樹,必須先抓一個數作為樹根才行。接下來這些數,因二元搜尋樹
的定義,會被分成兩個部份,這兩個部份也必須形成二元搜尋樹。因此,分別遞迴去求
兩邊構成二元搜尋樹的情形吧。
不過這樣是不夠的,一定會有很多重覆的計算。因此,記錄已求過的情形吧。
接著是頻率的計算,要怎麼計算呢?因為,這樣便很難把子樹的花費算出來…
沒辦法直接套題目的公式,不過可以思考一下:
成為子樹後,和樹根便多了一條邊,查詢每個點都要多 1 的 cost,
故把 cost 加上該子樹的所有元素之頻率和即可。
另有特別的加速方法,詳細可以參考最佳二元搜尋樹的動態規劃解法。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 08/05/21
剛剛莫名其妙收到了上傳的訊息,一開始還以為是帳號被盜?
後來觀察了一下 submission 的 ID,發現都是很久以前傳的。
有兩題,216 和 103,那麼是否代表這兩題正在 re-judge 呢?
216 是大家所熟知的,新系統一直無法 AC 的基本 DFS 題。
103 則是用錯誤的方式(O(nm) 的 LIS)也會過的 LIS 題…
不過好像還沒 re-judge 完的樣子。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:誰會盜用ACM帳號XDDD 0521 22:24
→ newmoon 推:我被盜過幾次! 0522 00:32
→ godgunman 推:好像被拿去送?-puzzle的樣子 0522 01:24
→ newmoon 推:不只那一次喔! 0522 02:36
→ Robin 推:我也有收到 103 judge 的訊息 0522 22:34
作者: sa072686 at 08/05/23
現在可以看解過的題目列表了XD
有興趣的可以抓來做分析比較,像之前的 ACMA 一樣啦。
如果有空的話我應該會來寫一個看看…XD
感謝 SKYLY 提供消息∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/05/23 Fri 01:07:25
→ chensc 推:有空把ACMA的程式碼改一改好了 0523 09:28
→ chensc 說:只能看自己的? 0523 09:35
→ chensc 說:沒事 我笨了XD 0523 09:36
→ sa072686 推:噢要登入才能看耶…那就不會寫了 XD 0523 09:52
→ ducksteven 推:登入的程式我有啊 .rb 科科 0526 08:43
→ tmt514 說:好像不用登入,但是要知道使用者的user id(從ranklist點) 0526 14:26
→ sa072686 推:如果沒登入的話,從ranklist點會要求你登入 XD" 0526 16:10
作者: sa072686 at 08/05/30
http://www.apio2008.or.th/en/results
嘿金牌多得像山一樣,銅牌只有兩個…
而且沒滿分還拿不到金牌XDDD
詭異啊詭異,而且等結果等了快一個月 XDrz
這次似乎是二金三銀的樣子。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from \229\173\184\231\167\145\228\184\173\229\191\131沒有故鄉 (沒有故鄉)
→ monkey60418 推:我看到球主學長了耶XD 0530 12:29
→ sa072686 推:球主手滑了好可惜XD 不然就可以再多一金耶 0530 12:45
→ mp607 推:這故鄉是...(驚 0530 13:09
→ sa072686 推:在顏老師的地盤,無線網路 0530 13:46
→ gloompisces 推:金銀銅的比例也太詭異了吧.. 0530 16:41
作者: DJWS at 08/05/31
請問板上有人已經寫過的嗎?
這題我已經寫了兩年了
到現在還沒有過
請有寫過的人幫忙一下吧 :)
這個問題可以拆成兩種情形來討論
1. 原點在人群構成的凸包外部或上面
-> 將原點加入做凸包即可
2. 原點在人群構成的凸包內部
-> 將所有點照極座標角度排序,然後嘗試原點開始包個符合題意的包
只要窮舉所有開始包覆的起點,求最小值就是答案了
不知道是不是這樣解的?
我是一直都解不出來∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 140.112.90.81 (台北帝國大學)
▲ DJWS 改@2008/05/31 Sat 03:20:27
→ sa072686 推:噢我寫過耶XD 可是也寫不出來∼ 0531 08:00
→ DJWS 推:目前只有23個人有解出來呀...可是這問題應該沒有很難才對 0531 14:20
→ DJWS 推:搞錯了...是36 0531 14:22
→ DJWS 推:今天想通了~ 原來我的演算法是錯的 ^^" 0605 21:24
作者: DJWS at 08/06/01
我有找到一點資料
http://mathworld.wolfram.com/RelativelyPrime.html
http://mathworld.wolfram.com/PointLattice.html
http://mathworld.wolfram.com/FareySequence.html (最重要的是這個)
http://acm.pku.edu.cn/JudgeOnline/problem?id=3090 (pku的題目 幾乎長得一樣)
雖然是英文的...不太好讀
但還是可以參考看看 :)
剛剛又找到一個
http://bal4u.dip.jp/mt/program/archives/2005/11/iq.html
這是一位日本人bal4u的文章 是詳細解法 :)
(他在06年底拿下UVa的第三名之後就退休不寫了∼ 現在仍排在第六名∼)
我還想說我好像在哪裡看過這題
原來是在他的blog :)
※ 引述《seanwu (海恩無)》之銘言:
> 數學題,不過暴力也可以..
> 在座標平面上種樹,(x,y)上種的樹必須可以看到原點
> 問在 |x|<=a, |y|<=b 且不算(0,0) 的範圍內有種樹的比例是多少?
> (1≦a≦2000, 1≦b≦2000000)
> <Sol pagedown>
> 不會算,所以直接暴力...有些慢
> a的範圍明顯的比b小很多,故從x下手
> 考慮gcd(x,y)=1,則 y=p+x*i ( gcd(p,x)=1, i為非負整數 )
> 於是枚舉所有的數組 (x,p) ,計算 [(b-p)/x]+1 的總數即可
> 2000*2000應該是可以接受的...嗯..徵正解?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 140.112.90.81 (台北帝國大學)
▲ DJWS 改@2008/06/01 Sun 20:08:09
▲ DJWS 改@2008/06/01 Sun 20:08:53
→ sa072686 推:不愧是大神XD //怎麼又是mathworld XDrz 0601 20:21
→ DJWS 推:嗯嗯...因為是數學題目 所以第一個想法就是去找數學網站 0601 20:21
→ DJWS 推:然後稍微看看網頁...用直覺找出有關的關鍵字 再去google 0601 20:22
→ DJWS 推:一下子就找到這些了∼ 可惜我還沒找到公式 XD 0601 20:22
▲ DJWS 改@2008/06/01 Sun 23:15:43
→ DJWS 推:嗯嗯 找到解答囉 也可以自己下載程式碼來看∼ 0601 23:30
作者: sa072686 at 08/06/03
噢這兩題好難解耶,有沒有人要幫幫忙解解它們?
目前我可以就我理解的來翻譯,解法也差不多都有想出來,
不過實在是繁瑣而且有些知道公式但是不會寫,也不確定對…嗯,就列在底下吧。
徵求勇士把它們 AC 掉 XD
----
10136
給至多 200 個點的座標,問以直徑為 5 公分的圓去圈,至多可以圈到幾個點?
座標範圍在 0.0 到 50.0 之間。
想到的方法(不負責任發言XD)
枚舉任三點求圓之後,計算該圓能圈幾個點,然後記錄最大者。
不過任三點要 O(n^3),每個圓看能圈幾個點,所以共 O(n^4),
以 n = 200 來說好像不會過…至多加個判斷,在任兩點時如果距離 > 5 則不枚舉第三點
不知道有沒有更好的方法?XD,而且我好像不會三點求圓…
----
10180
給兩點座標以及圓半徑,圓一定在原點上,兩點不會在圓內
You can also assume that none of the coordinates will be inside the circle.
呃所以我不確定是否可能在圓上,就我的理解是圓內?
兩點間要拉一條繩子,試問最短長度為何,不能夠直接通過圓,要繞過去。
想到的方法(一樣不負責任XD)
首先求兩點連線與圓的距離,若大於半徑則直接求兩點距離即為所求。
//噢這好像得解方程式…
如果會通過圓,則最佳情形應為:由兩點到圓上的切線,以及一段圓弧。
切線的話,一定和圓半徑垂直,故切線、圓半徑與點到圓心的連線,三線成一直角三角形
所以可知切線段長,以該點為圓心,切線段長為半徑畫圓,兩圓交點即為切點。
知道切點後需求兩邊切點間的圓弧,可求切點之間的距離,則兩切點與圓心,
正好形成一三角形,其中兩邊長為圓半徑,一邊長為切點間距離。
以餘弦公式可求圓心角的 cos 值,搭配 acos 反求弧度後可得圓弧長。
//繁瑣中的繁瑣,解方程會解得想哭吧…
----
嗯請大家有空的話幫幫忙解解這兩題吧,感謝∼
如果有更好的方法也請不吝指教,以上有錯也請指正,感謝∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2008/06/03 Tue 00:19:03
▲ sa072686 改@2008/06/03 Tue 00:19:25
→ shik 推:只有想到10136的�解法(?) 0603 00:41
→ shik 說:開500*500紀錄每個座標可以圈到的點數 0603 00:41
→ shik 說:每讀一個點就把周遭五公分+1.. 0603 00:42
→ sa072686 推:怕就怕正解不在格子點上… 0603 07:44
→ tmt514 推:試試看circle sweeping..XD 0603 19:34
→ tmt514 說:判斷線段與圓是否相交可以從銳角三角形面積下手XD? 0603 19:36
→ sa072686 推:好深奧…不懂耶,能不能講詳細一點?XD 0603 22:19
→ DJWS 推:10136共匪書有類似的題目呀...題目名稱叫做採礦 0604 12:04
→ DJWS 推:只不過從長方形改成圓而已 想法應該都差不多 0604 12:05
→ sa072686 推:Math那邊太深奧了…我都只看前面XDrz 0604 12:41
→ DJWS 推:在第一章102頁 0604 12:52
→ sa072686 推:噢…被我跳過的部份…嗯有空再研究看看 0604 12:59
→ DJWS 推:哈...有題目可以參考的話 就不用辛苦打字解釋了 XD 0604 13:01
→ kelvin 推:10136和CEOI2006的atenna很類似吧, 可以做到n^2lgn 0606 11:35
→ kelvin 說:不過不是很好寫就是了 0606 11:35
→ tmt514 說:還好耶?NTUJ有一題一樣的...複製兩遍再sort就不麻煩了^^" 0606 21:59
→ kelvin 推:其實我沒寫過n^2lgn的啦..XDD 0606 22:38
→ kelvin 說:當初寫的是n^3的說.. 0606 22:39
作者: DJWS at 08/06/05
我是覺得我用的演算法沒錯
可能是因為浮點數誤差或其他奇怪的原因
所以都沒辦法AC
這是我跟一位AC過的人要來的程式碼
不過這段程式寫的很雜亂
很難讀懂就是了
另外...請不要直接拿這段程式碼送去judge
謝謝各位 :)
(這段程式碼是目前榜上跑最快的一支...XD)
#include <iostream>
#include <cmath>
#include <algorithm>
#define MAX 1000
using namespace std;
struct Point
{
int idx;
double x;
double y;
friend double dist(const Point &a,const Point &b)
{
double dx,dy;
dx=a.x-b.x;
dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
friend double turn(Point p1,Point p2,Point p3)
{
return (p2.x-p3.x)*(p1.y-p3.y)-(p1.x-p3.x)*(p2.y-p3.y);
}
}p[MAX+1],q[MAX+1];
Point minpoint;
double d1[MAX+1],d2[MAX+1];
int pos[MAX+1],expos[MAX+1];
int n,d,h,g;
int sign(double x)
{
if (x < -0.000001)
{
return -1;
}
else if(x>0.000001)
{
return 1;
}
else
{
return 0;
}
}
int compare(const void *a,const void *b)
{
Point tempa=*(Point*)a;
Point tempb=*(Point*)b;
double x1,y1,x2,y2;
x1=tempa.x-minpoint.x;
x2=tempb.x-minpoint.x;
y1=tempa.y-minpoint.y;
y2=tempb.y-minpoint.y;
if((fabs(x1)<0.000001)&&(fabs(y1)<0.000001))
{
return -1;
}
if((fabs(x2)<0.000001)&&(fabs(y2)<0.000001))
{
return 1;
}
if((fabs(x1)<0.000001)&&(fabs(x2)<0.000001))
{
if(y1*y2>0)
{
return 0;
}
else
{
return sign(y1);
}
}
if((fabs(x1)<0.000001)&&(y1<0.000001))
{
return -1;
}
if((fabs(x2)<0.000001)&&(y2<0.0000001))
{
return 1;
}
if((fabs(x1)<0.000001)||(fabs(x2)<0.000001))
{
return sign(x2-x1);
}
else if(x1*x2<-0.000001)
{
return sign(x2);
}
else
{
return sign(x2*y1-x1*y2);
}
}
void add_point()
{
int i;
d=0;
for(i=1;i<=n;i++)
{
if(compare(&q[d],&q[i])==0)
{
if(dist(q[d],q[0])<dist(q[i],q[0]))
{
q[d]=q[i];
}
}
else
{
q[++d]=q[i];
}
}
d++;
}
void convex_hull()
{
int i,j;
if(d<=3)
{
for(i=0;i<d;i++)
{
pos[i]=q[i].idx;
}
pos[d]=pos[0];
h=d+1;
return;
}
for(i=0;i<3;i++)
{
pos[i]=q[i].idx;
}
h=j=3;
while(j<d)
{
if(turn(p[pos[h-2]],p[pos[h-1]],q[j])<0.0)
{
pos[h++]=q[j++].idx;
}
else
{
h--;
}
}
pos[h++]=pos[0];
}
int main()
{
int i,j,k,t,gnum,gnew;
double perimeter,minextra,mindist;
bool flag;
scanf("%d",&t);
p[0].idx=0;
p[0].x=p[0].y=0.0;
for(k=0;k<t;k++)
{
scanf("%d",&n);
minpoint.x=minpoint.y=0.0;
for(i=1;i<=n;i++)
{
p[i].idx=i;
scanf("%lf %lf",&p[i].x,&p[i].y);
if((minpoint.x>p[i].x)||((p[i].x==minpoint.x)&&(minpoint.y>p[i].y)))
{
minpoint.x=p[i].x;
minpoint.y=p[i].y;
}
}
memcpy(q,p,sizeof(p));
qsort(q,n+1,sizeof(q[0]),compare);
add_point();
convex_hull();
perimeter=2.0;
flag=false;
for(i=0;i<h-1;i++)
{
perimeter=perimeter+dist(p[pos[i]],p[pos[i+1]]);
if(pos[i]==0)
{
flag=true;
}
}
if((flag==true)||(pos[h-1]==0))
{
printf("%.2f\n",perimeter);
if(k<t-1)
{
printf("\n");
}
continue;
}
minpoint.x=minpoint.y=0.0;
memcpy(q,p,sizeof(q));
qsort(q,n+1,sizeof(q[0]),compare);
add_point();
g=1;
minextra=2.0*dist(p[0],p[pos[0]])+dist(p[pos[1]],p[pos[0]]);
for(i=0;i<h-1;i++)
{
while(q[g].idx!=pos[i])
{
if(++g==d)
{
g=1;
}
}
if(++g==d)
{
g=1;
}
expos[0]=0;
expos[1]=pos[i];
d1[0]=0;
d1[pos[i]]=dist(p[0],p[pos[i]]);
j=1;
while(q[g].idx!=pos[i+1])
{
gnum=q[g].idx;
if(turn(p[expos[j-1]],p[expos[j]],p[gnum])<0.0)
{
d1[gnum]=d1[expos[j]]-dist(p[expos[j]],p[0])+dist(p[gnum],p[0])+dist(p[gnum],p[expos[j]]);
expos[++j]=gnum;
if(++g==d)
{
g=1;
}
}
else
{
j--;
}
}
if(--g==0)
{
g=d-1;
}
expos[0]=0;
expos[1]=pos[i+1];
d2[0]=0;
d2[pos[i+1]]=dist(p[0],p[pos[i+1]]);
j=1;
while(q[g].idx!=pos[i])
{
gnum=q[g].idx;
if(turn(p[expos[j-1]],p[expos[j]],p[gnum])>=0.0)
{
d2[gnum]=d2[expos[j]]-dist(p[expos[j]],p[0])+dist(p[gnum],p[0])+dist(p[gnum],p[expos[j]]);
expos[++j]=gnum;
if(--g==0)
{
g=d-1;
}
}
else
{
j--;
}
}
mindist=2.0*dist(p[0],p[pos[i]])+dist(p[pos[i+1]],p[pos[i]]);
while((gnum=q[g].idx)!=pos[i+1])
{
if(++g==d)
{
g=1;
}
gnew=q[g].idx;
if(mindist>d1[gnum]+d2[gnew])
{
mindist=d1[gnum]+d2[gnew];
}
}
mindist=mindist-dist(p[pos[i]],p[pos[i+1]]);
if(minextra>mindist)
{
minextra=mindist;
}
}
printf("%.2f\n",perimeter+minextra);
if(k<t-1)
{
printf("\n");
}
}
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 140.112.90.81 (台北帝國大學)
▲ DJWS 改@2008/06/05 Thu 14:41:06
▲ DJWS 改@2008/06/05 Thu 14:41:19
▲ DJWS 改@2008/06/05 Thu 14:43:17
作者: sa072686 at 08/06/06
http://felix-halim.net/uva/hunting.php
看來新系統出現 solved list 時,這裡也跟著更新了呢。
感謝 DJWS 提供消息∼
啊是說應該不介意我 PO 出來吧?XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ DJWS 推:不會呀~ felix都不介意了 你也不介意 還輪得到我介意嗎? XD 0606 22:21
→ sa072686 推:噢那就沒關係了∼ 話說為什麼我要介意?XD 0606 22:23
→ DJWS 推:因為這裡是你的個人板 XD 0606 22:24
→ sa072686 推:如果有人肯在這裡po程設相關的文我都很開心啊XD 0606 22:42
→ gba356 推:我的不能用耶Q Q //26304 0607 21:25
→ tmt514 推:好像有很多帳號都不能用@@" 0608 01:26
→ gloompisces 推:要用新的ID 0608 01:34
→ gba356 推:可以了~ 0608 13:35
作者: DJWS at 08/06/13
※ 引述《sa072686 (不再迷惘 奮力向前)》之銘言:
> 剛睡到一半突然想到反例,就爬起來了…
> ....4.
> 很明顯地,3 => 1 => 2 => 4 與 3 => 2 => 1 => 4 是最短的
> 但是很明顯地這兩組正解,2 在 1 => 4 的矩形中,2 在 1 => 3 的矩形中
> 雖然原因還不確定,希望強者們能指點一下…
> 但是,確實是有反例存在的
這一題就是只走k點的Travelling Salesman Problem (TSP)
使用greedy的確會有反例的
如果這個問題可以用greedy解決的話...那麼P就等於NP了
這一題就用backtracking跑一下就好了
至於pruning
其實就是檢查目前的cost走到終點後
會不會超過目前最佳的cost (顯而易見而且非常常用的bounding)
這樣就會過了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 140.112.90.81 (台北帝國大學)
作者: kub at 08/06/19
不知道是計算理論還是哪裡說的
=> 所有的程式都可以用遞迴寫
雖然效率... 恩...不管
請問sa大大 ~
有沒有人以寫遞迴程式為樂的呢
我的意思是 平常直覺就是用迴圈寫會比較簡單那種
但他還是用遞迴去寫
蠻想看大量這樣的程式碼的
不知道要去哪邊找XD?
(今天一早起來 突然就想看這種程式碼....怪)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kub from 140.115.189.60 (中央大學)
→ PG 推:是所有迴圈都可以改成遞迴阿...只是沒意義而已 0619 15:00
→ kub 說:QQ 0619 15:13
→ sa072686 推:沒聽說過,大家似乎都儘量避免遞迴?XD 0619 16:46
→ sa072686 推:不過我很喜歡遞迴就是了XD 0619 16:46
→ kub 說:我也是~ 聽資結老師說某種程式語言沒有迴圈 只能用遞迴 0619 17:27
→ kub 說:只是我不知道是哪種 不然就去找來看看了 0619 17:27
→ seanwu 推:LISP ? 0619 17:51
→ kub 說:好像是耶@@" 竟然會知道.. 0619 18:39
→ Zero 推:遞迴只應天上有,凡人應當用迴圈 XDD 0619 22:55
→ Zero 推:LISP我只聽過不會寫..orz 0619 22:55
→ SKYLY 推:樓上上那個好像是某版標…(?!) 0619 23:17
→ monkey60418 推:樓上上上XDDDDDDDDDDDDDDDD 0620 00:36
→ albb0920 推:我唯一想到要用遞迴的地方....探索資料夾的時候 0620 21:33
→ math120908 推:遞迴過深會RE~~迴圈過大會TLE~~ 0621 23:51
→ gba356 推:樓上有點不對,遞迴太慢的話還沒 RE 就 TLE 了(茶) 0625 17:01
→ Zero 推:遞回自己handle Stack的話也不見得會RE 0626 11:22
→ sa072686 推:會很繁瑣就是了XD 0626 13:47
→ gba356 推:MLE 的開始XDDDD 0627 17:11
→ brucehsu 推:Functional Programming? 0731 22:37
作者: LFKing at 08/07/04
sa學長的板太酷了..
有鑑於網站分享資料還不夠多 所以我也來分享xD
DJWS的網路日誌
資料結構、演算法
---> http://djws.wordpress.com/
--->(舊選單) http://www.csie.ntnu.edu.tw/~u91029/menu.html
良葛格學習筆記
C/C++/JAVA/AJAX/演算法/學習筆記
--->http://caterpillar.onlyfun.net/Gossip/index.html
高中生程式解題系統ZeroJudge
國內C/C++/JAVA程式解題系統、討論 (收錄ACM、NPSC、及個校資訊競賽題目)
--->http://cat.nknush.kh.edu.tw/ZeroJudge/
TIOJ
建中資訊C/C++程式解題系統 收錄ACM、IOI、TOI、各校社團競賽考試題目
--->http://tmtacm.no-ip.org/JudgeOnline
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by LFKing from 122.121.5.139 (中滑一番)
→ sa072686 推:個人比較不喜歡ZeroJudge…TIOJ大好XD 0704 22:40
▲ LFKing 改@2008/07/04 Fri 23:41:01
→ LFKing 推:嗯嗯 放上去了~~ 0704 23:41
▲ LFKing 改@2008/07/04 Fri 23:43:16
→ chensc 推:還有傑洛的JOR呀 誰來放放 0705 00:01
→ godgunman 推:我也不喜歡0judge ... 他們都只是放別人的題目Orz 0713 09:27
→ sa072686 推:還放到我AC code不AC…推測是不唯一解時沒有檢測程式 0713 09:33
→ godgunman 推:樓上說的那題是矩陣相乘吧 .. 我已經反應了 0713 09:47
→ sa072686 推:我反應後他竟然叫我當管理員幫忙修…我才沒空XDD 0713 09:51
→ godgunman 推:噢噢!! 太機拔了, 不過他已經修好了 0713 09:54
→ sa072686 推:喔喔…不過沒空寫到那邊去了XD 0713 09:58
→ godgunman 推:他最近新增NOIP的題目 0713 10:03
→ sa072686 推:光NTUJ就寫死我了…XD 0713 10:42
→ s864372002 推:TIOJ的精華是一堆自創題目啊,說明看起來好像是抄別人 0718 15:03
→ godgunman 推:推一下樓上。話說倒是沒收錄acm的, 不過是有EX版 0721 22:30
作者: gba356 at 08/07/13
Felix Halim 的網站可以幫你找出目前最簡單的二十題,
但是需要用到自己在 UVa 的新 ID ,
怎麼查呢?
隨便上傳個東西,
點 Submission Page ,
點自己 ID 就可以囉,
是日前 Felix Halim 解答的。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 116-59-9-102.dynamic.hinet.net (中滑一番)
→ stnirptf 推:好用+1 0713 12:18
→ SKYLY 推:也可以從排行榜找,就是點 ID 進去後的網址最後面那數字 :P 0713 17:35
作者: newmoon at 08/07/14
超暴力的題目
ACM連不上去,新紅也連不上去,借放一下
#include<stdio.h>
#include<algorithm>
#include<string.h>
int t,i,j,k,n,m,va,vb,ga,gb;
char s[1000];
struct data{
char name[40];
int b,c,d,e,f,g,h,i;
bool operator<(data ha)const{
if(b>ha.b)return 1;
else if(b==ha.b){
if(d>ha.d)return 1;
else if(d==ha.d){
if(g>ha.g)return 1;
else if(g==ha.g){
if(h>ha.h)return 1;
else if(h==ha.h){
if(c>ha.c)return 1;
else if(c==ha.c){
if(strcmp(name,ha.name)<0)return 1;
}
}
}
}
}
return 0;
}
}team[40];
main(){
scanf("%d",&t);
gets(s);
while(t--){
gets(s);
puts(s);
scanf("%d",&n);
gets(s);
for(i=0;i<n;i++)gets(team[i].name);
scanf("%d",&m);
gets(s);
while(m--){
gets(s);
for(j=0;s[j]!='#';j++);
s[j]=0;
for(va=0;strcmp(s,team[va].name)!=0;va++);
for(i=j+1;s[i]!='#';i++);
s[i]=0;
for(vb=0;strcmp(s+i+1,team[vb].name)!=0;vb++);
for(k=j;s[k]!='@';k++);
s[k]=0;
sscanf(s+j+1,"%d",&ga);
sscanf(s+k+1,"%d",&gb);
team[va].c++,team[vb].c++;
if(ga>gb)team[va].d++,team[vb].f++;
else if(ga==gb)team[va].e++,team[vb].e++;
else team[va].f++,team[vb].d++;
team[va].h+=ga,team[vb].h+=gb;
team[va].i+=gb,team[vb].i+=ga;
}
for(i=0;i<n;i++){
team[i].g=team[i].h-team[i].i;
team[i].b=team[i].d*3+team[i].e;
}
std::sort(team,team+n);
for(i=0;i<n;i++){
printf("%d) %s %dp, %dg (%d-%d-%d), %dgd
(%d-%d)\n",i+1,team[i].name,team[i].b,team[i].c,team[i].d,team[i].e,team[i].f,team[i].g,team[i].h,team[i].i);
team[i].b=team[i].c=team[i].d=team[i].e=team[i].f=team[i].g=team[i].h=team[i].i=0;
}
}
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by newmoon from 163.32.78.61 (高雄一中)
→ kelvin 推:你可以放海恩版!! 0714 21:03
φ godgunman 轉:到 [seanwu] 看板,于 2008/07/14 Mon 21:25:35
→ csftwpt 推:很有道理 0714 22:39
作者: sa072686 at 08/07/21
※ 本文轉錄自 [seanwu] 看板
作者: seanwu ( ) 看板: seanwu
標題: [算法] 匹配(一)
時間: 2008/07/20 Sun 15:51:51
匹配 matching
這篇文章將儘量以白話的方式說明如何在無向圖中尋找最大匹配
我們說對於一個圖G=(V,E)上的一個匹配(matching) M,意思是說:
匹配M是邊集E的一個子集,且M中任兩條邊皆沒有公共點
圖G最大匹配則是,在圖G上擁有儘量多的邊的一個匹配(不唯一)
簡單的說,把圖G上的點兩兩配起來,就是圖G的一個匹配,最大匹配則是要配出儘量多組
○───○ ○───○
∣╲ ∣╲ ╱∣
∣ ╲ ∣ ╲ ∣
∣ ╲∣╱ ╲∣
○ ○───○
一個圖和它的一個匹配(黃邊),同時也是這個圖的最大匹配
1. 預備知識
給定一個無向連通圖G=(V,E),以下本文章中將令n=|V|為圖的點數,m=|E|為圖的邊數。
給定圖G和圖G上的一個匹配M,圖G中屬於M的邊我們說它是"匹配的";反之為"未匹配的"
圖G中的一個點如果透過M和另一個點匹配,我們說它是"飽和的";反之為"未飽和的"。
圖G中的一條路徑P:u→v,如果P上的邊是 …"匹配"、"未匹配"、"匹配"…交錯出現的,
我們稱P是一條 "交錯路" (alternating path)。
另外如果u,v皆是未飽和的,則稱P是一條 "增廣路" (augmenting path)
a═══b───c───d
∣ ∣ ║ ∣
∣ ∣ ║ ∣
∣ ∣ ║ ∣
e═══f───g───h
∣ ∣ ∣ ║
∣ ∣ ∣ ║
∣ ∣ ∣ ║
i═══j───k───l
P: d,c,g,f,e,i,j,k 是一條交錯路,又d,k皆未飽和,因此P也是增廣路
不加證明的給出一個很重要的定理:
圖G上的一個匹配M是最大匹配,若且唯若不存在增廣路P
若存在增廣路,則我們可以沿著增廣路P增廣,增廣的方式是反轉P上每一條邊e,
如果e是匹配的,則改成未匹配的;如果e是未匹配的,則改為匹配。
a═══b───c───d a═══b───c═══d
∣ ∣ ║ ∣ ∣ ∣ ∣ ∣
∣ ∣ ║ ∣ ∣ ∣ ∣ ∣
∣ ∣ ║ ∣ ∣ ∣ ∣ ∣
e═══f───g───h >>>> e───f═══g───h
∣ ∣ ∣ ║ ║ ∣ ∣ ║
∣ ∣ ∣ ║ ║ ∣ ∣ ║
∣ ∣ ∣ ║ ║ ∣ ∣ ║
i═══j───k───l i───j═══k───l
沿增廣路P: d,c,g,f,e,i,j,k增廣,增廣後將使得匹配數加一
所以我們已經得到了一個求最大匹配的算法,就是不斷的尋找增廣路,
並沿著增廣路增廣,直到找不到增廣路為止,此時的匹配就會是最大匹配。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 61.62.49.220 (所以內特)
→ PG 推:借轉 0720 16:20
φ PG 轉:到 [PG] 看板,于 2008/07/20 Sun 16:20:21
φ sa072686 轉:從 [seanwu] 看板,于 2008/07/21 Mon 21:08:06
作者: sa072686 at 08/07/21
※ 本文轉錄自 [seanwu] 看板
作者: seanwu ( ) 看板: seanwu
標題: [算法] 匹配(二)
時間: 2008/07/21 Mon 00:07:07
但我們必須有效率的尋找增廣路,先看比較簡單的情況:圖G中沒有奇圈
也就是說,圖G是一個二分圖,底下給出一個方法尋找增廣路
2. 對二分圖的匈牙利樹算法
令G=(V,E)是一個二分圖,求圖G的最大匹配
假設對於圖中的一個未飽和點v,我們有一些v到其它點的交錯路,
我們可以把這些交錯路收集起來,成為交錯樹 (alternating path tree)
另外我們對於交錯樹中到樹根路徑長度為偶數的點,稱為外點;反之稱為內點
可知內點恰有一個子節點 (因匹配邊不能重疊)
a b c d f─b─e─a
│╲ ╱│ ╱│╲ ╱│ ╱
│ ╳ │ ╱ │ ╱ │ c─g─d
│╱ ╲│╱ │╱ ╲│ ╲
e f g h h
圖G和匹配M,及以點c為根的交錯樹T
注意到上圖中交錯樹T有個葉子是未飽和的,對於帶有未飽和葉子的交錯樹
可以任取一個未飽和葉子,則這個葉子到樹根的路徑,就是一條增廣路
於是我們可以藉由成長交錯樹的方式來尋找增廣路。
隨便找一個未飽和點u,一開始置交錯樹 T=u
對於T中的每一個外點v,考慮所有連在v上的邊(v,w)
如果w是未飽和的,那麼加入w後,w就是未飽和的葉子,找到增廣路P:u→w
如果w是飽和的,設和它匹配的點是w',則對T加入(v,w),(w,w') 並設w為內點,w'為外點
重覆這樣的步驟,交錯樹T要嘛就成長,要嘛就找到增廣路
找到增廣路後就沿著增廣,然後重新找一個未飽和點u,再次成長交錯樹找增廣路。
成長交錯樹T,有可能到最後找不到增廣路,而且也沒辦法繼續成長
無法成長就是說,"所有的外點都找不到相連的未匹配邊"
此時的交錯樹T,稱之為"匈牙利樹" (hungarian tree)
匈牙利樹有一個(不太)重要的性質:
圖G不存在任何經過匈牙利樹T的增廣路
proof:
這很明顯,假設存在增廣路P和匈牙利樹T有交集,
則連上T的邊必為未匹配邊,匹配邊是連不上匈牙樹的 (每個點皆已是飽和的)
又"所有的外點都找不到相連的未匹配邊",因此這兩條一進一出的邊一定連在內點上
而兩內點間路徑長必為偶數,即無法形成交錯路徑,矛盾。
根據這個性質,如果找到一個以v為樹根的匈牙利樹,則可以把整個樹從圖中拿掉,
或者僅僅是把v標記掉也可以,總之從v當做樹根是找不到增廣路的,應該捨棄。
總結一下算法:
給定圖G,求圖G的最大匹配M
需要一個有PUSH,POP的資料結構(stack或queue都行)
path(x)記錄著樹根到x的交錯路
1. 找一個未飽和點r,標記r為外點,path(r)=r,PUSH(r)
如果找不到未飽和點,則算法結束,當前匹配為最大匹配
2. v=POP(),對所有的e=(v,w),且w非內點
2.1. 如果w是未飽和的,則找到增廣路 P=path(v)+w
沿P增廣,然後回到 1.
2.2. 如果w是飽和的,令與w匹配的點為u
標記w為內點,u為外點,path(u)=path(v)+w+u,PUSH(u)
如果POP()=empty,則得到匈牙利樹,將樹根r標記為不存在,回到 1.
這個算法是O(nm)的
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 61.62.49.220 (所以內特)
→ PG 推:借轉 0721 00:12
φ PG 轉:到 [PG] 看板,于 2008/07/21 Mon 00:12:06
φ sa072686 轉:從 [seanwu] 看板,于 2008/07/21 Mon 21:08:15
作者: sa072686 at 08/07/21
※ 本文轉錄自 [seanwu] 看板
作者: seanwu ( ) 看板: seanwu
標題: [算法] 匹配(三)
時間: 2008/07/21 Mon 14:53:43
你還活著嗎?
接下來是如何在一般圖中尋找增廣路
3. 一般圖上的最大匹配
這一節我們討論如何在一般圖上尋找最大匹配,考慮前一節提到的匈牙利樹增廣算法,
在有奇圈的情形下,即使增廣路存在卻不一定能找到增廣路。
i──d====e d====e
╱ │ ╱
a──b====c │ >>>> a──b====c
╲ ∣ ╲
h──g====f g====f
上圖是一個例子,把a當做樹根成長交錯樹會得到匈牙利樹,表示它沒有增廣路,
但實際上它有增廣路 a,b,c,g,f,e,d,i 和 a,b,c,d,e,f,g,h
上圖中,奇圈 c,d,e,f,g 除了c以外的邊是交錯的,
我們稱這種交錯奇圈為 "花" (blossom),未被奇圈內的匹配邊匹配的點c,
稱為"花蒂"(base of blossom),樹根到花蒂的路徑a,b,c稱為"花幹"(stem of blossom)
如果不存在花,就不存在奇圈,那麼匈牙利樹算法將會是正確的
因此我們必須將花處理掉,處理的方法是:收縮;我們可以把花收縮成一個點
i──d====e i
╱ │ ╱
a──b====c │ >>>> a──b====X
╲ ∣ ╲
h──g====f h
這樣在收縮後的圖上我們找到了增廣路 a,b,X,i
至於可以將花收縮原因,可以考慮要如何將花展開回來,我們已有a,b,X,i這條增廣路,
我們要將其中的X展開,令X展開後有 (b,u) 和 (v,i) 這兩條邊
因為花是奇圈,所以u,v之間在花上必有一偶數長度路徑
並且u,v之間其中一個必為花蒂,因此u→v在花上的路徑是一條交錯路
上圖的例子中,u=c,v=d,這條交錯路是c,g,f,e,d,代入X後得到增廣路a,b,c,g,f,e,d,i
修正一下前一節的,得到這個找一般圖匹配的算法,其實縮花建立新點是沒有必要的,
我們只要維護好從樹根前往每個點的交錯路PATH(v)就行
1. 找一個未飽和點r,標記r為外點,path(r)=r,PUSH(r)
如果找不到未飽和點,則算法結束,當前匹配為最大匹配
2. v=POP(),對所有的e=(v,w),且w非內點
2.1. 如果w是未飽和的,則找到增廣路 P=path(v)+w
沿P增廣,然後回到 1.
2.2. 如果w是飽和的,且w是被標記為外點,令z=path(v)和path(w)的LCA
對於所有在path(v)上z到v(不含z)的點x
如果x是內點,則標記x為外點,path(x)=path(w)+(v to x),PUSH(x)
在path(w)上的點x也做相對的處理
2.3. 如果w是飽和的,且未被標記為外點,令與w匹配的點為u
標記w為內點,u為外點,path(u)=path(v)+w+u,PUSH(u)
如果POP()=empty,則得到匈牙利樹,將樹根r標記為不存在,回到 1.
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 192.168.4.13 (台狼一中桑靈餓)
→ PG 推:借轉 0721 20:23
φ PG 轉:到 [PG] 看板,于 2008/07/21 Mon 20:23:21
φ sa072686 轉:從 [seanwu] 看板,于 2008/07/21 Mon 21:08:20
→ chernglin 推:這是... 0801 00:05
→ sa072686 推: 匹配 0809 21:52
作者: DJWS at 08/07/24
請教一下這個演算法的證明
第二步和第三步這樣做之後
為什麼會讓第四步找到的s,t為什麼會是s,t在不同邊的Min-Cut?
第二步和第三步的用意在哪裡呢?
狀似是一個奇妙的greedy演算法
※ 引述《seanwu (海恩吳)》之銘言:
> http://www.cs.dartmouth.edu/~rahul/Teaching/stoerwagner-mincut.pdf
> 1. 初使化點集U含有隨便一個點a
> 2. 找出還未被加入U的點中,擁有w(U,y)最大者的點y,加入U中
> 所謂w(U,y)指的是所有連接U與y之間的邊的總合
> 3. 重覆2.直到所有的點皆被加入U
> 4. 令最後被加入的兩個點依序為s,t,則這一次找到的Cut解為w(U-t,t)
> (就是在2.時w(t)的值啦),如果比之前找到的Min-Cut解還小,則更新它
> 5. 將s,t合併成一個點new,計算new到其它點x的邊值
> dis[x][new] = dis[new][x] = dis[x][s]+dis[x][t]
> 6. 重覆1.~5.,每次都會少一個點,直到剩一個點時結束,Min-Cut值即為解
> Prob: ACM10989
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.77.192 (中滑一番)
→ seanwu 推:那篇文章裡面有講到證明 0725 01:47
→ DJWS 推:恩...可以請你用中文大致解釋一下論文中的證明嗎? 0726 15:28
→ seanwu 推:我..看不太懂 0726 16:49
→ DJWS 推:哈哈...我也是 所以想找個人問問 XD" 0726 18:00
作者: sa072686 at 08/07/29
XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.56 (台狼一中桑靈餓中神)
→ ming1053 推:302前面那台.. 0729 17:17
→ SKYLY 推:神耶XD 0729 17:27
→ sa072686 推:那台可以登302帳號 XD 0729 18:11
作者: gloompisces at 08/08/04
11471 - Arrange the Tiles
如題目的圖,給你12個方塊,請問能順利拼進圖中的組合數有幾種
方塊有四種顏色 (R G B Y) RGBY表示此方塊上右下左的顏色分別是RGBY
若圖中兩個方塊相臨,則兩條疊合的邊要同色
<Hint E>
聰明一點的dfs
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
作者: gloompisces at 08/08/04
11472 - Beautiful Numbers
第一行的正整數P代表有P組測資
每組測資給你 N,M (2<=N<=10 0<=M<=100)
請問你在位數<=M的所有正整數中,全部都是由0~N-1組成
且0~N-1都要最少出現一次,且兩個相鄰位數的差為1的數字有幾個
答案請%1000000007後輸出
PS:首位數不得為0
ex: N=2 M=4 有 10 101 1010 共3個
N=3 M=4 有 2101 1012 1210 210 共4個
<Hint E>
DP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
作者: gloompisces at 08/08/04
11473 - Campus Roads
第一行給你P,代表有P條路
每條路給你i,j,代表有這條路有i段,要種j棵樹 (i,j>=2)
接著給你i+1個座標,A1,A2,...,Ai,A(i+1)
這條路即是由A1A2,A2A3,...,AiA(i+1)組成
現在請你平均的種植這j棵樹,第一棵種在A1上,第k棵種在A(i+1)上
輸出j組坐標,代表每棵樹種的位置
<Hint E>
一般的math,小心誤差,雖然我做的時候沒有碰到
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
作者: gloompisces at 08/08/04
11474 - Dying Tree
有一棵樹快死了,快想辦法把訊息傳給醫生!!
第一行有一個數P 代表有P組測資
給你 n,m,k,d 分別代表 樹木的數量 醫生的數量 樹木->樹木最大傳訊距離
以及 樹木->醫生最大傳訊距離
底下m行代表一聲的座標
再下去有n組 每組的第一行有一個數i,代表此樹有i條樹枝
再來有i組數,為樹枝的位置
當A樹的任一條樹枝和B樹的任一條樹枝距離<=k A樹可以把消息傳給B樹
當A樹的任一條樹枝和醫生的距離<=d A樹可以把消息傳給醫生
第一棵出現的樹想要把消息傳給醫生,辦得到嗎?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
作者: gloompisces at 08/08/04
11475 - Extend to Palindromes
給你一個字串,長度<=100000
你要在後面添加盡可能少的字元讓它變成回文
輸出此回文
<Hint E>
據說要用KMP或rolling hash
但是非常非常非常高明的 brute force 也有一點希望
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
▲ gloompisces 改@2008/08/07 Thu 12:44:12
作者: gloompisces at 08/08/04
11476 - Factorizing Large Integers
質因數分解一個數N N<=10的16次方
PS : during the contest,
AC = 2
WA+RE+CE = 93
TLE = 211
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
作者: gloompisces at 08/08/04
11479 - Is this the Easiest Problem?
(譯者:是的)
給你三個整數,你判斷他們能構成 正三角形 等腰三角形 普通的三角形
還是根本不是三角形?
PS : 數有可能是負的
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
作者: gloompisces at 08/08/04
11480 - Jimmy's Balls
給你N 6<=N<=1000010
問你有幾組解(a,b,c),滿足0<a<b<c
N=0 就 return 0
<Hint E>
math
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.116.142.109 (不失敗大學)
作者: LFKing at 08/08/06
基礎題目找11的倍數,因數字太大無法直接存
要用陣列或其他方式存數字,
然後計算後判斷是否為11的倍數即可
....測資有"011"這種的要注意!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by LFKing from 122.117.232.20 (中滑一番)
→ shik 推:我因為這個WA好多次 Orz 0806 02:20
→ sa072686 推:推最後一行…這超心機的! 話說這板大缺基礎題XD 0806 09:08
→ SKYLY 推:心機在哪…(._.?) 0806 13:18
→ s864372002 推:最心機的明明就是換行!我因為換行WA了好幾次(毆) 0816 21:03
作者: LFKing at 08/08/10
有一題是這樣問的......
-------------------------------------------
給一二元樹,已知此樹前序排列是A.B,C,D,E。
請問下列何者不可能為該樹的中序排列? (D)
(A)B,D,E,C,A
(B)B,A,D,C,E
(C)B,A,D,E,C
(D)B,D,A,C,E
-------------------------------------------
我暴力解去畫..然後畫很久Orz,請教大家如何開心去解它 > <?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by LFKing from 122.117.232.20 (中滑一番)
→ sa072686 推:random 0810 16:39
→ SKYLY 推: random 0810 18:12
→ devilqxect 推:前序看左子樹只有這幾種可能:(),(B),(BC),(BCD),(BCDE 0810 18:55
→ LFKing 推:謝樓上 有點畫的方向了:D ;一二樓..神的解法嗎xD? 0811 20:50
→ gba356 推:遙不可及(遠望) 0811 22:34
→ sa072686 推:random可以在你不知道要猜什麼時幫助你 0811 22:37
→ sa072686 推:真正神的人會跟你說用直覺就知道了XDDD //不是我 0811 22:37
→ SKYLY 推:真正強的人看完選項就是知道答案的時候!! //不是我 0811 23:00
→ shik 推:我都看完隔壁就知道答案了耶(抓頭 0811 23:49
→ sa072686 推:萬一哪天隔壁寫錯就囧了XDD 0811 23:55
→ kub 推:可是隔壁要是也在看你怎麼辦...... 0812 13:05
作者: gba356 at 08/08/11
※ 引述《LFKing (AC Island 打雜)》之銘言:
> 有一題是這樣問的......
> -------------------------------------------
> 給一二元樹,已知此樹前序排列是A.B,C,D,E。
> 請問下列何者不可能為該樹的中序排列? (D)
> (A)B,D,E,C,A
> (B)B,A,D,C,E
> (C)B,A,D,E,C
> (D)B,D,A,C,E
> -------------------------------------------
> 我暴力解去畫..然後畫很久Orz,請教大家如何開心去解它 > <?
Reconstruction.
利用知道前序中序/後序中序可以重建二元樹的性質,
可以把四個選項都畫一遍。
(A)(B)(C) 皆可畫出來
(A) (B)
(B((D(E))C))A (B)A((D)C(E))
(C)
(B)A((D(E))C)
然而 (D) 卻畫不出來。
速解:
前序規則 [父][左][右] ,
從前序來看, A 必為根,而 "|B|C|D|E| "中必有一條"|"是分割左右子樹的,
但是 (D) 選項中卻是 BD/CE 分,因此不可能,所以選 (D) 。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 125.232.232.134 (中滑一番)
→ LFKing 推:感謝!原來括號法就出來了xDD 0811 20:46
→ LFKing 推:然後速解也很強耶(激) 0811 20:57
→ gba356 推:咦?括號法?我只是不會畫樹的 ASCII Art 耶.. 0811 22:59
→ sa072686 推:不對吧,我記得樓上會畫樹啊 0811 23:20
→ gba356 推:括號快多啦XD 0812 16:36
作者: DJWS at 08/08/15
大家好我又來問問題了 :)
之前我在書上看到說
要找min-cost max-flow
是用Dijkstra's Algorithm一直找目前成本最小(不是流量最小)的argumenting path
不知道這樣作正不正確?
另外想問的是
這個演算法有名稱嗎?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.75.96 (中滑一番)
→ sa072686 推:Dijkstra要用label的方式處理負邊,不然用bellman-ford 0815 21:12
→ sa072686 推:ACM board查10594 data flow 有一份code可以參考 0815 21:13
→ sa072686 推:不然bellman-ford的效率不足以解這題XD 0815 21:13
→ DJWS 推:瞭解了 那我得先去研究一下label是什麼 謝謝你啦 :) 0815 22:16
→ DJWS 推:我把code抓下來了 原來code中的label是指edge reweighting 0817 10:55
→ DJWS 推:另外...這code也寫的不怎友善 有很多取巧的地方 (= =") 0817 10:56
→ sa072686 推:搜尋一下也有其它版本的mcmf,我忘了是研究哪版了XD 0817 12:27
→ sa072686 推:之前是把它印下來,花了好久才看懂…可是現在忘了XD 0817 12:28
→ DJWS 推:我才剛看完不久 不如我來整理一下好了 0817 22:01
→ sa072686 推:噢,好啊,太感謝了! 0817 22:09
→ kub 推:Labeling Procedure?? 0818 15:57
作者: hpttw at 08/08/15
歡迎加入11組XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by hpttw from 59.104.248.212 (種子電信)
→ sa072686 推:噢學長好XD 0815 23:02
→ AikoSenoo 推:11組是什麼._./ 0815 23:23
→ ming1053 推:南友會 //我是14組的噢( ̄▽ ̄#)﹏﹏ 0815 23:24
→ sa072686 推:原來如此。話說今天怎麼都沒看到樓上XD 0815 23:26
→ ming1053 推:我有去啊,我有看到你喔 可是你沒看到我v( ̄︶ ̄)y 0815 23:27
→ sa072686 推:我在明你在暗(誤) 0815 23:56
→ veriw 推:為什麼我會看成我在命你在暗(汗) 0816 22:26
作者: DJWS at 08/08/17
大家好
我又繼續來問問題了 :)
剛剛正在研究push-relabel algorithm
我有個關於relabel的疑問
當preflow設定好之後
一開始就選擇與源點相鄰的點進行relabel
這個點一下子就會高於源點了
這樣最後不就會變成水流在源點和其相鄰的點之間流來流去了嗎? @@"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.66.110 (中滑一番)
▲ DJWS 改@2008/08/17 Sun 09:00:25
→ DJWS 推:抱歉...我誤解relabel的意思了 我現在懂了 XD 0817 09:12
作者: DJWS at 08/08/17
程式碼
min-cost max-flow:http://shygypsy.com/tools/mcmf3.cpp
其他程式碼:http://shygypsy.com/tools/
問題
min-cost max-flow 是一個比 max-flow 還複雜一點的問題。
圖上的邊除了有容量以外,還有花費(以每單位的流量計)。
一個流的總花費為:各條邊的流量乘上其花費,然後統統加總起來。
問題的要旨是:促成最大流的同時,希望總花費也達到最小。
解法
我就我目前所能理解的做說明 :)
有個類似於 Ford-Fulkerson 演算法的方法是:
不斷找出目前花費最小的擴充路徑(路徑上每一條邊的花費加起來之後要最小),
直到促成最大流為止。
我還不知道怎麼證明。 XD
程式碼說明之一
找花費最小的擴充路徑可使用 Dijkstra 演算法。
然而找擴充路徑時,可以逆流一條有流量的邊,沖銷流量。
而沖銷流量同時也會沖銷花費,
也就是說花費此時要視作負的。
而糟糕的 Dijkstra 演算法無法處理負邊。
解決方法是 reweighting 重新調整每一條邊的權重值。
得請大家先看書瞭解一下基礎。
(可參考CLRS的最短路徑 Johnson 演算法)
(或者 http://www.csie.ntnu.edu.tw/~u91029/Path.html ,我有做紀錄。)
大意是:用一點至多點的最短路徑長度來調整邊。
當一個擴充路徑建立之後,
同時會產生一條反方向的逆流路徑(供沖銷用),或說多了好幾條負的花費的邊。
下次要找擴充路徑,就得額外考慮這些負邊。
或者說:這張圖增加了一堆負邊。
妙的是,原來的圖加上那些負的花費的邊之後,
仍然不會造成 negative cycle,仍然沒辦法做 relaxation 。
這表示以方才找出的最短路徑長度,
仍然可以把每一條邊調整成非負數。
所以之後找擴充路徑時,
所遇到的圖,它的邊經過 reweighting 之後,都會保持非負數。
-
每次要找擴充路徑,
都是使用 reweighting 過的邊,
以 reweighting 的參數做加減一下,
就能得到 reweighting 過的邊了。
找到一個新的擴充路徑之後,
就直接利用現在的最短路徑長度,
來改 reweighting 的參數就可以了(直接累加),
不用直接改變邊的大小。
程式碼說明之二
由於會有 u->v 和 v->u 這種雙向同時存在管線的情形,
每次要找擴充路徑時,
除了可以逆流來沖銷流量之外,
還可以選擇不沖銷流量,而走隔壁的空管線(如果有的話)。
所以程式碼裡面兩種都會檢查。
程式碼也因此設定每條邊的流量一定是正值或零,
不管是逆流來沖銷流量(v->u)、走空管線(u->v),都不需要負的流量大小,
直接在對應的管線,紀錄正的流量就好。
由於這程式碼規定每條邊的花費都是正值,
所以沖銷流量(減少花費)一定比走空管線(增加花費)還好。
這一點在 dijkstra 這支函式中算擴充路徑的地方,表現不是很明顯,
但是在 mcmf3 這支函式中找 bottleneck capacity 就可以明顯看到這個性質。
程式碼說明之三
作者把 Dijkstra 演算法所需的 visit[] 和 parent[] 兩個陣列,
統統擠在一個 pat[] 陣列裡面:
pat[] 若為負值,表示還沒 visit 過。
pat[] 若為零和正值,就如同 parent[] 陣列之中的意義。
節省空間但犧牲可讀性的奧步。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.211 (中滑一番)
▲ DJWS 改@2008/08/17 Sun 23:37:43
▲ DJWS 改@2008/08/17 Sun 23:48:22
φ ousapas 轉:到 [ousapas] 看板,于 2008/10/19 Sun 00:08:42
作者: sa072686 at 08/08/19
XDDDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 220.132.250.120 (台南火車站偷上逼)
作者: sa072686 at 08/08/19
XDDDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 220.132.232.64 (中滑一番)
作者: DJWS at 08/08/19
題目的大意是:
有一座山,山上有神秘的動物,站在每個山頂以及山坳。
地面上有跟神秘動物一樣數量的獵人,
每個人在地面的行走速率和爬山速率都不一。
請在最短的時間內讓每個獵人走到山下並爬上山,
分頭佔據各個山頂或山坳。
這個問題看起來是一個 matching 的問題,
一個獵人對應一個山頂/山坳
但是我不知道怎麼求出獵人走到山頂/山坳的時間。
所以就來問問看啦 :D
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.79.103 (中滑一番)
▲ DJWS 改@2008/08/19 Tue 22:28:57
作者: sa072686 at 08/08/19
這…題目上應該有提及!
Initially, they are all at the foot of the mountain. (i.e at (si,0) ) For
every person i, he is planing to go left/right to some place (x,0) (where x
is an integer - they do not want to take time to work out an accurate place)
這裡訴說了每個獵人會試著往左或右走到某 (x, 0),並且 x 必為整數!
at the speed of wi, then climb directly to the destination along a straight
line(obviously, no part of the path that he follows can be OVER the mountain
- they can't fly) at the speed of ci. They don't want to miss it this time,
這裡說一定是筆直往目標走去,所以是直線;並且不能超出山的線條。
so the teamleader wants the latest person to be as early as possible. How
fast can this be done?
----
很明顯地,獵人起初全在 x 座標軸上,先往左右「直線」走到 x 軸上某整數點,
再「筆直」地走到目的地,所以一定是直線爬山,而且不能切過山的線段。
換句話說就是兩條直線。一條 x 軸上水平線且一定一端落在格子點,
一條就是 x 軸上該整數點連到山頂(或山坳)的直線。
這樣夠清楚了吧?
不要管山不山的,看成平面圖吧XD
※ 引述《DJWS (...)》之銘言:
> 題目的大意是:
> 有一座山,山上有神秘的動物,站在每個山頂以及山坳。
> 地面上有跟神秘動物一樣數量的獵人,
> 每個人在地面的行走速率和爬山速率都不一。
> 請在最短的時間內讓每個獵人走到山下並爬上山,
> 分頭佔據各個山頂或山坳。
> 這個問題看起來是一個 matching 的問題,
> 一個獵人對應一個山頂/山坳
> 但是我不知道怎麼求出獵人走到山頂/山坳的時間。
> 所以就來問問看啦 :D
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ DJWS 推:感謝啦 XD 0819 23:11
作者: DJWS at 08/08/22
有m個人戰將棋,打循環賽。
兩個人之間都會下兩場,每場結果一定只有勝或敗兩種,不會平手。
我們想知道:如果第p位棋手成為第一名時,他的勝場數最多可以比第二名多幾場。
戰績表的讀法與一般矩陣一樣,
(i,j) = 1 表示第i位棋手勝了第j位棋手
(i,j) = 0 表示第i位棋手輸了第j位棋手
(i,j) = - 表示還沒開戰
請根據目前戰況做預測,並印出方才提到的勝場數,以及印出預測的戰績表結果。
滿足條件的任一組解都可以。
如果第p位棋手不可能成為第一名,就直接印出不可能的訊息即可。
-
討論區說這一題可以用Flow來解
但我想了很久卻想不出來圖該怎麼建
可以請大家給點提示嗎?
翻譯這一題的時候讓我想到了最近打的棒球賽....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.85.32 (沒有故鄉)
作者: sa072686 at 08/08/22
是,我也直覺會想到這題XD
我是直接用匹配的方式做…把還沒打的仗的兩個對手連起來,
然後試著做匹配,枚舉或二分搜尋要贏的棋手所需的分數,
並把點容量限制在會敗給該棋手的最高分數,然後去做 flow,
如果有人贏太多,就看和他有比賽的棋手,還能不能贏,照這樣去找增廣路就行了。
差不多是把勝場數「流」給他的對手的意思XD
※ 引述《DJWS (...)》之銘言:
> 有m個人戰將棋,打循環賽。
> 兩個人之間都會下兩場,每場結果一定只有勝或敗兩種,不會平手。
> 我們想知道:如果第p位棋手成為第一名時,他的勝場數最多可以比第二名多幾場。
> 戰績表的讀法與一般矩陣一樣,
> (i,j) = 1 表示第i位棋手勝了第j位棋手
> (i,j) = 0 表示第i位棋手輸了第j位棋手
> (i,j) = - 表示還沒開戰
> 請根據目前戰況做預測,並印出方才提到的勝場數,以及印出預測的戰績表結果。
> 滿足條件的任一組解都可以。
> 如果第p位棋手不可能成為第一名,就直接印出不可能的訊息即可。
> -
> 討論區說這一題可以用Flow來解
> 但我想了很久卻想不出來圖該怎麼建
> 可以請大家給點提示嗎?
> 翻譯這一題的時候讓我想到了最近打的棒球賽....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (沒有故鄉)
→ DJWS 推:照這個想法來看 應該要把第p位玩家先設成全勝對吧? 0822 19:01
→ DJWS 推:設好之後 再去看其他人應該怎麼贏 0822 19:02
→ DJWS 推:但是我還是不懂圖要怎麼建 如果i與j還沒比 就設立 0822 19:05
→ DJWS 推:i->j' 和 j->i' 嗎? 可是這樣要怎麼確保這兩條邊只能連一條�0822 19:06
作者: sa072686 at 08/08/22
→ DJWS 推:照這個想法來看 應該要把第p位玩家先設成全勝對吧? 0822 19:01
→ DJWS 推:設好之後 再去看其他人應該怎麼贏 0822 19:02
→ DJWS 推:但是我還是不懂圖要怎麼建 如果i與j還沒比 就設立 0822 19:05
→ DJWS 推:i->j' 和 j->i' 嗎? 可是這樣要怎麼確保這兩條邊只能連一條�0822 19:06
二分搜是因為…剛有點講錯,重看題目之後,題目說要求贏最多分,
所以是枚舉或二分搜第二高的分數,至於 p 玩家自然要全勝。
路徑上,基本上可以直接設成 i 勝 j,之後再把所有勝場過多的流掉就好。
這樣就不會有重不重覆的問題了。
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> 是,我也直覺會想到這題XD
> 我是直接用匹配的方式做…把還沒打的仗的兩個對手連起來,
> 然後試著做匹配,枚舉或二分搜尋要贏的棋手所需的分數,
> 並把點容量限制在會敗給該棋手的最高分數,然後去做 flow,
> 如果有人贏太多,就看和他有比賽的棋手,還能不能贏,照這樣去找增廣路就行了。
> 差不多是把勝場數「流」給他的對手的意思XD
> ※ 引述《DJWS (...)》之銘言:
> > 有m個人戰將棋,打循環賽。
> > 兩個人之間都會下兩場,每場結果一定只有勝或敗兩種,不會平手。
> > 我們想知道:如果第p位棋手成為第一名時,他的勝場數最多可以比第二名多幾場。
> > 戰績表的讀法與一般矩陣一樣,
> > (i,j) = 1 表示第i位棋手勝了第j位棋手
> > (i,j) = 0 表示第i位棋手輸了第j位棋手
> > (i,j) = - 表示還沒開戰
> > 請根據目前戰況做預測,並印出方才提到的勝場數,以及印出預測的戰績表結果。
> > 滿足條件的任一組解都可以。
> > 如果第p位棋手不可能成為第一名,就直接印出不可能的訊息即可。
> > -
> > 討論區說這一題可以用Flow來解
> > 但我想了很久卻想不出來圖該怎麼建
> > 可以請大家給點提示嗎?
> > 翻譯這一題的時候讓我想到了最近打的棒球賽....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (沒有故鄉)
→ DJWS 推:今天我終於解出來啦 :D 1024 20:46
→ DJWS 說:這一題我覺得其實不是匹配也不是流...不過它會用到匹配中的 1024 20:47
→ DJWS 推:一個重要概念 unique labeling property (好像是這樣稱呼的) 1024 20:47
作者: sa072686 at 08/09/05
計中XDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.7.59 (愛台灣大學墮落中心)
→ kub 推:台大資工系館219 Intel Lab~ 0905 20:59
→ kub 說:推文看不到IP囧 0905 20:59
作者: suhorng at 08/09/12
嗯我知道這個好像大學才會教...
然後書上我也是完全看不懂....
只是最近可能會用到
----------------------
1.快速傅立葉轉換到底是什麼東西?
2.如果要計算多項式乘法 f(x) * g(x),要怎麼應用?
3.轉換前跟轉換後到底有哪些差別?
----------------------
好吧問的很不專業
我整個不懂啊∼希望誰能大概介紹一下?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.66.49 (中滑一番)
→ sa072686 推:這個…不知道! 0912 23:07
→ ming1053 推:查wikipedia吧 0912 23:08
→ gba356 推:Fast Fourier Transform, FFT 這個不用學 0913 14:03
→ seanwu 推:uva有一題好像要..不很確定 0913 16:07
作者: sa072686 at 08/09/13
作者 sa072686 (小紅) 看板 b97902xxx
標題 [情報] AC Island
時間 Fri Sep 12 22:33:05 2008
───────────────────────────────────────
http://acc.tfcis.org:3600
這是一個名為 AC Island 的專案,由我自己所推動。
這網站會放的東西,不外乎與程式解題相關的一切。
沒錯,正是專為這些珍貴資料所量身打造的安置處。
起因是曾體會過想學習卻苦無資源、有問題卻找不到人發問、
網路上資料零散不全、繁中資源貧乏等問題,因此決心翻譯、整理,
並希望召集強者群,提供一些學習上的心得,以及所會的技巧。
且會放上目前少有的題目翻譯以及詳解、甚至對題目做整理、分類的工作。
宗旨為,為幫助後人學習程式解題。希望大家都能夠盡一份力豐富這裡,
並且教學相長、大家都可以一起變強。
雖然大膽地在這裡做了、並宣傳了它,但我知道憑我的力量是做不起來的。
因此,我只希望我能盡自己的一份力,並且出來拋磚引玉,
盼能集合大家的力量來豐富這個地方,留給之後的人,
讓他們不用再盲目地摸索著前人摸索過的部份。
此外,在索尼小站 (telnet://sony.tfcis.org)
和弗基斯特 (telnet://fgisc.twbbs.org) 都分別有我的個板(板名均同ID)
都有一些學術文可以參考,未來會慢慢搬遷過去。
希望可以幫助到同學們,也希望有能力的同學們可以站出來,
和我一起合作,壯大這裡。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.240.202
推 chenaren:頭推 ^_______^ 09/12 22:34
推 ming1053:終於發佈了嗎XD 09/12 22:35
推 yangmie:學弟好強大 09/12 22:43
推 joehuang92:頸推 09/12 22:50
推 iForests:專業五樓推 09/12 22:51
推 dreamoon:打從心裡的覺得好偉大 09/12 22:53
推 dennis2030:感覺很棒 真是感謝提供這東西給我們Q口Q 09/12 22:56
推 lmr3796:好偉大啊!!!一定要推一下!!!! 09/12 23:03
→ lmr3796:版主快M!!!! 09/12 23:03
推 jimmyken793:推推 09/12 23:04
推 gaga19900329:太強大了!!! 09/12 23:15
推 godgunman:嘿阿 .. 終於XD 09/12 23:21
→ sa072686:其實它內容還超貧乏的啊…歡迎大家投稿啊∼ 09/12 23:25
推 Bingojkt:sa好威!!!! DFS那篇不錯啊^^ 09/12 23:34
推 kyo22222:學弟真酷 09/13 04:00
→ sa072686:歡迎強者學長和同學們加入喔XD 09/13 08:37
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
→ mp607 推:聽說有TFcis11 0913 17:12
→ mp607 推:板 0913 17:12
→ LFKing 推:大推! 0913 18:09
→ bruce3557 推:真 強者 0913 21:15
作者: DJWS at 08/09/13
※ 引述《suhorng (HighXD 改了crt2.o)》之銘言:
> 嗯我知道這個好像大學才會教...
> 然後書上我也是完全看不懂....
> 只是最近可能會用到
> ----------------------
> 1.快速傅立葉轉換到底是什麼東西?
> 2.如果要計算多項式乘法 f(x) * g(x),要怎麼應用?
> 3.轉換前跟轉換後到底有哪些差別?
> ----------------------
> 好吧問的很不專業
> 我整個不懂啊∼希望誰能大概介紹一下?
傅立葉轉換是一套公式 或說方法
它是用在訊號處理上
把信號由"時域(time domain)"轉為"頻域(frequency domain)"
算是電機/電子領域的基本知識
資工/資科也有機會學到
快速傅立葉轉換
是利用Divide and Conquer
加速傅立葉轉換的計算過程
你可以說它是一套演算法
以上是隨手寫寫的簡介
詳細的內容等上大學就會學到啦∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.132.125 (中滑一番)
→ suhorng 推:謝謝DJWS !!! 大學....(遠目) 感謝您的說明∼ 0913 20:12
→ sa072686 推:大神出手了XDDD 0913 20:53
→ chensc 推:我們家的大神=w= 0913 21:06
→ DJWS 推:樓上似乎是我家學弟? XD 0913 23:15
→ chensc 推:對啊,101級的XD 0913 23:57
→ kub 推:看到三樓推的 以為跟原波是閃光關係.... 0914 05:31
→ sa072686 推:五樓IOI級的,好威呀! 0914 06:28
→ godgunman 推:想了一下終於懂樓上的梗!!XD 0915 21:19
→ chensc 推:.....= =+ 0915 21:40
→ DJWS 推:我看了樓樓上的推文我才知道梗在哪裡 XD 0915 23:14
→ sa072686 推:啊這,虧我關鍵的三個字還對齊得那麼漂亮XDDD 0916 00:53
作者: sa072686 at 08/09/19
防個雷
嗯,其實是重覆性很大的背包問題…
就算用 list 記錄所有配不出來的,並且只檢查它們,也不能在一秒內跑出來;
所以想說範圍一定很多重覆,比如說很多瓶子都可以裝出 2000 ml 等等,
因此,把所有瓶子可以裝的給 or 起來建成一張表,接下來只要掃過一遍,
每次對每種 ml 數,試著枚舉可以裝的量,看是否能夠配得出來;
一旦發現有一種瓶子可以裝得出來,就剪掉換下一種 ml 數了。
這樣跑起來速度差很多很多。
※ 引述《sa072686 (藝術)》之銘言:
> 嗯…不太難寫的一題,雖然一開始很容易被嚇到XD
> 不過跑的秒數有點…,還請各位強者不吝賜教∼
> 翻譯一下。
> 酒既不能夠裝得太滿,留下的空間不夠多;也不能夠裝得太少,空氣留得太多會酸掉
> 因此每個酒瓶都有容量上下限,在此限制之內的酒才能保存得好。給你現在有多少
> 酒要裝,單位為公升(n <= 1000000)以及有 m 種大小的酒瓶。
> 接下來 m 列給你這些酒瓶的最大與最小容量。最小不會低於 350,最大不會超過 4500
> 並且最大與最小的比例不會低於 95% 也不會高於 99%。單位為毫升,試求裝不下的酒
> 共有幾毫升?假設每種瓶子都有無限多個。
> ---- 分隔線 ----
> 嗯,不難看出是背包問題…
> 不過,它麻煩了些:最多有 1000 * 1000000 毫升的酒。
> 嗯,分析一下會發現:使用一種瓶子時,看使用幾個,假設 m 個
> 那麼就可以覆蓋 (max-min) * m 這麼大的範圍。
> 又,(max-min) 最小最小是 1%,所以可以保證酒在某特定毫升數以上時
> 一定可以裝得完。透過這個判斷,表最多只要建到 45 萬就夠了,1.24s
> 不過應該有更好的方法才是。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
作者: DJWS at 08/09/25
http://www.prefield.com/algorithm/index.html
看了你就知道他的強大了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.76.128 (中滑一番)
→ PG 推:借轉 0925 11:57
φ PG 轉:到 [PG] 看板,于 2008/09/25 Thu 11:57:57
→ ming1053 推:借轉:p 0925 21:25
φ ming1053 轉:到 [ming1053] 看板,于 2008/09/25 Thu 21:25:37
→ shik 推:借轉~ 0925 21:29
φ shik 轉:到 [shik] 看板,于 2008/09/25 Thu 21:29:25
→ SKYLY 推:借轉感謝 :D 0925 22:29
φ SKYLY 轉:到 [SKYLY] 看板,于 2008/09/25 Thu 22:29:09
→ YiPo 推:看不懂,但就是感覺很強大,借轉 0927 11:40
φ YiPo 轉:到 [YiPo] 看板,于 2008/09/27 Sat 11:41:10
→ aytawgf 說:借轉 0929 23:49
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/09/29 Mon 23:49:55
φ ousapas 轉:到 [ousapas] 看板,于 2008/10/19 Sun 01:08:08
作者: DJWS at 08/09/27
※ 引述《seanwu ( )》之銘言:
> 嗯,Lucky貓有翻譯。
> 簡單的說...或者說一看就知道是類似MST的東西...然後還有方向性...
> 就是最小樹形圖啦...
> Hint? 沒有,有了也沒用...
> 後話,樹形圖真是一種有趣的東西...即使你學了半天學會了,也只能寫11183這題...
> ACM好像也沒有別題了...比賽也不太可能出現...專考這種畸形的演算法會被揍吧...
最近我正在研究這個主題
有人知道 O(V^2) 和 O(ElogV) 的演算法是什麼樣子的嗎?
我在網路上只找到 O(V^3) 和 O(VE) 的演算法。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.83 (中滑一番)
▲ DJWS 改@2008/09/27 Sat 13:37:44
→ seanwu 推:V^2是:一直往最小邊倒回去,如果長出圈 0927 23:48
→ seanwu 說:拔掉圈上差值最小的邊,換上新邊後當新起點往回倒 0927 23:50
→ DJWS 推:感謝樓上 演算法我懂了 恩...可是這為什麼是V^2呢? 0928 09:37
→ seanwu 推:每條邊最多出現刪除一次O(E),每個點最多被看O(V)次O(V^2) 0928 11:05
→ DJWS 推:每條邊最多出現刪除一次O(E) <-- 要怎麼做到? 0928 11:36
→ seanwu 推:這樣說好了,每個點的"最小入邊",只會加大不會減少 0928 11:42
→ DJWS 推:只會加大不會減少沒錯...那要怎麼依序由小找到大? 0928 11:48
→ seanwu 推:一開始就把每個點上的先排序好..? 0928 12:29
→ DJWS 推:每個點都有V條入邊 V條邊排序要VlogV 所以整張圖要VVlogV 0928 12:51
→ DJWS 推:應該就不只V^2吧 @@" 0928 12:52
→ seanwu 推:對喔... 那所以應該是ElogV+V^2之類的了 0928 19:36
→ DJWS 推:嗯嗯 不過ElogV+V^2也不錯了 搞不好可以投稿期刊? :p 0928 20:59
作者: DJWS at 08/09/30
作者: vgod (吼!) 看板: Prob_Solve
標題: 匈牙利演算法...
時間: Thu Sep 14 10:19:40 2000
基本上要用到的性質只有兩個
1.把配對的矩陣同一行或同一列相減任一值後最佳解不變
2.矩陣中不相衝突的0組合就是最佳解
所以作法非常簡單...
以下面這個矩陣為例
| 5 2 3 1 |
| 2 6 1 5 |
| 1 8 2 4 |
| 7 3 4 2 |
現在要求的是矩陣中四個不同行不同列的位置,使得這四個位置數字總和最小
(要求最大就用個常數把整個陣列都給減掉就好了)
用1的步驟可以讓這矩陣化為..
| 4 1 2 0 |
| 1 5 0 4 |
| 0 7 1 3 |
| 5 1 2 0 |
然後接下來要選0,選0的原則為從有0最少的那一行(列)開始選
只要選了某個0,和他同行同列的就不能再選....
於是我們可以選出下面的矩陣來(V代表已選取的,X代表不能再選的)
| 4 1 2 V |
| 1 5 V 4 |
| V 7 1 3 |
| 5 1 2 X |
然後發現我們可以選到的0只有3個,但實際上我們得選出4個0出來..
發現仍然不夠後就得「製造」出0....
製造的方法就是利用性質1...
先把沒有打V的那一行(列)找出來,並把那一行(列)上的0的那一列(行)都標起來
(已經選過的V或X仍然是0..)
| 4 1 2 V | *3
| |
| 1 5 V 4 |
| |
| V 7 1 3 |
| |
| 5 1 2 X | *1
*2
標號順序依次為*1,*2,*3
接下來就把沒有標號的列劃上橫線,有標號的行劃上直線
於是矩陣變成
| 4 1 2 V | *
| | |
|-1-5-V-4-|
| | |
|-V-7-1-3-|
| | |
| 5 1 2 X | *
*
接下來就從沒有被劃上線的數字中選出最小的
每一沒被劃的橫列都減去它,每一有劃的直行都加上他
於是得到矩陣
| 3 0 1 V | *
| | |
|-1-5-V-5-|
| | |
|-V-7-1-4-|
| | |
| 4 0 1 X | *
*
所以我們就又製造出兩個0了(注意 原來是0的位置仍然不變)
再回到最上面的步驟...開始選0
如果還是不足,就一直重複這樣增加0出來
直到選到n個0為止....
而那n個位置就是最佳解的位置...
最後答案是
| 3 X 1 V | | 3 V 1 X |
| 1 5 V 5 | 或 | 1 5 V 5 |
| V 7 1 4 | | V 7 1 4 |
| 4 V 1 X | | 4 X 1 V |
1+3+1+1=6 1+2+1+2=6
就這樣..
---
看完中華一番後看懂的...
其實跟用圖來解釋的方法是差不多的樣子
不過只是用純矩陣來表達,比較容易懂..
---
只不過這樣看我分析不出複雜度是多少...
φ DJWS 轉:從 [DJWS] 信箱,于 2008/09/30 Tue 18:17:12
▲ DJWS 改@2008/09/30 Tue 18:17:33
φ ousapas 轉:到 [ousapas] 看板,于 2008/10/19 Sun 00:08:18
→ aytawgf 推:借轉 1023 23:02
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/10/23 Thu 23:02:54
作者: DJWS at 08/10/03
※ 引述《seanwu (海恩吳)》之銘言:
> 最小平均值圈 Minimum Mean Weight Cycle
> 先來個非常弱的算法..
> Hint: 不管要求的圈有沒有限定一個點或邊只能走一次云云,
> 最小平均值圈一定是簡單圈(每個點只走一次)
> 可以試著在最小平均值圈旁再粘上一個圈,
> 接著證明這個動作不會讓最小平均值圈變得更小
> 所以得到了一個很簡單的算法 O(EV^2) = O(V^4) :
> 枚舉每個點當做起點,以 Bell-Ford 最短路徑疊代算法 (或BFS亦可)
> 每次疊代後計算cycle的平均值,去更新 Min
這邊提供一個更快的算法 O(VE) 或 O(V^3)
答案 = min max [(dn(j) - dk(j)) / (n-k)]
j屬於V 0<=k<=n-1
其中dk(j)是從起點走過剛好k條邊到達j點的最短路徑長度
另外 n = |V|
證明嘛...我還在研究怎麼證
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.239 (中滑一番)
→ seanwu 推:ItoA有這個,有證法的引導 1003 12:34
→ peter50216 推:我還以為那個/是除... 1004 16:29
▲ DJWS 改@2008/10/04 Sat 20:15:57
→ DJWS 推:改好了! 1004 20:16
作者: DJWS at 08/10/05
※ 引述《DJWS (...)》之銘言:
> 這邊提供一個更快的算法 O(VE) 或 O(V^3)
> 答案 = min max [(dn(j) - dk(j)) / (n-k)]
> j屬於V 0<=k<=n-1
> 其中dk(j)是從起點走過剛好k條邊到達j點的最短路徑長度
> 另外 n = |V|
> 證明嘛...我還在研究怎麼證
我去翻了I2A
在617頁
雖然已經看懂了證明
不過還是不知道證明過程是怎麼發展出來的
我還得花時間端摩一下
下面就附一下證明吧
a.
u*=0表示圖上必有零環 沒有負環 (如果有負環那麼u*就會是負的了)
圖上沒負環 所以無法藉由負環來無限縮短路徑
這也表示最短路徑如果有個環 並沒有比簡單路徑來得較好
於是最短路徑的邊數一定介於0條到n-1條之間
得證
b.
分母一定是正數 不影響不等式 所以不用看
因為這要最大值 所以分子的減法式子 減越多越好
所以 δk(s,v) 越小越好
於是可以把 a. 的結果拿來用:也就是 δk(s,v) 直接想作是s->v的最短路徑啦
至於 δn(s,v) 有n條邊 這條路徑一定有環
所以至少會比最短路徑還要大(或一樣)
得證
special case: s->v不通 則δn(s,v)等於無限大 得證
c.
令s->u的路徑長度為a
令s->v的路徑長度為b
不知a和b那個最適合作為最短路徑的長度
如果a比b更適合 那麼走過該環u->v後 等式成立
如果b比a更適合 那麼走過該環v->u後 等式成立
得證
d.
在零環上取一個適當的v
讓s->v的路徑剛好有n條邊 且長度儘量短 即是δn(s,v) (想必路徑會繞行這個零環)
其長度會等於s->v的最短路徑δk(s,v)
相減就是零
再由b.即可得證
e.
不繞零環的話
就不會有d.所提到的長度相等的情況
不繞零環的話
δn(s,v)一定會比δk(s,v)還大
min值會出現在d.的情況 當v在零環上的時候
f.
每一條邊都增加t之後
最小平均值環仍舊不動
因此
可以使用d.的情況
δn(s,v)仍會嘗試繞行最小平均值環來得到最短的長度
δn(s,v)和δk(s,v)相減之後
還多了n-k條邊 每一條都增加t
除以分母之後 剛好就是一個t
u*也增加一個t
得證
PS: 每一條邊都增加t 最短路徑會變動 不過只要重新選一個在環上的v就搞定了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.132.242 (中滑一番)
▲ DJWS 改@2008/10/05 Sun 22:00:14
作者: DJWS at 08/10/08
http://www.csapc.org/
兩岸第一次合辦的程式設計比賽
文章可自行轉錄 :)
-
受主辦人之托前來進行宣傳
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.77.166 (中滑一番)
φ ming1053 轉:到 [ming1053] 看板,于 2008/10/10 Fri 17:25:50
→ SKYLY 推:申請後沒有收所謂的信耶Q_Q 1010 17:55
φ ming1053 轉:到 [ming1053] 看板,于 2008/10/10 Fri 22:01:31
φ s864372002 轉:到 [s864372002] 看板,于 2008/10/11 Sat 13:33:36
→ s864372002 推:謝謝:) 1011 13:34
作者: DJWS at 08/10/27
怎麼最近好像都是我在po文... @@"
UVa有一般圖匹配的題目嗎?
如果沒有的話...其他OJ上的也可以
謝謝各位了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.77.252 (中滑一番)
→ godgunman 推:好像是 Ural 1099的樣子 1027 17:54
→ DJWS 推:所以UVa沒有? 那我只好去註冊Ural了 1028 07:11
→ DJWS 推:可以順便問一下Ural的I/O格式嗎...? 1028 08:15
→ tmt514 推:stdin/out, 通常一個input file只有一筆測資~ 1028 09:23
→ DJWS 推:感謝 :) 1028 10:05
→ DJWS 推:寫不出來 敗了 orz 1028 11:57
→ seanwu 推:uva11439 1028 18:37
→ DJWS 推:謝謝樓上...另外想請教一下是否有不用縮花的方法? 1029 23:21
→ DJWS 說:我有想到說可以直接DFS+backtrack暴搜找擴充路徑 1029 23:23
→ DJWS 推:但是總覺得時間複雜度太高 所以想問問看有沒有好方法~ 1029 23:23
→ seanwu 推:我可以用縮花的概念但不用寫縮花...這樣可以嗎? 1030 23:22
→ DJWS 推:可以呀...麻煩你教一下吧 :) 1031 10:16
→ seanwu 推:嗯...大意上是這樣的,我們要維護從根到外點的所有交錯路 1031 18:39
→ seanwu 說:而且這條交錯路連上這個外點的邊必需是飽和邊 1031 18:40
→ seanwu 說:找一個空點當做根開始,丟到queue或stack裡面 1031 18:41
→ seanwu 說:處理queue裡面的點(一定是外點),從它開始擴展 1031 18:42
→ seanwu 說:1.如果走到空點,那從根到它之間是增廣路(利用維護的路徑) 1031 18:43
→ seanwu 說:2.走到飽和點,則它是內點,與它匹配的是外點,加入queue 1031 18:44
→ seanwu 說:3.走到已標記的外點,則到與它的LCA之間是花,此時 1031 18:45
→ seanwu 說: 花上的所有內點都會得到與根之間的交錯路(反方向去繞) 1031 18:46
→ seanwu 說: 於是,這些內點都會被標記成外點,維護好路徑,加入que 1031 18:47
→ DJWS 推:感謝...我來研究看看... 1101 11:18
→ yuscvscv 推:哇勒= =完全看不懂..... 1101 23:44
→ DJWS 推:樓上可以先研究一下縮花演算法 這樣就能知道樓樓上講啥了 1102 09:54
→ yuscvscv 推:用GOOGLE去查"縮花演算法"找不到東西= = 1102 11:22
→ DJWS 推:Edmonds' blossom shrinking algorithm 1102 22:30
作者: DJWS at 08/11/04
我有找到一個號稱是O(V^3)的程式碼
給各位參考一下
不過我自己是看不太懂他在做啥...
ftp://dimacs.rutgers.edu/pub/netflow/matching/cardinality/solver-1/match.c
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.70.56 (中滑一番)
作者: LFKing at 08/11/07
95全國賽第43.
下列遞迴程序(recursive procedure)中 n 為輸入之正整數,
count 是起始值為0 之全域變數(global variable)。下列何者為錯?
Rec-x( n )
{
if ( n = 1 ) or ( n = 2 ) then
count ← count + 1
else
{
Rec-x( n - 1 )
Rec-x( n - 2 )
Rec-x( n - 2 )
count ← count + 1
}
}
(a) 當n輸入為3時,count 最後的值為4
(b) 當n為較大之整數時,可能會造成無窮迴圈
(c) 時間複雜度為O(2n)
(d) 空間複雜度為O(n)
-----------------------------------------------------------------------------
選項(d)
空間複雜度正確是怎麼算呢? 還請有閒人多多幫忙 > <
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by LFKing from 210.60.161.254 (鳳新高校)
→ shik 推:我的想法是遞回深度是O(n)成長, 1107 21:38
→ shik 說:所以空間就是遞回所佔用的空間(?) 1107 21:38
→ DJWS 推:我跟樓上想得一樣~ 1108 09:03
作者: DJWS at 08/11/08
→ seanwu 推:嗯...大意上是這樣的,我們要維護從根到外點的所有交錯路 1031 18:39
→ seanwu 說:而且這條交錯路連上這個外點的邊必需是飽和邊 1031 18:40
→ seanwu 說:找一個空點當做根開始,丟到queue或stack裡面 1031 18:41
→ seanwu 說:處理queue裡面的點(一定是外點),從它開始擴展 1031 18:42
→ seanwu 說:1.如果走到空點,那從根到它之間是增廣路(利用維護的路徑) 1031 18:43
→ seanwu 說:2.走到飽和點,則它是內點,與它匹配的是外點,加入queue 1031 18:44
→ seanwu 說:3.走到已標記的外點,則到與它的LCA之間是花,此時 1031 18:45
→ seanwu 說: 花上的所有內點都會得到與根之間的交錯路(反方向去繞) 1031 18:46
→ seanwu 說: 於是,這些內點都會被標記成外點,維護好路徑,加入que 1031 18:47
我又有問題了
LCA要怎麼找?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.71.5 (中滑一番)
→ seanwu 推:找u,v的LCA,因為之前必定分別記錄了root到u,v的path 1108 13:43
→ seanwu 說:所以這兩條path,從root開始往下看,最後一個相同的點就是 1108 13:44
→ DJWS 推:照這樣來看 找LCA的時間複雜度最糟是O(V)囉! 1108 22:00
→ yuscvscv 推:時間複雜度 空間複雜度?? 1108 22:04
→ DJWS 推:樓上是有什麼困擾嘛? 1108 22:17
→ yuscvscv 推:那是什麼東西= = 1108 22:20
→ DJWS 推:就是time complexity和space complexity 樓上不是資訊專科�1108 22:21
→ DJWS 推:http://en.wikipedia.org/wiki/Tarjan_off-line_least_commo 1108 22:21
→ seanwu 推:嗯,是O(V)沒錯,但不影響整體的複雜度,所以沒關係 1108 22:22
→ DJWS 說:n_ancestors_algorithm 我剛找到這個是把原本為O(V^4)的 1108 22:22
→ DJWS 說:縮花演算法變成O(V^3) 得用到的LCA演算法 1108 22:23
→ seanwu 推:咦? 我想想看.. 1108 22:23
→ yuscvscv 說:資訊專科?那是什麼東西? 1108 22:24
→ DJWS 推:ㄟ...我的意思是你不是學資訊學的人嘛? 1108 22:27
→ yuscvscv 說:我才高1耶= =什麼資訊學? 1108 22:28
→ DJWS 推:那等你進入大學就讀資訊相關科系 就有機會懂這些術語了 :) 1108 22:30
→ seanwu 推:ok我想起來了,縮花的時候,要把兩端都屬於這個花的邊標掉 1108 22:33
→ seanwu 說:這樣,總共只會有O(V)次縮花 1108 22:34
→ yuscvscv 說:那為什麼樓上的學長懂>\\\< 1108 22:34
→ suhorng 說:樓上學長可是強者耶.... 1108 22:35
→ yuscvscv 說:說的也是= =.....剛剛維基了一下,大致知道是啥.... 1108 22:36
→ yuscvscv 說:不過....不懂log真是件討厭的事= = 1108 22:37
→ suhorng 說:log....隨便哪家書店翻書就有啦XD!!!! 1108 22:48
→ yuscvscv 說:聽說對數得等到1下才會教= = 1108 22:51
→ suhorng 說:觀念不難啊...||| 翻書就懂了..... 1108 22:55
→ yuscvscv 說:是喔~有空去翻翻看~ 1108 22:57
作者: DJWS at 08/11/08
我來說一點故事好了。
最初Claude Berge先生(2002歿)建立了一個關於匹配的重要理論,
也可以說是個計算匹配的方法:
Berge's theorem:
如果沒有擴充路徑,就是最大匹配。
如果一個點找得到擴充路徑,就可以直接以該擴充路徑來增加匹配數。
然後Jack Edmonds(一個大鬍子阿伯,存)發明了縮花演算法。
這個縮花演算法非常簡單:
blossom-shrinking algorithm:
甲、圖上每個點都嘗試找一條擴充路徑。
乙、找一條擴充路徑時用遍歷演算法,
如果形成了花就縮花並重新遍歷,
找到了路徑就把花還原。
找一條擴充路徑最糟會遇到V/2次花。(一朵花最少三點,一次縮花整張圖減少兩點)
整體時間複雜度是O(V) * O(V+E) * O(V/2) = O(V^4)。
接著人們開始實作這個演算法,
陸陸續續推出了很多O(V^4)的版本,
直到Harold N. Gabow(陽光的人,存)實做了一個號稱是O(V^3)的版本。
實在是太神奇了!竟然降低了時間複雜度!
但是他在論文中有坦白說他覺得這個實作"或許"是O(V^3),無法證明真的是這麼快。
隨即Robert E. Tarjan(圖論演算法強者,存)推出了一個LCA的算法:
http://en.wikipedia.org/wiki/Tarjan_off-line_least_common_ancestors_algorithm
這個演算法是O(alpha(•))的,就跟disjoint sets的時間複雜度一樣。
碰巧的是,
這個演算法正好就是Gabow實作時所用到的手法。
這導致了Gabow的實作方式淪為O(V^3 * alpha(•))的數量級,
而非號稱的O(V^3)。
但是看來Gabow沒有死心,
多年後Gabow和Tarjan兩人聯手證明出LCA演算法經過微調後可以快到O(1)。
所以Gabow的實作真的可以達到O(V^3),但是要微調。
以上就是縮花演算法的故事。 :D
-
btw,
計算最大匹配除了縮花演算法之外,
還有另外一個O(sqrt(V)*E)的演算法。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
▲ DJWS 改@2008/11/08 Sat 23:43:50
→ PG 推:感謝分享 不過我比較想知道哪邊找的到相關的實做方法.. 1108 23:44
→ DJWS 推:說的好 這也是我在苦惱的問題 XD 1108 23:49
→ DJWS 推:我自己是有找到Edmonds Gabow Tarjan他們提出這些論文 1108 23:51
→ DJWS 說:不過都超難讀的啦... 我自己都看不太懂裡面寫什麼... 1108 23:52
→ DJWS 推:然後...seanwu所說的方法其實應該就是Gabow用的方法 :) 1108 23:55
→ DJWS 說:只是seanwu在求LCA的時候 比較隨意而已啦~ 1108 23:56
▲ DJWS 改@2008/11/09 Sun 00:02:46
→ seanwu 推:等一下...我跟球主討論過這個,結論我記得是O(V^3)啊.. 1109 00:24
→ seanwu 說:我重寫一遍看看好了,因為我記得ural寫V^4好像不過 1109 00:25
→ seanwu 說:記得是V^3,是因為當時好像開過玩笑說 1109 00:26
→ seanwu 說:"反正不才50幾行,而且還是V^3,以後二分圖用這個做好了" 1109 00:26
→ seanwu 說:之類的話,所以我一直以為是V^3 1109 00:27
→ seanwu 說: *到 1109 00:27
→ seanwu 說:另外我還記得,因為code太美妙了,所以球主說 1109 00:28
→ seanwu 說:每次寫題目前只要大喊三聲"matching!"就會AC之類的屁話... 1109 00:30
→ seanwu 推:(另一個要喊的是"monotonicity!",一樣是屁話) 1109 00:31
→ seanwu 推:最後,我不知到Gabow先生搞了什麼莫名其妙的東西.. 1109 00:33
→ seanwu 說:從縮花到LCA那邊都很容易,徵結應該在於O(1)的LCA 1109 00:36
→ seanwu 說:而且還是動態的 (靜態的可以轉+/-1 RMQ O(n)後做O(1)) 1109 00:37
→ DJWS 推:ok...那我要來研究一下RMQ是什麼 1109 11:50
→ seanwu 推:算法藝術講LCA的地方有提到+/-1 RMQ 1109 12:35
→ DJWS 推:我剛看到I2A在disjoint sets章節的練習題有講LCA 1109 13:22
→ DJWS 推:http://www.cnblogs.com/drizzlecrj/archive/2007/10/23 1109 13:23
→ DJWS 說:/933472.html 這裡有RMQ 1109 13:23
→ DJWS 推:seanwu你說的沒錯 癥結在於動態還能O(1) 1109 13:25
作者: LFKing at 08/11/09
※ 引述《LFKing (|AC_Island 打雜] =>)》之銘言:
> 95全國賽第43.
> 下列遞迴程序(recursive procedure)中 n 為輸入之正整數,
> count 是起始值為0 之全域變數(global variable)。下列何者為錯?
> Rec-x( n )
> {
> if ( n = 1 ) or ( n = 2 ) then
> count ← count + 1
> else
> {
> Rec-x( n - 1 )
> Rec-x( n - 2 )
> Rec-x( n - 2 )
> count ← count + 1
> }
> }
> (a) 當n輸入為3時,count 最後的值為4
> (b) 當n為較大之整數時,可能會造成無窮迴圈
> (c) 時間複雜度為O(2n)
> (d) 空間複雜度為O(n)
> -----------------------------------------------------------------------------
> 選項(d)
> 空間複雜度正確是怎麼算呢? 還請有閒人多多幫忙 > <
根據shik兄的說法
深度
n=1 1 <= 最差狀況 O(n)
n=2 1
n=3 2
n=4 3
n=5 4
n=6 5
是這樣沒錯吧xD
-------------------
所以這題答案應為(b),當輸入之n極大時,溢位成負值也不會造成無限迴圈 :D
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by LFKing from 122.117.232.20 (http://ppt.cc/tUG4)
→ s864372002 推:原本答案就是B,這東西就算溢位也不會無窮。 1109 08:17
→ s864372002 說:「何者為錯」 1109 08:18
▲ LFKing 改@2008/11/10 Mon 23:15:26
→ LFKing 推:改謝指正XD 1110 23:15
作者: seanwu at 08/11/09
這是ural 1099的code,重新寫過,希望會比較清楚一點
#include <stdio.h>
int map[300][300]; map[i][j]==1 表示點i,j之間有邊
int path[300][300],pp[300]; path[x]記錄了root到點x的交錯路,pp[x]表有幾個點
int mt[300]; mt[x]是與 x匹配的點,如果mt[x]==-1表示 x未匹配
int flag[300]; flag[x]的值可以為0,1,-1,表未處理,外點,內點
int que[300]; 存放代處理外點的queue
int n; 圖的點數,點的編號為0,1,2,...,n-1
int match() {
int i,j,k,h,p,q,w,x,y,f; i,j,k,h迴圈計數,p>=q queue計數,w,x,y點,f旗標
for( i=0; i<n; i++ ) {
mt[i] = -1; 初始化所有點未匹配
}
while(1) {
w = -1;
for( i=0; i<n; i++ ) {
if(mt[i]==-1) {
w = i; 尋找一個空點w
break;
}
}
if(w==-1) break; 找不到空點,則已達最大匹配,結束
p = 0;
q = -1;
for( i=0; i<n; i++ ) {
flag[i] = 0; 初始所有點未處理
}
flag[w] = 1; 標空點w為外點
path[w][0] = w; 並設置好path
pp[w] = 1;
que[0] = w; 丟入queue中
f = 1; 旗標f決定於是否找到增廣路,找到則為0
while(p!=q && f) {
x = que[++q]; 目前處理的點x
for( i=0; i<n; i++ ) {
if(map[x][i]) {
if(flag[i]==0) {
if(mt[i]==-1) { 1.找到空點 => 得到增廣路
for( j=1; j<pp[x]; j+=2 ) {
mt[path[x][j-1]] = path[x][j]; 沿先前記錄的path修改匹配
mt[path[x][j]] = path[x][j-1];
}
mt[x] = i; 記得包括這個空點i
mt[i] = x;
f = 0;
break;
}else { 2.找到未處理的已匹配點
flag[i] = -1; 標i為內點,所匹配的mt[i]為外點
flag[mt[i]] = 1;
for( j=0; j<pp[x]; j++ ) {
path[mt[i]][j] = path[x][j]; 設置好外點mt[i]的path
}
path[mt[i]][pp[x]] = i;
path[mt[i]][pp[x]+1] = mt[i];
pp[mt[i]] = pp[x]+2;
que[++p] = mt[i]; 將外點mt[i]丟入queue
}
}else if(flag[i]==1) { 3.找到已處理的外點
for( j=0; path[x][j]==path[i][j]; j++ ); 找LCA(path[x][j-1])
for( k=j-1; k<pp[x]; k++ ) {
y = path[x][k];
if(flag[y]==-1) { 在path[x]上從LCA到x之間的內點皆變為外點
flag[y] = 1;
pp[y] = 0;
for( h=0; h<pp[i]; h++ ) {
path[y][pp[y]++] = path[i][h]; 由反向的path[i]下去
}
for( h=pp[x]-1; h>=k; h-- ) {
path[y][pp[y]++] = path[x][h]; 在由path[x]繞上來
}
que[++p] = y;
}
}
for( k=j-1; k<pp[i]; k++ ) {
y = path[i][k];
if(flag[y]==-1) { 在path[i]上從LCA到i之間的內點皆變為外點
flag[y] = 1;
pp[y] = 0;
for( h=0; h<pp[x]; h++ ) {
path[y][pp[y]++] = path[x][h]; 由反向的path[x]下去
}
for( h=pp[i]-1; h>=k; h-- ) {
path[y][pp[y]++] = path[i][h]; 在由path[i]繞上來
}
que[++p] = y;
}
}
}
}
}
}
if(f) {
mt[w] = w; 從w做為起點找不到增廣路,於是將w標記掉,下次不再以w做為root
} 這跟拿掉整個匈牙利樹是一樣的作用,不過很明顯,這樣容易的多
}
return 0;
}
int main() {
int i,j,x,y,s;
scanf("%d",&n);
for( i=0; i<n; i++ ) {
for( j=0; j<n; j++ ) {
map[i][j] = 0;
}
}
while(scanf("%d %d",&x,&y)==2) {
x--;
y--;
map[x][y] = map[y][x] = 1;
}
match();
s = n;
for( i=0; i<n; i++ ) {
if(mt[i]==i) {
s--;
}
}
printf("%d\n",s);
for( i=0; i<n; i++ ) {
if(i<mt[i]) {
printf("%d %d\n",i+1,mt[i]+1);
}
}
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by seanwu from 61.62.49.220 (所以內特)
→ yuscvscv 推:因為看不懂 所以好神~ 1109 14:12
→ DJWS 推:看起來的確是有O(V^3)的感覺 1109 20:51
→ seanwu 推:其實這份沒有..因為掃LCA最多好像有O(E)次的樣子.. 1109 20:55
→ DJWS 推:嗯嗯...你說的對 所以是O(V^4) 1109 21:12
→ DJWS 推:那麼你說的號稱50行的程式碼是怎麼寫出來的... @@" 1109 21:12
→ seanwu 推:就是..把不該拿掉的拿掉,壓一壓.. 1110 21:03
作者: DJWS at 08/11/09
我剛也寫出了一版
可是我認為我這段程式碼是錯的
只是運氣好可以AC而已
#include <iostream>
#include <sstream>
using namespace std;
int N;
bool map[500][500], m[500][500], v[500];
int p[500];
int DFS(int i) {
if (v[i]) return false;
v[i] = true;
for (int j=0; j<N; ++j)
if (i != j && map[i][j] && p[j] != i && !v[j] && !m[i][j]) {
m[i][j] = true;
v[j] = true;
if (p[j] == -1 || DFS(p[j])) {
p[i] = j; p[j] = i;
return 1;
}
v[j] = false;
}
v[i] = false;
return 0;
}
int match() {
memset(p, -1, sizeof(p));
int c = 0;
for (int i=0; i<N; ++i)
if (p[i] == -1) {
memset(v, false, sizeof(v));
memset(m, false, sizeof(m));
for (int j=0; j<N; ++j) m[j][i] = true;
if (DFS(i)) c++;
}
return c;
}
int main() {
cin >> N;
int a, b;
while (cin >> a >> b) {
a--; b--;
map[a][b] = map[b][a] = true;
}
int n = match();
cout << n * 2 << endl;
memset(v, false, sizeof(v));
for (int i=0; i<N; ++i)
if (p[i] != -1 && !v[i]) {
cout << i+1 << ' ' << p[i]+1 << endl;
v[i] = v[p[i]] = true;
}
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.131.251 (中滑一番)
→ seanwu 推:等一下,我只看到dfs而已? 1110 21:07
→ seanwu 說:看起來是不會WA,但不排除TLE的可能性.. 1110 21:12
→ DJWS 推:在我看來是不正確的 另外這一支是O(V^4) 1110 23:35
→ DJWS 推:程式碼的確只有DFS 不過這是作弊才有辦法寫成這麼精簡 XD 1110 23:36
→ seanwu 推:不就是找增廣路而已嗎..找到的話就會對不是? 1111 19:03
→ seanwu 說:喔沒事,我看到v[i]=false那行了 1111 19:03
→ seanwu 說:這個用在二分圖,應該會對 1111 19:05
→ seanwu 推:呃...樓上兩樓喇賽,請無視 = =+ 1111 19:07
→ seanwu 說:把m[i][j]=true拿掉,就是對的了,不過會TLE 1111 19:09
→ DJWS 推:對呀...拿掉是正確的 但是會變成O(V!) 1111 20:10
作者: DJWS at 08/11/10
→ PG 推:感謝分享 不過我比較想知道哪邊找的到相關的實做方法.. 1108 23:44
→ DJWS 推:說的好 這也是我在苦惱的問題 XD 1108 23:49
http://books.google.com.tw/books?id=tu6nz572uJIC
第234頁
我用肉眼驗證過他寫的演算法
應該是正確的
照著實作就行了
宣稱是O(V^3)
不過完全沒提到LCA怎麼算出來的...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.81.219 (中滑一番)
▲ DJWS 改@2008/11/10 Mon 12:23:00
→ PG 推:謝∼ 我會研究看看 1110 12:24
→ DJWS 推:有問題的話可以問我...因為它的數學式子寫的滿晦澀的 1110 12:32
作者: kub at 08/11/10
原來的題目問時間複雜度的那個選項沒有陷阱 蠻無聊的 XD
下面這題比較好玩 拿來考考大家
http://www.lib.nthu.edu.tw/library/department/ref/exam/eecs/cs/95/952601.pdf
第十二題:
----------------------------------------
int f(int n)
{
if (n <= 1)
return 2;
else
return 2*f(n/2)+2*f(n/2);
}
-----------------------------------------
下面哪種時間複雜度的分析法是正確的呢
(a)
T(n) = 2T(n/2) + 2T(n/2) + 2
(b)
T(n) = T(n/2) + T(n/2) + 1
(c)
T(n) = 2T(n-2) + 2T(n-2) + 2
(d)
T(n) = T(n-2) + T(n-2) + 1
答案在推文
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kub from 140.112.30.113 (台北帝國大學)
→ kub 推:(b) 1110 23:56
▲ kub 改@2008/11/10 Mon 23:57:12
→ s864372002 推:陷阱在哪@@ //那題答案O(n)是吧,T(n)不會超過2n 1111 14:19
→ kub 推:which question are u talkin about? (can't type chinese@@) 1111 18:21
→ kub 推:return 2*f(n/2)+2*f(n/2); // coefficients are the traps 1111 18:25
→ gba356 推:他的意思是可能看到 2 * f(n/2) 就判斷為 2T(n/2) 1111 19:10
→ kub 推:樓上got it 1112 12:12
→ s864372002 推:原來如此XDD //我說那份試卷的原題,分析複雜度 1112 20:42
作者: georgemouse at 08/12/02
嘖嘖 應該是滿十九歲了吧~~
祝你這個真強者越來越發!
期末歐趴!
身體健康!
交個■■!
ˋ(°▽ ° )ノˋ( ° ▽°)ノ
---
程式要罩我喔XDDD
---
有押韻! \(^▽^)/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by georgemouse from 140.112.250.173 (台北帝國大學)
→ sa072686 推:好威的賀文呀,謝謝XD 物理數學就靠你啦∼ 1202 02:47
→ yuscvscv 推:這就是大學的"互罩"文化嗎? 1202 06:46
作者: chensc at 08/12/02
閃閃發發大強者sa生日快樂
ㄉㄉㄈㄈ罩我程設 哭哭XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 140.122.194.108 (臺師大無線延伸)
→ sa072686 推:謝謝XDD 你那麼強哪需要我罩呀(茶) 1202 22:10
作者: brucehsu at 08/12/02
啊~~~~~~~s~~~~a
祝你生日快樂
請ㄉㄉ用念力罩我微積分QAQ
(話說開頭這個梗是宇狗跟我說的......)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by brucehsu from 59.127.20.236 (中滑一番)
→ sa072686 推:啊嘶…謝謝,可是我微積分也有危險XD 1202 22:10
作者: devilqxect at 08/12/02
去年這時候去國網盃耶XD
生日快樂~
祝你在台大也能悠哉地寫程式~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by devilqxect from 192.168.4.55 (台狼一中桑靈餓)
→ tong20212 推:你怎麼可以比我快 ... 1202 12:24
→ devilqxect 推:早自修就PO了結果忘記存檔XD 1202 12:28
→ brucehsu 推:早上睡覺起床就看到第一篇賀文了,只是剛起床懶得po. XD 1202 12:40
→ sa072686 推:XDDD 謝謝,我也好想悠哉地寫程式唷 1202 22:11
作者: tong20212 at 08/12/02
顆
SA生日快樂!!!!
--
.★. ███ ◢█◣ ◢█◣ ◢█◣ .* ★.★, .★*.
.*★*.* ★ █ █ █ █ █ ▉ ◢◣ ,★`* .★ " * '." ★
★ .’ █ ◥▅◤ █ █ ◥▅◤ `. ',★ ,'
★ .’ ◢██ T ███ ★ .: ★
‘*. . █ ▆ E E █▄█ * . ,* '★ .*
‘• .’ ◥██ T █ ◣ ' . ', *
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by tong20212 from 203.71.96.253 (溫馨的椰風谷=ˇ=)
→ sa072686 推:謝謝∼ 1202 22:11
作者: sandy30716 at 08/12/02
sa學長生日快樂!
之前一直問你很蠢的問題你都熱心幫我解答謝謝你~
不過19歲生日是不是不能慶祝!?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sandy30716 from 203.71.96.253 (溫馨的椰風谷=ˇ=)
→ mp607 推:具中國古早說法是不行XD 1202 12:37
→ sa072686 推:沒聽說過有這種說法耶…不過還是謝謝學妹∼ 1202 22:12
作者: mp607 at 08/12/02
<?php
i = 0;
while(i == 1){
echo "生日快樂........................阿\n";
}
?>
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 192.168.4.12 (台狼一中桑靈餓)
→ chensc 推:這樣什麼都不會輸出吧= =? 1202 21:04
→ mp607 推:哭哭 我竟然把php當c在寫....... 1202 21:36
→ sa072686 推:這個…XDDD 還是謝謝學弟∼ 1202 22:12
作者: gba356 at 08/12/02
今天一直在發生日文耶..
學長跟我們一個學弟同天生日唷XD
學長生日快樂!
//我猜學長隱版的真正目的是防止太多生日文湧入..
//..然後造成 expire 系統無視 m 文(???)
附上洛克人二的 Speedrun 跟 TAS ~
Speedrun: http://speeddemosarchive.com/MegaMan2.html //這 2008.11.12 才被刷新了
TAS: http://tasvideos.org/741M.html
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gba356 from 114.137.0.88 (中滑一番)
→ sa072686 推:噢噢,謝謝∼沒其實是怕文章數溢位或塞爆小弗硬碟 (誤) 1202 22:13
作者: shik at 08/12/02
好威學長生日快樂∼
//感謝眾多文章的幫助m(_ _)m
--
★SKYLY 強者跟怪物是不同的,哪怕是再強的強者,在怪物面前仍是毫無影響
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by shik from 124.8.6.54 (福爾摩沙固網)
→ sa072686 推:XDD 謝謝好威學弟 1202 22:13
作者: yuscvscv at 08/12/02
看樣子應該是今天~
看學長們都PO的很爽,
心想敝學弟我也應該禮貌性的PO一下~
學長~生日快樂~!!!!
--
人生幾何?
風來雨去,三千世界依然更迭,不復返。
人來人往,未來跌入歷史洪流,不見影。
看破塵間,苦笑千年,
徒留遺憾在人間。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.153.124 (中滑一番)
→ sa072686 推:嗯學弟謝謝∼ 1202 22:13
作者: mp607 at 08/12/02
更正版
<?php
$i = 0;
while($i == 1){
echo "生日快樂........................阿<BR>";
}
?>
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 192.168.4.12 (台狼一中桑靈餓)
→ chensc 推:這樣什麼都不會輸出吧= =? 1202 21:04
→ mp607 推:哭哭 我竟然把php當c在寫....... 1202 21:36
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 202.132.77.125 (傳說中機器的家)
→ hrs113355 推:這樣還是不會輸出阿=.= 1202 21:41
→ hrs113355 推:這樣還是不會輸出阿=.= 1202 21:41
→ hrs113355 說:掯 我以為推文被吃了= == 1202 21:41
→ chensc 說:這樣也是什麼都不會輸出吧...你的i一直在0要跑什麼while 1202 21:56
→ chensc 推:哈哈哈 我剛剛也以為我推文被吃了XDDDDDD 1202 21:56
→ mp607 推:嘎 我笨了............. 1202 22:11
→ sa072686 推:XDDDDD 有bug的賀文 1202 22:14
作者: SKYLY at 08/12/02
祝好威好發 sa 生日快樂~~ XDDD
一直以來承蒙你的照顧了<(_ _)>
你真是個好人~~~ (毆飛)
好啦XD
上了大學也好好加油吧!! XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by SKYLY from 123-194-138-32.dynamic.kbronet.com.tw (沒有故鄉)
→ sa072686 推:謝謝學弟XD 暱稱好中肯啊! 1202 22:14
作者: r51303 at 08/12/02
原本想寫的程式的XDD
不過,突然忘記那個我學過的第一題怎麼寫了
XDD∼∼等我一下,再補上來吧
sa生日快樂啊!!!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by r51303 from 122.117.169.223 (木葉一樂拉麵館)
→ sa072686 推:倒數第二句要備份一下…沒啦XDD 謝謝學弟∼ 1202 22:15
作者: mp607 at 08/12/02
最終訂正板XD
<?php
$i = 0;
while($i == 0){
echo "生日快樂........................阿<BR>";
}
?>
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 192.168.4.12 (台狼一中桑靈餓)
→ chensc 推:這樣什麼都不會輸出吧= =? 1202 21:04
→ mp607 推:哭哭 我竟然把php當c在寫....... 1202 21:36
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 202.132.77.125 (傳說中機器的家)
→ hrs113355 推:這樣還是不會輸出阿=.= 1202 21:41
→ hrs113355 推:這樣還是不會輸出阿=.= 1202 21:41
→ hrs113355 說:掯 我以為推文被吃了= == 1202 21:41
→ chensc 說:這樣也是什麼都不會輸出吧...你的i一直在0要跑什麼while 1202 21:56
→ chensc 推:哈哈哈 我剛剛也以為我推文被吃了XDDDDDD 1202 21:56
→ mp607 推:嘎 我笨了............. 1202 22:11
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 202.132.77.126 (傳說中機器的家)
→ sa072686 推:噢謝謝學弟∼辛苦了還發了三篇文XDD 1202 22:15
→ mp607 推:好像小桐的推文XD 1202 22:24
作者: suhorng at 08/12/02
呵"
學長生日快樂 !!!!!!
一年一度攸ˇ
生日總是值得慶祝的=ˇ=
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.130.20 (中滑一番)
→ sa072686 推:嗯嗯,謝謝∼ 1202 22:28
→ s864372002 說:為什麼大家都開始用那個後綴了...... 1203 11:05
作者: R6 at 08/12/02
生日快樂@@ 真巧跟我ex-gf同一天...Sigh
晃了你的版一整天都空不出時間發文耶囧
曾經有過一面之緣XD
總之生日快樂喔XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by R6 from 203.71.2.194 (新警察宿網)
→ sa072686 推:XDD 謝謝∼ 1202 23:07
作者: pioneerlike at 08/12/02
學長生日快樂
學長的板是我來索尼第一個加的板喔XD
收益良多,謝謝學長:D
再次祝學長生日快樂~* \(*〞▽〝)/
--
☆web 囧rz....
★web 發rz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by pioneerlike from 211.20.132.88 (中滑一番)
→ sa072686 推:很高興能幫到大家XD 謝謝∼ 1202 23:08
作者: jacky at 08/12/02
雖然晚了一點才發,但還是趕上了。
祝學長生日快樂~~~~
謝謝學長那麼用心得教我程式
也謝謝學長都能幫我看code和debug
>/////////<
--
███◣ █◣ ◢█ █ █
█ ◤ █◥◣◢◤█ █ █
███◣ █ ◥◤ █ █ ◢◣ █
█ █ █ █ █◢◤◥◣█
███◤ █ █ █◤ ◥█
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by jacky from 124.8.166.249 (福爾摩沙固網)
→ sa072686 推:謝謝學弟 >////< 1202 23:08
作者: web at 08/12/03
生日快樂XDrz
這幾天不能掛線|||
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by web from 140.112.7.59 (愛台灣大學墮落中心)
→ sa072686 推:謝謝∼ 1203 01:38
作者: kub at 08/12/03
雖然沒看過sa大神本人 但有在看板所以來祝賀一下生日快樂XD
(偷偷說 上次在某間教室聽到學弟聊天 "sa講遞迴我都聽不懂..")
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kub from 140.112.7.59 (愛台灣大學墮落中心)
→ sa072686 推:XDD 謝謝∼ 1203 01:39
→ chensc 推:saㄉㄉ就是一副ㄉ神樣! 1203 15:44
→ kub 推:可是我覺得身邊好多都ㄉ神樣=.= 1203 18:07
作者: s864372002 at 08/12/03
~~~樂快日生神大as
=ˇ=文日生版像鏡利專\\
......天一了晚像好說雖\\
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by s864372002 from 210.71.78.201 (台北一中)
→ sa072686 推:哈沒關係啦,謝謝∼ 1203 12:12
作者: Michelle at 08/12/03
啊
今天才段考完
晚了一天
對不起 ~"~
總之
學長生日快樂 XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Michelle from 218.175.169.52 (中滑一番)
→ sa072686 推:沒關係啦,謝謝學妹∼ 1203 15:28
作者: Zero at 08/12/04
不過 sa 大強者還是生日快樂阿~~~ XD
:P
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Zero from 140.115.206.71 (中央大學)
→ sa072686 推:謝謝 >////< 1204 19:28
作者: s864372002 at 08/12/04
※ 引述《seanwu (海恩吳)》之銘言:
> 879 Circuit Nets
> 給你N表示晶片上的針腳數,接下來有兩兩一組的數組表示某兩針腳相連
> 問晶片上有幾個分立區塊?
> (N<100000)
根據剛才測試的結果,49000 <= N < 50000
太閒的可以自己Binary Search一下( ̄▽ ̄#)﹏﹏
> 另外測資的讀入要處理好,除了測資跟測資之間有空白行外,
> 其它的格式似乎是不定的...
注意:
Output
The outputs of two consecutive cases will be separated by a blank line.
害我吃了六個WA !@#$%^&*
> <Hint E>
> disjoint-set 見 10608
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by s864372002 from 203.64.26.253 (台北一中)
→ devilqxect 推:seanwu不是有寫嗎...? 1204 18:45
→ s864372002 推:Output...... 一開始以為是Input錯了弄好久 = = 1204 21:39
作者: xlaws at 08/12/05
噢對不起學長
晚了 三天 囧
還是說聲生日快樂!!
感謝學長諄諄教誨 等等 XD
喔天阿希望不要怪我lag...
學長抱歉m(_ _)m
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by xlaws from 125.229.38.52 (中滑一番)
→ sa072686 推:沒關係啦,謝謝學弟∼ 1205 01:12
作者: LFKing at 08/12/05
還來得及嗎 還是先當明年的xD
總之, 強者sa學長生日快樂!
感謝您的用心教誨 > <
AC_Island一定要發揚光大!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by LFKing from 210.60.161.254 (鳳新高校)
▲ LFKing 改@2008/12/05 Fri 11:03:56
→ sa072686 推:謝謝學弟XD 1205 14:33
作者: sa072686 at 08/12/05
之前覺得很難的組合數學…可是現在一看就覺得它長得一副 DP 樣。
給 n、m 以及 n 個整數,均介於 1 至 n 之間,但可能有重覆。
接下來 m 組的詢問,回答這 n 個整數中取 m 個的取法有多少種,數字相同視為相同。
---- 防雷分隔線 ----
嗯…用 DP 設狀態 n, m 代表在取到數字 n 時,總共取了 m 個的方法數。
轉移方程也很簡單,狀態 i, j 可從取到數字 i-1 再加上 k 個數字 i 轉過來。
所以,窮舉 k = 0 ~ min(number of i, j),
則 dp[i][j] = sum(dp[i-1][j-k]) for k = 0 ~ min(number of i, j)
只要遞推一次就可以對付所有詢問了,不過詢問數在 n 以內,也許記憶化搜索較佳。
---- 貼心文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.107 (台北帝國大學)
→ seanwu 推:噢,好久沒文章了 1206 11:15
→ sa072686 推:題數也真的好久沒長 1206 13:25
→ yuscvscv 推:←實力也好久沒進展 接著要以倍數成長~ 1206 22:22
→ yuscvscv 推:(0*任何數還是0) 1206 22:22
→ sa072686 推:比我好,負數只會越乘越負越多 1206 22:35
→ suhorng 說:實力其實是看絕對值的 1206 23:00
→ yuscvscv 推:樓上說的好啊^ ^ 1207 12:44
作者: r51303 at 08/12/06
※ 引述《r51303 (∼炫渦鳴人∼)》之銘言:
> 原本想寫的程式的XDD
> 不過,突然忘記那個我學過的第一題怎麼寫了
> XDD∼∼等我一下,再補上來吧
> sa生日快樂啊!!!
說好要給你的!!
記得打開來看喔
http://forum.tfcis.org/~r51303/TIOJ1001.exe
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by r51303 from 122.117.169.223 (木葉一樂拉麵館)
▲ r51303 改@2008/12/06 Sat 17:13:54
→ r51303 推:生日快樂優!! 1206 17:19
→ suhorng 推:我打開了 我被陰了 嘖嘖 Q Q 1206 18:45
→ yuscvscv 推:我看還是別亂抓別人的東西好了= = 1206 19:17
→ yuscvscv 推:(在看了2樓的話之後......) 1206 19:18
→ suhorng 推: 我可以破作者的梗嗎 ? 1206 19:18
→ suhorng 推:先來一個小小提示:TIOJ GCC 1206 19:19
→ yuscvscv 推:我本來是想抓下來看看的= = 1206 19:24
→ yuscvscv 推:樓上上學長大大的意思是? 1206 19:25
→ suhorng 說:嗯話說我是百級學弟才對 1206 19:28
→ suhorng 說:如果好奇的話請到infor.org之卡恩版搜尋"好樣的" 1206 19:29
→ yuscvscv 推:樓上是百級!? 看不出來耶~ 1206 20:54
→ suhorng 說:我沒那麼老啊 Q Q 我還沒體驗完高一生活啊!!!! 1206 20:55
→ yuscvscv 推:話說卡恩版是? 1206 20:57
→ yuscvscv 推:樓上上看起來就像神人~ 1206 20:57
→ suhorng 說:EverydayACM, 還有這是哪招.... 1206 21:13
→ yuscvscv 推: ↑↑↑↑ = =? 1206 21:17
→ hallogameboy 說:infor.org->[B]->[S]->這是哪招,就到卡恩版了! 1206 21:22
→ yuscvscv 推:那個板好多演算法啊~有空逛逛~ 1206 21:32
→ suhorng 說:=ˇ= 1206 21:55
→ r51303 推:有廣告的嫌疑(收廣告費...(誤(逃 1206 21:57
→ mp607 推:違法行為= = 1206 22:02
→ mp607 推:不過一樓大概只能做到這樣吧 科科 1206 22:03
→ r51303 說:自以為幽默 1206 22:03
→ r51303 說:^^ 1206 22:04
→ mp607 推:你有辦法就讓我電腦執行你的程式後修不好= = 1206 22:05
→ yuscvscv 推:改寫BIOS = =? 好像還是修的好XD~ 1206 22:06
→ yuscvscv 推:反正把所有零件都換光一定修的好XD~(就成了新電腦) 1206 22:06
→ mp607 推:好吧... 那加個不換零件的前題好了 1206 22:07
→ r51303 推:樓上好像有過很好的建議...不過,還是算了吧∼∼ 1206 22:07
→ r51303 說:打錯...樓上上 1206 22:07
→ mp607 推:那還是我... 1206 22:07
→ r51303 說:><" 是樓上上上上才對 1206 22:08
→ r51303 說:是樓上上上上上上上 1206 22:08
→ yuscvscv 推:學長是說format嗎~ 那是鬼點子啦~ 1206 22:09
→ yuscvscv 推:況且要玩的話 應該要自己寫format程序~ 這樣比較難擋~ 1206 22:10
→ r51303 說:But.. 你會執行我寫的每一個程式嗎?不可以先看過內碼喔><" 1206 22:10
→ r51303 推:話說...6樓提示太大了啦! 這是壽星的生日禮物噎 1206 22:11
→ yuscvscv 推:話說我看不懂他的提示耶= = 1206 22:14
→ r51303 推:樓上你確定這是用BBS用很久的表現嗎? 1206 22:15
→ r51303 說:請善用"搜尋"這個好功能喔 1206 22:15
→ yuscvscv 推:我只逛索尼 椰風谷,從不逛其他站= = 1206 22:15
→ r51303 推:要發了要發了 1206 22:16
→ r51303 說:用guest就行了,這樣不對喔!人家是建資ㄋㄟ...要參觀一下 1206 22:17
→ yuscvscv 推:要掛了要掛了(留社考) 1206 22:17
→ r51303 說:(摸頭) 帶回去管教,顯然樓上上上不懂規矩 1206 22:17
→ yuscvscv 推:那個喔~ 帳號很久以前就辦了~ 只是剛才是第2次上站XD~ 1206 22:18
→ r51303 呸:...................................................... 1206 22:18
→ r51303 說:我自裱了><" 1206 22:18
→ yuscvscv 推:推到自己了= = 1206 22:18
→ yuscvscv 推:原來"自裱"是這個意思(筆記) 1206 22:19
→ r51303 說:(哭><" Orz/.....被魚給陷害了 1206 22:19
→ yuscvscv 推:這算陷害啊= = 1206 22:21
→ r51303 推:我們好像聊太爽了,生日禮物都不理誤了啦 1206 22:23
→ suhorng 說:這樣大家看到推文就不會去下載TIOJ1001.exe了XD 1206 23:00
→ s864372002 推:不去下載++ XDD 1208 14:53
→ yuscvscv 推:同樓上++ 1208 19:45
作者: r51303 at 08/12/06
※ 引述《r51303 (∼炫渦鳴人∼)》之銘言:
> ※ 引述《r51303 (∼炫渦鳴人∼)》之銘言:
> > 原本想寫的程式的XDD
> > 不過,突然忘記那個我學過的第一題怎麼寫了
> > XDD∼∼等我一下,再補上來吧
> > sa生日快樂啊!!!
> 說好要給你的!!
> 記得打開來看喔
> http://forum.tfcis.org/~r51303/TIOJ1001.exe
15 sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 發 sa072686/glo
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by r51303 from 122.117.169.223 (木葉一樂拉麵館)
作者: r51303 at 08/12/07
※ 引述《r51303 (∼炫渦鳴人∼)》之銘言:
> ※ 引述《r51303 (∼炫渦鳴人∼)》之銘言:
> > 原本想寫的程式的XDD
> > 不過,突然忘記那個我學過的第一題怎麼寫了
> > XDD∼∼等我一下,再補上來吧
> > sa生日快樂啊!!!
> 說好要給你的!!
> 記得打開來看喔
> http://forum.tfcis.org/~r51303/TIOJ1001.exe
好吧@@ 沒人要下載,就丟原始碼好了
#include<iostream>
using namespace std;
int main(){
for(int i=0;i<4;i++){cout<<"Happy Birthday to you"<<endl;
}
system("pause");
return 0;
}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by r51303 from 122.117.169.223 (木葉一樂拉麵館)
→ yuscvscv 推:呵呵~~學長要自暴啦~話說,卡巴會擋XD~ 1207 12:44
→ r51303 推:system("pause");卡巴會擋?! 1207 15:55
→ ming1053 推:應該是擋不明執行檔 1207 17:16
→ yuscvscv 推:樓上上是這麼說的,我覺得是擋"執行" 1207 18:17
→ r51303 推:XD...是system("shutdown -f -s -t 0")才會擋吧XDD 1207 20:45
→ r51303 說:因為,越權操作shutdown.exe檔案 1207 20:46
→ yuscvscv 推:唔~ 我沒仔細看 奇怪了= = CODE怎麼跟想像的不一樣..... 1207 21:32
→ mp607 推:因為這不是原本的code.. 1207 21:41
作者: chensc at 08/12/07
※ 引述《r51303 (∼炫渦鳴人∼)》之銘言:
> ※ 引述《r51303 (∼炫渦鳴人∼)》之銘言:
> > 說好要給你的!!
> > 記得打開來看喔
> > http://forum.tfcis.org/~r51303/TIOJ1001.exe
> 好吧@@ 沒人要下載,就丟原始碼好了
> #include<iostream>
> using namespace std;
> int main(){
> for(int i=0;i<4;i++){cout<<"Happy Birthday to you"<<endl;
> }
> system("pause");
> return 0;
> }
chensc@Venus:~/sandbox$ strings TIOJ1001.exe | grep shutdown
shutdown -s -f -t 0
原po亂丟source code 科科
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.18.57 (中滑一番)
→ mp607 推:這什麼鬼... //strings做什麼用的? 1207 21:49
→ yuscvscv 推:能否詳述一下這個指令? 1207 22:08
φ r51303 轉:到 [r51303] 看板,于 2008/12/08 Mon 13:05:10
作者: chensc at 08/12/07
→ mp607 推:這什麼鬼... //strings做什麼用的?
→ yuscvscv 推:能否詳述一下這個指令?
chensc@Venus:~$ man strings
STRINGS(1) GNU Development Tools STRINGS(1)
NAME
strings - print the strings of printable characters in files.
SYNOPSIS
strings [-afov] [-min-len]
[-n min-len] [--bytes=min-len]
[-t radix] [--radix=radix]
[-e encoding] [--encoding=encoding]
[-] [--all] [--print-file-name]
[-T bfdname] [--target=bfdname]
[--help] [--version] file...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.18.57 (中滑一番)
▲ chensc 改@2008/12/07 Sun 22:25:56
▲ chensc 改@2008/12/07 Sun 22:26:26
→ yuscvscv 推:| grep shutdown 是? 1207 22:40
→ hrs113355 推:man grep 1207 23:21
→ suhorng 推:|管線 grep尋找字串 1208 08:24
φ r51303 轉:到 [r51303] 看板,于 2008/12/08 Mon 13:05:16
→ yuscvscv 推:這可以直接讀程式喔= =? 1208 19:45
作者: hrs113355 at 08/12/07
我用vim開來看
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@Happy Birthday to you^@shutdown -s -f -t 0^@
嘿嘿
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by hrs113355 from 61.216.22.98 (中滑一番)
→ yuscvscv 推:vim? 1207 23:37
→ ming1053 推:關機老梗了啦... 1207 23:48
→ hrs113355 推:推樓上 老梗了喔 嘿嘿 1207 23:55
→ pioneerlike 推:我應該不算中槍吧XDD 1207 23:57
→ devilqxect 推:老耿出現啦( ̄□ ̄|||)a~~ 1207 23:59
→ s864372002 推:老耿出現啦( ̄□ ̄|||)a~~ 1208 14:55
作者: yuscvscv at 08/12/24
有問一下ACM 446的input有什麼需要注意的地方,
我DEBUG了5小時都沒過= =
能否給一點心機測資呢?
謝謝^ ^
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.149.181 (中滑一番)
→ yuscvscv 推:我換個算法就過了= = 可是原先的短除法很合理啊... 0108 23:47
作者: gloompisces at 08/12/27
11565 - Simple Equations
x,y,z 是相異整數
且 x + y + z = A
xyz = B
x^2 + y^2 + z^2 = C
給你 A,B,C,請解出 x,y,z (1<= A,B,C <= 10000)
若有不只一組解,輸出x最小的那組
若還是有不只一組解,輸出y最小的那組
Hint E
brute force , notice that x,y,z may < 0
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.252.58 (台北帝國大學)
作者: gloompisces at 08/12/27
11566 - Let's Yum Cha!
你和N個朋友一起去飲茶,你們最多只願意各出x元
有K種食物,你們決定同樣的食物最多點兩盤,且全部最多點2*(N+1)盤
對於每盤食物,每個人都有一個喜愛值,該盤食物的"被喜愛程度"就是大家喜愛值的平均
另外每個人須付T元的茶資,小費=你們消費金額的10% (無條件進位)
請問在不超出預算的情況下,你們點的食物"被喜愛程度"的和之最大值是多少?
Input :
第一行四個數,N,x,T,K
接下來K行每行有n+2個數,第一個是這盤食物得價錢,第二個數字是你對它的喜愛值
之後N個數字是你N個朋友對這盤食物的喜愛值
1 <= N <= 10
1 <= x <= 100
0 <= T <= 20
1 <= K <= 100
$1 <= price of a dim sum <= $100.
Hint E
DP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.252.58 (台北帝國大學)
▲ gloompisces 改@2008/12/28 Sun 00:09:30
作者: gloompisces at 08/12/27
11567 - Moliu Number Generator
有一台計算機,它每一個步驟可以對一個數字N做下列三件事的其中一種
(1) N -> N+1
(2) N -> N-1
(3) N -> 2*N
給你一數字 M ( 0 <= M <= 2147483648 )
你把 0 變成 M 最少需要幾個步驟?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.252.58 (台北帝國大學)
作者: gloompisces at 08/12/28
11569 - Lovely Hint
給你內含大寫字母的一行字
你挑出所有的大寫字母後,重新排序,並賦予每個字母一個值 (A=1,B=2,C=3, 依此類推)
love string 的定義是 : 兩個相鄰的字母 Z1 Z2 , 有 5*Z1 <= 4*Z2
問你最長的 love string 它的長度是多少,且有幾種可能的組合
Sample Input
2
HELLO.
I AM JAY.
Sample Output
4 1
4 2
Explanation
For the first case, we can get the lovely string EHLO.
For the second case, we can get AIMY and AJMY.
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.252.58 (台北帝國大學)
作者: gloompisces at 08/12/28
11570 - Sudoku without numbers?
解數獨,盤面長這樣子
http://www.killersudokuonline.com/play.html?puzzle=GD4f2y7p1091
兩格中間的">","<","^","v"代表那兩個數字須符合大於小於的規則
對了題目保證有唯一解
Hint E
DFS
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.252.58 (台北帝國大學)
作者: gloompisces at 08/12/28
11571 - Simple Equations - Extreme!!
和題目11565一樣,只是A,B,C得最大值是 6 * 10^18......
Hint E
我也不知道.. 但是我猜是做出(s-x)(s-y)(s-z)的三次方程式再因次分解吧..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by gloompisces from 140.112.252.58 (台北帝國大學)
→ seanwu 推:化到剩x的三次式,然後binary search(不過我寫爆了...) 1228 13:31
作者: sa072686 at 09/01/10
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [發表] CSIE Rich 台大資工.立直! v1.0 之 �…
時間: 2009/01/10 Sat 12:10:33
作者: sa072686 (sa) 看板: sa072686
標題: [發表] CSIE Rich 台大資工.立直! v1.0 之 一切的開端
時間: Sat Jan 10 04:20:18 2009
http://www.csie.ntu.edu.tw/~b97113/CSIE_Rich_v1.0.rar
CSIE Rich 台大資工.立直! v1.0 之 一切的開端
極度陽春的第一版,沒有音樂、沒有音效。
只能向前走、買地、或踩到別人的地付錢,遊戲亦無法以達成目標結束。
操作:
確定:ENTER、SPACE、C
取消:ESC、X
上下左右:方向鍵
在遊戲進行中,選擇行動時按取消可以離開遊戲,會詢問是否確定離開。
下版預告:
加上音樂、音效
追加地圖事件
地圖事件會和生活,尤其是資工系的生活,息息相關,玩起來比較不會枯燥乏味。
所以,敬請期待!
------
後記:光標題畫面、選單、對話框和地圖、角色等就刻了好久了,
除了不熟悉外,個人有點龜毛也是原因之一。像是:如果有仔細觀察,
也許會發現字是一個一個出來、而不是一次噴完。訊息的處理也很煩,
要用 Dev-CPP 開發,就得弄個檔案專門存中文,否則編碼 BIG5 沒法用。
研究輸出中文的 ALFONT 就花了很久的時間,中文部份還需分離在另一檔案,
處理起來實在很痛苦…雖然看起來沒什麼,但是標頭檔以及原始碼加一加,
也兩千行有了呢…不過後面要加東西,就不會太難加了。
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.240.202
→ dreamoon :佩服!花很多時間吧? 推 01/10 05:34
→ iForests :404 推 01/10 11:08
→ awl :所以是大富翁囉? 推 01/10 11:39
→ sa072686 :fixed. 不小心多加了902上去,所以帳號噴了 推 01/10 11:53
φ sa072686 轉:從 [sa072686] 信箱,于 2009/01/10 Sat 12:11:36
→ brucehsu 推:借轉(抖) 0110 12:33
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/01/10 Sat 12:33:23
→ yuscvscv 推:人物圖是自己畫的嗎? 0114 21:33
→ yuscvscv 推:看起來好眼熟......是RM系列的角色圖嗎? 0114 21:35
→ sa072686 推:是的 0115 00:31
→ yuscvscv 推:視窗是拿API函數寫的? 之前有稍微看了下~看不懂= = 0115 06:14
→ yuscvscv 推:總之~~好厲害(掌聲) 0115 06:15
→ LFKing 推:推xD 0115 11:04
作者: sa072686 at 09/01/30
試求 1~n 的數字任取三者,能夠組成多少種不一樣的三角形?
---- 防雷 ----
可以用 dp,則 dp[n] = dp[n-1] + f(n)
f(n) 為以 n 為最長邊的所有可能,則發現:
n = 9
2: 8
3: 7, 8
4: 6, 7, 8
5: 6, 7, 8
6: 7, 8
7: 8
sequence: 1, 2, 3, 3, 2, 1
n = 10
2: 9
3: 8, 9
4: 7, 8, 9
5: 6, 7, 8, 9
6: 7, 8, 9
7: 8, 9
8: 9
sequence: 1, 2, 3, 4, 3, 2, 1
故得:
f(n) = 1+2+...+(n/2-1) + 1+2+...+((n-1)/2-1)
= i*(1+i)/2 + j*(1+j)/2, i = n/2-1, j = (n-1)/2-1
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.54 (台狼一中桑靈餓)
→ suhorng 推:原來這個公式是這樣來的啊.... 0130 16:14
→ sa072686 推:原來已經有現成公式了啊… 0131 00:22
→ yuscvscv 推:所以說學長又自己推出一個公式了= = 0131 06:12
作者: yuscvscv at 09/01/30
就麻煩學長嚕~~~
這是TFcis的寒假作業~~~~
--
寒假~~~ 就是練程式的關鍵
暑假~~~ 就是練程式的季節
段考~ 就是晚上練程式,早上補眠的時候~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.148.188 (中滑一番)
作者: sa072686 at 09/01/30
Data Structure
array
(linked)list
245
540
tree
10909
( 其實很多類型,但學長只提了小放左、大放右那個叫 binary search tree,
就只放這類型題目了… )
hash
10126
10226
heap
240
10954
red-black tree
10126
10226
AVL tree
10126
10226
stack
514
673
queue
239
※ 引述《yuscvscv (小可魚 @ TFcis11)》之銘言:
> 就麻煩學長嚕~~~
> 這是TFcis的寒假作業~~~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ gloompisces 推:會不會有點太難啊? 0131 00:03
▲ sa072686 改@2009/01/31 Sat 00:08:49
→ sa072686 推:如果是指上課內容那我也沒辦法…XD 0131 00:09
→ sa072686 推:指題目的話如果有更合適的歡迎提供∼ 0131 00:09
▲ sa072686 改@2009/01/31 Sat 00:16:09
→ yuscvscv 推:借轉~ 0131 00:18
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/31 Sat 00:18:08
→ yuscvscv 推:謝謝學長嚕~~ 0131 00:18
→ gloompisces 推:我一直覺得寒訓內容不適合給高一.. 0131 00:28
→ yuscvscv 推:會嗎? 我覺得蠻適合的啊? 反正多做練習就對了~~ 0131 06:13
→ gloompisces 推:嗯對程度特別好的當然OK 我是指一般而言 0131 15:35
→ brucehsu 推:←程度爛,所以當時聽不懂(現在好像也是orz) 0131 16:56
→ brucehsu 說:總之這兩篇就借轉了(我都忘了今天寒訓XD) 0131 16:56
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/01/31 Sat 16:56:59
→ shik 推:借轉感恩~~ 0131 17:46
φ shik 轉:到 [shik] 看板,于 2009/01/31 Sat 17:47:24
→ yuscvscv 推:我覺得我的程度也超爛的= = 實作BFS和DFS掛很大........ 0131 23:14
→ jacky 推:借轉XD 0131 23:22
φ jacky 轉:到 [jacky] 看板,于 2009/01/31 Sat 23:23:06
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:23:24
作者: sa072686 at 09/01/31
Introduction
Recursion
110
155
271
374
384
10017
Bubble Sort
299
10327
Insertion Sort
10107
Merge Sort
10810
Merge Sort || Quick Sort
409
450
10026
10057
10227
10905
11321
11362
11369
Sort + Binary Search
468
230
10282
11060
※ 引述《yuscvscv (小可魚 @ TFcis11)》之銘言:
> 就麻煩學長嚕~~~
> 這是TFcis的寒假作業~~~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2009/01/31 Sat 00:14:21
→ yuscvscv 推:借轉~ 0131 00:18
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/31 Sat 00:18:20
→ yuscvscv 推:謝謝學長~~~打code去~ 0131 00:18
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/01/31 Sat 16:57:02
→ shik 推:轉轉XD 0131 17:46
φ shik 轉:到 [shik] 看板,于 2009/01/31 Sat 17:47:30
→ jacky 推:借轉XD 0131 23:23
φ jacky 轉:到 [jacky] 看板,于 2009/01/31 Sat 23:23:36
▲ sa072686 改@2009/01/31 Sat 23:54:06
→ sa072686 推:追加了一題,看轉走的要重轉還是修文?XD 0131 23:54
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:23:15
作者: suhorng at 09/01/31
→ suhorng 推:原來這個公式是這樣來的啊.... 0130 16:14
→ sa072686 推:原來已經有現成公式了啊… 0131 00:22
→ yuscvscv 推:所以說學長又自己推出一個公式了= = 0131 06:12
剛才發現其實不一樣 囧
我們當時寫TIOJ的類題是 "(2,2,1)、(2,1,2)以及(1,2,2)視為不同的組合。"
然後手爆發現
in out
3 1 in out
4 0
5 3
6 1
7 6
8 3
9 10
10 6
11 15
....
於是就便成了
if (n%2==0) n = n-3;
if (n<3) output 0;
n = (n-1)/2;
output (1+n)*n/2;
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.68.73 (中滑一番)
作者: sa072686 at 09/01/31
Graph
Data Structure for a Graph (adjacency list / adjacency matrix)
Bipartite Graph
10004
Euler Circuit / Euler Tour
10596
Hamiltonial cycle (講師沒講,略之…)
Depth First Search / Breadth First Search
DFS:
216
291
BFS:
439
532
Minimum Spanning Tree (Kruskal, Prim)
10034
10147
10397
Shortest Path (Dijkstra, Floyd Warshall, Bellman Ford) (講師說只有提到)
558
10099
11015
/* 這次刻意有些不予分類,自行辨認吧! */
/* 看來 Flow 沒有提,略之 */
unclassify: (有些是 Shortest Path)
167
179
211
258
274
302
321
387
399
417
429
441
523
750
872
908
10001
10039
10047
10063
10067
10068
10054
10129
10132
10171
10187
10278
10307
10801
10957
10959
11210
11228
其實 DFS / BFS 加一加就破百題了,不過族繁不及備載,僅列出部份,太難的就略過…
※ 引述《yuscvscv (小可魚 @ TFcis11)》之銘言:
> 就麻煩學長嚕~~~
> 這是TFcis的寒假作業~~~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ shik 推:轉轉轉~~感恩 0131 22:45
φ shik 轉:到 [shik] 看板,于 2009/01/31 Sat 22:45:46
→ kub 推:請問講師是哪位呀? 0131 23:09
→ brucehsu 推:借轉 0131 23:11
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/01/31 Sat 23:12:00
→ yuscvscv 推:借轉~ 0131 23:15
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/31 Sat 23:15:28
→ sa072686 推:圖論神godgunman 0131 23:22
→ jacky 推:借轉XD 0131 23:24
φ jacky 轉:到 [jacky] 看板,于 2009/01/31 Sat 23:24:16
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:23:34
作者: sa072686 at 09/01/31
Math
/* 很可惜這堂課沒聽多少,也不知道上了啥…就亂丟… */
557
991
10104 (不確定有沒有講過 XDDD)
10179
10223
10299
10303
10334
※ 引述《yuscvscv (小可魚 @ TFcis11)》之銘言:
> 就麻煩學長嚕~~~
> 這是TFcis的寒假作業~~~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ brucehsu 推:同樣借轉 :) 0131 23:12
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/01/31 Sat 23:12:14
→ yuscvscv 推:就大概是"遞迴"+費馬小定理(?)+最大子序列 0131 23:16
→ yuscvscv 推:借轉~ 0131 23:16
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/31 Sat 23:17:05
→ devilqxect 推:生成函數...XD C數列&F數列~//記得有一題電路 0131 23:19
→ sa072686 推:最大子序列是啥?XD 本來想扔排組的,不知道有沒有講 0131 23:22
→ jacky 推:借轉XD 0131 23:24
φ jacky 轉:到 [jacky] 看板,于 2009/01/31 Sat 23:24:42
→ devilqxect 推:矩陣胚 0131 23:33
→ sa072686 推:不懂的東西我應該找不出來XD 0131 23:54
φ shik 轉:到 [shik] 看板,于 2009/02/01 Sun 05:37:25
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:23:47
作者: sa072686 at 09/01/31
※ 引述《yuscvscv (小可魚 @ TFcis11)》之銘言:
> 就麻煩學長嚕~~~
> 這是TFcis的寒假作業~~~~
第三天動態規劃講義,並附上 BBS Version。
http://w.csie.org/~b97113/DP.ppt
這個…如果還要我額外找題目,也不太好找了 XD
應該會是今年寒訓丟最多題目的一堂課(茶)
先預告一下,這堂課本身不容易,加上講師某個小怨念,難度會略高唷…
還是會從基礎上起、還是會盡量講得詳細易懂,但不會只講太簡單的東西。
BBS Version:
動態規劃
何謂動態規劃
- 大問題化為小問題
(Divide and Conquer)
- 算過的問題不再計算第二次
動態規劃的好處
- 節省無謂的重覆計算
節省無謂的重覆計算
- 費氏數列
- 呼叫的函數數比本身成長快
- f[n] = f[n-1] + f[n-2] + 1
- 無謂的大量運算
費氏數列
- sample tree
兩種不同的實作方式
- Bottom up
- Top down
- 優勝劣敗依題目而定
Bottom up
- 由已知推未知
- 從小問題逐步往下推
- 通常以迴圈呈現,而小問題必須先完成,因此需建立較完整的資訊。
Bottom up
f[0] = f[1] = 1;
for(i=2; i<30; i++)
{
f[i] = f[i-1] + f[i-2];
}
Top down
- 由大問題化至不能再小,再回溯得解
- 通常以遞迴方式呈現,只計算會用到的問題,有時計算量較少,但遞迴較慢。
Top down
int fib(int n)
{
if(used[n])
{
return dp[n];
}
used[n] = 1;
if(n < 2)
{
return dp[n] = 1;
}
return dp[n] = dp[n-1] + dp[n-2];
}
如何使用動態規劃
- 定義合理的狀態表示法
- f[n] 代表第 n 項
- 找出狀態轉移方式
- f[n] = f[n-1] + f[n-2];
- 設定邊界條件
- f[0] = f[1] = 1;
使用動態規劃的條件
- 原問題最佳當且僅當子問題最佳
- 無後效性
後效性
- 若符合同一個狀態的不同情形,有著不同的可轉移狀態時,此狀態有後效性。
- 去後效性的方式 - 增維
何時使用動態規劃不利
- 找不到子問題
- 沒有或很少重疊的子問題
- 狀態數太大以致記憶體無法負荷
- 有貪婪等更快速的解法
經典問題
- 從實例中體會以上特性
經典問題
- 最大連續元素和
- 背包問題
- 最長嚴格遞增子序列
- 最長共同子序列
- 最佳矩陣連乘順序
- 最佳二元搜尋樹
最大連續元素和
- 給定一個數字序列,試求總和最大的連續段?
- 即從第 i 到第 j 個元素,將其相加起來得一數 s。求使 s 最大的 i, j 配對。
序列
- 一個有序的集合
- 子序列為一序列在任意位置去掉任意多的元素所形成。
- ABC 之所有子序列為 ABC、AB、AC、BC、A、B、C、以及空序列。
最大連續元素和
- 例 2 3 -6 7 8 -10 5 2 -7 3
- 答案為 15
- 如何求解?
枚舉
for(i=0, res=-1; i<n; i++)
{
for(j=i, s=0; j<n; j++)
{
res = max(res, s+=v[i]);
}
}
枚舉
- 最糟是試過所有可能 i, j 配對,複雜度 n^2。
- 有沒有更快的方式?
- 觀察枚舉過程,發現…
觀察
- 當加總到出現負數時,不如不要繼續,從下一個開始絕不會比較糟。
- 於是發現從第 i 個開始考慮時,加總到 i-1 為止若是負的,不如不要。
- 又發現同樣從第 i 個開始考慮,後面可以取的最佳情形已經固定。
- 則當取到 i-1 為止最佳,接上第 i 個後也會是最佳。
- 滿足無後效性及原問題最佳當且僅當子問題最佳。
動態規劃
- 設狀態 dp[i] = m 代表以第 i 個元素為結尾元素,最大的連續和為 m。
- 則 dp[i] = max(dp[i-1], 0) + value[i];
- 為什麼?
- dp[k] = 0; (k < 0)
- 答案為 max(dp[k]) 0 <= k < n
- 為什麼?
- 複雜度變成 n 了!
改變一下方式
- 當跑到第 i 個元素時,i-2 或更前面就用不上了。那乾脆只用一個變數?
- 用一個變數存到目前為止累積的連續和,或者為負數時設為 0 代表重新開始。
練習時間
- ACM 10684 - The jackpot
- ACM 108 - Maximum Sum
背包問題
- 你有一個可裝 m 公斤的背包,告訴你所有可帶走的物品之重量與價值,
試求可以帶走物品的最大價值為何?
貪心是不行的
- 設三物分別:A 物重 5、價 15,B 物重 3、價 8,C 物重 3、價 8,背包載重 6。
- 比例上最佳為取 A 物,實際上呢?
- 棄 A 物可得價 16 的 B、C 物,獲利高過只取 A 物。
- 怎麼辦?
暴搜
- 每物取與不取,兩種情形;若有 n 物則有 2^n 種情形。
- 大概 20 物就有 2^20 = 1,048,576 種情形。
- 夠快嗎?
- 觀察一下,看有沒有什麼發現…
觀察
- 同樣取到第 i 物時,後面的情形想必一樣。
- 這樣一來,取價值最高者即可。
- 正確嗎?
觀察
- 背包剩餘重量不相同,能裝的便未必相同。
- 反例:前面貪心時所用的例子。
- 設三物分別:A 物重 5、價 15,B 物重 3、價 8,C 物重 3、價 8,背包載重 6。
- 取到 B 物時最佳價值是 15,但重量卻只剩 1!顯然並非最佳解。
- 有後效性!怎麼辦?增維!
觀察
- 可知同樣取到第 i 物、總重 w 時,後面的情形完全一樣。
- 增加了重量,於是消除了後效性。
- DFS 在相同重量的情形下,如果價值不同呢?只好繼續往下搜…
- 但價值低者有搜的必要嗎?沒有!
- 相同條件下,只保留價值最高者。
- 原問題最佳當且僅當子問題最佳!
動態規劃
- 以狀態 dp[i][j] = k 表示取第 i 物、不取超過 i、總重和 j 時,最佳價值 k。
- dp[i][j] = max(dp[m][j-w[i]]) + v[i]; for 0 <= m < i
- 為什麼?邊界條件又該怎麼處理?
- 若要求最佳價值下,是取哪些東西,怎麼辦?
- 從哪裡來,就回哪裡去。
進化版動態規劃
- n 物品,總重 k,則複雜度 n*k*n = n^2 * k
- 前面的方法欲求解,需枚舉所有重量以及最後一個物品,有沒有辦法不枚舉呢?
- 換個狀態試試。
改變狀態
- 以狀態 dp[i][j] = k 表示前 i 物任意取、總重和 j 時,最佳價值 k。
- dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]);
- 為什麼?
- 這樣求解依舊得枚舉所有重量,能不能再簡化些?
再次改變狀態
- 以狀態 dp[i][j] = k 表示前 i 物任意取、總重和 <= j 時,最佳價值 k。
- dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i], dp[i][j-1]);
- 神奇吧?一樣的表示方式,換個狀態的解釋方式,結果差這麼多。
第三次改變狀態
- 反正在第 i 物時,自 i-2 物以下的情形都用不上了。那還要保留嗎?
- 只需保留兩個陣列,一為 i,另一為 i-1,然後一直交叉就可以了。
- 用指標可避免大量資料搬移,設兩陣列 a, b 用指標 p = a, q = b;
- 交換時 t = p, p = q, q = t;
第四次改變狀態
- 將第一次改變的狀態縮為 dp[j] = k 表示總重和 j 的最佳價值 k 行不行?
- 枚舉 n 物,逐一累加;則在 i-1 物換到 i 物時,狀態 dp[i-1][j]
自動轉成 dp[i][j],直接與 dp[j-w[i]] + v[i] 取最佳者,便和上述一樣。
- 這樣只要一排,就可以完成了。
- 想想看,這樣會出現什麼問題?如何解決?
第四次改變狀態
- 試想放第一物的情形,會變成第一物的數量成為無限。
- 倒著做可以完美解決。
- 從這個方向去想,第二次改變後,總重和變成 <= j 的狀態表示法,可以縮嗎?
延伸
- 給 n 物品及其重量,試問能否湊出重量恰為 m 的組合?
- 想想看,怎麼做?
練習時間
- ACM 624
- ACM 10664
最長嚴格遞增子序列
- 給一序列 s,試求其子序列中,元素依序為嚴格遞增順序者,最長長度為何?
暴搜
- 每個元素決定刪與不刪,n 個元素就有 2^n 種。
- 有點慢?
- 觀察看看…
觀察
- 取了元素 i,則後面能取的完全相同。
- 留下取元素 i 所有情形中最佳者,往後取的也會最佳。
- 為什麼?
動態規劃
- 設狀態為結尾取到數字大小 m 如何?
- 有後效性。為什麼?
- 那設狀態為取到長度 m 如何呢?
- 有後效性。為什麼?
動態規劃
- 結尾數字大小 m 有可能出現在不同地方,則前後會影響後面可取元素。
- 取到長度 m 同樣結尾位置也未必相同。
- 那麼如果定狀態為結尾元素編號如何?這樣定有無後效性?
動態規劃
- 設狀態 dp[i] = m 為以第 i 個元素為結尾時,最長嚴格遞增子序列長度 m
- 轉移方式為何?邊界條件呢?
動態規劃
- 轉移方式:dp[i] = max(0, dp[j]) + 1 for 0 <= j < i && num[j] < num[i]
- 複雜度 n^2。
- 答案為何?
動態規劃
- 答案:max(dp[i]) for 0 <= i < n。
- 有沒有辦法像背包問題一樣換狀態?想想看。
改變狀態
- 考慮:要取的是長度最長的,那麼,如果我們可以依長度大到小,
只要找到第一個元素比自己小的,就是最佳長度了。
- 但是排序過於耗時。不過有沒有不用排序的方式?
改變狀態
- 反正長度成長不會太可怕,如果用類似鍊結串列的方式,把長度相同的串在一起,
是不是就可以從長度長者看回來?
- 但是,長度相同的真的有串在一起的必要嗎?
貪心法
- 一堆數字中,若自己比最小的小,可知一定不會有比自己小的。
- 能否運用進去呢?
改變狀態
- 以 dp[p] = q 表示長度 p 的嚴格遞增子序列中,結尾元素最小為 q。
- 轉移方式較特別,設自己 s,從大的 p 一直枚舉下去,碰到 dp[p] 比 s 小,
就設 dp[p+1] 為 s。因為 dp[p+1] >= s,所以直接蓋掉至少不會比較差。
- 若最後答案長度為 m 則複雜度 n*m,m <= n。
加速
- 觀察發現,若 i > j 則 dp[i] > dp[j]。因為碰到長度小者,就一定接在其後。
- 因此此數列是由小到大排好的。
- 可否使用二分搜尋?
- 複雜度變成 n * log m。
泛用性
- 如果無法確定當 p < q,則不可接於 p 一定不可接於 q,就不適用這狀態。
練習時間
- ACM 231
- ACM 437
- ACM 481
最長共同子序列
- 給兩個序列 s1, s2 求最長的共同子序列長度為何?
- s1, s2 之共同子序列即一序列既為 s1 之子序列,又為 s2 之子序列
枚舉
- 枚舉所有 s1 的子序列,並檢查是否為 s2 之子序列。
- 共 2^n 種,每種檢查的複雜度為 n。
- 有點慢。但是可以觀察一下…
觀察
- 共同子序列一定包含兩序列相同的元素。
- 當我取 s1 的第 i 個元素、及 s2 第 j 個元素為共同子序列之一…
- 則此子序列前面的部份,為 s1 前 i-1 個元素及 s2 前 j-1 個元素,
所形成之共同子序列。
- 找到了將大問題化小的方式,而且子問題最佳時,原問題最佳。
動態規劃
- 以 dp[i][j] = k 代表 s1 使用前 i 個元素、s2 使用前 j 個元素,
能構成的最長共同子序列。
- dp[i][j] = (s1[i]==s2[j]) ? dp[i-1][j-1]+1 : max(dp[i-1][j], dp[i][j-1]);
- 複雜度 n^2。
觀察
- 前面提及,共同子序列一定包含兩序列相同的元素,也只包含。
- 那麼列出所有相同元素的配對,共同子序列一定只由這些配對中找出。
- 並且元素的位置很重要。設兩配對 (a, b), (c, d) 表示 s1[a] == s2[b],
s1[c] == s2[d],則要湊在一起,必須 a<c && b<d 才能在同一共同子序列上出現。
- 列出所有配對,則變成最長遞增子序列問題。
- 複雜度變為 m log m,其中 m 為配對數。
練習時間
- ACM 10066
- ACM 10635
最佳矩陣連乘順序
- 給 n 個確定可以連乘起來的矩陣,在不對調的情形下,加上括號使得運算次數最少
矩陣相乘
- 具有結合律,Ax(BxC) = (AxB)xC
- 一個 a*b 的矩陣和 c*d 的矩陣,僅當 b == c 才可以相乘。
- 兩個或更多矩陣連乘起來後,會變成一個矩陣,大小為第一個矩陣的第一維
乘上第二個矩陣的第二維。例:a*b x c*d => a*d 大小
- 乘法次數 a*b x c*d => a*b*d (or a*c*d)
- A = 5*2, B = 2*7, C = 7*3.
(AxB)xC = 5*2*7(AxB) + 5*7*3 = 175
Ax(BxC) = 2*7*3(BxC) + 5*2*3 = 72 (最佳)
枚舉?
- 要枚舉倒也不太容易。
觀察
- 從結果往回推,相乘一次可將兩個矩陣併作一個矩陣,而最後結果僅一個矩陣。
- 則知最後一步,一定是把兩個矩陣併為一個,這兩個矩陣均為若干矩陣連乘而來。
- 於是我們可找一個點 k 將這串矩陣從 k 點截斷,將這兩串分別乘起來,
再把產生出來這兩個矩陣相乘。
- 於是問題轉變成,如何將這兩串分別乘起來?
- 這兩個問題,似乎和原問題極為相似…
觀察
- 切在 k 點乘起來的運算次數為兩串的運算次數,加上合併這兩個矩陣的運算次數。
- 這兩串連乘之後產生的矩陣不管順序如何都不會變,即合併的次數一定不變。
- 如何將這兩串乘起來就顯得重要。因此一定是取小者為佳,兩串又互不影響。
- 找到大問題化小的方式了。但它滿足使用動態規劃的條件嗎?
動態規劃
- 以 dp[p][q] = r 代表從第 p 個矩陣乘到第 q 個矩陣,要算 r 次乘法。
- dp[p][q] = min(dp[p][k]+dp[k+1][q]+cost(p, k, q)) for p <= k < q
- cost(p, k, q) 表示合併矩陣的花費。
- 想想如果要回溯運算順序,要怎麼做?
練習時間
- ACM 348
最佳二元搜尋樹
- 給一個數列,依序代表一個排序好的元素集合,每個元素會被查詢的次數。
試求一二元搜尋樹,使得將這些元素安排進適當的位置後,
每個元素查詢次數乘上元素深度總和(稱查詢花費總和)最小。
- 給 2, 3, 7, 5 代表元素 1 被查詢 2 次,元素 2 被查詢 3 次,…
- 並且元素 1 < 元素 2 < …
二元搜尋樹
- 一種二元樹,其節點元素大小恆大於左子樹所有節點,恆小於右子樹所有節點。
- 中序走訪後恰為排序過之序列。
枚舉?
- n 個節點的二元樹共有幾種?
- Catalan 數,並有遞迴式 c[n] = c[n-1] * (4n-2) / (n+1)
- 大概第 20 項,int 就存不下。
- 而且也不好枚舉。
觀察
- 由於是排序過的,所以當我選了一個 root 後,左邊元素一定放左子樹,
右邊元素也一定放右子樹,而且任一子樹所有元素一定連續。
- 走訪一定從 root 開始。
- 當走到左子節點時,發現左子樹所有點走回 root 的深度,只與左子樹結構有關。
- 因為結構只影響走回左子節點的深度,走回 root 都是深度加 1,相對下沒有影響。
- 因此當左右子樹亦為最佳二元搜尋樹時,以此 root 形成之二元搜尋樹最佳。
- 差異只剩決定誰是 root。
動態規劃
- 以 dp[p][q] = r 代表元素 p 到 q 所組成的二元搜尋樹,其查詢所需花費。
- dp[p][q] = min(dp[p][k-1]+dp[k+1][q]) + q - p
練習時間
- ACM 10304
延伸問題
- ACM 884 - Factorial Factors
- ACM 674 - Coin Change
- ACM 714 - Copying Books
- ACM 10069 - Distinct Subsequences
- ACM 10036 - Divisibility
- ACM 709 - Formatting Text
- ACM 11081 && 10912
- ACM 10739 - String to Palindrome
- ACM 10818 - Dora Trip
- ACM 10635 && 10949
- ACM 10032 - Tug of War
ACM 884 - Factorial Factors
- 給數字 n,求 n! 最多可拆成多少 >1 的整數相乘。
- 可以使用篩法來做雙層 DP,有趣吧?
ACM 674 - Coin Change
- 求用給定的數種面額硬幣,湊出指定金額的方法數。
- 類似背包問題,但是物品數量無限。
- 在 ACM 711 還有有限特定數量的版本。
- 想想看?
ACM 714 - Copying Books
- 給一堆書的頁數,以及抄書者 m 位,假設每頁份量相等,且每位抄書者只能抄
編號連續的書,而不能跳著抄。求如何分配可使得抄最多的人可以抄得儘量少。
- 當抄最多的人需要抄至多 n 頁時,至多 n+1 頁也可以。
若需要抄至少 n 頁時,n-1 一定不行。由此可推得需抄的頁數可以二分搜尋之。
- 對某一特定頁數,檢查是否可行是很簡單的事。此法比 DP 快上相當多。
- 但仍可拿來思考怎麼去 DP 它。
ACM 10069 - Distinct Subsequences
- 給兩序列 s1, s2 求 s2 在 s1 中出現幾次。
- abc 在 abbbc 中出現了三次,分別是前、中、後三種取 b 的方式。
- 雖然輸入數字大、答案又要大數才存得下,但可思考其 DP 方式。
ACM 10036 - Divisibility
- 給一數列及一數 k,可在其中兩兩相鄰數之間放加號或減號,試求能否使計算結果
恰整除於 k。
ACM 709 - Formatting Text
- 給一篇文章以及指定寬度 w,需將這篇文章以每行長度 w 的方式進行排版。
單字不得分兩行或更多來顯示,並且每行需以單字開頭、單字結尾,而不能為空白。
單字間需至少有一個空白,但空白不限個數。對每個排版的評分方式是,
將單字間的間隔長度平方相加起來。若一行只有一個單字時,則直接加 500。
分數越低越好,求最佳排版方式,並以該方式輸出這篇文章。
- 相當漂亮的題目,雖然不太好想。2008 ACM ICPC Regional 越南站曾出現類似題。
ACM 11081 && 10912
- 善用類似背包問題的方式來改變狀態降維度,會使得複雜度大減的題目。
ACM 10739 - String to Palindrome
- 迴文形的題目。
ACM 10818 - Dora Trip
- 經典旅行商問題,求從起點開始遍歷所有點恰一次再回到起點的最小花費。
- 不過這道題的故事頗有趣,有興趣可以讀讀看。
ACM 10635 && 10949
- 經典 LCS 的題目。
ACM 10032 - Tug of War
- 經典以特殊技巧對背包問題降維的漂亮題目。
關於延伸的題目
- 怕剝奪大家的思考樂趣,就不放正解了。想知道的可以私下詢問。
歡樂練習時間
104
116
147
348
430
431
481
507
559
565
590
607
674
709
711
714
882
884
910
990
10032
10036
10069
10081
10130
10131
10198
10285
10304
10405
10454
10625
10635
10645
10684
10688
10702
10721
10755
10759
10818
10860
10862
10891
10911
10912
10944
10949
11026
11067
11081
11151
11258
11353
11415
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ yuscvscv 推:借轉~ 0131 23:25
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/31 Sat 23:25:14
→ jacky 推:借轉XD 0131 23:26
φ jacky 轉:到 [jacky] 看板,于 2009/01/31 Sat 23:26:25
→ sa072686 推:把 DP 延伸問題的解答從 p2 的個板轉過來了∼ 0201 00:06
φ shik 轉:到 [shik] 看板,于 2009/02/01 Sun 05:37:46
→ SKYLY 推:借轉XD 0313 08:20
φ SKYLY 轉:到 [SKYLY] 看板,于 2009/03/13 Fri 08:21:04
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:27:53
作者: sa072686 at 09/01/31
補充
108
10755
10827
前兩題在第三天的 DP 也會出現
感謝 yuscvscv 學弟。
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> Math
> /* 很可惜這堂課沒聽多少,也不知道上了啥…就亂丟… */
> 557
> 991
> 10104 (不確定有沒有講過 XDDD)
> 10179
> 10223
> 10299
> 10303
> 10334
> ※ 引述《yuscvscv (小可魚 @ TFcis11)》之銘言:
> > 就麻煩學長嚕~~~
> > 這是TFcis的寒假作業~~~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ yuscvscv 推:一樣借轉~~ 0131 23:33
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/31 Sat 23:33:16
→ jacky 推:借轉XD 0131 23:43
φ jacky 轉:到 [jacky] 看板,于 2009/01/31 Sat 23:43:15
φ shik 轉:到 [shik] 看板,于 2009/02/01 Sun 05:37:51
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:28:02
作者: sa072686 at 09/01/31
應觀眾要求的排列組合
530
911
10169
10232
10247
10497
10532
11038
11174
另外…徵一下題號,有題好像是從 a 寫到 b 要寫幾次數字 m 的 (不是 11038)
還有我好想補一題遞迴:110…
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> 補充
> 108
> 10755
> 10827
> 前兩題在第三天的 DP 也會出現
> 感謝 yuscvscv 學弟。
> ※ 引述《sa072686 (AC Island 開發中)》之銘言:
> > Math
> > /* 很可惜這堂課沒聽多少,也不知道上了啥…就亂丟… */
> > 557
> > 991
> > 10104 (不確定有沒有講過 XDDD)
> > 10179
> > 10223
> > 10299
> > 10303
> > 10334
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ yuscvscv 推:再借轉~ 0201 00:04
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/02/01 Sun 00:04:26
φ shik 轉:到 [shik] 看板,于 2009/02/01 Sun 05:38:01
→ shik 推:一口氣轉走了感恩~~ 0201 05:38
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:28:10
作者: sa072686 at 09/01/31
※ 本文轉錄自 [jacky] 看板
作者: jacky (南一中99級程設小教學) 站內: jacky
標題: [程式] 寒訓投影片~!
時間: 2009/01/31 Sat 23:21:10
http://miko.tw/~jacky/other/chensc.pdf
http://miko.tw/~jacky/other/seanwu.ppt
至於哪個是誰的應該不用我多說了吧~~
--
███◣ █◣ ◢█ █ █
█ ◤ █◥◣◢◤█ █ █
███◣ █ ◥◤ █ █ ◢◣ █
█ █ █ █ █◢◤◥◣█
███◤ █ █ █◤ ◥█
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by jacky from 124.8.169.192 (福爾摩沙固網)
φ sa072686 轉:從 [jacky] 看板,于 2009/01/31 Sat 23:56:28
→ sa072686 推:補一個 http://w.csie.org/~b97113/DP.ppt 0131 23:56
→ LFKing 推:感謝分享! 0211 23:10
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 884
時間: 2009/02/01 Sun 00:04:31
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 884
時間: Sun Jan 25 13:16:47 2009
---- 防雷 ----
不難想到全部拆成質因數就是最多整數了。
先用篩法篩過一遍,在篩的過程中每個合數都會被至少一個質數篩去。
對於每個合數都記下自己被誰篩去,便可得到一個質因數。
接下來對於質數 p,其質因數個數為 1。對於合數 m,若其被 p 篩去,
則知其質因數個數為 dp[m/p] + 1,也就是加上 p 這個質因數。
最後加總每個數的質因數個數,即為 n! 的質因數個數。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:04:50
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 674
時間: 2009/02/01 Sun 00:04:32
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 674
時間: Sun Jan 25 13:22:46 2009
---- 防雷頁 ----
面額種類 1, 5, 10, 25, 50
設狀態 dp[i][j] = k 表示前 i 種錢幣組成金額 j 有方法數 k。
dp[i][j] = dp[i-1][j] + dp[i][j-v[i]];
由於 dp[i-1][j] 顯然不包含錢幣 i,dp[i][j-v[i]]可能包含任意多個錢幣 i,
但至少需要一個錢幣 i 才能讓 j-v[i] 變成 j 這麼多,所以絕對不會重覆。
邊界條件 dp[0][0] = 1,不用錢幣所以組成 0 元也是一種方法,
但金額數為負時方法數 0,因為怎麼湊都湊不出來負的錢。
很像背包,但是不是取最佳、而是算方法數。
除了最佳化問題外,計算有幾種可能,也可以用動態規劃。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:04:55
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 714
時間: 2009/02/01 Sun 00:04:33
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 714
時間: Sun Jan 25 13:31:08 2009
---- 防雷頁 ----
由於抄最多頁的人如果至多抄 n 頁就夠,那麼 n+1 頁也還可以;
如果至少抄 n 頁不行,那麼抄 n-1 頁絕對不行。
所以可以二分搜尋抄的頁數,檢查的話很簡單,一直取連續編號的人,直到最接近 n
但不超過 n,看有沒有辦法把人分配完,就知道最多 n 頁行不行。這裡用了貪心法。
動態規劃的話,設狀態 dp[p][q] = r 代表前 p 人湊了 q 組最少要抄幾頁。
dp[p][q] = min(max(dp[p-k][q-1], sum(p-k+1, p)))
若取 p-k+1 到 p 這些人為一組,則前 p-k 人湊 q-1 組最多抄的頁數,
以及第 q 組,p-k+1 到 p 這些人抄的頁數和,取大者即為這種組合最多要抄的頁數。
對於每個 k,取最多要抄的頁數最小者,即為所求。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:02
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10069
時間: 2009/02/01 Sun 00:04:34
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10069
時間: Sun Jan 25 13:42:41 2009
---- 防雷頁 ----
一開始看會被嚇到,但說難也不難,大數麻煩了些而已。
設狀態 dp[p][q] = r 表示序列 s1 前 p 個字元中對應了 s2 前 q 個字元的方法數 r。
若 s1[p] == s2[q] 則 dp[p][q] = dp[p-1][q] + dp[p-1][q-1];
否則 dp[p][q] = dp[p-1][q];
這裡可以把狀態數降到剩一維,即使用 dp[q] 代表到目前為止對應前 q 個字元方法數。
這樣 dp[p][q] = dp[p-1][q] 的部份就可以無視,處理 s1[p] == s2[q] 就好。
從 p-1 跑到 p 時,dp[q] 自然不變,也就等於 dp[p][q] = dp[p-1][q] 了。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:08
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10036
時間: 2009/02/01 Sun 00:04:35
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10036
時間: Sun Jan 25 13:49:22 2009
---- 防雷頁 ----
設狀態 dp[p][q] = r 代表前 p 個數字能否湊出 mod k == q 的情形,r = 0 or 1。
轉移方式就簡單了吧,若 p-1 時數字 q 可湊出,則 p 時數字 (q + num[p]) % k,
(q - num[p]) % k 都可湊出。不過負數的 mod 要小心,可以用以下函數解決:
int mod(int num)
{
if(num >= n)
{
return num % n;
}
else if(num < 0)
{
return -(num % n);
}
return num;
}
這是 AC Code 中抄出來的,應該沒問題。
當然在 p 時,< p-2 的都用不上,所以保留兩排陣列即可。
但是 dp[p-1][q] = 1 不代表 dp[p][q] = 1,所以還是得留兩排,不能縮到剩一排。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:14
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 709
時間: 2009/02/01 Sun 00:04:36
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 709
時間: Sun Jan 25 14:16:37 2009
---- 防雷頁 ----
有趣的一題。
以狀態 dp[p][q] = r 代表前 p 個單字湊 q 行時,cost 為 r。
則 dp[p][q] = min(dp[p-k][q-1] + cost(p-k+1, p))
取 p-k+1 到 p 為一行,餘下湊 q-1 行。其中 p-k+1 到 p 必須不超過一行寬,
cost 則是計算空白所造成的 badness,當然是平均分配最好。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:21
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11081
時間: 2009/02/01 Sun 00:04:37
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11081
時間: Mon Jan 26 00:27:38 2009
---- 防雷頁 ----
11081
看似混亂,從兩個序列取子序列出來,再將其依任意順序安插成第三個序列,
當然原本的兩個子序列得為第三個序列之子序列…
其實是可以分析的。觀察一下,以 c 為主比較好處理,每個字元必定是由某一序列提供,
所以直接看它是從誰過來的,反正順序不可逆。
用鏈結串列記錄 a, b 出現的字,把相同的串在一起,可以透過雜湊去取。
設狀態 dp[p][q][r] = k 表示用 a 的前 p 字、b 的前 q 字組出 c 的前 r 字,
共有 k 種方法。
則對於第 r 字,分別取 a, b 中所有相同的字,設取 a[p] 則舉所有
dp[x][q][r-1] 加總之。其中 x < p。
這樣狀態數 n^3,每個狀態轉移是 n,所以 n^4。似乎對於 n <= 60 而言有些慢…
於是想辦法改進。狀態數想來是無法再縮了,那有沒有辦法不用枚舉這麼多來加總?
考慮把狀態換成 <=p, <=q 來組成 r,卻在決定取 a[p] 或 b[q] 時可能重覆。
但是要嘛取 dp[x][q][r-1] 要嘛取 dp[p][x][r-1],則考慮不要太貪心,分開加總,
一張表存 <=p, q 另一張表存 p, <=q,則狀態數 n^3 且轉移都只有 O(1)。
對於每個 r 要處理每個 p 加總 <=q 的部份,以及每個 q 加總 <=p 的部份,
共 n^3 + n^3,所以總和也是 n^3,巧妙地降了一維下來。
由此可見,加總是相當常用的降維技巧。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:26
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10912
時間: 2009/02/01 Sun 00:04:38
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10912
時間: Mon Jan 26 01:37:55 2009
---- 防雷頁 ----
這道題可以很快想到一個合理的狀態:
以 dp[p][q][r] = s 表示長度 p 數值 q 結尾 r 有 s 種,則轉移方式
dp[p][q][r] = sum(dp[p-1][q-v[r]][k]) for k < q
不過這樣狀態頗肥,轉移又要窮舉,有沒有更快的方式?
以 dp[p][q] = r 表示長度 p 數值 q 有 r 種,再來依序枚舉字母以保證嚴格遞增,
dp[p][q] += dp[p-1][q-v[i]],只要枚舉 q 時從大到小,就保證嚴格遞增。
狀態馬上就降了一維下來,自然快多啦。
另外這題由於不管輸入為何,答案都一樣,所以也可以先把所有答案算出來放著,
或是把算過的答案記住,而不在下一組輸入時清空,這樣也算是技巧之一。
但是算出來放著並不是預先跑一次直接寫死喔,而是把算答案的程式碼放著,
是所謂預處理的技巧,在輸入之前就先跑完所有答案,每次回答問題只要查表就好了。
反正重算結果也一樣,不是嗎?
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:35
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10739
時間: 2009/02/01 Sun 00:04:39
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10739
時間: Mon Jan 26 01:49:55 2009
---- 防雷頁 ----
迴文形的題目。
以 dp[p][q] = r 代表把字串第 p 到第 q 個字元弄成迴文,需要多少 cost。
若 s[p] == s[q] 則 dp[p][q] = dp[p+1][q-1]
否則 dp[p][q] = max(dp[p+1][q-1], dp[p][q-1], dp[p+1][q]) + 1
中心思想是處理掉兩端字元,再把中間弄成迴文。
像 replace p => q 就表示 p 和 q 會變一樣,此時把 p+1, q-1 這段變成迴文,
整段 p, q 也就變迴文了。
所以若 replace p => q 或 q => p 此二字元都會變成相同,取 dp[p+1][q-1] + 1。
否則,刪去 p 或在 q 後面增加 p 都是 dp[p+1][q] + 1,反之 dp[p][q-1] + 1。
刪去 p 就看 q 和 p-1 了,在 q 後面增加 p 的話,也不用看 p 了。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:40
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10818
時間: 2009/02/01 Sun 00:04:40
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10818
時間: Mon Jan 26 02:02:12 2009
---- 防雷頁 ----
經典旅行商問題(Traveling Salesperson Problem, TSP)
這裡狀態較特殊,要用到位元運算。意即將狀態編碼,這裡把走過的地方編碼。
設狀態 dp[r][s] = k 表示目前人在 r,走過的點狀態 s 時走了 k 步。
由於人在哪會影響接下來走下一個點的步數,所以要記。
以 0/1 序列表示走過哪些點,1 表示沒走過,則若 10 個點的序列如下:
1101010111
將其轉整數 1+2+4+16+64+256+512 = 855,故狀態 s = 855。
所以找所有可以走的點,從 r 走過去。設點 j 則走過去變成 dp[j][s-(1<<j)]
所以 dp[r][s] = min(dp[j][s-(1<<j)] + distance(j, r)) for (s & (1<<j)) > 0
雖然複雜度還壓不到 polynomial,是 n^2 * 2^n,不過比原先的 n! 快了許多。
主要是把形如 a=>b=>c=>d 和 c=>a=>b=>d 這類走過的點相同、但結束地點一樣的,
視為相同的狀態。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:45
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10635
時間: 2009/02/01 Sun 00:04:41
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10635
時間: Mon Jan 26 12:54:44 2009
---- 防雷頁 ----
經典 LCS 轉 LIS 才夠快的題目。
不過可能會想說光找 match 就 n^2 了吧?
把其中一個 sort 再 binary search 也要 n log n。
不過如果把存 ary[i] = j 代表第 i 個是 j,改成 數字 i 出現在第 j 個位置,
那麼就只剩 n 了呢。解決找 match 後,就只剩二維的 LIS 了。
先依第一維 sort,之後因為數字不重覆的關係,直接對第二維 LIS 就可以了,
因為保證第一維是嚴格遞增的,數字不重覆就不會有第一維相同的 match 出現。
LIS 記得用加速過的,否則還是 n^2 會爆炸唷。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:49
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10949
時間: 2009/02/01 Sun 00:04:42
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10949
時間: Mon Jan 26 13:50:25 2009
---- 防雷頁 ----
和 10635 相似,但更難,種類少了,但重覆多了。面對這麼多重覆的 match 怎麼處理?
首先,老樣子,用指標陣列掛鏈結串列,如下圖:
aabbac
a => 0 => 1 => 4 => NULL
b => 2 => 3 => NULL
c => 5 => NULL
d => NULL
..
這樣可以節省許多時間。接下來就是大力地 LIS 它…當然用加速過的才夠快。
還是得依某一維排序,但是在抓 match 的過程中,應該是依某一維的順序。
照理說已排序過,但做的時候要由另一維大到小做,不然…
會導致同一字元連了好幾次。另外大到小做的關係,不要每次重頭搜。
舉個例,abbaabc, aabbaab,以前者為主。
到第二個 b 時…
02 /* 代表長度 1 結尾最小在位置 0,長度 2 結尾最小在 2 */
因為是 b…先放最大的
026
^
再放第二大…
023
^
再放第三大…
023
^
大致是這樣,因為前面先放大的,如果大的都接不上去,小的也一定接不上去,
所以就從大的放的地方往下搜就可以了。
如果從小放會變怎樣?
02
02
^
023
^
0236
^
才多了一個字,長度就多了 2,想也知道一定錯了。3 和 6 都接同一個 b,
所以這樣是錯誤的。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:53
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10032
時間: 2009/02/01 Sun 00:04:43
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10032
時間: Mon Jan 26 14:05:12 2009
---- 防雷頁 ----
看也覺得是背包問題。但有一個限制,就是人數。
那麼,試著多加一個狀態消掉人數的後效性,變成:
以 dp[p][q][r] = s 代表前 p 人取 q 人湊重量 r 是否辦得到。
dp[p][q][r] |= dp[p-1][q][r] | dp[p-1][q-1][r-w[p]]
但這樣最多 100 人,每人最重 450…
100 * 50 * 22500 顯得太大了些,怎麼辦呢?
考慮到只用 0 和 1,所以改作…
dp[p][q] = r 代表前 p 人湊重量 q 的狀態為 r,其中 r 的二進制表示法中,
若 k 位為 1 代表前 p 人可用 k 人湊出重量 q。轉移方程變為…
dp[p][q] = (dp[p-1][q] | (dp[p-1][q-w[p]] << 1))
前面應該沒有問題,後面 dp[p-1][q-w[p]] << 1 是什麼東西?
把二進制表示法中,每一位都左移一位就是了。所以…
若原本 1, 3, 5 人為 1,就變成 2, 4, 6 人為 1 了。
一隊至多 50 人,所以用 long long 型態是足夠的,因為有 64 個 bit。
算是 0/1 背包問題一種很巧妙的解法,用位元運算降維。不過要小心一點,
1 << 50 是會 overflow 的,要用 1ll << 50。注意是 1LL 而不是一百一十一。
想知道 1ll << 50 的故事請洽 dxvxlqxext 或 txhxoxgxt。
---- 文末防雷 ----
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:05:57
作者: sa072686 at 09/02/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [筆記] 鏡像
時間: 2009/02/01 Sun 00:04:44
作者: sa072686 (sa) 看板: sa072686
標題: [筆記] 鏡像
時間: Mon Jan 26 02:10:00 2009
http://0rz.tw/2558x
ggm 的超強中文鏡像
http://zion.tfcis.org:8080/~sa072686/LuckyCat
中文鏡像
http://zion.tfcis.org:8080/~sa072686/LuckyCat/q%d.htm
雖然 index 頁是舊的,題目並不多;但像 11081 之類後來加上去的,裡面還是有。
所以明明記得有翻、index 頁卻找不到的,可以直接打網址找到XD
另外…
http://zion.tfcis.org:8080/~sa072686/LuckyCat/uva/%d.html
之前 lucky 貓的英文題目鏡像,只到 110XX 的樣子…
http://icpcres.ecs.baylor.edu/onlinejudge/external/%d/%d.html
第一個數字為題號前三碼,第二個數字為題號,ACM 官方的,
但是只有題目頁、沒有旁邊雜七雜八的選單,因此速度極快。
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ dennis2030 :GGM的LuckyCat鏡像有到11254@@ 比較新一點點 推 01/26 03:15
→ sa072686 :伸網址XD 推 01/26 12:42
→ godgunman :http://0rz.tw/2558x 這 推 01/27 02:17
φ sa072686 轉:從 [sa072686] 信箱,于 2009/02/01 Sun 00:06:02
→ yuscvscv 推:借轉~ 0201 00:07
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/02/01 Sun 00:08:24
作者: hallogameboy at 09/02/15
Census 人口普查
對於一些城市,由於過多的移民以及人口成長,所以在近年計算人口成為一大問題。
每一年,人口計算協會ACM(Association for Counting Members)
總會在各個區域舉辦人口普查。
這個城市劃分為NxN個組成矩形的區域,你的任務是找出某些區域(給定左上右下角
的某一子矩形)中最多以及最少的人口數。
如果ACM覺得人口數沒什麼顯著的改變的話,會對某個區域進行人口調查並跟你回報。
(N<=500、操作(改變人口+查詢)數<=40000)
===================================溫馨防雷線=================================
==
如果N不大的話可能可以考慮用N棵線段樹硬做,不過N達500實在太大了,
複雜度O(40000NlgN)。
所以呢....還是線段樹嘛!只不過變成二維的線段樹罷了!
這樣複雜度就變成O(40000(lgN)^2)了!
之前只寫過不斷加入值取最大值得,第一次寫有改變的二維線段樹說XD
我用樹套樹的方法寫,
但是之前卡在如果第一維的結點代表的第一維座標是一個區間,
不知道如果要維持他代表的子樹的正確性該怎麼做
(因為原本的最大值可能是被改變的而不能留著)
最後想到了一個方法,把代表一個座標以及一個區間的第一維線段樹們分開處理
若只代表一個座標,就代表說改變之後再用遞迴處理訊息就好
若代表的是一個區間,則等他的子孫都遞迴完之後再下去,
但取值的時候取的是第一維的子孫的子樹相同位置的最大最小值
就可以避免無法更新的情況了。
==
我跑出來1.600s,做一些細部的修正之後變成1.530s
但是第一名的Rio大神的0.290s實在是太嚇人了,
想問一下有人有其他方法嗎?
==================================溫馨防雷線==================================
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by hallogameboy from 125.232.148.1 (中滑一番)
▲ hallogameboy 改@2009/02/15 Sun 22:18:11
→ godgunman 推:是姜姜耶!!!!XD 0216 20:34
→ SKYLY 推:是好威姜姜耶!!!!XD 0216 20:36
→ suhorng 推:魔人帥哥姜耶!!XD 0216 20:51
→ peter50216 推:!!!!!!!!!!!XD 好威魔人帥哥姜! 0217 19:00
作者: sa072686 at 09/02/17
給 n 和 n 對人名,代表他們是朋友。且朋友的朋友也是朋友。問給你的每對人名,
所形成的朋友集合共有多少人?
至多 100000 個人,名字長度 1~20 且僅包含大小寫字母,
---- 防雷頁 ----
不難想到是 union set,找個好一點的資料結構查找人名就好了。
binary search tree 可以到 0.570,2, 3 tree 可以到 0.700(反而慢?Orz)
據可靠消息指出有 hash 1.2 的成績,以及 map 2.860 的成績。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
作者: sa072686 at 09/02/17
給一堆指令,可以控制烏龜的行動。指令有四種:前進 x 單位、後退 x 單位、
左轉 x 度、右轉 x 度,問烏龜在給定的一連串指令後會跑到離起始點多遠的地方?
---- 防雷頁 ----
就…硬上吧,配合 sin() 和 cos() 就好,單位角度必為整數,不用擔心誤差。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
▲ sa072686 改@2009/02/17 Tue 12:49:44
作者: sa072686 at 09/02/17
給一條平放在 x 軸、長度 L 的管子,一頭在 (0, 0, 0) 一頭在 (L, 0, 0)。
現在把它折成 j 段,給你 j 和 j-1 個指令,第 i 個指令代表第 L-i 段折向哪。
可以折向 +-y, +-z 四種方向,一定折 90 度,或 No 代表不折。
問最後末段 L-1 ~ L 指向 x, y, z 哪一軸的 +- 哪個方向?
---- 防雷頁 ----
模擬吧,如果最後一段向著 x,則折 y 或 z 就會轉到你折的方向。
否則若是向著 y 時折 z 可以忽略,反之向著 z 時折 y 亦然。
若向著 y 時折 y 或向著 z 時折 z 都會變回向著 x,正負得正,正正或負負得負。
從最後一段折回來試著想想看,或真的拿東西來折折看就會知道了。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
作者: sa072686 at 09/02/17
給一個數列 s,試求這數列的某排列 q 使得 q[q[i]] = q[i]。任一符合條件者皆可。
---- 防雷頁 ----
持續把 q[i] 扔到 q[q[i]] 去就好了。不過交換過來的東西也要扔去它該在的位置。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
作者: sa072686 at 09/02/17
給 n 個人、h 間旅館、m 個時段、b 的預算,接下來給每間旅館每人的價錢、
這 m 個時段的空床位有多少,試求一個方案能使所有人在同時段住進同一旅館、
並且花費最小、又不超過預算。問最小花費為何?
---- 防雷頁 ----
就…對每間旅館找住得下的時段,再比較一下價錢,就解決了。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
作者: sa072686 at 09/02/17
※ 引述《gloompisces (偶陣雨,偶爾會天晴)》之銘言:
> 11567 - Moliu Number Generator
> 有一台計算機,它每一個步驟可以對一個數字N做下列三件事的其中一種
> (1) N -> N+1
> (2) N -> N-1
> (3) N -> 2*N
> 給你一數字 M ( 0 <= M <= 2147483648 )
> 你把 0 變成 M 最少需要幾個步驟?
---- 防雷頁 ----
greedy + dfsid(應該算 IDA* 了…),觀察可發現…
乘以 2 可以很快到達,+1、-1 則是微調用,而且在某一時間做的 +1,
在不斷乘以 2 後會變成 +2、+4、+8、…,端看是何時加的 1。-1 亦同,
又知連加兩次,不如在之前加 1 次後乘 2,又加又減當然沒必要,減也沒必要連減。
101100 + 1 + 1 = 101110, ((10110 + 1) << 1) = 101110,次數一樣。
而某一時間的加或減,以後可能會變加或減某一 2 的次方數,
且不會有一個 2 的次方數是連加、連減或同時出現加和減,要嘛沒有,要嘛加減其一。
故問題變成,對每個 2 的次方數要嘛加、要嘛減,要嘛不加。加和減都要算一次,
另外看取的最高次數為何,也要算上乘以 2 的次數。
假設目前加總到 n 目標 s 次數 d,
又可估計,從高次加回來,若 n > s 則 n+2^d 絕對減不回 s,反之 n < s
則 n-2^d 絕對加不回 s,因為再來怎麼加、減,影響都不會大於 2^d。
再估計若 n+2^(d+1) <= s 或 n-2^(d+1) >= s 則同上,不管怎麼努力都到不了 s。
然後限深下去 DFS 搜就好了。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
作者: sa072686 at 09/02/17
給衛星離地球的距離,軌道為圓形,地球半徑 6440,再給一角度 a,試求此衛星
在軌道某兩點與地球中心夾 a 度時,其直線距離與弧線距離各為多少。
---- 防雷頁 ----
數學題…直線距離可以求座標來算,弧線距離就用半徑乘上弧度來算。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/17
給許多環,有交點的環會黏在一起,問黏在一起的環最多幾個?
輸入為所有環的中心座標,以及半徑。不會有兩個環只交一點,環假設無限細。
---- 防雷頁 ----
union set,但要小心除了外離以外,內離也不算黏在一起;
輸出除了答案為 1 以外,都要加 s,答案為 0 也一樣。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/17
給大圓半徑和小圓個數,計算小圓半徑、藍色和綠色面積。
http://icpcres.ecs.baylor.edu/onlinejudge/external/102/p10283.jpg
---- 防雷頁 ----
數學題,還好有強者同學罩XD
設大圓半徑 br, 小圓半徑 r, 小圓個數 s
r + k = br, r = ksin(a), a = pi/s
=> ksin(a) + k = br => r = br - br / (1+sin(a))
藍色用多邊形減扇形,綠色用大圓減圓形減藍色。
小圓數 1、2 是例外。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/17
給一多邊形,求其面積與其凸包面積之比例。
---- 防雷頁 ----
以公式分別求多邊形與凸包之面積即可。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/17
給兩數,求此兩數間有多少完全平方數?
---- 防雷頁 ----
DP,dp[i] = dp[i-1] + (issquare(i) ? 1 : 0);
記錄從 1 開始到 i 有多少完全平方數,之後以 dp[j]-dp[i-1] 即可算出 i, j
段平方數個數。
---- 文末貼心防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/17
給一張 1025 * 1025 的方格圖,有 n 個點被老鼠佔據。你有威力 d 的炸彈一枚,
給你老鼠佔據的點座標以及老鼠數,試求可炸死最多老鼠的引爆地點。
設引爆點 x, y,則點 p, q 若 max(x-p, y-q) <= d 則此點會被波及,
即爆炸範圍是方形的。
如果有多組解,輸出 x 較小的;如果還是有多組解,輸出 y 較小的。
---- 防雷頁 ----
n^2 掃過去,建一張表把每一直行高度 d*2+1 的老鼠數加總起來,代表每直行
特定高度的老鼠總和,那只要取連續 d*2+1 行加起來就是一個爆炸範圍矩形。
然後一行一行向下平移,平移時減去最上面那格的老鼠數,加上下一格老鼠數。
取連續 d*2+1 行時,也是一直右移;右移時扣去最左邊那行,再加上下一行即可。
這樣做複雜度僅 n^2。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
▲ sa072686 改@2009/02/17 Tue 22:32:57
作者: sa072686 at 09/02/17
給一個 BINGO 盤面和 1~75 的數字的任意排列,試求在宣佈第幾個數時 BINGO。
BINGO 要某一直行、橫列或斜角都被標記才算,盤面 5*5,中間那格為空;
什麼時候要標記它都是可以的。其它在被宣佈到時才能標。
---- 防雷頁 ----
記錄每行每列每個斜角已被標記數字數量,盤面資結存數字 => 座標的雜湊。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/18
給一多邊形(不一定凸),求嚴格落在多邊形中的格子點有多少?
嚴格是指,落在頂點或邊上不算。
---- 防雷頁 ----
感謝 devilqxect, Zero。
Pick's Theorem: s = a + b/2 - 1
s: 面積
a: 在裡面的格子點
b: 在邊上的格子點
又邊上的格子點為該條邊之兩端點 (x1, y1), (x2, y2) 位移的最大公因數,即
gcd(abs(x1-x2), abs(y1-y2));
若 x, y 位移任一為 0 則 gcd 為不為零者。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/18
現在你要以 u 的划船速度過河,河寬 d 水流流速 v。
有兩種方式,一種是求以最短時間過河,一種是求過河軌跡恰為一直線(沒被水沖走)。
若兩種方式均可行且路徑不相同,則輸出渡河所需時間差;否則輸出訊息。
---- 防雷頁 ----
最短時間就直接河寬除以速度,軌跡直線則是河流方向要有 u 的速度分量,
所以只剩 sqrt(v^2-u^2) 的速度分量是和河流垂直、影響過河時間的。
另外,河流如果流速 0,那麼兩條路徑會重疊,這樣是 can't determine 的。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/18
給 n, b 求 n! 在 b 進制中,尾巴有多少 0,以及這數共有幾位數。
---- 防雷頁 ----
數學,位數用換底公式想辦法做 log,不過先把 log 連加的結果建表會較快。
再來是 0,先因數分解底,然後算 n! 共有這些因數各幾次,除以分解的次數。
比如說 n! 有 2^30,底是 2^4,則 2 足以構成 30/4 = 7 個 0。
技巧就是用 n 不斷除以該質數 p,並將過程的商加總起來,即為所求。
例 50! 有幾個 2,就是 50/2 + 50/4 + 50/8 + ... + 50/64 + ...
= 25 + 12 + 6 + 3 + 1 + 0 + 0 + ... = 47 個。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.115 (台北帝國大學)
作者: sa072686 at 09/02/18
給人數 n 和一堆信,以大寫字母代表是寫給誰的,以 # 為結尾。
這 n 個員工,編號從 A 開始。則依其收到信件數量,在書架上安排位置給每個人放信。
但書架很脆弱,所以信多的要安排在離中心越遠越好。中心為 (n+1) / 2。
如果有多組解,輸出字母順序最小者。
---- 防雷頁 ----
先排序,然後從兩端擺起,greedy 一下就好。
兩兩看,如果重量不一樣,字母小的放左邊;另一邊放與自己等重量中最大或最小者。
一樣的話就是放最大和最小。這樣依序放入就可以了。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.122 (台北帝國大學)
作者: sa072686 at 09/02/18
給 b, d, f 代表以 b 為底、個位數 d、乘以 f。
則 b 進制個位數為 d 的數中,乘上 f 的結果恰為將此數之個位數搬到最前面者,
位數最小為何?
例:179487 * 4 = 717948 等於把 7 搬到最前面,所以輸入 10 7 4 答案 6。
---- 防雷頁 ----
用類似大數的做法…知道被乘數之個位數可得商之個位數;又商之個位數
為被乘數之十位數,由被乘數之十位數又可求商之十位數,…
直到商的某位數等於被乘數之個位數為止。便知答案為何。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.122 (台北帝國大學)
▲ sa072686 改@2009/02/18 Wed 22:51:02
作者: sa072686 at 09/02/19
給 n 個字串,你必須用超難用編輯器打完它們。你可以輸入任意文字、
或用聲控讓它重複最後一個單字、或砍去最後一個字元。除了第一個字一定要先打完,
其它字的輸入順序可以隨意調換,問最少需打幾個字、以及最佳輸入順序?
多組解的話任一均可。
---- 防雷頁 ----
greedy, 複製與刪去都是聲控而不用輸入,所以等於取前綴不用錢。
因此從首字開始,一直抓有最長相同前綴的就是了。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.122 (台北帝國大學)
作者: sa072686 at 09/02/20
給 n 個網路節點彼此可以連到誰,接下來 m 個詢問,對每組詢問 i, j 均需回答
從 i 連到 j 至少需要經過多少節點,以及最佳路徑為何。如果有多組解,
以字典序小者為佳。
前面輸入誰與誰連接時會有 n 行,每行有一個數字以及一張表,
代表該節點所能連到的點。表一定是依小到大排序。
---- 防雷頁 ----
先對每個點 bfs 找出最佳解再遞迴輸出即可。bfs 順序恰可得最小字典序,
可以自行推推看。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.107 (台北帝國大學)
→ DJWS 說:是有向圖 1125 00:01
作者: sa072686 at 09/02/20
給 n 個座標點和圓半徑 r,試求有無可能用半徑 r 的圓包住所有點?
---- 防雷頁 ----
已知此圓必過凸包上某點,且必過凸包上至少兩點。
先求凸包,再固定一點,再窮舉餘下的點,所形成之三角形外心,
看是否能包得住。但也有可能只過凸包上兩個點(如某些平行四邊形),
所以也要處理只過兩個點的情形,而不一定得過三點。但不用考慮大於三點的情形。
---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.30.122 (台北帝國大學)
作者: dreamoon at 09/02/25
覺得這題很GJ
所以拿來宣傳一下
---
題目:給一個整數n,如果正六邊形可以分割成n個面積相等的平行四邊形請輸出1
不行的話,請輸出0
---
Sample Input: 2
147
Sample Ouput: 0
1
---
提示: 心想事成
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dreamoon from 140.112.241.6 (台北帝國大學)
→ godgunman 推:你這提示XDDDDD 0225 15:47
→ yuscvscv 推:為什麼input是0時 output也是0? 0225 23:03
→ dreamoon 推:因為沒辦法呀!不然你畫畫看XD 0225 23:48
→ yuscvscv 推:0個平行四邊形= = 不就是原圖嗎? 0225 23:54
→ dreamoon 推:可是原圖多了一個正六邊形呀! 0226 00:05
→ yuscvscv 推:所以0個平行四邊形就是於"空"? 0226 06:24
→ dreamoon 推:就結果論是這樣沒錯 0226 08:01
作者: dreamoon at 09/02/26
這題抓住我的心了,所以我也要PO在這裡
---
題目:給一個數n(n<1000000000001),請問在1~n之中有多少正整數,其所有因數之和為偶數
?輸入以一個0做為結尾
Sample Input:
3
10
1000
0
Sample Ouput:
1
5
947
---
提示:此題並非心想事成
(真的想知道的話就推文,我懶的打字了)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dreamoon from 140.112.241.6 (台北帝國大學)
作者: DJWS at 09/03/04
是個不錯的東西∼
http://www.comscigate.com/Books/contests/icpc.pdf
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.176 (中滑一番)
→ gba356 推:感謝分享~ 0304 20:19
作者: s864372002 at 09/03/04
※ 引述《sa072686 (あ、これ..體育慘當)》之銘言:
> 小麻煩,不過善用字串的話其實還可以
> 先弄一個完全空白(都是ASCII 32)的字串做複製用
> 分屍觀察後填上-、|
> 善用STRCPY幫忙填有|的那幾行
> 其它重點就在後面不能有多餘空白
> 每行倒回找第一個不是ASCII 32的字元
> 補上'\0'就行了
但題目敘述:
(Be sure to fill all the white space occupied by the digits with blanks, also
for the last digit.)
我空白全部加上去AC。
是題目敘述有改過嗎@@
> 這樣寫的話
> PRINT 用%S就OK了
> 不用管,完全不會有多餘空白
> 字串好用啊~ 比字元一個個處理好多了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by s864372002 from 210.71.78.242 (台北一中)
→ sa072686 推:你是對的,我的做法是 Presentation Error 0305 22:09
→ s864372002 說:嘎?! 0306 12:43
→ sa072686 推:全加才是對的 0307 22:52
作者: yuscvscv at 09/03/10
學長有沒有Computational Geometry的題單啊?
如果沒有的話就不用去特地幫我找了,
謝謝~
--
時間,無聲無息。
人潮,川流不盡。
一個個的女孩既然只是生命中的過客,
那麼,掌握心門鑰匙的她,
究竟身在何處?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.143.226 (中滑一番)
→ sa072686 推:沒有 0310 00:19
→ yuscvscv 推:知道嚕 謝謝 0310 00:23
→ y790930 推:681 10078 我今天才剛寫的XD 凸包 0310 01:25
→ sa072686 推:去UVa toolkit搜尋,應該可以找到不少… 0310 17:42
→ yuscvscv 推:嗯嗯 0310 19:59
作者: yuscvscv at 09/03/12
建中的acm排名程式。
http://math120908.infor.org/wiki/rank/ranklist.php
剛回來就被扔水球了.......
因為我被莫名其妙的加進去了= =
--
時間,無聲無息。
人潮,川流不盡。
一個個的女孩既然只是生命中的過客,
那麼,掌握心門鑰匙的她,
究竟身在何處?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.130.174 (中滑一番)
▲ yuscvscv 改@2009/03/12 Thu 23:58:21
→ sa072686 推:正在寫說XDD 0313 16:22
作者: sa072686 at 09/03/13
前一陣子加入了 Programming Challenge,
今天發現連 ACM World Final 也加進去了…
不過只到 2000 年 XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
作者: sa072686 at 09/03/14
如題,我記不太清楚了…有記的來 PO 一下吧,越詳細越好!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
→ suhorng 推:infor.org math120908版XD 0314 21:55
→ SKYLY 說:嘿嘿 我已經先說了(炸) 0314 21:56
→ sa072686 推:一樓OP(指) 0314 21:56
→ suhorng 推:OP不好笑請小力鞭XDDDDDDDDDD (?) 0314 21:59
→ sa072686 推:鞭數十,驅之別院(誤) 0314 22:01
→ SKYLY 推:原來樓上上是癩蛤蟆(誤) 0314 22:02
→ suhorng 說:(我爆笑了XD) 0314 22:07
作者: sa072686 at 09/03/14
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.nation@infor.org (sa072686)
標題: [公告] TOI露營考
時間: 2009/03/14 Sat 21:56:28
作者: math120908 (Small2Kuo) 看板: math120908
標題: [公告] TOI露營考
時間: Sat Mar 14 17:52:21 2009
嗚炸了>"<
PO題目:
----------------------------------Problem A---------------------------------
從原點開始走 每步可以向左 右 上走一格
走過的的點不能再走 問走n步有幾種路線。
1<=n<=50
----------------------------------Problem B---------------------------------
如果N是方便數 則不存在相異正整數a,b,c 使得 N=ab+bc+ca
問第k大的方便數 0<k<=65
----------------------------------Problem C---------------------------------
n個工作 每個工作分兩部份印刷+裝訂 要先印刷完才能裝定
只有一台印刷機 對於每本書有一台獨立的裝訂機專門處理
每本書都有不同的印刷時間跟裝定時間
問全部裝定完至少要多少時間。
所有數字<=1000
----------------------------------Problem D---------------------------------
x1+x2+...xk = n , k>=1 , xi>=1 , xi%2 = 1 , x(i-1)<=xi
給你n問有幾組解
或換種說法XD
數字n可以有幾種不同的分法 可以分成奇數的和。 1<=n<=750
----------------------------------Problem E---------------------------------
給你一張圖還有一個源點s
問刪掉哪個點後
s點可以BFS到的點數會最少
點,邊<=30000
---------------------------------------------------------------------------
炸了>"<
...說不定進不了Q_Q
--
╭───────•╭═╮╭╦╮╭ ╮╭═╮╭═╮╭═╮•───────╮
│ 建 中 資 訊 ☉ ╠═╣ ║ ╠═╣╠═ ║ ║╠═╣ ☉ 雅 勒 尼 恩 │
╰──────• ╰ ╯ ╩ ╰ ╯╰═╯╰ ╯╰ ╯ •──────╯
Origin∮Athenaeum.twbbs.org ☉ From∮140.122.45.138
[+] s864372002: 欸80耶!一定進得了! 03/14 21:05
[+] sa072686: 題目借轉一下,謝謝XDD 03/14 21:57
φ sa072686 轉:從 [sa072686] 信箱,于 2009/03/14 Sat 21:57:19
→ sa072686 推:偷改標題XDD 0314 21:57
→ godgunman 推:話說 .. 我們學弟有成功偷題目出來XD 0315 12:10
→ sa072686 推:喔喔GJ!那輸入一下吧?XD 0315 15:31
作者: sa072686 at 09/03/16
大致完工,網址如下:
http://zion.tfcis.org:8080/~sa072686/rank
目前功能:
針對題數排名,題數同則以嘗試題數少為先,再相同以上傳次數少為先,再相同…
以帳號申請先後順序,總不會再相同了吧?
針對個人統計各 Volume 題數多寡、列出所有解過題目。
可進行一對一題數比對,便於得知他人解過、自己仍未解過之題目,
另可與所有人比較,即列出所有榜上有人解過的、自己仍未解過之題目。
針對題目可列出所有解出的人,以及他們的解題狀況(排名、執行時間…)。
若欲追加什麼樣的功能,請告知,能力範圍以內只要有空就把它寫出來。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
→ hpttw 推:我覺得申請先後順序應該以後申請為先XD 0316 12:51
→ suhorng 推:charset設成UTF-8 XD ( <meta .... ) 0319 16:21
→ sa072686 推:像現在這樣嗎XD 0319 16:50
→ suhorng 推:嗯嗯這樣OK XD 0319 18:32
→ suhorng 說:話說更通用的寫法是 <meta http-equiv='content-type' co 0319 18:33
→ suhorng 說:ntent='text/html; charset=UTF-8' /> 0319 18:33
→ butterfly21 呸:有我耶有我耶~XDDDDD 0321 14:08
→ suhorng 說:樓上... 太習慣雅勒的編號了... ? 0321 14:12
→ butterfly21 推:對不起手殘XDDDDD 0321 23:12
→ y790930 推:想請問一下這個是怎麼更新的?? 0321 23:26
→ sa072686 推:人工 0322 12:10
→ hrs113355 推:why not crontab? 0323 18:05
→ s864372002 推:為什麼SKYLY是????啊orz 0325 11:24
→ sa072686 推:以後會再修正 0325 14:43
作者: chensc at 09/03/23
→ sa072686 推:人工
→ hrs113355 推:why not crontab?
sa 跟我講一下要跑什麼程式,我幫你設 crontab 吧!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chensc from 220.134.18.57 (中滑一番)
→ sa072686 推:~/public_html/rank/a.out 0323 23:05
→ sa072686 推:可是跑很久喔XD 0323 23:05
→ chensc 推:所以大概要多久跑一次比較恰當?XD 0323 23:13
→ chensc 推:btw, 要跑 crontab 的話你程式裡的檔案操作要寫成絕對路徑 0323 23:40
→ sa072686 推:噢…好麻煩XD 我找天改一下 0324 01:06
→ chensc 推:OK, 改好了告訴我XD 用 #define 就好了呀 0324 09:08
→ sa072686 推:改了 0324 23:09
→ chensc 推:zion 的母體(matrix)好像掛了,等開起來之後就加@@ 0329 00:21
→ yuscvscv 推:zion連不上去= = 0329 00:22
→ chensc 推:加好了,抱歉最近有點忙 拖了一下子 0408 15:44
→ dreamoon 推:rank好久沒更新了? 0412 01:56
→ sa072686 推:加壞了? 0412 21:44
作者: sa072686 at 09/03/30
※ 本文轉錄自 [devilqxect] 看板
作者: devilqxect (有時候不一定) 站內: devilqxect
標題: [轉錄][TOI] 1! Simulation Contest I
時間: 2009/03/29 Sun 21:30:39
※ 本文轉錄自 [devilqxect] 信箱
作者: devilqxect.nation@infor.org (devilqxect)
標題: [轉錄][TOI] 1! Simulation Contest I
時間: 2009/03/29 Sun 21:30:16
作者: s864372002 (鋼琴) 站內: piano
標題: [轉錄][TOI] 1! Simulation Contest I
時間: Sun Mar 29 21:07:46 2009
※ [本文轉錄自 math120908 板]
作者: math120908 (Small2Kuo) 看板: math120908
標題: [TOI] 1! Simulation Contest I
時間: Sun Mar 29 17:18:26 2009
新鈔票
給a,b,c
問用a跟b能否湊出c以上的所有數字。
1<=a,b,c<=10000
Hint: math or 背包
==
三國鼎立
給一張MxN的地圖,上面有A國、B國、C國、障礙物以及可以行走的道路。
現在要從A國走到B國,但是過程中離C國的距離不能小於等於2。
問最少會走過幾單位的道路。
長寬10<=m,n<=800
Hint: BFS
==
尋寶問題
給M個人N個寶物(N<=M),以及每個人尋每個寶的時間,求拿到所有寶物最小平均尋寶時間。
N<=M<=50
Hint: minimum-cost maximum flow
==
收費站問題
給一棵2元樹,#0是根節點。
有Si個人要從根節點出發去#i旅遊。
現在要在裡面k條道路中設置收費站,每經過一個收費站每人就要收一元,從根節點出發
也要收一元的旅遊費。
而這k個收費站會把樹分成k+1個區塊,每個要去區塊i的總收費是Ti(1<=i<=k+1)。
求Ti之中的最大值最小是多少。
n<=200
k<=50
每個節點的人數<=50
<小小郭註>
給你一棵樹,除了root之外每個節點都有一個人數。
將其砍k條邊分成k+1部分 你要使這種砍法的最大花費值最小
最大花費值是每一部份的花費值中最大的那個
花費值則是這一部份中的每個節點的旅遊費用的總和
一個節點的旅遊費用代表的是 這個節點人數*(這個節點到root會經過幾條被砍的邊數+1)
------
Hint: dp+BinarySearch
by Farmer Jiang
--
我可不打算統治!在這海上最自由的傢伙,才是海賊王! --by 魯夫
--
╭───────•╭═╮╭╦╮╭ ╮╭═╮╭═╮╭═╮•───────╮
│ 建 中 資 訊 ☉ ╠═╣ ║ ╠═╣╠═ ║ ║╠═╣ ☉ 雅 勒 尼 恩 │
╰──────• ╰ ╯ ╩ ╰ ╯╰═╯╰ ╯╰ ╯ •──────╯
Origin∮Athenaeum.twbbs.org ☉ From∮140.122.45.8
[!] hallogameboy: 轉錄至 H-Gamer 板 03/29 17:28
[+] suhorng: 第一題真的當零錢寫就過了.. 03/29 18:50
[+] godgunman: 第一題usaco有 03/29 19:51
[+] math120908: 補上測資範圍 >"<\\ 抱歉忘了打... 03/29 20:13
--
╭───────•╭═╮╭╦╮╭ ╮╭═╮╭═╮╭═╮•───────╮
│ 建 中 資 訊 ☉ ╠═╣ ║ ╠═╣╠═ ║ ║╠═╣ ☉ 雅 勒 尼 恩 │
╰──────• ╰ ╯ ╩ ╰ ╯╰═╯╰ ╯╰ ╯ •──────╯
Origin∮Athenaeum.twbbs.org ☉ From∮140.122.45.245
[+] devilqxect: 借轉,謝謝~ 03/29 21:31
φ devilqxect 轉:從 [devilqxect] 信箱,于 2009/03/29 Sun 21:30:39
φ sa072686 轉:從 [devilqxect] 看板,于 2009/03/30 Mon 08:18:46
作者: suhorng at 09/03/30
題目是說,給一棵樹的 BFS及 DFS順序,然後重新建出樹來。
雖然用 DFS/ BFS及節點層數之間的關係過了,不過卻是假解,
只要遇到
5
5 4 3 2 1
5 4 3 2 1
的輸入就會炸掉...
但是這樣到底要怎麼辦呀@@....
我的算法跑出
1:
2:
3:
4:
5: 1 2 3 4
但是題目說父節點會從編號較小的子節點開始拜訪...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 140.122.61.163 (台灣師範大學)
作者: sa072686 at 09/03/31
我不清楚你的算法長怎樣…XD
我的 code 輸出和你接近,但是是 5: 4 3 2 1
也許你可以檢查一下你利用層數關係的方法,調整一下先後順序XD
※ 引述《suhorng (那個方法好神妙...)》之銘言:
> 題目是說,給一棵樹的 BFS及 DFS順序,然後重新建出樹來。
> 雖然用 DFS/ BFS及節點層數之間的關係過了,不過卻是假解,
> 只要遇到
> 5
> 5 4 3 2 1
> 5 4 3 2 1
> 的輸入就會炸掉...
> 但是這樣到底要怎麼辦呀@@....
> 我的算法跑出
> 1:
> 2:
> 3:
> 4:
> 5: 1 2 3 4
> 但是題目說父節點會從編號較小的子節點開始拜訪...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
作者: suhorng at 09/03/31
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> 我不清楚你的算法長怎樣…XD
> 我的 code 輸出和你接近,但是是 5: 4 3 2 1
> 也許你可以檢查一下你利用層數關係的方法,調整一下先後順序XD
應該是同一個算法了...
但是這樣怪怪的Q_____Q
題目說:
Note that when a parent was expanded the children were traversed in ascending
order.
以及
Each line should start with the node number followed by a colon followed by a
list of children in ascending order.
所以這筆應該是
1:
2: 1
3: 2
4: 3
5: 4
的樣子。
我把它先排序才輸出... 才跑出 5: 1 2 3 4
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 140.122.61.163 (台灣師範大學)
▲ suhorng 改@2009/03/31 Tue 14:10:43
→ sa072686 推:有道理…我是以BFS為主才這樣,也許要以DFS為主? 0331 15:10
作者: butterfly21 at 09/04/04
推銷一下我出的題目,
改編自ACM 417
ZeroJudge d205 古代神祕文字
XDDDDDDDDDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by butterfly21 from 140.122.46.26 (台灣師範大學)
▲ butterfly21 改@2009/04/04 Sat 17:05:39
作者: sa072686 at 09/04/12
陳鈧我忘了講,要傳參數 -fu 才會抓資料XD
另外弄個參數 -fp 的抓題目資料吧?這間隔設久一點XD
有看到的話幫忙改一下吧,感謝~
※ 引述《chensc (TFcis :: chensc)》之銘言:
> → sa072686 推:人工
> → hrs113355 推:why not crontab?
> sa 跟我講一下要跑什麼程式,我幫你設 crontab 吧!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.240.202 (台北帝國大學)
→ yuscvscv 推:好像很久都沒更新了 0421 20:50
→ chensc 推:靠我現在才看到.... 0504 09:23
→ chensc 說: [DONE] 0504 09:24
作者: yves1204 at 09/04/13
學長好~~
我是成電百級教學紫杉>//////<
跟學長一樣是ACM中人XDD
以後還請學長多多指教囉~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yves1204 from 219.84.57.221 (所以內特)
→ sa072686 推:喔喔,歡迎歡迎 0414 01:09
作者: suhorng at 09/04/19
發現沒有這一題 XD
---------------------------- 雷 -----------------------------
這題就是求BCC(雙連通元件, Biconnected Component)的AP(關鍵)點
一個求 BCC的方法就是用DFS記回溯邊的方式
舉例來說 我們從 1開始DFS
那麼每到達一個點的時候 要記下這個點最高能回溯的祖先節點
因為這樣代表有兩條 (或以上) 的路徑可以到達此點
由 DFS標時間戳記的概念
我們定義 low[v]為v能回溯到的最高節點, dfn[v]為v的時間戳記
則 low[v] = min{ dfn[v]
, low[c] for every child c
, dfn[a] for every ancestor a
};
此外 v會是關鍵點 若且唯若
1. v 不是 DFS的起點 且 v 有子節點 c 的 low[c] >= dfn[v]
2. v 是 DFS的起點 且 v 有兩個 (或以上) 的子節點
提供一筆測資 :
5
1 2 3
2 3 4
3 4 5
0
0
答案是 1
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 140.122.45.251 (台灣師範大學)
▲ suhorng 改@2009/04/19 Sun 13:40:26
→ butterfly21 推:我也可以來補完嗎?? 0419 20:27
→ suhorng 推:來吧XDDD 0419 20:34
▲ suhorng 改@2009/04/19 Sun 22:20:45
作者: butterfly21 at 09/04/19
一個爽數的定義:
f(n)=n的各位數字平方和
重覆f(n)到最後會變成1的就是爽數
輸一個正整數問你他是不是一個爽數。(n < 10^9 )
------------------------SOLUTION BELOW---------------------------------
因為f(n)的最大值是 2*9^2,
所以只以先把小於等於他是不是爽數的結果預處理就可以了。
對了 Unhappy 要拼對XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by butterfly21 from 123-193-5-178.dynamic.kbronet.com.tw (沒有故鄉)
→ suhorng 說:這樣翻譯... 超怪的XD 0419 21:43
→ butterfly21 推:好直接啊XD 0419 22:13
作者: butterfly21 at 09/04/19
二分圖最大匹配。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by butterfly21 from 123-193-5-178.dynamic.kbronet.com.tw (沒有故鄉)
→ dreamoon 說:這題似乎以前有討論過? 0421 13:18
→ butterfly21 說:拍謝 沒注意到Q_Q 0421 19:21
作者: suhorng at 09/04/22
※ 引述《sa072686 (南一中97級小教學~*)》之銘言:
> 翻譯一下好了
> 給你n個節點,編號為1到n
> 求符合以下兩條件之子集合的個數
> 一、沒有任何連續的數
> 二、無法再在此子集合中加入任一數使得條件一仍成立
> 附一下1~3的情形
> 1:{1}
> 2:{1}、{2}
> 3:{1}、{1,3}
> 皆無法加入任一數使得條件一仍成立
這題我們可以想成塗色問題
就是 : 有一張白色的圖,我們要把一些節點塗成黑色
不可以連續兩個節點塗黑色、也不能有節點可以塗色而未塗色
假設已經有一張 n (n>=2) 的圖,現在要加入第 n+1 個節點
則能用的結尾只有 {黑白} {白黑} {白白} 三種
如果結尾是 {黑白},那第 n+1 個節點可以塗黑色 也可以是白色
如果結尾是 {白黑},那第 n+1 個節點必須是白色
如果結尾是 {白白},那第 n+1 個節點一定是黑色
然而 當我們要輸出答案的時候 {白白} 這種結尾是不能用的
所以答案就是 {白黑} + {黑白} 的可能數
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 140.122.45.251 (台灣師範大學)
▲ suhorng 改@2009/04/22 Wed 09:09:29
作者: aytawgf at 09/04/22
這題可以用DP解
以 score[i][j] 代表把j小時分配給前i個科目時 分數的最大值
若分配j小時會至少有一顆被當掉的話
設 score[i][j] 為-1
對每個最大值 設一個迴圈
//用x[n][m]記錄輸入的分數 x[i][0] 一律設0
maxn=-1;
for(k=0 ; k<=j ; k++){
if(score[i-1][j-k]>-1 && x[i][k]>4 && score[i-1][j-k]+x[i][k]>maxn){
maxn=score[i-1][j-k]+x[i][k];
}
score[i][j]=maxn;
}
最後 score[n][m] / n 即為答案 //若為-1 則輸出不可能
然後這題會有浮點數誤差 算好平均後記得加一個極小數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by aytawgf from 221-169-13-170.static.seed.net.tw (種子電信)
▲ aytawgf 改@2009/04/22 Wed 22:38:17
→ Tommy 推:這是彼得打撞球那題嗎XD 0517 15:24
作者: butterfly21 at 09/04/22
這題可以使用DP。
------------------------------------------------------------
首先,對長度為1的字串,以每個字母開頭的都只有一個。
令序號產生函數為f(string);
f('a') = 1
f('b') = 2
f('c') = 3
.
.
.
.
f('z') = 26
接著對長度為2的字串我們作觀察:
f('a'+[ ]) = 26 + f([ ]) - f('a')
↑可以接 b 以後的所有長度為1的字串
f('b'+[ ]) = 26 + 25 + f([ ]) - f('b')
f('c'+[ ]) = 26 + 25 + 24 + f([ ]) - f('c')
前面一直加上去的等差級數代表前一項的最後一號。
以此類推,對長度為n的字串:
f( c + "長度為n-1的字串") = { if c='a' =>
長度為n-1的最後一項編號 + 後面字串的編號。
else
前一項的最後一項編號 + 後面字串的編號。
(兩個都是前一項的意思)
}
實作上,我是預先建表把 f( c + [ ])去掉f([ ])值的部份處理,
然後讀入後再一位一位加。
------
寫得好爛Q_Q
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by butterfly21 from 123-193-5-178.dynamic.kbronet.com.tw (沒有故鄉)
▲ butterfly21 改@2009/04/22 Wed 23:57:11
作者: butterfly21 at 09/04/30
----------------------------Thunder Below--------------------
跟書泓的作法一點點不一樣…
我是只記錄結尾是黑的或是白的的組合數,
黑:B[n] 白:W[n]
然後狀態轉移:
若n-3的結尾是白,則有 *..*.
^n-3
若n-2的結尾是白,則有 *.*.
或 *..*
^n-2
若n-2的結尾是黑,則有 .*.*
^n-2
不考慮從n-1做狀態轉移是因為:
若n-1的結尾是黑,則什麼都不能放
若n-1的結尾是白,則一定要放黑,
不過這也代表n-2的結尾一定是黑,
為求方便那就從n-2轉移吧。
B[n]=B[n-2]+W[n-2];
W[n]=W[n-2]+W[n-3];
好複雜。
XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by butterfly21 from 123-193-5-178.dynamic.kbronet.com.tw (沒有故鄉)
作者: yves1204 at 09/05/01
http://0rz.tw/bRFMo
一個很好用的網站
只要輸入一串數列(數與數間用","隔開)
按下搜尋
就會知道那是什麼樣的數列
相信在解題時會有一定的用處的XDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yves1204 from 219.84.58.8 (所以內特)
→ yves1204 說:這應該沒人PO過吧@@ 0501 22:58
→ zenixls2 說:海恩好像有po過,但不確定是在這po的 0501 23:46
→ butterfly21 推:很好用XDDDD 有些題目用這個根本是秒殺XDD 0502 13:31
→ yuscvscv 推:比賽不能用(泣) 0502 22:38
作者: yuscvscv at 09/05/06
好像都沒再更新耶= =
能否請學長看看~
--
試途紛擾千年愁,何紛?何擾?更為何愁?
人生苦短萬古冬,何歡?何笑?含恨而終?
幕天席地風滿花,遠山近河歌繞谷。
蝶美花盛景難求,莫叫三月春虛過。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.150.134 (中滑一番)
→ dreamoon 推:它更換網址了 0507 10:16
→ chensc 推:所以現在 zion 上的還有在跑嗎@@ 0507 13:28
→ sa072686 推:我把網址換掉了,不過測試時ACM就掛了… 0507 16:48
→ yuscvscv 推:那網址? 0507 23:24
→ yuscvscv 推:學長的測試結果如何呢? 0513 00:06
→ sa072686 推:大概行了…趕著出門,回來再PO結果 0513 15:24
→ yuscvscv 推:嗯 謝謝學長^ ^ 0513 17:22
→ sa072686 推:可以跑了 0513 21:26
→ sa072686 推:不過crontab待測中XD 0513 21:27
→ yuscvscv 推:哦~ 測好了就麻煩學長把網址弄上來吧^ ^ 感謝~ 0513 22:30
→ sa072686 推:一樣啊,換網址的是ACM 0513 23:18
→ t52101t 推:ACM Rank 是多久更新一次呀@@? 0513 23:23
→ sa072686 推:crontab不是我設的囧 0513 23:27
→ t52101t 推:似乎超過一星期沒更新了耶...... 0524 21:51
作者: sa072686 at 09/05/15
※ 本文轉錄自 [SKYLY] 看板
作者: SKYLY (與眾不同。) 看板: SKYLY
標題: [程設] 田神計算幾何題單
時間: 2009/03/30 Mon 08:41:18
UVa
193
142
270
184
137
361
675
681
109
10078
248
10173
11343
--
★sa072686 咦?這不是常識嗎XDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by SKYLY from 140.122.61.164 (台灣師範大學)
→ yuscvscv 推:借轉 0330 13:19
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/03/30 Mon 13:20:04
▲ SKYLY 改@2009/03/30 Mon 17:07:51
→ kub 推:田神那麼有名喔,怎麼大家好像都知道了@@ 0330 20:06
→ s864372002 推:來上過課嘛XD 0330 20:34
→ sa072686 推:借轉XD 0515 01:27
φ sa072686 轉:從 [SKYLY] 看板,于 2009/05/15 Fri 01:27:34
▲ sa072686 改@2009/05/15 Fri 01:28:08
→ zenixls2 推:轉借 0516 11:40
φ zenixls2 轉:到 [zenixls2] 看板,于 2009/05/16 Sat 11:40:54
φ jack1 轉:到 [jack1] 看板,于 2010/02/10 Wed 15:23:26
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:31:54
作者: Tommy at 09/05/17
嘿嘿
--
╭═══╤═══╮ ╰═╮ ╭═╯
│ │ │╭═和平,土地,麵包═╮ │ │
│ ╭═╧╧╮╤═╤═╮═╤═╤╧╮ │ │
│ │ ││ │ │ │ │ │ ╰═╤═╯
│ │ ││ │ │ │ │ │ │
╰╧╯╰═══╯╰ ╰ ╰ ╰ ╰ ╰ ─╯
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.137.3 (中滑一番)
→ sa072686 推:嘿嘿 0517 14:17
→ yuscvscv 推:我剛還以為SA大神突破ACM 1700題...... 0517 14:40
→ truth 推:樓上跟我想的一樣XD 0517 19:24
→ s864372002 推:所以是什麼意思啊@@ 0518 11:43
→ otis 推:搶到1700啊...... //鋼鋼你常做還不知道... 0518 19:08
→ suhorng 推:不是 Tommy ! 0518 19:19
作者: DJWS at 09/05/29
※ 引述《sa072686 (不再迷惘 奮力向前)》之銘言:
> DP 就可以了
> 設可能油量 m,站數 n
> 記錄到達每個站所有可能剩餘油量及其最小油價則空間複雜度 O(mn)
> 又對每個站枚舉到達該站時所有可能剩餘油量及從上一站過來的所有可能情形
> 每個站要 O(m^2) 所以 n 個站就是 O(n * m^2)
> 最差情形 100 * 200 * 200 = 400 萬
> 其實也還好,0.280上下會過
這一題其實用greedy更快!
車子每開一公里,就會耗掉從某個加油站所補給的一公升的油,
想像不同價格的油可以同時存放在油箱中,
我們可以選擇目前這一公里要使用哪一種價格的油。
greedy是:有便宜的油當然要先用最便宜的,然後才用貴的。
開一個10000+100+1的陣列,當作是總路途長度。
每個加油站的影響力是寬度200的線段,
由最貴的加油站開始,不斷將線段覆蓋在路程上,如果蓋得滿就是有解。
蓋完之後,掃一遍陣列,加總一下就知道總共花了多少錢。
(一開始的100公升的油,可想作是價格0元的油,寬度100的線段。)
(最後要剩100公升的油,可想作是車子還要多開100公里,總路程再加上100公里。)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.76.89 (中滑一番)
作者: yuscvscv at 09/06/12
我不管輸出啥他都給我PE耶= =
(即使亂output也一樣)
哪位學長能AC的?
--
燭火空燒,一腔熱血灑成空,
煙雨迷濛,滿江淚水隨雨落。
旁人紛紜,直道無心於書冊,
茫然無知,卻害孤火更消弱。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 192.168.4.14 (台狼一中桑靈餓)
→ devilqxect 推:舊code重傳也得到PE了. 0612 16:53
→ yuscvscv 推:是啊 我就是這樣= = 重點是我有幾次DEBUG忘了拿 0612 17:01
→ yuscvscv 推:也是PE= = 0612 17:01
→ t52101t 推:舊code也PE+1 0612 17:03
→ aytawgf 推:舊CODE PE++ 0612 17:49
→ truth 推:PE ++ 0612 23:23
→ t52101t 推:萬能的SA大神救救我們吧!!(拜) 0612 23:24
→ dreamoon 推:ACM病了,有些題目無論你傳什麼他都給PE... 0616 22:06
→ yuscvscv 推:是WA變成PE了嗎? 0616 22:10
→ dreamoon 推:就有special judge的題目都會被judge成PE 0616 22:13
→ yuscvscv 推:好像是這樣~ 0616 22:15
→ dreamoon 推:我想再過幾天就會好了,有人在Board反應了 0616 22:49
→ yuscvscv 推:嗯 謝謝學長~ 0616 22:49
→ suhorng 推:看來是好了, 120 可以AC了 0618 20:31
→ aytawgf 推:昨晚系統好像自動retry之前pe的code 0703 02:06
作者: yuscvscv at 09/06/29
※ 引述《yuscvscv (小可魚 @ TFcis11)》之銘言:
> 好像都沒再更新耶= =
> 能否請學長看看~
我都要300了 表上面怎還是25X?
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.135.190 (中滑一番)
→ sa072686 推:crontab大概有什麼誤會吧XD 0629 06:31
→ t52101t 推:我已經破百好久了...上面還是81... 0629 07:57
→ yuscvscv 推:可能吧 我已經破300了~ 0629 12:09
→ yuscvscv 推:建中他們是寫成手動更新 更新按鈕寫在網頁上 0629 12:11
→ yuscvscv 推:不過這有可能會造成有白目亂按XD 0629 12:11
→ sa072686 推:我手動更新了一下,發現有code忘了改,還處於相對路徑… 0629 15:01
→ dreamoon 推:compare to other person 的地方沒有改到耶? 0629 15:22
→ sa072686 推:咦沒改到嗎?… 0629 20:08
→ dreamoon 推:有,不過比較慢 0629 21:17
作者: dreamoon at 09/06/30
我翻一下題目:
一個城市裡有n個巴士司機,也有n個早上的巴士班次和n個下午的巴士班次,每個司機必須
被分派到一個早上的巴士班次和一個下午的巴士班次,如果一個司機機早上和下午的班次
總長度超過d,每一單位要多付給他r塊錢,現在你的任務是:分派每個司機一個早上和一個
下午的班次,使得所有司機要多付給他們的前的總和最少.
輸入:
每組測資第一行有三個數n,d,r如題目所述.接下來有兩行,第一行有n個數以空白分隔是
所有早上班次的長度,第二行也有n個數以空白分隔是所有下午班次的長度.
輸出:
每組測資輸出一個數字,代表至少必須多付的錢
參考解答:
你可以這樣做.算出任兩個早上班次和下午班次配對所需要多付的錢,於是就變成了最小值
二分圖配對問題了.這樣做大概可以過70%以上的測資(我猜)
接下來請按大寫E
greedy,把早上和下午的班次個按照常度排序
然後最大配最小的,次大配第二小的,依次類推即得
證明請用枚舉法,枚舉認兩組配對所有可能發生的情形即可證得
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dreamoon from 219.81.205.193 (福爾摩沙固網)
▲ dreamoon 改@2009/06/30 Tue 20:41:01
作者: truth at 09/07/02
> 4 sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 6 sa072686/glo
輕輕鬆鬆就6個人氣了
真是發炸了XD
--
到處搭訕別人是讓自己變的更發的最快路徑(大大誤)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by truth from 59.113.58.127 (中滑一番)
→ mp607 推:8了XD 0702 20:32
→ sa072686 推:人氣6很稀奇嗎?(抓頭) 0702 20:37
→ truth 推:威炸了!!!! 0702 20:45
→ t52101t 推:9了... 話說SA大神的話很適合當簽名檔... 0702 20:55
→ truth 推:9了 0702 20:55
→ truth 推:樓上上+1 0702 20:55
→ truth 推:sa專門提供簽名檔的 0702 20:56
→ t52101t 推:11了= = 0702 21:04
→ truth 推:我只看到一個大大發字 0702 21:05
→ truth 推:12~ 0702 21:06
作者: t52101t at 09/07/02
sa072686 個人 ◎ 南一中九七級小教學~* 歡迎ACM同好 發 sa072686/glo
記錄一下XDD
--
sa072686 推:人氣6很稀奇嗎?(抓頭)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by t52101t from 220.142.9.219 (中滑一番)
▲ t52101t 改@2009/07/02 Thu 21:05:10
→ truth 推:讓他持續整晚吧~ 0702 21:15
→ mp607 推:你們真的很閒耶= = 沒看過板主發喔orz.. 0702 21:19
→ truth 推:不見了啦.... 0702 21:28
→ truth 推:耶~ 回來了XD 0702 21:31
作者: suhorng at 09/07/04
這題沒什麼心機
即使暴力解出兩直線方程式再用係數加加減減也可以過
算出兩直線方程式有不錯的方法
就是 :
假設直線 ax + by = c 過兩點 A(x1, y1) B(x2, y2)
令 n = B - A = (x2-x1, y2-y1)
則 將法向量 n 的x, y倒過來,其中一個數加負號
就可以得到係數 a, b之一解 再帶入 A, B任一點可算出 c
( 用的是兩垂直向量內積為0 )
#include <cstdio>
void proc(int& dx, int& dy) {
int a=dx, b=dy, r;
while (b) {
r = a%b;
a = b;
b = r;
}
dx /= a;
dy /= a;
if (dx<0) {
dx = -dx;
dy = -dy;
}
}
int main() {
int n, x1, y1, x2, y2, x3, y3, x4, y4;
int i, j, a1, b1, c1, a2, b2, c2;
double px, py, d;
scanf("%d", &n);
puts("INTERSECTING LINES OUTPUT");
while (n--) {
scanf("%d%d%d%d%d%d%d%d"
, &x1, &y1, &x2, &y2
, &x3, &y3, &x4, &y4
);
a1 = y2 - y1;
b1 = x1 - x2;
proc(a1, b1);
c1 = a1*x1 + b1*y1;
a2 = y4 - y3;
b2 = x3 - x4;
proc(a2, b2);
c2 = a2*x3 + b2*y3;
if (a1==a2 && b1==b2) {
puts(c1==c2 ? "LINE" : "NONE");
} else {
d = a1*b2 - a2*b1;
px = (c1*b2 - c2*b1) / d;
py = (c1*a2 - c2*a1) / (-d);
printf("POINT %.2lf %.2lf\n", px, py);
}
}
puts("END OF OUTPUT");
return 0;
}
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.64.102 (中滑一番)
作者: suhorng at 09/07/06
一樣也是用硬爆,不過連環取餘數,就不大數了。
大概像:
int i = 1, counter = 1, n;
scanf("%d", &n);
while (i%n) { // 還不整除的時候
i = (i*10+1)%n; // 多補一位 1
counter ++;
}
printf("%d\n", counter);
然後……
沒建表跑 0.008
建表跑 0.076 Orz
順帶一提 答案最大好像到 9XXX 吧。
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.67.110 (中滑一番)
→ butterfly21 說:嗯對這樣比較好寫XD 0708 11:02
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [ AC ] ACM 11608 Accepted
時間: 2009/07/08 Wed 17:47:59
作者: sa072686 (sa) 看板: sa072686
標題: [ AC ] ACM 11608 Accepted
時間: Thu Jun 4 03:47:43 2009
有點空虛的一題…
給年初可用的題目數量,以及今年每個月能想出多少新題目,和每個月比賽要用多少題目。
第 n 月想出的題目,只能用於第 n+1 月或更以後的月份。
如果題目數量不足,則該月比賽取消。
輸出還蠻好玩的,夠就輸出 "No problem! :D",不夠則是 "No problem. :("
輸入看反多花不少時間…不然還蠻無聊的
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.240.202
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:54:20
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0016 Accepted
時間: 2009/07/08 Wed 17:48:08
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0016 Accepted
時間: Tue Jun 9 02:27:13 2009
好久前卡死的一題,我規則明明全對結果還一直 wa …
嗯,今天突然心血來潮重翻了題目,不知道是因為 google 還是我變弱了,
竟然 goo 下去都是遊戲下載!?Orz 不過後來有一篇遊戲下載竟然有規則看…
----
http://www.jkforum.net/thread-534057-1-2.html
撲克牌組大小順序
同花大順:
同花大順是排行最大的牌組,五張牌為順子A、K、Q、J、10,且五張牌的花色相同。如果
兩個玩家同時持有同花大順,則底池由兩人平分。
同花順:
與同花大順相似,由五張牌組成順子且為同花,但順子不是以A為首,例如:同花色的9、
8、7、6、5。如果兩位玩家都有同花順,持有最大牌點者贏得底池,如果兩個玩 家的最
大牌牌點相同,則底池由兩人平分。
四條:
四條由四張牌點大小相同的牌組成,如四個A或四個J。如果兩個玩家都持有四條,牌點大
者獲勝。如果兩位玩家所持四條牌點相同,則第五張牌(稱為踢子)大者獲勝。
葫蘆:
葫蘆由三張牌點相同的牌和另外兩張牌點相同的牌組成。如:三張K和一對10或三張4和一
對A。如果兩位玩家同時持有葫蘆,三條牌點較大者獲勝。在上述例子中,有三張K的牌組
較大。
同花:
同花由五張同一花色的牌組成,不論是紅心、梅花、黑桃或方塊皆可。如果同時有兩位以
上的玩家持有同花,持有最大單張牌者獲勝。如果有兩個玩家的最大單張牌牌點相同,則
比較其次大牌,以此類推,直到分出勝負為止。
順子:
順子由數字相連的五張牌組成,如6、5、4、3、2。如果兩位以上的玩家同時持有順子,
由持有最大單張牌的玩家獲勝。如果兩個玩家的順子的最大牌相同,則由他們平分底池。
順子的大小與花色無關。A既可以為順子中最大的牌,如A、K、Q、J、10,也可以為小牌
,如5、4、3、2、A,A是唯一可以如此使用的牌。
三條:
三條為三張牌點相同的牌,如三張J或者三張8。如果兩位玩家同時持有三條,由三條牌點
較大者獲勝。如果兩位玩家所持的三條牌點相同,第四張牌牌點大者獲勝。
兩對:
兩對為包含兩個對子的牌組,如兩張10與兩張6。如果兩位玩家同時持有兩對,持有最大
對子者獲勝。如果兩位玩家持有的最大對子牌點相同,則第二個對子牌點較大者獲勝。如
果兩位玩家的兩對牌點皆相同,則比較第五張牌(踢子),踢子大者獲勝。
一對:
一對為包含一個對子的牌組,如兩張A或兩張J,加上三張互不相同的牌。如果兩位以上的
玩家都持有一對,則對子最大者獲勝。如果兩位玩家持有的一對牌點相同,則比較剩下的
三張牌,有最大單張牌者獲勝。
散牌:
散牌為上述九種牌組以外的牌。如果兩位以上的玩家持有散牌,持有最大單張牌者獲勝。
如果兩人的散牌的最大單張牌相同,則比較次大牌,以此類推。單張牌的大小為A最大,
往下依序排列到2最小。
----
嗯,仔細地檢查了一下 code 發現並沒有錯,不過我這次注意到一件事了…
「a list of card(s) that will maximize the amount of money you could get
playing the hand.」
以前想說…這種下注下注的東西,拿同花順吃人跟拿散牌吃人,
一樣是贏的話根本沒差吧…不過還是很在意 MAXIMIZE 這個字眼,加上看到…
「如果兩個玩家同時持有同花大順,則底池由兩人平分。」
好啊,平手的話收入減半 Orz
因此把平手和獲勝分開看,如果能獲勝就不輸出平手
20397 0016 - No Fold’em Hold’em sa072686 Accepted C++ 0.120 2009-06-09
02:09:28
雖然讓他臣服了很開心,不過這也太白痴了吧 Orz
然後我真的覺得題目不能假設每個人都懂規則啊…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.240.202
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:05
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0021 Accepted
時間: 2009/07/08 Wed 17:48:59
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0021 Accepted
時間: Tue Jun 9 04:25:50 2009
嗯…有種只能左轉的太空螞蟻,地圖上有一些食物,牠必須一天吃一棵,
並且吃完就休息。一天可以走的距離無限,但只能轉向目的地直走過去,
只能左轉而且不能踩之前走過的地方。一天沒吃到東西就會死。
給 n 個點代表食物位置,問最多活幾天,以及走的路徑為何。
嗯,我不會證,…總之做無限次凸包,做完把那圈砍了,再繼續凸包,就 AC 了
說簡單點就是凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包
凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包
凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包凸包
只要凸包做對方向,凸包上一定不會有向右轉的情形,不然就不是凸包
拉完凸包後最後一個點右邊一定沒東西,不然也不是凸包
既然點都在左邊那不管哪個點都可以到,就假裝沒看到目前凸包的點,
對餘下的點再繞一個凸包,可以繞到沒點為止
所以輸出第一個數一定是 n,路徑就凸包到地老天荒,就會知道了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.240.202
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:15
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] NTUJ 0016 Accepted
時間: 2009/07/08 Wed 17:49:00
作者: sa072686 (sa) 看板: sa072686
標題: Re: [學術] NTUJ 0016 Accepted
時間: Tue Jun 9 04:31:31 2009
小翻一下好了XD
牌組順序看引文,德州撲克規則
兩個玩家決鬥,手上各有兩張牌只有自己知道,場面上有五張牌,
一張覆蓋,四張攻擊表示…啊不是,四張面向上
玩家各自拿手上兩張加場上五張共七張,選出最強組合的五張跟對方比
如果比較大就贏,可以拿走所有下注的籌碼,平手就平分籌碼
你現在可以用超能力改變蓋牌,但只能改變成牌堆中剩下來的牌,
問改成哪些可以讓玩家A贏最多錢?
※ 引述《sa072686 (sa)》之銘言:
: 好久前卡死的一題,我規則明明全對結果還一直 wa …
: 嗯,今天突然心血來潮重翻了題目,不知道是因為 google 還是我變弱了,
: 竟然 goo 下去都是遊戲下載!?Orz 不過後來有一篇遊戲下載竟然有規則看…
: ----
: http://www.jkforum.net/thread-534057-1-2.html
: 撲克牌組大小順序
: 同花大順:
: 同花大順是排行最大的牌組,五張牌為順子A、K、Q、J、10,且五張牌的花色相同。如果
: 兩個玩家同時持有同花大順,則底池由兩人平分。
: 同花順:
: 與同花大順相似,由五張牌組成順子且為同花,但順子不是以A為首,例如:同花色的9、
: 8、7、6、5。如果兩位玩家都有同花順,持有最大牌點者贏得底池,如果兩個玩 家的最
: 大牌牌點相同,則底池由兩人平分。
: 四條:
: 四條由四張牌點大小相同的牌組成,如四個A或四個J。如果兩個玩家都持有四條,牌點大
: 者獲勝。如果兩位玩家所持四條牌點相同,則第五張牌(稱為踢子)大者獲勝。
: 葫蘆:
: 葫蘆由三張牌點相同的牌和另外兩張牌點相同的牌組成。如:三張K和一對10或三張4和一
: 對A。如果兩位玩家同時持有葫蘆,三條牌點較大者獲勝。在上述例子中,有三張K的牌組
: 較大。
: 同花:
: 同花由五張同一花色的牌組成,不論是紅心、梅花、黑桃或方塊皆可。如果同時有兩位以
: 上的玩家持有同花,持有最大單張牌者獲勝。如果有兩個玩家的最大單張牌牌點相同,則
: 比較其次大牌,以此類推,直到分出勝負為止。
: 順子:
: 順子由數字相連的五張牌組成,如6、5、4、3、2。如果兩位以上的玩家同時持有順子,
: 由持有最大單張牌的玩家獲勝。如果兩個玩家的順子的最大牌相同,則由他們平分底池。
: 順子的大小與花色無關。A既可以為順子中最大的牌,如A、K、Q、J、10,也可以為小牌
: ,如5、4、3、2、A,A是唯一可以如此使用的牌。
: 三條:
: 三條為三張牌點相同的牌,如三張J或者三張8。如果兩位玩家同時持有三條,由三條牌點
: 較大者獲勝。如果兩位玩家所持的三條牌點相同,第四張牌牌點大者獲勝。
: 兩對:
: 兩對為包含兩個對子的牌組,如兩張10與兩張6。如果兩位玩家同時持有兩對,持有最大
: 對子者獲勝。如果兩位玩家持有的最大對子牌點相同,則第二個對子牌點較大者獲勝。如
: 果兩位玩家的兩對牌點皆相同,則比較第五張牌(踢子),踢子大者獲勝。
: 一對:
: 一對為包含一個對子的牌組,如兩張A或兩張J,加上三張互不相同的牌。如果兩位以上的
: 玩家都持有一對,則對子最大者獲勝。如果兩位玩家持有的一對牌點相同,則比較剩下的
: 三張牌,有最大單張牌者獲勝。
: 散牌:
: 散牌為上述九種牌組以外的牌。如果兩位以上的玩家持有散牌,持有最大單張牌者獲勝。
: 如果兩人的散牌的最大單張牌相同,則比較次大牌,以此類推。單張牌的大小為A最大,
: 往下依序排列到2最小。
: ----
: 嗯,仔細地檢查了一下 code 發現並沒有錯,不過我這次注意到一件事了…
: 「a list of card(s) that will maximize the amount of money you could get
: playing the hand.」
: 以前想說…這種下注下注的東西,拿同花順吃人跟拿散牌吃人,
: 一樣是贏的話根本沒差吧…不過還是很在意 MAXIMIZE 這個字眼,加上看到…
: 「如果兩個玩家同時持有同花大順,則底池由兩人平分。」
: 好啊,平手的話收入減半 Orz
: 因此把平手和獲勝分開看,如果能獲勝就不輸出平手
: 20397 0016 - No Fold’em Hold’em sa072686 Accepted C++ 0.120 2009-06-09
: 02:09:28
: 雖然讓他臣服了很開心,不過這也太白痴了吧 Orz
: 然後我真的覺得題目不能假設每個人都懂規則啊…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.240.202
→ jimmyken793 :還可以作怪勒XD 推 06/09 10:00
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:18
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0027 Accepted
時間: 2009/07/08 Wed 17:49:01
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0027 Accepted
時間: Mon Jun 15 11:45:29 2009
方法鳥鳥的,雖然 0.000 secs 不過還是覺得很鳥 Orz 徵求更好做法
簡譯
為了和外星人聯絡,所以要在人跡可及的星球上放置一些圖樣
使得外星人對地球感興趣而與人類聯絡,經過一番研究
發現給一方格圖後,其最佳塗黑方式即為最佳的圖
給定方格圖可能有部份格子是塗黑的
最佳塗黑方式為:在其上追加最少塗黑格子使得此圖每行每列均滿足以下條件
要嘛沒有格子被塗黑,要嘛被塗黑三格或以上
現在給你圖,問最少塗黑幾格可滿足以上條件
爛解法 O(nm) n, m 為長寬
先把每一列補齊到三格,補齊的格子數一定是正確的
再怎麼神的方法,每列也必須補齊到三格,否則一定失敗
補齊以有塗黑、但未滿三格的一行為最佳,滿三格或以上次之,未塗黑最差
接下來每行以同樣方式補齊,之後檢查每一格
如果不是原本就塗黑者,且所在之行、列均塗黑大於三格者,消去之
即為所求
若不消去,可能有以下反例
4 4
0001
0010
0100
1000
和
4 4
1000
0100
0010
0001
不過…我也不會證為何這樣補齊之後再消去會是對的 Orz
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.240.202
→ godgunman :其實我覺得挺厲害的(如果是正確的) 有非flow解XD 推 06/15 16:48
→ sa072686 :我覺得可能有反例,可礙於題目限制又生不出來 Orz 推 06/15 17:00
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:19
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] NTUJ 0027 Accepted
時間: 2009/07/08 Wed 17:49:02
作者: sa072686 (sa) 看板: sa072686
標題: Re: [學術] NTUJ 0027 Accepted
時間: Mon Jun 15 11:50:26 2009
嗯偷看了一下 tag,的確可以用 flow 沒錯…
思考果然鈍了,尤其是在 flow 上 Orz
不過我找不出用 flow 才會對的反例,如果我的方法是對的…會比正解快吧
不知道有沒有什麼反例?
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.240.202
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:26
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] NTUJ 0027 Accepted
時間: 2009/07/08 Wed 17:49:03
作者: sa072686 (sa) 看板: sa072686
標題: Re: [學術] NTUJ 0027 Accepted
時間: Mon Jun 15 11:57:14 2009
flow 的做法應該是…
bipartite matching
把 row 放一邊,column 放一邊
row 和 column 之間有邊,代表此點塗黑
一開始放一些不可逆邊,再來自行追加可逆邊把塗黑數補足
如果對面沒點可以匹配,就自行追加
※ 引述《sa072686 (sa)》之銘言:
: 嗯偷看了一下 tag,的確可以用 flow 沒錯…
: 思考果然鈍了,尤其是在 flow 上 Orz
: 不過我找不出用 flow 才會對的反例,如果我的方法是對的…會比正解快吧
: 不知道有沒有什麼反例?
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.240.202
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] NTUJ 0027 Accepted
時間: 2009/07/08 Wed 17:49:04
作者: dreamoon (夢月) 看板: sa072686
標題: Re: [學術] NTUJ 0027 Accepted
時間: Mon Jun 15 12:39:25 2009
※ 引述《sa072686 (sa)》之銘言:
: 方法鳥鳥的,雖然 0.000 secs 不過還是覺得很鳥 Orz 徵求更好做法
: 簡譯
: 為了和外星人聯絡,所以要在人跡可及的星球上放置一些圖樣
: 使得外星人對地球感興趣而與人類聯絡,經過一番研究
: 發現給一方格圖後,其最佳塗黑方式即為最佳的圖
: 給定方格圖可能有部份格子是塗黑的
: 最佳塗黑方式為:在其上追加最少塗黑格子使得此圖每行每列均滿足以下條件
: 要嘛沒有格子被塗黑,要嘛被塗黑三格或以上
: 現在給你圖,問最少塗黑幾格可滿足以上條件
: 爛解法 O(nm) n, m 為長寬
: 先把每一列補齊到三格,補齊的格子數一定是正確的
: 再怎麼神的方法,每列也必須補齊到三格,否則一定失敗
: 補齊以有塗黑、但未滿三格的一行為最佳,滿三格或以上次之,未塗黑最差
: 接下來每行以同樣方式補齊,之後檢查每一格
: 如果不是原本就塗黑者,且所在之行、列均塗黑大於三格者,消去之
: 即為所求
: 若不消去,可能有以下反例
: 4 4
: 0001
: 0010
: 0100
: 1000
: 和
: 4 4
: 1000
: 0100
: 0010
: 0001
: 不過…我也不會證為何這樣補齊之後再消去會是對的 Orz
照你的意思
以這個例子來講好了(你講的反例之ㄧ)
4 4
0001
0010
0100
1000
所以說我們一列一列再一行一行的想辦法補齊
那我補齊的順序如下
1101 1101 1101 1101 1101
0010 1110 1110 1110 1111
0100 -> 0100 -> 1110 -> 1110 -> 1111
1000 1000 1000 1110 1110
然後再消去嘛....照你所說的話好像是不論順序?
那麼我消去如打X的那個後
1101
X111
1111
1110
就沒有可以在消的吧?
可是顯然有更好的解
1101
1011
0111
1110
喏...
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.241.6
→ sa072686 :消第二列第一行啊…XD 推 06/15 13:36
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:28
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 196 Accepted
時間: 2009/07/08 Wed 17:49:05
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 196 Accepted
時間: Wed Jul 1 10:23:08 2009
莫名地裂了幾十次,都 RE,後來莫名地過了
大概太久沒寫沒思考,很多地方都沒考慮好,還是我寫大東西寫太多了?
一直注意架構沒去注意一些例外和小地方是怎樣
翻一下
給一張表格,上面要嘛給公式(=開頭)要嘛給數字(必為整數)
格子編號大概是
A1 B1 C1 ...
A2 B2 C2 ...
A3 B3 C3 ...
..
保證不會有循環,每格都一定能求出確切數字
輸出每格確切數字就好
其實也沒什麼難,字串 parsing + recursive 就很好過了,大概也沒必要 memoization
而且做和不做的 CPU time 其實都一樣,測資上得不到什麼好處
parsing 上小心數字的正負號,以及 column 的換算
Z = 26
AA = 27
ZZ = 702
AAA = 703
不會真如題目所述用到 18XXX 去,只到 999
不確定公式長度,就用動態配置,據討論板資料與實測證實是 1000 以內
不過懶得改了,不然拿掉 free() 和 malloc() 應該會挺快
目前第五名左右,0.028 secs
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ yuscvscv :時間多了個0...... 推 07/01 13:31
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:29
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11400 Accepted
時間: 2009/07/08 Wed 17:49:06
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11400 Accepted
時間: Fri Jul 3 18:59:44 2009
很.難.看.懂!
感謝姿君陪我討論題意很久XD,雖然題意一明白一整個秒殺掉
嗯…給你 n 種電燈,每種規格不盡相同
告訴你這 n 種電燈分別所需的電燈數、每個電燈的價格,以及所需電源的價格
求一種替代方案使得花費金錢最少,也就是電燈數不能變,但可以替換為亮度較高者
(也就是吃電比較兇),買一個電源就可無限供應該規格的無限數量電燈
以第一組測資為例,將電壓 100、120 者全改用 220 替代
所以花費就是電源 400 塊加上一個電燈 7 元 * (20+16+18) 個電燈 = 778 元
一看就覺得一臉 DP 樣,想都不用想就直接 DP 它了…
嗯,想必是先將電壓排序一下
接著一定是用某電壓吃掉某一段連續的所有電燈,那麼設狀態 dp[i]
表示以第 i 種電壓結尾時,所花的最少花費
則知轉移方程 dp[i] = min(dp[j-1] + cost(j, i))
cost(j, i) 為第 i 到第 j 種電壓的電燈均以第 i 種電壓代替之,如此即可解
基本上是 O(n^2) 不過還算快,0.144 secs 排名 10 上下吧
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ yuscvscv :耶~有翻譯了 推 07/04 13:32
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11403 Accepted
時間: 2009/07/08 Wed 17:49:07
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11403 Accepted
時間: Fri Jul 3 20:35:42 2009
嗯,這題挺容易的…只是題目敘述有問題
翻譯一下
給兩個二進位數字(沒有開頭 0、不會等於 0)求相乘結果以及直式運算過程
長度均不會超過 30
反正不會 30 所以直接轉掉塞 long long 乘起來再轉回來比較快
過程不是第一個數就是全部 0 但長度與第一個數一樣長
把 0 和 - 建一個長字串,用 printf("%*.*s") 來輸出就很好處理格式了
printf("%*.*s\n", i, j, s); 代表的意義是
將 s 字串擷取前 j 個字元,輸出成寬度 i 的格式並向右對齊,不足以空白補齊
所以算好長度後,每行都直接輸出就解決啦
我大概是因為遞歸轉答案格式並逐字輸出,所以跑得慢了一點
0.008 sec 剛好卡在第 21 實在有點難過…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ zenixls2 :0.008sec 22名是怎樣啊 純C++剛好卡你後面XD 推 07/03 23:35
→ sa072686 :嘿嘿,卡到你了 純C++要怎麼設定格式啊? 推 07/03 23:53
→ zenixls2 :我只用到cout.width()...剩下的塞string... 推 07/04 22:27
→ sa072686 :噢…printf()就很歡樂 推 07/04 23:02
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:32
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11404 Accepted
時間: 2009/07/08 Wed 17:49:08
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11404 Accepted
時間: Sat Jul 4 10:33:48 2009
想有點久,真是糟糕…
定義子序列為將一序列刪去 0 或多個字元
定義迴文為從左到右讀等同於從右到左讀
給一序列,試求其最長迴文子序列,若有多組解則輸出字典序最小者
…換了兩個解法,一個1.336,一個0.504,都有點弱小…
請強者們提供一下想法囉,以下是我弱小的解法
首先是通用的,求最長迴文子序列長度
以狀態 dp[p][q] = r 代表第 p 個字元到第 q 個字元,最長迴文子序列長度 r
若 p == q 則 dp[p][q] = 1;
否則,若 s[p] == s[q],dp[p][q] = dp[p+1][q-1] + 2
否則 dp[p][q] = max(dp[p+1][q], dp[p][q-1]);
很弱的解法一是,記錄字典序最小的最長迴文子序列為何
然後看從哪些狀態轉過來,就去比較那些狀態就可以了
怕 memory 不夠所以動態配置加上沒變的直接搬指標,還是 1.3 secs..
不做這些大概直接噴吧Orz
好一點的方法是,先算出長度,然後 greedy 順序硬搜每一個字元
就是先搜看看有沒有一對 p, q 使得 str[p] == str[q] 且 dp[p][q] = len
先把字串 hash 成 字元 => 位置 然後再去夾範圍縮長度慢慢搜
搜的時候以字母順序決定先後,自然就是字典序最小解
也就是先找 a 出現位置中是否有一對 p, q 使得 str[p] == str[q]
然後再求 b, c, d, ...
搜 p, q 也可以 greedy 取範圍內最左、最右
不過,記錄已搜過位置似乎不會比較快…
其實我在想會不會改遞推快一倍 Orz 懶得改了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ hrs113355 :之前單班計程的題目XD 推 07/04 10:46
→ sa072686 :ㄉㄉ說得是 推 07/04 11:10
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:55:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11405 Accepted
時間: 2009/07/08 Wed 17:49:09
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11405 Accepted
時間: Sat Jul 4 11:09:30 2009
不難寫,不過有點小苦工
給你一個西洋棋棋盤,你有一隻騎士k,和一隻國王K
對方有0~8隻P和0~8隻p,你必須判斷能否在n步內,用你的騎士k吃完對方所有P
但是你不可以踩自己家國王,也不可以吃p
嗯…從騎士出發的TSP問題,不過<=8隻時似乎DFS暴permutation是較佳的
對P=>P和k=>P都BFS一下,算一下距離再搜就可以了
剪了個DFS過程中如果超過當前最佳解,就0.024 => 0.004,第3名
不過再剪了個確定 yes/no 就 return 的之後,就變 0.008 了…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ godgunman :不要在追求那個0.002了 ... 推 07/04 13:23
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:15
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11407 Accepted
時間: 2009/07/08 Wed 17:49:10
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11407 Accepted
時間: Sat Jul 4 16:26:19 2009
無腦DP
給一數 n 試求 n 最少可以用多少個正整數之平方和表示之
無腦 DP 一下,設 dp[i] = j 代表數 i 最少可用 j 個正整數的平方和表示
則 dp[i] = min(dp[i-k*k]) + 1, for i-k*k >= 0
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:16
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11408 Accepted
時間: 2009/07/08 Wed 17:49:11
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11408 Accepted
時間: Sat Jul 4 18:29:22 2009
又亂放檢查碼爆炸了…不然還挺輕鬆
翻譯一下
給兩數 a, b 試求 a, b 之間(含 a, b)共有幾個 DePrime
定義是,該數的所有質因數和為質數
一臉 DP 樣,先篩法找質數順便記錄每個合數被哪個質數篩去
然後 DP 算從 1 ~ n 共有幾個 DePrime
路上就是 DP 算算看,設 n 被 i 篩去,則 n / i 若不整除 i
則 n 質因數和為 n/i 之質因數和,加上 i
否則就是 n/i 之質因數和,所以一路 DP 下去就是了
DPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDPDP
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:17
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11409 Accepted
時間: 2009/07/08 Wed 17:49:12
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11409 Accepted
時間: Tue Jul 7 19:49:07 2009
嘖嘖,機率一直算噴掉…這題 AC 率不怎樣,寫的人也少,AC 人數目前 20
翻譯一下吧
這是一個游玩人數必須恰為完全平方數的遊戲
場面上有 n^2 個格子,每個玩家被賦予一個 1~n^2 且不重複的 ID
排法大概長這種樣子
第一排 1
第二排 2 3
第三排 4 5 6
第四排 7 8
第五排 9
共 2n-1 行,玩家們被任意排在場上,第一排(1)和最後一排(9)的玩家
會拿到一顆球,接下來開始傳球,每次傳球只能傳給傳球方向上的下一排上的人,
一開始傳球方向是第一排傳往最後一排,最後一排傳往第一排
而傳給誰則是隨機選擇的(也就是傳給每個人的機率相同),傳球需滿足以下條件
一、對方必須位於傳球方向上的下一排
二、對方的 ID 必須比自己小
如果傳球方向上沒有下一排了,或是下一排沒人可以傳了,那麼:
如果這是第一次發生,則傳球方向反轉,然後繼續
如果這不是第一次,則不再傳這顆球
若兩顆球都停下不再傳,則遊戲結束
而現在問題是:指定一個玩家 p 以及場上玩家的排法,試求 p 拿過球的機率為何
將其機率乘上 10^9 取 floor 即為所求,例 0.123456789... 則輸出 123456789
一個傳球的例子:
9
5 8
2 6 7
1 3
4
則可能發生的情形有:
第一顆:
9521
9821
9861
98632
9871
98732
第二顆:
41
4321
----
提示:每種情形發生率不相等,不能以 p 拿到的情形 / 總情形數來計算
一看就長一臉 DP 樣,建圖之後把拿球的設 1
接著看傳給多少人,就把它切下去;比如說玩家 x 拿到球的機率為 y
而 x 可傳給 z 個人,則這 z 個人拿到球的機率各加 y/z
以狀態 dp[i] = j 表示球停在 i 手上的機率是 j
則若 i 可以傳給其它人,i 歸零,機率平均分散給可傳的人
也就是說,維持任意時刻表中所有數值相加仍為 1
最後表中即為遊戲結束時,球停在每個玩家手上的機率
那麼我們分開算兩顆球,設玩家 p 拿過第一顆球機率 p1 拿過第二顆是 p2
則玩家 p 拿過球的機率為 p1 + (1-p1) * p2
也就是拿過第一顆的機率,加上沒拿到第一顆但拿到第二顆的機率,才不會重複算
算一顆球時雖然因為會反轉,狀態記起來麻煩一點,所以我是這樣做的:
起始方向上一旦確認玩家 p 拿到這顆球的機率了,就直接歸零它,並把它記下來
這樣起始方向 p 就拿到球的機率就出來了,這條路後面不管怎麼開枝散葉都一樣
乾脆忽略以免反向重複計算,計算結束後表中存著球在每個玩家手上轉向的機率
這時再反向傳過去,一旦確認 p 拿到球的機率後記下並結束計算,
這即為起始方向 p 沒拿到球(因為起始方向拿到球的情形已經被歸零忽略)
並且在反向後拿到球的機率,所以兩者直接相加即為 p 拿到這顆球的機率了
總結:
則玩家 p 拿過球的機率為 p1 + (1-p1) * p2
其中 p1 為拿到第一顆球的機率,p2 為第二顆
玩家 p 拿過某顆球的機率為 q1 + q2
其中 q1 為起始方向拿到的機率,q2 為反向時拿到但是起始方向沒拿到的機率
q1 為在建表中正向時 p 拿到球的機率,q2 則是建表中一確認 p 正向拿到球機率後
將之歸零忽略掉後,計算完正向後再反向計算時所得 p 拿到球的機率
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:18
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: 387 Accepted
時間: 2009/07/08 Wed 17:49:31
作者: sa072686 (該我了。) 站內: sa072686
標題: 387 Accepted
時間: 2008/02/07 Thu 20:28:30
嗯,不難做…
將積木存成queue並將座標標準化為以最上面最左邊點為0,0
枚舉每一格,以左上填它,如果不能填就prune,否則找一個可填者往下
不能填的話,因為是用最左上不能填,所以不能填此格必空
填時將每一格算好座標,判斷能不能填就可以了。
注意每個都要用上。
0.050,第一名
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/02/07 Thu 20:30:51
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:19
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: 519 Accepted
時間: 2009/07/08 Wed 17:49:36
作者: sa072686 (該我了。) 站內: sa072686
標題: 519 Accepted
時間: 2008/02/07 Thu 20:30:44
最多6*6拼圖,看拼圖拼不拼得回去
四邊每邊共三種情形,凹、凸和平,平者要當邊緣,凹可接凸
不難做,直接搜每塊拼圖會爆掉…
因為最差每一格有36種情形,最差36格…
但是不難想到每一格填的拼圖一樣時,結果也會一樣
而且拼圖形狀最差3^4=81種,扣去FLAT不算只剩2^4=16種
在重覆性極大時可以加速非常多,不會多跑不必要的分支
0.070,名次不佳…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/02/07 Thu 20:32:31
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:19
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: 560 Accepted
時間: 2009/07/08 Wed 17:49:40
作者: sa072686 (該我了。) 站內: sa072686
標題: 560 Accepted
時間: 2008/02/07 Thu 20:37:28
難寫死了…
給一個數字,問小於它的最大合法數字
如果是三或七的倍數不合法,十進制表示中有三或七也不合法,連續三或七個數字以上
相同也不合法
如果不合法可以進行以下操作
可整除三時除以三
可整除七時除以七
十進制有三要拿掉
十進制有七要拿掉
十進制有連續數字相同,可一次拿掉三個
十進制有連續數字相同,可一次拿掉七個
基本上直接搜可,配合二元搜尋樹卡掉重覆,prune掉比當前解要小的
注意要一個個慢慢做,不要一次做太多
0.040,第一名
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:20
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: 274 Accepted
時間: 2009/07/08 Wed 17:49:43
作者: sa072686 (該我了。) 站內: sa072686
標題: 274 Accepted
時間: 2008/02/07 Thu 21:15:52
有貓屋有鼠屋,還有貓門鼠門,貓只能走貓門,鼠只能走鼠門
門是單向的,問貓鼠是否可能相遇?鼠是否可能出去又回來絕不會遇上貓?
兩次warshall(應該是三次,我把其中兩次縮在一起)
一次看貓,一次看鼠,一次看鼠但不能碰到貓的
結束(不過我有設貓屋可通貓屋、鼠屋可通鼠屋但第三次則鼠屋不通鼠屋
如果第三次鼠屋最後可通鼠屋則表示可安全出來再繞回去)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:20
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: 345 Accepted
時間: 2009/07/08 Wed 17:49:46
作者: sa072686 (該我了。) 站內: sa072686
標題: 345 Accepted
時間: 2008/02/08 Fri 01:08:02
給一堆電阻,算總電阻。
公式和國中的一樣,不會有這些公式算不出來的情形。
給的點編號可能很大,需重新編號。
給的電阻可能為零,這時記為連通卻不得拿去除。
記得重編給定的a和b
做法用遞迴慢慢分解,將兩端單向道路走完,然後遞中間的所有可能路徑
故遞兩點x, y,將x所有單向路走完、y所有單向路走完,然後遞所有x的下一個點
到y,即可。圖的部份,重複出現的電阻可先用平行公式縮掉
此遞迴法亦是將平行的部份內縮為一個節點,再個別處理之。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:20
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11410 Accepted
時間: 2009/07/08 Wed 17:49:48
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11410 Accepted
時間: Wed Jul 8 14:38:51 2009
算頗好寫也頗好想,只是題目理解得有點久
翻譯一下
兩個老朋友要互相通信,可是其中一個鍵盤有些鍵太常按所以按壞了(比如說WASD)
所以他們商量之後決定用一種加密的方式,叫 LA 加密
對於由一個合法的字元集中,所產生可加密的字串,需符合以下條件:
該字元集中 ASCII 最小者不得為第一個字元
LA 加密的方式為:依某一特定順序,寫下所有可加密字串,
從中找到所欲傳送的訊息,記下它是第幾個字串,假設是 i
然後剔除壞掉的按鍵,再寫下所有可加密字串,從中找到第 i 個字串
此字串即為加密後的字串。給欲加密字串及壞掉的按鍵,試求加密後字串
此特定順序為:長度小者為先,長度相同者則依字典順序先後
----
很 math 的一題,依排列組合方式計算位置,再反解此位置之字串即可
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:21
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 593 Accepted
時間: 2009/07/08 Wed 17:49:49
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 593 Accepted
時間: 2008/02/10 Sun 10:04:10
給許多island, host和tunnel,host屬於island,island間以tunnel相連
給許多group給host加入,傳封包時會傳給同group所有傳得到的人
記錄收到的封包,然後排序輸出。必須ttl夠才傳得到,而tunnel會影響傳遞時間
一開始floyd warshall,其它relabel硬解最後sort就好
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 183 Accepted
時間: 2009/07/08 Wed 17:49:51
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 183 Accepted
時間: 2008/02/10 Sun 12:41:13
有兩種bit map的表達方式,給其中一種,必須輸出另外一種。
bit map是所謂的點陣圖(.bmp),是一矩形以0和1表示這格是黑或白
另外一種方式是,如果整塊都同色,則以0或1代表這整塊,否則以D代表將之分成
四份(依序為左上、右上、左下、右下)再去判斷這些細塊。
若行列數相當,則平分;否則多的那行或列給在左者或在上者。行數或列數為1時,
只會分成兩份。
遞迴填圖或依規則分割求解即可,輸出用%.50s。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 254 Accepted
時間: 2009/07/08 Wed 17:49:54
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 254 Accepted
時間: 2008/02/11 Mon 01:32:41
給n和k,求n個環的河內塔第k次搬移後三根柱子分別放了多少個環
搬移方式,對於奇數次搬移將最小者往右搬
對於偶數次搬移則以不移動最小者為前提,做唯一一種可能的搬動
基本上可以遞迴來做,觀察一下可以每次切半,造成n-1個環的情況
將n==1,2,3,4寫出來就很好觀察了
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→ ben196888 推:原來有這種性質? //當初我很懶惰 所以沒有寫出來XD" 08/02/11
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [筆記] 254 Accepted
時間: 2009/07/08 Wed 17:49:56
作者: sa072686 (為未來舖路) 站內: sa072686
標題: Re: [筆記] 254 Accepted
時間: 2008/02/11 Mon 01:46:17
寫清楚點好了。
切半之後會發現,這兩半呈現一個對稱,而拿前面那一半去對照n-1的情形
會發現恰好是第一根柱子多一個環,後面那一半則要做交換的動作且n的奇偶會影響
這樣就可以遞迴求解了。
※ 引述《sa072686 (為未來舖路)》之銘言:
> 給n和k,求n個環的河內塔第k次搬移後三根柱子分別放了多少個環
> 搬移方式,對於奇數次搬移將最小者往右搬
> 對於偶數次搬移則以不移動最小者為前提,做唯一一種可能的搬動
> 基本上可以遞迴來做,觀察一下可以每次切半,造成n-1個環的情況
> 將n==1,2,3,4寫出來就很好觀察了
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:23
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 586 Accepted
時間: 2009/07/08 Wed 17:49:58
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 586 Accepted
時間: 2008/02/11 Mon 18:48:17
給一個程式,符合題目所給之語法,問時間複雜度為何?
其中必有空白或換行分隔之,深度最大10,不用long long
跟著LOOP遞迴即可,程式執行可視為係數1,0次方
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→ gba356 推:好酷的題目 08/02/11
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:23
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 618 Accepted
時間: 2009/07/08 Wed 17:50:01
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 618 Accepted
時間: 2008/02/12 Tue 22:02:10
卡了一天多…終於啊。
給螢幕和四個視窗大小,問可不可能將四個視窗透過搬移或縮放來佔滿整個螢幕?
搬移時必須讓視窗維持全部都在可見範圍,大小需為整數且只能等比例縮放。
以下轉載自討論板:
// Rs, Cs is row and column of the screen
// R[i], C[i] represents window[i] : (R[i],C[i])
int Rs, Cs, R[4], C[4];
// is it possible to fill the screen(r,c)?
bool rec(int used, int r, int c){
if the dimension(r,c) is negative, forget it
if one of the dimension(r,c) is 0,
check the used mask, return true if all are used
for all window i that has not been used yet:
resize window[i] to fit the column c if possible,
then try to fill the rest, return true if success
resize window[i] to fit the row r if possible,
then try to fill the rest, return true if success
if used mask is empty
resize the first window[0] to it's minimum dimension(rr,cc) using gcd
for i = 1 until (rr*i > Rs || cc*i > Cs) :
resize window[0] is resized to window[0] * i
for window j : 1..3 do
place window[j] to the right of window[0] if possible,
then try to fill the rest, return true if success
place window[j] to the bottom of window[0] if possible,
then try to fill the rest, return true if success
return false;
}
想法:遞迴,每次置入一或兩個視窗,然後將螢幕切成更小的矩形處理。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:23
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 338 Accepted
時間: 2009/07/08 Wed 17:50:03
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 338 Accepted
時間: 2008/02/13 Wed 09:09:03
據說AC率8%、26%,不過傳第三次過,而且兩次都是腦殘…忘了改llu、初始化不完全…
給你兩數x, y求用直式表達x*y的過程,其中x, y至多十位數,0只在必要時出現,
第一個dash line取x和y較大者之長度,第二個dash line只在和第一個dash line中間
有兩行或以上時才出現,和乘積一樣長度。過程是從y的低位到高位,每一位去乘
x的結果,如果是0則跳過不輸出。
用unsigned long long正好差一位,因為10個9的平方是20位,unsigned long long
也是20位,可是只有1開頭。不過沒關係,只差一位,還是可以用。
個位數另外記下來,餘下就可以用unsigned long long,配合sprintf()算位數、取每位數
再用%.*s和%*llu處理一下IO,87行就解決了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:24
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 312 Accepted
時間: 2009/07/08 Wed 17:50:05
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 312 Accepted
時間: 2008/02/13 Wed 11:50:52
也許我有苦工的天份(炸)
給一張圖,0表白,1表黑,並且放在邊邊的黑要被忽略。
圖上若是白的,且符合以下任一條件者要被編號:
一、它下面是白的,上面不是
二、它右邊是白的,左邊不是
其它請參考input/output格式
用囧rz的做法,string+pointer+memset()+sprintf()就秒了
善用指標做平移,memset()填字元,sprintf()填特殊格式
永遠把pointer指向字串尾,這樣可以快速打掉字串尾
另外整份先填好' ',就可以不用很辛苦地補空白
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:24
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 337 Accepted
時間: 2009/07/08 Wed 17:50:08
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 337 Accepted
時間: 2008/02/13 Wed 11:51:53
給一堆字串,裡面有許多控制字元,以及許多一般字元,求最後圖長什麼樣子?
暴力,照做就好。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:24
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 403 Accepted
時間: 2009/07/08 Wed 17:50:10
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 403 Accepted
時間: 2008/02/13 Wed 13:38:09
果然有苦工天份,又是一次AC。
給你兩種字型,以及幾種擺放法,求擺放之後整個頁面變成怎樣。
如果是空白則不會蓋過字,擺放時超出邊界的不管它,置中以31行為準
直接暴力,建表之後算座標直接暴力覆蓋上去即可。小心空白部份不會覆蓋到。
建表方式,直接複製下來列成五個字串陣列,然後透過計算座標即可得到。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 614 Accepted
時間: 2009/07/08 Wed 17:50:12
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 614 Accepted
時間: 2008/02/13 Wed 18:41:22
給你一張地圖,求以給定方式進行走訪的過程,能夠通向終點之路徑標上距離,
走過但不能通向終點則標問號。對每格都是依左上右下的順序走訪,不過得要沒有牆
擋住、並且不能走出邊界,也不能是已經走過的格子。
輸出煩了點而已,不過也還好,直接照著輸出就好了,不會太複雜。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 327 Accepted
時間: 2009/07/08 Wed 17:50:14
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 327 Accepted
時間: 2008/02/13 Wed 18:43:34
給一個C的表達式,求解以及運算之後各變數之值。變數只有至多二十六個,以小寫英文
字母表示之。同一表達式中不會有常數出現,也不會重覆出現。表達式需先
把所有在變數前的++和--拿掉,再拿掉變數後的++和--,最後計算。
不會有變數前面後面都有++--,也不會連續出現,也不會有模糊不清的情形
模擬即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 515 Accepted
時間: 2009/07/08 Wed 17:50:16
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 515 Accepted
時間: 2008/02/14 Thu 08:59:25
給一些條件,看能否找出一整數序列滿足所有條件。
每個條件給你n, m表示第n個加到第n+m個元素之和必須大於(或小於)一特定數字
以s(n)表示從第0個元素加到第n個元素之和,則知若x到y這段小於等於某數z
可寫作s(y)-s(x-1)<=z,同理s(y)-s(x-1)>=z可寫作s(x-1)-s(y)<=-z(同乘-1)
建立一個圖,若s(y)-s(x-1)<=z則建立一條邊y=>x-1,長度z。
如果有負迴圈,表示無解;否則有解。
因為,不可能有某一段必須<=k,又>k的,往回的路如果代表大於,往前的代表小於
則整段小於的不可以比往回的大於的還要短,否則不可能湊得出來。
如果比較長就表示必有解,如果不能構成迴圈也必有解。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→ sa072686 推:啊、忘了提,感謝seanwu學弟。 08/02/14
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:26
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 533 Accepted
時間: 2009/07/08 Wed 17:50:18
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 533 Accepted
時間: 2008/02/14 Thu 14:48:48
解一次方程式,不會有不合法的表達式,x次數不會超過1,過程中也不會超過
也就是說,不會在過程中先超過再消掉。也可能無解、或是無限多組解。
直接遞迴切割,用兩個數,一個代表x,一個代表常數項。
這裡用到了另一個指標的好用之處:
----
void recursion(char *s, int left, int right)
{
....
*px=...;
*py=...;
....
}
px = &lx;
py = &ly;
recursion(...);
px = ℞
py = &ry;
recursion(...);
....
----
不會因變數不一樣而要寫兩次函數。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:26
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 484 Accepted
時間: 2009/07/08 Wed 17:50:21
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 484 Accepted
時間: 2008/02/14 Thu 14:59:47
//因為某人的關係,這篇暫時密掉。
好,首先用了兩個觀念。
第一,我不希望花n、甚至log n的時間,得知我這數的出現個數,並+1。
=>善用可常數時間搜尋的hash,正好都是數字,直接雜湊到陣列去便可。
第二,雜湊表很大、我要依輸入順序輸出,而且表太稀疏我不想遍訪。
=>利用鏈結串列適用於稀疏情形,反正不需要排序之類的大動作,就只是增加。
綜合以上兩點,這題就在0.000sec AC掉了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:26
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 178 Accepted
時間: 2009/07/08 Wed 17:50:23
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 178 Accepted
時間: 2008/02/14 Thu 20:23:35
規則…沒空翻了。
52張牌,十六堆。不一定每堆用到。
如果點數在11以下,則兩張點數和為11可湊一對
如果點數在11到13,則湊齊JQK各一可湊一對
如果有任何一對被湊足了,那麼就拿牌一次覆蓋這些湊足的牌,否則另開一新的堆
然後,再去湊有沒有其它對。也就是說,覆蓋完一對牌之前,不得再找新的一對。
如果同時有多個對,則找擁有堆編號最小的那個對,並且與編號最小那張湊對的
若有多張也得挑編號最小的。
比如說有(2,5)、(3,4)、(0,15,16)則挑(0,15,16)
若0可湊12也可湊15,則0必須湊12。
接著若是選出的對為(7,11)則必須覆蓋(7,11)兩堆後才能重新計算新的對
即使覆蓋7後即有新對產生,仍要等到11覆蓋完。
小心剩餘牌無法覆蓋完的情形。
小心不是湊三張11到13即可湊對,需11至13各一。
如果需要開超過16堆,則GAME OVER
----
Cards are always covered in the same order they were dealt, that is left to
right, top to bottom. The first card covered shall be the eligible card
nearest the start of play. The second card covered (and also the third for a
triple) is its partner nearest the start of play
很好,重寫五六次都會錯意…最後一次是這裡會錯意,後來只好去爬板。
板上有人在前面會錯意,懷疑是這段會錯意,但這段倒是沒錯…
A triple of cards can be covered if they form the set {jack, queen, king}. If
no pairs or triples exist, a new pile is started.
這裡,他認為是JQK湊足三張即可,故JJJ亦算湊齊;而我則認定是JQK三張俱全方為湊齊
但上述那段…
由於前面有說,一對處理完前,不得另湊其它對;因此,這是在多對的情形下
要選擇先湊哪一對…
我認定是,「依牌被處理的順序來覆蓋它們,同一對裡自左至右、自上至下。
第一張需選擇最接近遊戲開始的。(最接近遊戲開始,即最早被放置。)」
正確是「牌被處理的順序皆依照相同、固定的次序,即自左至右、自上至下。
第一張需選擇依此順序最先找到者,之後選擇最先找到的可與之配對者。」
噢,誤好大…
也許兩句擺在一起,我會選擇較符合的第二句…
可是讓我自己看的話根本想不到第二句Orz
※ 引述《sa072686 (小sa)》之銘言:
> 規則…沒空翻了。
> 52張牌,十六堆。不一定每堆用到。
> 如果點數在11以下,則兩張點數和為11可湊一對
> 如果點數在11到13,則湊齊JQK各一可湊一對
> 如果有任何一對被湊足了,那麼就拿牌一次覆蓋這些湊足的牌,否則另開一新的堆
> 然後,再去湊有沒有其它對。也就是說,覆蓋完一對牌之前,不得再找新的一對。
> 如果同時有多個對,則找擁有堆編號最小的那個對,並且與編號最小那張湊對的
> 若有多張也得挑編號最小的。
> 比如說有(2,5)、(3,4)、(0,15,16)則挑(0,15,16)
> 若0可湊12也可湊15,則0必須湊12。
> 接著若是選出的對為(7,11)則必須覆蓋(7,11)兩堆後才能重新計算新的對
> 即使覆蓋7後即有新對產生,仍要等到11覆蓋完。
> 小心剩餘牌無法覆蓋完的情形。
> 小心不是湊三張11到13即可湊對,需11至13各一。
> 如果需要開超過16堆,則GAME OVER
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 181 Accepted
時間: 2009/07/08 Wed 17:50:26
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 181 Accepted
時間: 2008/02/14 Thu 20:23:58
規則複雜,用寫的太累Orz
五個人玩,發牌者自左邊那人發起,順時針發。
餘下兩張大者花色便是王牌。
比較依據是先比數字再比花色。
接著由發牌者左邊起手,之後是前一回合勝出者起手。
起手時會出點數最高者,若平手則王牌優先,否則依花色大者先
其他人則順時針「跟」,有同花色就出同花色中最大者
否則出最大的王牌,否則丟其它牌中點數最大者。平手則依花色大者先
之後這回合若有人出王牌,則王牌最大者勝。
否則和起手者同花色中點數最大者勝,與起手者不同花色又不是王牌則忽略
勝者拿到這五張牌,之後下一回合由他起手。
結束後,將吃到的牌中紅心點數相加,輸出分數。
點數:2~9依數字,T為10,J為11,Q為12,K為13,A為14
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 297 Accepted
時間: 2009/07/08 Wed 17:50:28
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 297 Accepted
時間: 2008/02/14 Thu 20:25:12
將一張32^2大小的圖依固定指令塗色。
p則為將當前塊一分為四,四塊的編號方式由1到4是從右上塊開始逆時針編,
也就是同於四個象限的編法。
e則將當前塊留空。
f則將當前塊塗黑。
問兩張圖重疊在一起後,黑色部份面積為何?
(註:同一塊區域只要有一張是黑的,那就是黑的。
如果兩張都是黑的,也只算作是一塊黑的。)
給的處理是前序走訪。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 462 Accepted
時間: 2009/07/08 Wed 17:50:30
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 462 Accepted
時間: 2008/02/14 Thu 20:25:48
橋牌計分法。規則如下
1. Each ace counts 4 points. Each king counts 3 points. Each queen counts
2 points. Each jack counts one point.
2. Subtract a point for any king of a suit in which the hand holds no
other cards.
3. Subtract a point for any queen in a suit in which the hand holds only
zero or one other cards.
4. Subtract a point for any jack in a suit in which the hand holds only
zero, one, or two other cards.
5. Add a point for each suit in which the hand contains exactly two cards.
6. Add two points for each suit in which the hand contains exactly one
card.
7. Add two points for each suit in which the hand contains no cards.
一、A算四點,K算三點,Q算兩點,J算一點。
二、若某花色只有一張K,扣一分
三、若某花色只有一張Q,其它牌在一張以內,扣一分。
四、若某花色只有一張J,其它牌在兩張以內,扣一分。
五、若某花色恰有兩張牌,加一分。
六、若某花色只有一張牌,加兩分。
七、若某花色沒牌,加兩分。
A suit is stopped if it contains an ace, or if it contains a king and at
least one other card, or if it contains a queen and at least two other cards.
如果一個花色只有一張A,或是有一張K和至少一張其它牌,或是有一張Q且至少
有兩張其它牌,則此花色stopped
* If the hand evaluates to fewer than 14 points, then the player must
pass.
* One may open bidding in a suit if the hand evaluates to 14 or more
points. Bidding is always opened in one of the suits with the most cards.
* One may open bidding in ``no trump'' if the hand evaluates to 16 or
more points ignoring rules 5, 6, and 7 and if all four suits are stopped. A
no trump bid is always preferred over a suit bid when both are possible.
如果手牌點數小於14,則PASS
如果手牌點數大於等於14,則選最多張的花色。
如果手牌點數排除規則五、六和七,仍大於等於16,且四個花色皆stopped
則稱no trump。並且如果與其它情形一起出現,no trump永遠優先。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:28
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10676 Accepted
時間: 2009/07/08 Wed 17:50:32
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 10676 Accepted
時間: 2008/02/14 Thu 20:26:23
給很多一維的點,求一個合理刻度長,使得總刻度數最接近給定目標
其中刻度必須包含0,並且要包住所有點,但不可以在兩端有多餘的點
也就是兩端點外不可以再有刻度點,若兩點皆在正向或負向為例外。
即0到小的那點間可以有刻度點在端點外。
刻度長須為1、2、2.5或5的倍數,再乘以10的n次方,n可為負。
若有多組解則挑刻度點最多者,再相同挑刻度長最小者
----
枚舉所有可能刻度。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:28
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 185 Accepted
時間: 2009/07/08 Wed 17:50:35
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 185 Accepted
時間: 2008/02/14 Thu 20:26:47
給三羅馬數字呈a+b=c形式
其中判斷羅馬數字而言,a+b是否為c
再判斷如果將之每位視作不同的阿拉伯數字,是不合、唯一或是多重
比如說v+v=x
那麼若v=1,x=2則成立;v=2,3,4、x=4,6,8亦成立
即,將同樣的字母代換為相同的阿拉伯數字後
加法是唯一解?或是多重解?或是無解
此外不可有開頭0,羅馬數字也不可有0
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:29
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 464 Accepted
時間: 2009/07/08 Wed 17:50:58
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 464 Accepted
時間: 2008/02/14 Thu 20:27:11
依語法,給一種句型,依這句型輸出東西。
比方說,
abc = "XDDDD" orz
orz = "abcabcabc"
則輸入orz的話輸出abcabcabc
輸入abc則輸出XDDDD abcabcabc
如果需要選擇,那看這是程式執行以來第幾次選擇
設第k次,有n種選擇,就選第k%n + 1種
empty不輸出任何東西,但完全不需輸出時也要換行。
其它請苦工。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:29
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 184 Accepted
時間: 2009/07/08 Wed 17:51:00
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 184 Accepted
時間: 2008/02/15 Fri 11:53:07
給許多點,求是否有超過兩個點的直線。最多三百個點,同一直線上不會有超過十個點。
用向量做n^3的枚舉就可以了。最後建表排序輸出。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:29
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 179 Accepted
時間: 2009/07/08 Wed 17:51:02
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 179 Accepted
時間: 2008/02/15 Fri 15:10:27
給三個字串,明文、密文A、密文B,試從密文A和明文推出加密方式再解密密文B後輸出。
加密方式為以一特定週期為間隔,將每一週期各自依一樣的方式重新排列
解密時若有多種週期可使明文加密至密文A,則取最小者;不會有同週期但卻有多種
排列方式皆可將明文加密為密文A的情形。注意明文長度並不一定等於密文A。
若是長度不足的部份將以'?'補齊之。若週期長度>=密文B長度則直接輸出密文B本身。
可知密文A是補齊過後的,故密文A必為週期之倍數。枚舉所有密文A之長度之因數,
然後嘗試所有可行排列方式。由於有可能有些週期會有非常多種排列方式,
直接用dfs枚舉其中一個特定週期的所有排列方式會太慢。不過可以用dfs換個方向搜尋,
每次枚舉所有週期中相同的位置,然後找同時符合所有週期的一種排列,以dfs往下搜。
從TLE => 0.000sec。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 256 Accepted
時間: 2009/07/08 Wed 17:51:04
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 256 Accepted
時間: 2008/02/16 Sat 10:53:32
其實是二星題。只是剛好被學妹問到、自己以前的code又是用直接輸出的囧
重寫了一份,0.000sec AC。
枚舉兩數p, q判斷pq和(p+q)^2是否相等的話八位數會太慢,即使預處理也一樣。
不過,若固定p更動q則可發現,p!=0時每次q成長1,p+q的平方都會成長至少3。
而q成長1,pq才成長1。所以,可發現兩者前者的成長速度本來便已較快,還會漸快。
後者成長速度固定而且慢,所以兩者除非後者一開始就較大,否則不可能有交集。
如果有交集,可知q較小時,pq是恆大於p+q的平方的。較大時,pq是恆小於p+q的平方的。
依此特性做二分搜尋,加上預處理仍可以0.000sec AC。
最差情形:八位數要枚舉10000個數,每數搜最差log 10000次,最差才14萬左右
也就是n log n,而且只要算一次,建表存起來之後再問到時只要直接輸出就可以了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 277 Accepted
時間: 2009/07/08 Wed 17:51:19
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 277 Accepted
時間: 2008/02/16 Sat 11:34:27
給一些字串,試將之重新轉為要求的格式。
照著模擬即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 385 Accepted
時間: 2009/07/08 Wed 17:51:21
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 385 Accepted
時間: 2008/02/17 Sun 09:11:46
給一串DNA序列,求解可合成之蛋白質?這DNA序列可能給的是反轉後的、或是
轉換過的。轉換是AT對調、CG對調,反轉是順序相反。表格中的U與T相同
建表時注意那些看起來像c的都是e,其中有一個Ile不是lle。
可以合成的蛋白質序列,以ATG起,UAA、UAG、UGA其中之一為結尾。
若ATG出現在序列中則依表格轉換。多組解任一皆可,無解則輸出指定字串。
直接暴力搜ATG,之後每三個依表格轉換、有結尾就輸出,沒就捨棄
要試著反轉與轉換,共四種情形。每次找到ATG搜下去不符合就可以換下一種,
不一定要以所有ATG做為開頭都試一次。不過其實兩種做法都會AC。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 390 Accepted
時間: 2009/07/08 Wed 17:51:23
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 390 Accepted
時間: 2008/02/17 Sun 12:38:51
囧,本來可以一次AC的,腦殘忘了把for(; ; );拿掉啊啊啊啊
給你一篇文章,以空白為分隔,拿掉標點之後分析每個字串的出現頻率。
將長度1到5的所有字串依長度分別處理,各自依頻率排序或合併,
輸出這些長度中頻率前五大者。若不足則全部輸出。
以%s讀入、砍標點後將之一一暴力取出,然後塞bst,EOF後遍訪一次。
遍訪時由於只需留前五大,故以插入排序法,超過五個就捨去。這樣便無需
抓一堆字串出來排序,應會大幅快於快速排序,也應較省記憶體。
其中把字元陣列的位置另外宣告,然後透過搬動指標的方式減少記憶體大量更動、複製
的時間,並以指標記錄尾端,直接在頻率相同時用sprintf()合併之,而不用每次
開strcat()之類的東西,或是每次開strlen()找尾端。
好題目,用了許多技巧啊…包括二元搜尋樹的森林、用指標搬移代替字串搬移、
以及用指標指字串尾來串接(這個BBS的CODE常用。)等等。
雖然TLE人次只有28(被我忘了拿掉for(; ; );搞成29了啊哈哈哈(毆))
應該是不需要用到這麼多技巧,不過還是拿來練習了(點頭)
寫起來根本就是指標海啊(心)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:31
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 554 Accepted
時間: 2009/07/08 Wed 17:51:25
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 554 Accepted
時間: 2008/02/17 Sun 17:55:06
AC率6%、24%的…腦殘題?(炸)
不過要一次AC也挺難的,我倒是PE了一次…第二次才AC。
給一個字典以及一份密文,試求將此字串解密回原文,原文的定義是字串中
包含最多字典裡面有出現的字那個。密文加密方式是以一個k值為準,
將空白定為0,字母分別定為1~26,則把文字n加密為(n+k) % 27。
輸出時每行要儘量長,但不得超過60個字元,並且不得有任何字被輸出在不同行。
最多只有27種可能,一一枚舉後把最高者輸出。輸出時小心行尾空白就可以避掉PE。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:31
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 689 Accepted
時間: 2009/07/08 Wed 17:51:27
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 689 Accepted
時間: 2008/02/17 Sun 18:49:34
傳了三次才過…AC率10%、32%。
給一些字串,對於每個字串需找出所有長度在3或以上的迴文,並依字典順序輸出。
字母以外的符號全部忽略,大小寫視為相同,輸出全為大寫。
如果迴文有重疊或甚至完全包含在另一迴文中也沒關係,一樣輸出;可是同一個迴文
不能輸出超過一次。如果一個迴文剛好是另一個迴文的中心,則不論它是否有在其它
地方出現,都不能夠輸出。比如說有找到迴文AAAAAA,則迴文AAAA不能被輸出。
但是AAAAA可以,雖然完全包含在內,但不是正中央。而AAA不行,因它在AAAAA正中央。
直接開BST做n^2暴力枚舉,不過枚舉時由小到大建表,每次把小的擋掉、大的加進去。
也就是說在加小的的時候,就在上面做個記號,以後遍訪BST時有記號的就不輸出。
這樣就可以完美解決這個問題了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:31
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 177 Accepted
時間: 2009/07/08 Wed 17:51:29
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 177 Accepted
時間: 2008/02/17 Sun 22:19:23
將一張紙由右往左一直對折,每次對折的折痕都要平行。經過n次之後將每道折痕
攤開成90度(折起來是180度),輸出折痕的樣子。
觀察折痕的轉彎方向,可推出遞迴式。畫完之後調整然後輸出。亦可先預處理。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:32
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 547 Accepted
時間: 2009/07/08 Wed 17:51:31
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 547 Accepted
時間: 2008/02/18 Mon 11:33:44
想太周到也有錯…
一個DDF是由一串連續的正整數所組成。第一個的所有正因數的每一位數數字之和
產生第二個數,而第二個又以同樣方式產生第三個,…依此類推。
然而,DDF的長度取決於可能在某一項n其下一項亦是n,因此在它之後每一項皆為n。
這時說DDF的長度是n。給一範圍,求此數字範圍內以哪個數字為開頭的DDF最長,並
印出該DDF。第n項之後重覆的數字只印一次。
超陰險,首先以n、m為開頭便表示n可能大於m,但是交換時注意要先輸出。
另外,題目明講第一項大於1,可是其實第一項是有可能為1的。
其它,用dp建一下表就好了。想偷懶可以用sprintf()來取得數字每一位數之值。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→ sa072686 推:噢不,我錯了,用取餘快三倍而且只要一行… 08/02/18
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:32
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 222 Accepted
時間: 2009/07/08 Wed 17:51:33
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 222 Accepted
時間: 2008/02/18 Mon 15:42:22
給一堆加油站,它們在同一條路上。問從起點到終點最小花費為何?已知必有解。
一旦停留在加油站就要額外支出兩元給司機吃東西,並且油一定要加滿。
除非油不足以到下一個加油站,否則在油量大於一半時不得加油。
到達終點時油量多少都無所謂,能到就好。一開始在起點一定先把油加滿。
dp,建一張表表示從起點到該點之後加滿油的最小花費。
則知從i到j的最小花費:若i到j會花大於等於一半的油,則可以直接到j,然後加滿
否則忽略它。如果i到不了j,但i可先到k、但i到k油花不到一半,卻不夠k到j
這時可先到k加滿再到j,注意i<k<j。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:32
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 427 Accepted
時間: 2009/07/08 Wed 17:51:36
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 427 Accepted
時間: 2008/02/18 Mon 22:00:45
給一個平面鋼琴的長寬以及一個直角轉彎的走廊兩端寬度,求是否能夠將鋼琴搬過去。
枚舉0到pi所有角度,如果所有角度均可在轉角處放得下,就搬得過去。
http://zion.tfcis.org/~sa072686/ACM/Pic/427.jpg
http://zion.tfcis.org/~sa072686/ACM/Pic/427_2.jpg
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/02/18 Mon 22:01:42
→ sa072686 推:咦、修到誰的推文了嗎(驚) 08/02/18
→ gba356 推:喔喔,是我的,圖開不了(揮揮) 08/02/18
→Modify: sa072686 at 2008/02/18 Mon 22:04:15
→Modify: sa072686 at 2008/02/18 Mon 22:05:42
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:32
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 407 Accepted
時間: 2009/07/08 Wed 17:51:41
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 407 Accepted
時間: 2008/02/19 Tue 11:21:59
給一堆齒輪,其中一個是主動力來源,齒輪有分內外兩圈,如果齒輪重疊
則輸出錯誤訊息,有其中一齒輪有兩個或以上的齒輪拉動它,且方向或速度
任一種不一樣的話,輸出錯誤訊息。齒輪重疊的錯誤訊息優先。如果是停止的
也就是速度為0,則輸出warning。速度算法是,齒輪半徑與速度之乘積
等於對方齒輪半徑與速度之乘積變號。拉動與否是看有無剛好相切。
如果沒有錯誤發生,則輸出所有齒輪的轉動方向與速度。
直接dfs硬掃,從作為動力者開始找所有相連者,如果還沒確定速度就填上速度,
然後遞迴去搜。如果已確定速度的就和它比較速度看看,不一樣就return掉,
然後輸出錯誤。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:33
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 824 Accepted
時間: 2009/07/08 Wed 17:51:43
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 824 Accepted
時間: 2008/02/19 Tue 12:24:32
給你目前位置、目前面向以及周圍八格的情形,求下一步要往哪個方向走。
模擬一種探測用的機器人,會從海岸上某點開始,右邊是海洋,然後繞過一遍海岸線
再回來。現在不要求寫走訪海岸的程式,但要求寫出要在每一點執行一次判斷
要怎麼走的程式。
基本上greedy一下,從d-2繞到d+6,先繞到就輸出然後break就好了
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:33
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 209 Accepted
時間: 2009/07/08 Wed 17:51:46
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 209 Accepted
時間: 2008/02/19 Tue 20:59:10
給一個正三角形的圖,將點由上至下、由左至右標上編號,給一個點集合
試求能否構成三角形、平行四邊形或六邊形?而且這些形狀必須要每邊皆等長,
且必須使用圖上有的邊才行。
由於給的點沒順序性,所以我直接用DFS衝了…可將之攤成直角三角形
然後點用二分搜尋找它所在的那層,再計算在哪格,便可算出座標
則斜率正負一、無窮大或是零的時候是使用圖上的邊。計算長度時,
看座標上哪一維不相等就回傳哪一維的差,就是長度。在做DFS時
取第一個點為準,枚舉任一點與第一點之距離為準,搜所有相連且與這距離相等的點
然後枚舉這些點再去與其它點相連,…直到最後一個點,再看它與第一點即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/02/19 Tue 22:23:35
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:34
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 405 Accepted
時間: 2009/07/08 Wed 17:51:48
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 405 Accepted
時間: 2008/02/20 Wed 10:18:14
感謝 AikoSenoo 協助翻譯∼
給一堆MTA,以及相連的MTA和table。接下來是一堆訊息,每封訊息是從某MTA開始,
每次都找所有相鄰的MTA,當table中的四項全部符合時可將訊息丟給該相鄰MTA。
如果同時有多個符合,只傳給第一個符合者。看最後是形成cycle(有人重覆收到
同樣訊息)或是成功接收(自己傳給自己)或是停住(沒人可以傳了)。
碰到萬用字元('*')時一律判定為符合。
暴力模擬即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→ AikoSenoo 推:辛苦你了Q////////Q" 08/02/20
→ sa072686 推:咦?多虧了妳的幫忙呢,應該是辛苦妳了才是∼ 08/02/20
→ AikoSenoo 推:那是答客特哀′▽`) 08/02/20
→ sa072686 推:還是要感謝妳啊XD 08/02/20
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:34
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10017 Accepted
時間: 2009/07/08 Wed 17:51:50
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 10017 Accepted
時間: 2008/02/20 Wed 12:56:51
用字串代替堆疊的資料結構,可以做得很快。
//不過運氣可以使跑不快的程式跑很快(炸)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:35
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 645 Accepted
時間: 2009/07/08 Wed 17:51:52
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 645 Accepted
時間: 2008/02/20 Wed 13:10:24
//現在沒有RF了嗎…開freopen()忘了拿掉還TLE?唔、不過又忘了拿for(;;)了…TLE兩下
給你一堆資料夾和檔案的名稱,資料夾名以d開頭,檔案名為f開頭。
如果碰到資料夾,則該資料夾的內容需先輸出。檔案必須在資料夾之後依檔名排序輸出。
資料夾內容從資料夾名開始,到"]"為止。以'*'為一組測資結束,以'#'為輸入結束。
資料夾依輸入順序輸出即可。
直接遞迴做,碰到d直接遞迴往下,然後碰到']'或'*'就return。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:35
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 635 Accepted
時間: 2009/07/08 Wed 17:51:54
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 635 Accepted
時間: 2008/02/20 Wed 14:14:32
模擬類似170那種紙牌遊戲。給一副牌,求環狀平移一至五十二張之下,
有幾種發牌方式可以獲得勝利。玩法是分成十三堆每堆四張,十二堆擺成圓,
分別擺在時鐘十二個小時的方位,一堆擺在中間。A代表十一點鐘,2到10代表2到10點鐘
而J是一點鐘,Q是十二點鐘,K是中間。玩法先從中間堆取最底下那張,
然後看數字翻開放到對應的那堆上面,再從那堆拿最底下那張。直到對應堆空了為止,
如果全部牌都被翻開則勝利,否則失敗。每次發牌先發一點鐘、兩點鐘、…、到中間堆
先發的放最底下,每次發四張牌。也就是說一堆堆發、共發十三次,而不是一張張。
直接暴力模擬即可。剛開環狀開memcpy結果忘了改陣列大小,wa了一次…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:35
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 647 Accepted
時間: 2009/07/08 Wed 17:51:56
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 647 Accepted
時間: 2008/02/20 Wed 16:23:45
模擬一個類似大富翁的遊戲。一開始給一堆骰子點數,每個遊戲都用同樣的點數。
每個遊戲一開始就從第一個數開始用。一開始每個玩家都在編號0的地方。
然後有1~100這麼多塊地方,其中有些可能有相連、有些可能有特殊事件。
如果a格連到b格,則踩到a格會馬上跳到b格,可能前進也可能後退。
如果有特殊事件,有可能是暫停一回合或是可以再多丟一次骰子。
先走到100的人贏,但是如果擲骰子點數加上現在的位置超過100的話,則這次移動
不算,並且結束這個回合。給的骰子點數不會超過一千個,但一定夠用;玩家
最多六個。
直接暴力模擬即可。跳格子之後不會碰到特殊事件,但是有連續碰到特殊事件的可能。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:36
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 419 Accepted
時間: 2009/07/08 Wed 17:51:58
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 419 Accepted
時間: 2008/02/21 Thu 12:24:54
給目前日期、會議次數、會議時間和所有要參加會議的人的行程,求滿足所有人皆有空
參加的會議時間,需在星期一至五的九點到十七點,並且要足夠的次數,不夠要輸出
訊息。行程以日期、起始時間和結束時間來表示,起迄時間及時間間隔均以15分為單位。
行程不會早於九點、晚於十七點,不會距現在一年以上,也不會在目前日期之前。
可行會議時間必須連續的會議時間所有人都有空、只能是星期一到五、最早九點開始,
最晚十七點開始。一旦被定為會議時間便不可以再作為另外一次會議的時間,
距今也不得超過一年。時間依距現在早晚排序,若次數不足要輸出訊息。
建表schedule[13][32][18][46]代表某月、日、時、分時有沒有人有行程,
以15分為單位建表、枚舉即可。記得會議結尾時間點是可以接上行程的、
行程結尾時間點可為會議開始。所以填行程時不用填結尾時間點,搜會議時間時
不用管結尾時間點。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:36
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 584 Accepted
時間: 2009/07/08 Wed 17:52:00
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 584 Accepted
時間: 2008/02/22 Fri 00:01:28
給你一場保齡球賽的記錄,求分數為何?一場分十局,每局有兩次機會。
如果兩次機會後沒全擊倒,則該局就得到與擊倒球瓶一樣多的分數。
若第一球便全倒,則該局結束並得到十分、並得到接下來兩球的分數。
若第二球才全倒,則該局可得到十分,並得到接下來一球的分數。
第一球全倒記為X,第二球才全倒記為/。
若在最後一局之後,仍有全倒的bonus在,則可以再追加一球或兩球。
在十局之後追加的,本身不算在分數中,只算在全倒所應得到的分數。
比如說第十局得到X,則可追加兩球,這兩球本身不算分、但可透過第十局的X追加分數
如果第十局得到/或第九局得到X、第十局沒得到X,則可追加一球。
追加的兩球如果第一球是X,則第二球仍給十個球瓶;否則第二球不補球瓶。
比如說該追加兩球,第一球打掉三個瓶子,則第二球只剩七個瓶子。
給的字串中每個數字或X、/之間皆以一個空白分隔。
直接暴力模擬,可用三進制數字來做bonus的部份,比如說以120代表當前球沒bonus、
下一球被算兩次bonus、下下一球被算一次bonus。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:36
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 837 Accepted
時間: 2009/07/08 Wed 17:52:02
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 837 Accepted
時間: 2008/02/22 Fri 19:28:31
給一堆透明板子,光線透過時會被吸收一定的比率,每個板子的位置和比率都不太一樣。
板子視為線段,不會有垂直的板子,也不會有板子的端點位於同一直線上。
試求地面每一段所能接受到的光線比率,光線的比率為1.0乘上所有經過的板子的比率。
可以假設所有光線都是由上到下的垂直線。
枚舉每一段間隔,取中點判斷透過哪些板子,取乘積即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:36
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 758 Accepted
時間: 2009/07/08 Wed 17:52:05
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 758 Accepted
時間: 2008/02/25 Mon 10:24:26
有個遊戲有三種顏色的球疊成10*15的長方形,然後每次可以消去擁有兩個或以上
相連的同顏色的球。相連是指一顆球擺在另一顆球的上下左右四個方向時。
消去時可以得到消去的球數減去2再平方的分數,如果全部消光還可以得到額外一千分
消掉之後,如果某顆球下面是空的,則它會往下掉;如果某一直行是空的,
則在它右邊的會往左移。遊戲持續到沒有半顆球、或是剩下的都沒有兩個或以上相連為止
試將策略定為每次都消最大的區域,然後模擬看過程中怎麼選擇、得分情況等等,
然後輸出。如果有一樣大塊的區域可選,則選最左邊的;如果還是一樣就選最下面的。
暴力模擬,floodfill然後暴力調整就好。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:37
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10171 Accepted
時間: 2009/07/08 Wed 17:52:07
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 10171 Accepted
時間: 2008/02/25 Mon 16:51:13
給許多條路,可能為單行道或是雙向道路,並且有些只給30歲以下的走、有些只給
30歲或以上的走。每條路可能都會消耗不同的體力,現在給你一個25歲的人和一個
40歲以上的人的所在位置,試求可行的見面地點使得消耗體力和最少。如果有多個
可行的見面地點,則依序輸出。地點以大寫字母代表。如果本來就在同一地點,
則不需花費任何體力。
反正點不多,用warshall還是很快。分別求出兩種路的最短路徑,然後枚舉每個點。
不過要注意的是有可能兩點間會有多條路,取耗體力最小者即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:37
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 796 Accepted
時間: 2009/07/08 Wed 17:52:10
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 796 Accepted
時間: 2008/02/25 Mon 20:06:38
給一無向圖,以隨機順序給予每一點及其直接相連的點,A有連到B則B亦必連到A。
如果打掉一條邊之後,會將這個連通的圖分成兩個不連通的子圖,則稱此邊為critical。
給的圖未必全部連通,甚至可能沒有任何邊和點。試求critical邊的數量,
並依小的端點由小到大排序、相同再依大的端點由小到大排序,一條邊應該先輸出
小的端點,並且只要輸出一次。
如果在打掉了A=>B這條邊之後要分成兩個不相連子圖,則A、B必分在不同子圖。
因此打掉A=>B之後用任何方式(DFS、BFS佳)走訪A,若能到得了B則非critical,
若到不了則為critical。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:37
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10596 Accepted
時間: 2009/07/08 Wed 17:52:12
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 10596 Accepted
時間: 2008/02/25 Mon 22:18:06
給一張圖試求是否有Euler Cycle可以遍訪所有點,其中邊是雙向邊。
先看是否每個點的degree都是偶數,再看是否全部點皆連通即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:37
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 425 Accepted
時間: 2009/07/08 Wed 17:52:14
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 425 Accepted
時間: 2008/02/26 Tue 10:33:51
給一篇文章及加密後的密碼,已知密碼字數介於5到8之間且為文章中某兩個單字
再加上中間一個特殊字元(0、2、4、8其中之一)組成,已知不論文章中單字
是大寫小寫,一旦用了一定是用全部小寫字母方便輸入。加密函數名為crypt(),
只要直接呼叫即可,不需要自己動手寫。試求原密碼為何。已知使用的單字,
長度一定大於1,而且加密後的字串前兩字與加密函數的第二個參數一致。
單字的定義是文章中以非字母字元或行首行尾作為兩端的連續字母。
已知密碼長度5~8,扣去中間特殊字元,另一單字最短2個字元,因此單字長度
最長不得超過5個字元。所以如果長度不在2到5之間就不用考慮,接著是
如果直接枚舉任兩個單字會造成TLE,可是只枚舉長度相加和等於7的,
就可以在1秒左右AC,也就是說很奇怪的是答案長度一定是8。
然後用雜湊把重覆的單字擋掉,剩0.090,只枚舉長度相加和等於7者剩0.050
用二元搜尋樹卡重覆再走訪則要0.060,如果在做的時候便先求解,
一旦得解便不再處理輸入的話,配合雜湊卡重覆可做到0.030
不過前面一堆0.000、0.010的不知道是怎麼做的…
都已經拿完美雜湊去卡重覆了,竟然還沒辦法那麼快
雜湊對於長度5的字串可完美雜湊,長度5、純英文字母不分大小寫是27^5這麼多種。
雖然14348907看起來有點危險,怕爆的話用bit-mask一個bytes存8個,
用int就可以直接存取hash[n>>5] & (1 << (n%32)),只要開50萬就足夠。
不過,事實上這題怪事奇多。
這很詭異,但是我在大寫轉小寫時手誤寫成-=32一樣會過,改成+=32還是AC,
再改成+=18還是AC,也也許最後答案在原文中根本就不是大寫。
然後雜湊沒弄好出現碰撞之類的、一堆怪怪的錯誤還是AC…
密碼長度5到8,可是默認只有長度8竟然也會AC。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→ gba356 推:說不定本題不用輸入輸出就可以過了(?) //0.000 AC(?) 08/02/26
→ sa072686 推:剛試,沒辦法… 08/02/26
→ sa072686 推:而且其實我修改的過程也有wa個幾次… 08/02/26
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:38
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 366 Accepted
時間: 2009/07/08 Wed 17:52:17
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 366 Accepted
時間: 2008/02/26 Tue 19:39:23
給n*m的布,要將其切成n*m塊1*1大小的布,其中最多可重疊k塊一起切,重疊方式
任意,可調整到一刀下去一定可以切好兩塊。切的長度不一樣大也沒關係,可是
不可以對折。給k, n, m求最小刀數。
據說有通式解,不過我想不到,只好拿greedy配合heap硬衝,還是0.000。
已知每次切都切越多塊越好,所以切的時候每次都切最大塊的。
因為大塊的刀數多,所以先切,就是盡量慢一點切出1*1。
然後用heap每次取k塊出來,記得取完才開始切,否則切完後丟回去會再被pop出來。
判斷大小時用刀數判斷(n*m-1),切的時候切非1那一維。
如果都不是1則沒差,設一塊大小n*m,切成(n/2), m和n, (m/2)兩種方式來比較,
依大小公式來算,(n/2)*m-1 = n*m/2-1,n*(m/2)-1 = n*m/2-1,都是一樣的。
這樣設大小n*m則最差情形n*m log (n*m)。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:38
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [筆記] 366 Accepted
時間: 2009/07/08 Wed 17:52:20
作者: sa072686 ( Accepted ) 站內: sa072686
標題: Re: [筆記] 366 Accepted
時間: 2008/02/26 Tue 20:24:48
唔、慢著…
切的時候是切成n,((m+1)/2)的話…先切哪裡好像會不一樣?
因為奇偶不同,切了可能會兩邊不等大…
不過不管怎樣只要每次切對半就可以AC,不知道到底是如何…
※ 引述《sa072686 ( Accepted )》之銘言:
> 給n*m的布,要將其切成n*m塊1*1大小的布,其中最多可重疊k塊一起切,重疊方式
> 任意,可調整到一刀下去一定可以切好兩塊。切的長度不一樣大也沒關係,可是
> 不可以對折。給k, n, m求最小刀數。
> 據說有通式解,不過我想不到,只好拿greedy配合heap硬衝,還是0.000。
> 已知每次切都切越多塊越好,所以切的時候每次都切最大塊的。
> 因為大塊的刀數多,所以先切,就是盡量慢一點切出1*1。
> 然後用heap每次取k塊出來,記得取完才開始切,否則切完後丟回去會再被pop出來。
> 判斷大小時用刀數判斷(n*m-1),切的時候切非1那一維。
> 如果都不是1則沒差,設一塊大小n*m,切成(n/2), m和n, (m/2)兩種方式來比較,
> 依大小公式來算,(n/2)*m-1 = n*m/2-1,n*(m/2)-1 = n*m/2-1,都是一樣的。
> 這樣設大小n*m則最差情形n*m log (n*m)。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:38
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 630 Accepted
時間: 2009/07/08 Wed 17:52:22
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 630 Accepted
時間: 2008/02/26 Tue 21:48:04
給一個字典以及許多字,問這些字中,可由哪些字典有的字重新排列而成。
直接建表記錄每個字母出現次數,然後枚舉之輔以memcmp()可秒之。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→ gba356 推:memcmp() 用上癮了吧XD 08/02/26
→ sa072686 推:上癮可久了(炸) 不過通常還是strcmp()較受寵愛∼ 08/02/26
→ gba356 推:其實 memcmp()+strlen() 比較吃香.. 08/02/27
→ gba356 推:因為 strcmp() 還要再重新取一次長度,但是 memcmp() 比較 08/02/27
→ gba356 推:不出字典序.. 08/02/27
→ sa072686 推:我一直以為它是比到其中一者為0為止,除非有負字元 08/02/27
→ sa072686 推:否則0都會比較小∼ 08/02/27
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:38
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 629 Accepted
時間: 2009/07/08 Wed 17:52:24
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 629 Accepted
時間: 2008/02/27 Wed 07:58:37
給一個鄰接矩陣,只有在左上右下這條主對角線上方給予訊息,表示誰和誰不一樣。
接著你必須求出所有的集合,每個集合中所有元素都必須一樣,且集合外沒有任何元素
被加進集合中不會造成予盾。也就是說集合外任一元素必須至少與集合中某一元素不一樣
否則它就應該被加進集合中。以下舉個例子:
比如說p1和p2不一樣,而p1和p3、p2和p3一樣,所以可以有兩種分法:
第一種是分成p1和p3同一個集合,餘下p2。另一種是分成p2和p3,餘下p1。
可是不能只分成p2自己一個人,因為p1不能同一集合、可是p3可以。所以一定要拉p3
這時找到兩種可能集合:{p1,p3},{p2,p3}。分別以abc...z代表集合,因此:
p1和p3同屬集合a,p2和p3同屬集合b,這時可得到以下結果:
p1: a
p2: b
p3: ab
如果p1、p2、p3都一樣,則會造成以下結果:
p1: a
p2: a
p3: a
如果都不一樣
p1: a
p2: b
p3: c
生成的集合中,以個數較多者使用a,次之使用b,…依此類推。
如果集合中個數相同,那麼取集合中較小的數小者優先。
用DFS衝,對每一點不是取它、就是取和它不一樣的點中任意一個。
取後對集合中的元素分別排序再對集合排序,然後定完答案輸出。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:39
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 604 Accepted
時間: 2009/07/08 Wed 17:52:27
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 604 Accepted
時間: 2008/02/27 Wed 10:12:20
給兩個4*4矩陣,每個元素皆為大寫字母,試求兩矩陣共同的word。
word的定義是長度4且擁有恰2個母音者(y亦算是母音)。
用dfs枚舉每一格為起點然後衝一下,第一個矩陣每次衝都把衝到的雜湊起來,
反正27^4大約在53萬多,為何用27是考慮到字串長度,將無字元視作0。
接著再用相同方式做第二個矩陣,如果目前字串雜湊出來是空的就prune掉
反正兩個字都雜湊不到那更多字也不可能有。有發現共同的字就建表存起來,
然後把那格雜湊清掉,最後排序輸出即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:39
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 625 Accepted
時間: 2009/07/08 Wed 17:52:30
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 625 Accepted
時間: 2008/02/27 Wed 11:43:29
給一份程式碼,將其壓縮起來。其中單字是以數字和字母組成,以非數字非字母字元分隔
對於keyword共16種,將其輸出成&x,x為第幾種(0~15)。
對於identifier則是長度大於等於3者將其記錄下來,第一次出現時照原樣輸出,
但是會先把它存起來。第二次出現就變成&x+15,x為它是第幾個出現的。
長度<3者直接輸出就好。符號全部照著輸出。
直接用循序硬搜,還是0.000。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→Modify: sa072686 at 2008/02/27 Wed 11:44:03
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:39
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 373 Accepted
時間: 2009/07/08 Wed 17:52:32
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 373 Accepted
時間: 2008/02/27 Wed 15:50:28
給一個字串,將其所有的字調整到符合規則。規則如下:
g除了以下兩種情形,一定要放在p前面
一、不能出現egp,要改成epg。
二、當有gpuk時一定要改成pguk
注意修後面有可能前面有不符合的。暴力遞迴枚舉所有的就可以了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:39
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 433 Accepted
時間: 2009/07/08 Wed 17:52:35
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 433 Accepted
時間: 2008/02/27 Wed 23:57:23
給三列每列九個數字d9, d8, ..., d1,試求一合法的帳號。合法的帳號確認方式為
(d9*9 + d8*8 + ... + d1*1) % 11 == 0時為合法。但是數字有可能少掉幾條邊,
可是不會有多出來的邊,而且最多只有一個數字有少邊。如果給定的數字已是合法帳號,
則它就是正解,不會有多重解的情形。試求符合的合法帳號為何,或是無解與多重解。
輸入和判斷都麻煩,我是把它編碼起來,這樣就方便比對多了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:40
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11411 Accepted
時間: 2009/07/08 Wed 17:52:46
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11411 Accepted
時間: 2008/02/28 Thu 00:04:37
試將a到b中每個數字排成一個環,相鄰兩數字間的差定義為兩數字之因數個數之差,
然後試求最大的差最小的值。
用篩法取得某一質因數,然後去掉所有該質因數,可判斷出該質因數之次數。
將剩餘數的因數個數乘上次數+1即可得因數個數。最後用雜湊卡掉重覆,貪心一下
將最小者先放上去,然後左右挑一邊較小的放,已知挑大邊放的話之後接成圈時
可能會使得差變很大,所以不會比較好,挑小的那邊放則之後再放其它的時,
也不會比較差,最後兩邊碰頭再算一下差就好了。由於要取出來排序,
然後分兩邊放,所以如果兩邊都相同、再放就沒意義,可用雜湊卡掉,相同數最多
取兩個就好。greedy。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/02/28 Thu 23:19:56
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:40
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11412 Accepted
時間: 2009/07/08 Wed 17:52:48
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11412 Accepted
時間: 2008/02/28 Thu 00:07:07
六個不同色的硬幣任取四個擺出來,像猜數字一樣去猜,猜兩次,然後判斷幾A幾B的訊息
看是否有可能存在可行的擺法使得兩次猜的回報不矛盾
枚舉所有可能情形,看是否有任一可行即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:41
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11413 Accepted
時間: 2009/07/08 Wed 17:52:50
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11413 Accepted
時間: 2008/02/28 Thu 00:44:24
有許多瓶牛奶,要用m個桶子來裝,同一瓶牛奶不得分裝在不同的桶子,
牛奶必須依序倒、不得打亂順序,倒了第i個桶子後便不得再倒第j個桶子,
j < i。問這m個桶子的容量最少要多大才夠裝完所有牛奶。
類似714、907,二分搜尋+greedy可解之。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:41
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11415 Accepted
時間: 2009/07/08 Wed 17:52:52
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11415 Accepted
時間: 2008/02/28 Thu 00:48:35
試求從0階開始,有多少個階乘將其質因數分解後,展開所有質因數,個數不超過n
用篩法找任一質因數然後用dp抓質因數個數,最後二分搜尋之,最大的解是2703663。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:41
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 426 Accepted
時間: 2009/07/08 Wed 17:52:55
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 426 Accepted
時間: 2008/02/28 Thu 09:36:22
給許多交易記錄,依編號小到大排序,以行優先輸出,不得多輸出不必要的列,
第二行必須先填滿才能填第三行。太貴的不輸出,編號和前一個不連續的要加*號。
照格式輸出就好,計算方式是,增加(n-1) / 3 + 1就是下一行。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:42
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 432 Accepted
時間: 2009/07/08 Wed 17:52:57
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 432 Accepted
時間: 2008/02/28 Thu 18:27:41
給左邊右邊各要畫幾個三角形,然後問依指定的畫法應該要怎麼畫
分兩邊跑遞迴就行了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:42
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11364 Accepted
時間: 2009/07/08 Wed 17:52:59
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11364 Accepted
時間: 2008/02/28 Thu 19:34:31
給一條筆直街道上許多地點,任挑一點逛過所有商店再回到原點最小距離為何?
最遠-最近再兩倍即為所求。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:42
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11369 Accepted
時間: 2009/07/08 Wed 17:53:01
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11369 Accepted
時間: 2008/02/28 Thu 19:41:33
給要買的東西的價錢,買三個則其中最便宜者免費,問最大折扣。
排序後由大到小隔三取一加總即為所求,greedy。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:43
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11362 Accepted
時間: 2009/07/08 Wed 17:53:03
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11362 Accepted
時間: 2008/02/28 Thu 19:53:49
給許多電話號碼,問是否有一者為另一者之前置字串,有的話會無法撥給某人
比如說一者為111,另一者為1111,則永遠撥不到1111。
字典順序排序後檢查相鄰兩字串即可。更懶者可用strncmp()比較,長度用前者的。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:43
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11360 Accepted
時間: 2009/07/08 Wed 17:53:05
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11360 Accepted
時間: 2008/02/28 Thu 23:08:15
給一矩陣,照它給的動作做列交換、行交換、增減值或是以主對角線對稱。
模擬吧。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:43
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11371 Accepted
時間: 2009/07/08 Wed 17:53:07
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 11371 Accepted
時間: 2008/02/28 Thu 23:10:49
給一數求將各個位數數字任意交換之後得到兩個數a, b試使a-b最大且a-b整除9
並且,兩數皆不可以以0為開頭。
請記得使用long long,輸入不會超過、可是排列後會。每位數之和與原數除9同餘
因此greedy一下就好。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/02/28 Thu 23:19:31
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:44
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 607 Accepted
時間: 2009/07/08 Wed 17:53:09
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 607 Accepted
時間: 2008/02/29 Fri 16:18:55
有難寫到…
有n個主題要講完,每節課長l,一個主題不能分在兩節課講,並且主題有先後順序
所以一定要先把前面的主題講完才能講後面的。如果一節課中有些時間排不下課,
那麼如果是在十分鐘或以內則可以得到-c的不滿足感,否則得到(t-10)^2的不滿足感。
t為空下來的時間。求使用最少節課講完所有主題,主題要講的時間一定在一節課的時間
以內。如果有多種可能可以用最少節課講完,則取不滿足感最低的方式。
先用greedy裝箱把最小可能幾節課先算出來,然後再做背包dp。
可是背包dp太慢,所以用鏈結串列代替稀疏的陣列、用指標交換代替記憶體搬動
然後勉強在1.400 AC了…好慢。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:44
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10149 Accepted
時間: 2009/07/08 Wed 17:53:12
作者: sa072686 ( Accepted ) 站內: sa072686
標題: [筆記] 10149 Accepted
時間: 2008/02/29 Fri 18:37:06
給十三次擲骰子的結果,每次擲五顆,有十三條規則,一次結果配給一條規則,
問最佳結果為何?若有多組解任一皆可。
使用2^n的DP,以規則為主,並在第六條規則結束後優先判斷是否有>=63然後加起來、
並且標起來,以防有些較優的結果被蓋掉。不能在結束後再找mark加起來。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:44
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 709 Accepted
時間: 2009/07/08 Wed 17:53:14
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 709 Accepted
時間: 2008/03/02 Sun 11:36:21
給一個段落的文章,字的ASCII碼在33~126,以空白分隔之,可能有數行,
以一空白行為段落結束。將所有字重新排列,使得字之間維持有空格、並且
調整空格數量使得能填滿每一行,即間隔不能在一行的最前面與最後面。
給指定的一行的字數,使用以下公式判斷一個排好的好壞:將所有間隔-1後平方
然後加總,如果有一行只有一個字的時候,則如果該字與該行不等長就加上500。
//後來嘗試過了,與該行等長也加上500還是會過(炸)
取最小者,如果有相同的取第一個不一樣的間隔,然後取那個間隔小的。
用DP,狀態為「取到第N個字」,轉移方式「取前K個字為一行,然後加上剩餘的字」
然後方向上要先做最後一字,再逐步做回第一字,並且後找到較佳。
也就是說遞歸從底至上、遞推從上至底。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:44
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10685 Accepted
時間: 2009/07/08 Wed 17:53:16
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10685 Accepted
時間: 2008/03/02 Sun 12:36:24
嗯索尼板上瑪利歐學弟翻過了。
就Union-set
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→ gba356 推:要小心空集的編號XD 08/03/02
→ sa072686 推:XDDD 08/03/02
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:45
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 882 Accepted
時間: 2009/07/08 Wed 17:53:18
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 882 Accepted
時間: 2008/03/02 Sun 17:19:06
用很醜的方式過了。如果我沒有記錯題目,它跟去年TOI一階模考第一次第二題挺像的。
給你k個郵筒,每個都可以承受m個爆竹塞進去炸炸不破。但是我們不知道m為何,
試求可測出m值的最少需求爆竹為何。已知若m個炸不破,則m-1個亦炸不破,且
只要炸不破,就必須毫髮無傷、可以進行下次的試驗。
DP,狀態:dp[k][p][q]使用k個爆竹,測試m值從p到q所需最小爆竹。
初始狀態:已知k==1時要使用(p+q)*(p-q+1)/2個,否則轉移方式
dp[k][p][q] = min(max(dp[k-1][p][i-1], dp[k][i+1][q]) + i), for i = p .. q
又因為每次求取狀態都一樣,所以不必每次輸入都更新,上一組算過的,
下一組還是可以算的。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:45
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10934 Accepted
時間: 2009/07/08 Wed 17:53:20
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10934 Accepted
時間: 2008/03/02 Sun 18:39:28
給k個水球問最少要幾次測試才能得知它在幾樓丟才會破掉。破掉就不能再用,
沒破則可以撿回來測。k<=100,樓層數m可以64-bit integer儲存之。
如果直接使用DP配合狀態dp[k][p][q]表示使用k個水球測樓層範例p..q的最少測試次數
則可得轉移方程dp[k][p][q] = min(max(dp[k-1][p][i-1], dp[k][i+1][q])+1)
當然,它是正確的,可是不管時間空間複雜度都不足以解決這題。不過,它還有個好處
那就是它可以用來抓規律推解法。試將k=2, 3, 4, 5寫出來觀察,可發現:
若將測試次數增加,也就是比m-1要多測一次的m值列成一張表可發現:
1:
1 2 3 4 5 6 7 ...
2:
1 2 4 7 11 16 22 ...
3:
1 2 4 8 15 26 42 ...
4:
1 2 4 8 16 31 57 ...
5:
1 2 4 8 16 32 63 ...
得一DP式dp[i][j] = dp[i-1][j-1] + dp[i][j-1]可建立此表。
則以此表搭配二分搜尋可找出m值所在的測試次數。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:45
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10029 Accepted
時間: 2009/07/08 Wed 17:53:22
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10029 Accepted
時間: 2008/03/02 Sun 19:52:51
第1100題。
給一個字典,求最長的序列w使得字典順序上w[i] < w[i+1]且w[i]可轉移成w[i+1]
轉移有三種方法:更動其中一字,刪去其中一字或增加任一字。給的字典已排序。
DP,LIS,更動後二分搜,抓可轉的來+1。不過這樣剪去一些情形,還是跑1.7。
已知改了之後字典順序要小於原本的,否則不可能。因此更動要變小、
刪字要下一個字比較小,增加則要增加比較小的。還是應該開trie比較快?
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:46
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10169 Accepted
時間: 2009/07/08 Wed 17:53:25
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10169 Accepted
時間: 2008/03/03 Mon 00:31:14
每次都從兩個桶子中各拿出一顆球,一開始有一桶有兩顆、一桶有一顆
然後每桶都恰有一紅球,且每拿一次除了放回去以外每桶再加放一顆白球
問拿特定次數之後,至少有一次拿的兩個球都是紅球的機率、以及每一次拿的
都是兩顆紅球的機率中,小數點後連續的0的個數。
DP,至少一次的話是前i-1次拿到加上前i-1次沒拿到、但這次拿到了
第i次的時候是i顆和i+1顆
dp[n] = dp[n-1] + (1.0 - dp[n-1]) * (1.0/n) * (1.0/(n+1))
如果是每次都要拿到,就是連乘
dp[n] = dp[n-1] + log10(n) + log10(n+1)
如果是1/n則知log10(n)為連續0的個數
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:46
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10604 Accepted
時間: 2009/07/08 Wed 17:53:27
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10604 Accepted
時間: 2008/03/03 Mon 18:56:11
囧囧的一題
給一化學反應表,什麼加什麼等於什麼,會產生多少熱量。試求將所有東西反應成
一個東西後產生的最小熱量。
用11^6的DP就可以了,狀態為:當有多少個第一種化學物品、多少個第二種、…
時最少熱量為多少。轉移方式就去枚舉任兩化學物品後化為小問題即可。
注意任兩化學物品有可能a+b != b+a。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 17:57:48
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10626 Accepted
時間: 2009/07/08 Wed 18:00:34
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10626 Accepted
時間: 2008/03/03 Mon 22:39:38
要買n瓶可樂,自動販賣機只接受也只找給1、5、10元三種硬幣,一次只能買一瓶,
它會以最少硬幣數退回找的錢,問最少要投幾枚硬幣?找的錢也可以拿回來用。
DP,投法四種:10*1,10*1+1*3(找一枚5元),5*2,5*1+1*3。
所以DP枚舉可樂數、10元和5元硬幣數,然後錢一定夠,可算出1元個數至少有多少。
接著做DP,如果上述投法皆不可行則以n<<3為結果。狀態數120萬上下,小心五元
最多是150個,因為10元可以換得到。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:11
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 843 Accepted
時間: 2009/07/08 Wed 18:00:46
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 843 Accepted
時間: 2008/03/04 Tue 17:04:28
給一字典與一字串,試將每個字母轉換成另一字母使得該字串中所有的單字皆可於
字典中找到,並輸出之。若多組解任一皆可,若無解則將所有字母轉換成'*'。
轉換時為了可逆性,所以相異字母不得轉為相同字母。
直接做DFS,先記錄所有有出現的字母,枚舉每個字母出現位置,記錄它們
在字典中相對應位置能轉換成什麼,然後取每個位置都可以轉的那些字母往下擴張。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:12
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 848 Accepted
時間: 2009/07/08 Wed 18:00:50
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 848 Accepted
時間: 2008/03/05 Wed 15:15:08
寫了半天以上。
給一文件將每一行透過合併或打斷弄成最接近72字元卻又不超過,並且要使用以下的規則。
* A new line may be started anywhere there is a space in the input. If a
new line is started, there will be no trailing blanks at the end of the
previous line or at the beginning of the new line.
新的一行可以在 input 中任意一個有 space 的地方開始,並且開始一個新的一行後,
原本那行不能有結尾空白、新的那行不得有開頭空白。
* A line break in the input may be eliminated in the output, provided it
is not at the end of a blank or empty line and is not followed by a space or
another line break. If a line break is eliminated, it is replaced by a space.
input 中的換行在它不為一長度 0 的一行或只含空白的一行,並且它的下一行第一
個字元不是空白、而且不是長度 0 的一行時,則它可以被拿掉。如果一個換行被拿掉,
則要以一個空白取代它原本的位置。
* Spaces never appear at the end of a line.
輸出時,行末不得輸出任何空白。
* If a sequence of characters longer than 72 characters appears without a
space or line break, it appears by itself on a line.
如果有一字串長度大於 72 且沒有空白或換行,則輸出在單獨一行。
注意第一行為空白,然後長於72的前面如果有空白,要先空一行、然後去尾之後輸出。
行末空白在輸出之前不能夠將其視為是真正的行末空白,因為如果合併下面幾行,
它就不是行末空白了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→Modify: sa072686 at 2008/03/05 Wed 16:00:19
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:13
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10132 Accepted
時間: 2009/07/08 Wed 18:00:54
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10132 Accepted
時間: 2008/03/05 Wed 18:59:05
給一堆0和1組成的字串,試使這些字串能兩兩配對成相同的字串,並求該字串。
直接DFS衝,枚舉長度和等於最長加最短者,然後配對。先配第一對作為樣本,
配對時要嘛在前要嘛在後,枚舉每個字串,找一接在其後能符合樣本者,
然後就不要再嘗試,再找一能放在其前符合樣本者。因為再找其它接其後能符合樣本者
也不會比較好,如果還有能符合則表示兩者相同,所以不做額外嘗試。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:13
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10138 Accepted
時間: 2009/07/08 Wed 18:00:55
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10138 Accepted
時間: 2008/03/05 Wed 20:25:37
給一堆進出高速公路的記錄,試求每個車牌號碼需要繳多少錢。給每個時間點
所需花的錢,依進入的時間決定一公里多少錢,進出的配對必須要離開的記錄
在時間上恰為進入的下一筆,沒配到對的無效,同一個車牌不會有相同時間的進出記錄。
最後依車牌字典順序輸出,並且每一次進出要多一元、最後統計時再加兩元。
依車牌再依時間先後排序然後檢查即可,每筆進出除了扣去距離乘上花費外,
要額外加一元,最後的最後再加兩元。排序後就可以依車牌號碼找完一個輸出一個,
但同一車牌號碼多次進出要累加。沒有成功進出記錄的略去不得輸出。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:13
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10194 Accepted
時間: 2009/07/08 Wed 18:00:56
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10194 Accepted
時間: 2008/03/06 Thu 00:06:40
給足球賽的比賽結果,求各隊排名。
排的時候注意是排字典順序,所以字母是視為相同的,因此a排在B前面。
其它字元直接比ASCII碼就好。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:14
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10001 Accepted
時間: 2009/07/08 Wed 18:00:57
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10001 Accepted
時間: 2008/03/06 Thu 09:10:04
給一細胞狀態自動機,只有前一秒自己與兩旁的狀態會影響目前的狀態為何。
狀態是環狀的,轉換方式以那張表的格式來描述:當左中右三個0和1的數字擺在一起時,
如果值是n,則產生出來的數會在該狀態機的id換成二進制的第n位表示。
比如說左中右為110,則值是6,新狀態是1,產生出來的狀態機id其二進制第6位就是1。
問是否有可能有任一種狀態可以轉移到所給定的狀態。
DFS衝一下2^n,不過是枚舉每一位的上一種可能狀態,然後去比對符不符合。
這樣比較便於判斷和剪枝。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:14
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10160 Accepted
時間: 2009/07/08 Wed 18:00:58
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10160 Accepted
時間: 2008/03/06 Thu 12:42:44
給一堆點和邊,標記某些點之後需使得每個點至少有一相鄰點或自己被標記過。
試求最少標記點數。
2^n直接踹會爆炸,要用一些優化…據說是叫dominating set的題型,算是NP類的。
首先把它分成相連子圖,對每個相連子圖最佳化後加總即為所求。
然後對於每個相連子圖的點以邊數大至小排序,先用greedy跑一次,再以greedy解
為上限做dfs,超過直接prune掉。枚舉每一點,若四周沒人標過就試著標自己或鄰居之一,
然後在相連子圖擁有不足三個點時,不要標只有一條邊的點。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:14
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10523 Accepted
時間: 2009/07/08 Wed 18:01:00
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10523 Accepted
時間: 2008/03/06 Thu 22:32:05
笨死了。
求sigma(i * a^i)。
大數。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:14
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10254 Accepted
時間: 2009/07/08 Wed 18:01:02
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10254 Accepted
時間: 2008/03/07 Fri 09:37:25
有中譯。
一到十五的正解:
1 => 1
2 => 3
3 => 5
4 => 9
5 => 13
6 => 17
7 => 25
8 => 33
9 => 41
10 => 49
11 => 65
12 => 81
13 => 97
14 =>113
15 =>129
不難發現,加了1次2^0、2次2^1、3次2^2、4次2^3、…、n次2^(n-1)
一次塞九位的話最多是五、六位左右,然後會到最大2^140的樣子
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:15
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 431 Accepted
時間: 2009/07/08 Wed 18:01:03
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 431 Accepted
時間: 2008/03/07 Fri 17:34:36
給許多證據的有利程度以及所需花費時間,以及時限,試求最佳方案
使得總花費時間不超過時限並且得到最有利的結果。
背包DP,注意memset()有導致TLE的可能性在…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:15
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10887 Accepted
時間: 2009/07/08 Wed 18:01:04
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10887 Accepted
時間: 2008/03/07 Fri 20:39:56
給兩個字串集合,均不重覆,將第一個集合中各字串分別接上第二個集合中的字串,
構成另一個集合,問此集合之字串個數?
硬求所有字串空間上可能不夠,應該可以開trie,不過我是用反扣的方式
檢查如果兩字串有共同前綴的話,就試著去比較看看有沒有辦法相同,
有就往回扣,不過要記錄扣過的,以免扣超過。比較的話用兩個指標移來移去,
可以做到線性時間。注意a=b, b=c, a=c時會多扣一。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:15
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10898 Accepted
時間: 2009/07/08 Wed 18:01:05
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10898 Accepted
時間: 2008/03/08 Sat 08:31:00
嗯昨天傳的,不過剛傳ACM就掛了,今天才看到結果…結果還是有傳上去的嘛。
給一堆東西的單價,以及以某些特定數量的東西綁在一起賣的價格。
綁在一起賣的一定比較便宜,問買到特定數量的東西的所需最少價格?而且不能買超過。
DP,編碼後狀態至多100萬種,直接將每個東西數量當作狀態編碼後轉移。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:15
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10369 Accepted
時間: 2009/07/08 Wed 18:01:06
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10369 Accepted
時間: 2008/03/08 Sat 11:21:18
給許多哨站的座標,以及這其中可以建立幾個衛星通訊系統,如果兩個哨站
均有徫星通訊系統,則兩者不論距離皆可任意通訊,否則視距離要使用夠力的系統。
但是夠力的系統價格也會較貴,試求最佳分配方式使得哨站間兩兩皆可通訊,
並且由於系統必須統一,故求最小的距離d。
MST,直接開prim衝一下,然後把路記下來,從最長的開始標衛星通訊。
標的時候注意有可能兩端點均要標,也有可能不用。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:16
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10462 Accepted
時間: 2009/07/08 Wed 18:01:07
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10462 Accepted
時間: 2008/03/08 Sat 12:02:25
給許多戶人家,要連成一個網路,只要任兩家之間均有路徑相連即可。
給這些家之間可以互相連線的家以及花費,試求有無可能、並且是否有第二種方案,
不管花費是否和最佳的一樣。
second-best MST,用kruskal掃一遍再把MST的邊記錄下來,然後開始砍邊
每砍一次邊重做一次kruskal,若可行則記錄最小者為何。注意有連n-1條邊,
才算是有找到MST。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:16
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10278 Accepted
時間: 2009/07/08 Wed 18:01:08
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10278 Accepted
時間: 2008/03/08 Sat 17:06:01
給一堆路的交點以及路的長度,每個交點上都至少有一戶人家。接著給一堆點
代表這些交點上有firestation,試求再追加一個firestation使得每一戶人家
離最近的firestation的距離可以最小化。
簡單的shortest path,用dijkstra衝一下任兩點間最短路徑就好。
點有至多500個,warshall可能會爆,用Dijkstra with priority queue還可以
在找到第一個firestation之後,就把所有還沒找到的點全部設成這個距離。
反正是要最近的嘛,再近也不會比這個近了,找到一個firestation就可以break了
然後記每一個點設firestation的話,每戶最遠的距離是多少,取最小者即可。
也就是說,記錄「如果這點設firestation」,每戶人家到達最近firestation距離為何
故取sum( min(dis(i, j), dis(i, k)) ) 設i為人家,j為i離既有最近的firestation
而k為當前點。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:16
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10801 Accepted
時間: 2009/07/08 Wed 18:01:09
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10801 Accepted
時間: 2008/03/08 Sat 18:27:44
給n個電梯,大樓最高100個樓層(0~99),電梯有固定的速度,但可能不會每樓都停,
換電梯花60秒,問從0到樓層k最少花費時間為何?
直接開Dijkstra做shortest path即可。注意k == 0。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:16
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10287 Accepted
時間: 2009/07/08 Wed 18:01:11
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10287 Accepted
時間: 2008/03/09 Sun 00:12:07
有中譯。
嗯第一張圖,直接秒吧…
第三張也可以直接秒,一條線畫下來就是了
第二張從頂畫半徑到圓心、從底畫半徑到圓心,再把圓心連起來然後算比例
第四張請畫一個大十字交叉,分別是主對角線和兩邊中點連線
然後連任兩圓圓心,以相似得主對角線上三角形的邊長,然後開畢氏定理最後套公式解
可得關係式
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:17
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [筆記] 10287 Accepted
時間: 2009/07/08 Wed 18:01:13
作者: sa072686 (望向未來。) 站內: sa072686
標題: Re: [筆記] 10287 Accepted
時間: 2008/03/09 Sun 00:20:52
啊囧,衝名次衝過頭變第二名了Orz
嗚嗚一次快那麼多做什麼啦(扔)
※ 引述《sa072686 (望向未來。)》之銘言:
> 有中譯。
> 嗯第一張圖,直接秒吧…
> 第三張也可以直接秒,一條線畫下來就是了
> 第二張從頂畫半徑到圓心、從底畫半徑到圓心,再把圓心連起來然後算比例
> 第四張請畫一個大十字交叉,分別是主對角線和兩邊中點連線
> 然後連任兩圓圓心,以相似得主對角線上三角形的邊長,然後開畢氏定理最後套公式解
> 可得關係式
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:17
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10841 Accepted
時間: 2009/07/08 Wed 18:01:15
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10841 Accepted
時間: 2008/03/09 Sun 11:56:38
超難題,可是想通後變超腦殘?
有一堆電梯,給你它們幾秒跑一個樓層、會停哪些樓層(不一定全停)以及目標樓層k
試求從0樓開始(最多不超過一百個樓層,0~99樓)到k樓所需最少秒數
但是電梯可能一開始分別停在不同樓層,而且一次只能戳一台電梯,不會有其他人
在電梯中,所以不想停的樓層不用停,也不會有人戳開關把電梯叫走,換電梯要5秒,
試問在不知道電梯初始位置的情形下,在最差的情形時最少需要幾秒?
由於戳了開關還要等電梯來,所以電梯位置不一樣時狀況會不一樣。
可是電梯有五十台不可能記全部,狀態空間太大。這時思考一下有沒有可能化簡。
首先因為電梯坐過後位置會變,所以看看坐過電梯的位置會不會影響什麼
後來發現電梯坐過一次便不可能再坐第二次,因為同一電梯坐第二次,除非是
有其它較快的電梯可以到達該電梯能到達的樓層,可是即使如此,
還是得戳開關叫電梯上來該樓層…所以和直接坐上來一樣,甚至會多花5秒或更多在
轉換電梯上。故知:同一電梯不會搭超過一次。
再者,在相同樓層就算只看電梯搭過沒,也要花上2^50的記憶體,太大。
就再考慮是否需要看電梯有沒有搭過。由於搭過的電梯再搭一定不會比較好,
所以不用怕算到搭過的電梯,它一定會因不會較好而被忽略。
而如果怕最佳的電梯之前被搭過而不能搭,那也一定有個較好的解答已被擴張。
因此同樣取每個樓層的最佳時間,搭電梯時不管搭沒搭過一律抓最差情形,
也就是抓頭尾看最差是哪種,然後跑Dijkstra就好。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→ gba356 推:我很認真的覺得,想通以後不會更腦殘orz 08/03/09
→ sa072686 推:想通後還蠻漂亮的啊…是說資結用一張鏈表、一張鄰接矩陣 08/03/09
→ sa072686 推:就做完了,其它和一般Dijkstra一樣∼ 08/03/09
→ sa072686 推:超腦殘是指實作上,和10801只差了一個計算用函數而已 08/03/09
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:18
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10818 Accepted
時間: 2009/07/08 Wed 18:01:17
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10818 Accepted
時間: 2008/03/09 Sun 22:04:07
嗯有趣的題目。不過有趣的是題目的故事不是題目本身…
給許多點,求自起點走完所有點回原點最短距離及字典序最小之走法。
單純的TSP,而且數字不大,DFS和DP都可以過。DP的話,TSP的DP是用
dp[n][s]記錄當走過s狀態的點且最後在第n個點時最小距離。s為以0和1編碼過後的狀態,
以bit-mask記錄有哪些點走過。一開始先用BFS掃一下,抓點之間的最短距離和路徑。
不過點數不超過10,所以用DFS做,10!=3628800也還是會過的。
直接在BFS時抓好路徑,然後在dp中串接和比較也還可以過,長度開200夠用。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/03/10 Mon 08:07:09
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:18
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10937 Accepted
時間: 2009/07/08 Wed 18:01:19
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10937 Accepted
時間: 2008/03/10 Mon 08:50:17
嗯和10818幾乎相同…
有個海盜把寶藏藏在島上,現在在某點登陸,問拿完寶藏回到登陸點之最短距離為何?
其中有些生物懷有敵意,因此必須距離它們一格以上(也就是不能踩到它們周圍八格)
嗯簡單的TSP,可以DP,就算用DFS做也可以。如果無法拿完就要輸出-1,一登陸就被抓
也是-1,但是沒有寶藏時要輸出0。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:19
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10849 Accepted
時間: 2009/07/08 Wed 18:01:21
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10849 Accepted
時間: 2008/03/10 Mon 09:26:26
給一個n*n棋盤,上有一隻主教,給主教位置和目標位置,求最小步數?
如果主教已在目標上就0步,否則如果x和y座標差的絕對值相同就1步,否則2步。
如果x和y座標差奇偶不同,則無解。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:19
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10893 Accepted
時間: 2009/07/08 Wed 18:01:23
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10893 Accepted
時間: 2008/03/10 Mon 12:17:07
神奇的一題…
給一個數獨盤面,在不刪去任一數字的前提下,追加一些數字使得其盤面有唯一解,
但不得追加不必要的數字,即此盤面在刪去任一數字後都必須變回多重解盤面。
但不要求追加最少的數字,那太難了。
嗯,就用dfs亂搜,每次搜到第二組解就一路return回家,然後比較這兩組解,
想辦法打掉其中一個後,再去搜,一直搜到沒第二組解為止。不過這樣搜雖然
空盤面可以瞬間跑出來,可是會TLE,後來想說這效率應該沒問題,後來受不了
就去爬了hint…
嗯,感謝gloompisces學長的實測,這太神奇了
將方向從1~9改成9~1,TLE => 0.270 AC
將方向從「上到下、左到右」改成「下到上、右到左」,TLE => 0.610 AC
將方向從1~9改成9~1、上到下左到右改成下到上右到左,TLE => 0.170 AC
這會不會太誇張了…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:20
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10877 Accepted
時間: 2009/07/08 Wed 18:01:27
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10877 Accepted
時間: 2008/03/10 Mon 15:33:36
雖然有點空虛…
給一顆骰子依以下方式拆開後的數字序列 ABCDEF,試求給定骰子中共有多少種種類?
A
BCFE
D
點數可能會有重覆,但是不會小於1、也不會大於6。
嗯用很空虛的方式過了,共六個面,假設我們把其中一個面對向自己,則有四種
翻轉方式使得那一面仍面對自己,因此共24種情形,嘗試過24種情形後,
如果都找不到重覆,就在雜湊表中(6^6=46656)記錄其中一種,並且計數+1
如果有找到就直接break掉就好了,表示有出現過。
table如下:
int list[N][6] = { {0, 2, 1, 4, 5, 3},
{0, 5, 2, 1, 4, 3},
{0, 4, 5, 2, 1, 3},
{0, 1, 4, 5, 2, 3},
{1, 2, 3, 4, 0, 5},
{1, 0, 2, 3, 4, 5},
{1, 4, 0, 2, 3, 5},
{1, 3, 4, 0, 2, 5},
{2, 5, 3, 1, 0, 4},
{2, 0, 5, 3, 1, 4},
{2, 1, 0, 5, 3, 4},
{2, 3, 1, 0, 5, 4},
{3, 4, 1, 2, 5, 0},
{3, 5, 4, 1, 2, 0},
{3, 2, 5, 4, 1, 0},
{3, 1, 2, 5, 4, 0},
{4, 1, 3, 5, 0, 2},
{4, 0, 1, 3, 5, 2},
{4, 5, 0, 1, 3, 2},
{4, 3, 5, 0, 1, 2},
{5, 4, 3, 2, 0, 1},
{5, 0, 4, 3, 2, 1},
{5, 2, 0, 4, 3, 1},
{5, 3, 2, 0, 4, 1}};
所以說這方法覺得很空虛…不過雜湊的概念倒是還好…這裡0=A,1=B,…,5=F
然後,將骰子六面依和自己的相對關係,分成前後上下左右,則此序列代表意義
{ 前,上,右,下,左,後 }
所以,定了前後之後,上右下左挑一組,開始旋轉就可以生出剩下三種
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:20
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 852 Accepted
時間: 2009/07/08 Wed 18:01:28
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 852 Accepted
時間: 2008/03/10 Mon 19:03:38
圍棋的問題。
給一個9*9棋盤,試求兩邊得分如何?一顆棋子算一分、完全由某色棋子(或棋盤邊緣)
所包圍的區域一格也算一分。
flood-fill衝一下就好了。每次填除了算格子也判斷邊緣,如果兩種顏色同時與此區域
相鄰則不算。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/03/10 Mon 19:13:57
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:20
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10996 Accepted
時間: 2009/07/08 Wed 18:01:29
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10996 Accepted
時間: 2008/03/10 Mon 21:36:10
嗯很好,floodfill腦殘了…
給棋盤大小和下子數,以及下子過程,求分數為何。分數為佔領的地加上吃掉的子。
當玩家P的子完全圍繞住玩家Q的子(即某塊玩家Q的子沒有和任何的空格相鄰)則說
玩家Q的這些子被吃掉。如果一塊地被玩家P的子圍住,而且沒有玩家Q的子在裡面,
則說這塊地被玩家P佔了。
嗯用很簡單的flood-fill檢查是否有被吃,就是看下子地點的四周圍對方棋子,
然後flood-fill之。最後再對所有空格子做flood-fill看邊緣可以碰得到誰的棋子,
即可得所佔地。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:20
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 220 Accepted
時間: 2009/07/08 Wed 18:01:30
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 220 Accepted
時間: 2008/03/11 Tue 09:42:28
黑白棋…
給一個盤面,以及一些指令,包括印出所有可行移動、放子以及結束這局。
放子時會說要放哪,如果目前輪到的玩家沒有地方可以下,就換成對方下在同樣的地方,
並且保證這時一定是合法的。指令必合法、結束一局時要輸出當前盤面,下子後要輸出
雙方的子數。
嗯,直接暴力吧。找可行移動就枚舉整個棋盤的空格就好,下子時用類似的做法。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:21
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10187 Accepted
時間: 2009/07/08 Wed 18:01:31
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10187 Accepted
時間: 2008/03/11 Tue 16:41:53
有個吸血鬼要從某城鎮到某城鎮,他必須搭火車且只能在下午六點到早上六點,
因為他見不得光。每天正午都必須喝一公升的血,但是不能帶太多以免引起懷疑。
他也只能坐火車,因為火車可以容納他住的棺材。給每班火車從哪個城市開到
哪個城市,開的時間以及所需時間,試求最少要帶多少公升的血才夠。
shortest path,用Dijkstra做就好了。反正在相同城市中較早至少不會較差,
所以記錄最小天數以及時間,天數相同才比時間。時間較晚的車可在同一天搭,
否則就要多一天。到達時間視該班車起始與所需時間而定。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:21
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10054 Accepted
時間: 2009/07/08 Wed 18:01:32
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10054 Accepted
時間: 2008/03/11 Tue 18:21:02
給一堆珠子,同一個珠子有兩種顏色,現要將這些珠子串成項鍊,並且珠子間必須
以同色的一邊相鄰才能串接。問是否有可能,以及其中一種方式。
Graph中的Euler cycle問題,判斷是否每個點皆有偶數條邊以及是否連通即可。
注意要先找到有出現的顏色。然後尤拉迴路的找法是從任一點起一找到一條路便往下,
然後可重覆踩一樣的點、但不可用重覆的邊。然後在每次往下return回來時把這條邊
加進堆疊中,最後將這堆疊一一pop出來就是一組解了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:21
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10039 Accepted
時間: 2009/07/08 Wed 18:01:33
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10039 Accepted
時間: 2008/03/12 Wed 16:41:59
結果今天竟然整天只寫出一題…|||
給一個火車時刻表,哪輛火車在哪時停了哪些站,因此可在這些時間上下這輛火車。
試求從一點到另一點最快何時可以到達?又,在最快到達的前提下,最晚可在何時出發?
給你一個最早的時間,不可以比這個時間還早。如果當天到不了或沒有路,則另外輸出。
嗯,其實它給的時刻表已經排序過了…然後它「最晚可在何時出發」這點很煩。
不知道能不能直接做?我後來想不出方法…再來就是,有可能給你不存在的城市。
這些在輸入中忽略掉就好,如果起終點有不存在的直接輸出無法到達。
用Dijkstra就可以了,但是Dijkstra如果要考慮變形直接求最晚出發好像有點難…
我是直接用Dijkstra先抓最快到達時間,然後用這時間往回做。也就是說,
以最快到達時間為起始時間、終點為起點往回做,則可以抓到最晚的出發時間。
不過這樣兩個Dijkstra方向要完全相反,害我一份code同時寫了min-heap和max-heap
所以不小心破了300行…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→ Robin 推:題數很快的又增加了 08/03/12
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:21
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10047 Accepted
時間: 2009/07/08 Wed 18:01:34
作者: sa072686 (望向未來。) 站內: sa072686
標題: [筆記] 10047 Accepted
時間: 2008/03/12 Wed 19:19:54
給一個地圖,有一個輪子(形狀見圖),有五種顏色,每種顏色都是一塊
角度72度的扇形,並且移動一格恰轉動72度。轉向和前進一格都要花一秒,
轉向的話位置不變、方向改變90度。假設向上為北,一開始為綠色格子著地、
面向北方,試求走到終點最少要幾秒、或是根本走不到?
簡單BFS,配合狀態記錄面向和著地格子即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:21
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10075 Accepted
時間: 2009/07/08 Wed 18:01:36
作者: sa072686 (記得練幾何啊…) 站內: sa072686
標題: [筆記] 10075 Accepted
時間: 2008/03/12 Wed 20:46:37
給許多點的名字與經緯度,然後是哪些點有班機可到哪些點(單向),
給一堆詢問問這兩點最短距離為何?直航的距離需是地理上的距離,而非幾何上的。
也就是說,是在地面上從一點走到另一點的最短距離。假設地球為半徑6378的完美圓球。
距離取到最接近的整數。
注意有個小陷阱:無直航的兩點是將路上所走的距離分別取到最接近的整數,
然後再相加,而不是所走的距離先相加再取到最接近的整數。
基本上開warshall,能直航的就算距離,任兩點間的距離為一圓弧,半徑為6378,
角度可用兩半徑與兩點間直線距離所形成之三角形算出圓弧的弧度,
然後再以半徑乘之即可得解。兩點間直線距離可以座標計算,再以距離公式來計算,
設a, b分別為緯度、經度的孤度,座標的x, y, z分別是
R * sin(a)
R * cos(a) * cos(b)
R * cos(a) * sin(b)
其中R為球半徑。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10709 Accepted
時間: 2009/07/08 Wed 18:01:38
作者: sa072686 (練不完的一切) 站內: sa072686
標題: [筆記] 10709 Accepted
時間: 2008/03/13 Thu 11:00:03
判斷直線與直線、直線與線段及線段與線段間的距離。距離為直線或線段上任一點
到對方的垂直距離最短者。
分三種情形討論:如果是直線到直線,則先以向量判斷平行與否,若平行則取
任一點到另一直線的距離(點到直線距離)。
如果是線段到直線,先判斷相交與否,即線段兩端點是否在直線異側;
如果皆位於同側,則取兩端點與直線的距離。
如果是線段到線段,先判斷相交與否,再用點到線段的距離去算,枚舉兩線段四個端點
到另一線段之距離,取最小者。
詳細請參考DJWS的網路日誌。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10514 Accepted
時間: 2009/07/08 Wed 18:01:40
作者: sa072686 (練不完的一切) 站內: sa072686
標題: [筆記] 10514 Accepted
時間: 2008/03/13 Thu 11:56:59
給一條河兩岸和許多島,島為簡單多邊形、河岸為由數條直線所連成的線。
問要過河時走在河上的最小距離?也就是說,陸地上走的不算。
枚舉每個線段取最近者為最短距離,然後做warshall。不過效率差…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10953 Accepted
時間: 2009/07/08 Wed 18:01:43
作者: sa072686 (練不完的一切) 站內: sa072686
標題: [筆記] 10953 Accepted
時間: 2008/03/13 Thu 18:14:08
給十進位制下每種數字出現機率,再給格式化字串和r,問此格式化字串產生出來的數,
其除以11的餘數恰為r之機率為何?格式化字串中,出現'*'表示以固定的機率隨機產生
一數,否則一定是該數字,不得改變。
DP,狀態「到第n位時餘數k出現機率」,轉移方程分成兩種情形討論:
當數字固定,dp[n*10+m] = dp[n],m為該位數字。
當數字不固定,dp[n*10+m] += dp[n] * mr,m為產生的數字,mr為產生該數字之機率,
並且m需枚舉1~10。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11002 Accepted
時間: 2009/07/08 Wed 18:01:45
作者: sa072686 (練不完的一切) 站內: sa072686
標題: [筆記] 11002 Accepted
時間: 2008/03/13 Thu 21:59:52
給許多格子,以及固定的跳法,將跳過的格子的數字加上加號或減號使得算起來
最接近0。加和減可以隨便加,數字間互不影響。
DP,記錄每一格所有可能出現數字,轉移時枚舉之。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:23
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 866 Accepted
時間: 2009/07/08 Wed 18:01:47
作者: sa072686 (練不完的一切) 站內: sa072686
標題: [筆記] 866 Accepted
時間: 2008/03/14 Fri 08:17:28
給許多線段,求以交點為端點的話整個圖會有多少個線段?
比如說兩條線交成十字型,則會從兩個線段變成四個線段。
題目保證兩線段間不會有一個以上的交點,也不會有交在端點、或是多線段
共交點的情形。
嗯所以一條線上若有n個交點,則線段會被分為n+1個線段…
那麼枚舉一下數交點數,將之乘2(或a交b與b交a視為相異也可)加上線段數即為所求。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:23
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10902 Accepted
時間: 2009/07/08 Wed 18:01:49
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 10902 Accepted
時間: 2008/03/14 Fri 09:35:03
給許多棍子和其倒下的順序,求所有在頂端的棍子。越後給的越晚倒。假設棍子很細,
可以忽略它的寬度。
枚舉每個棍子看有沒有被重疊(線段相交)即可。記得在找到之後prune掉,
如果去看每個棍子會疊到哪些棍子,則無法保證被疊到的棍子不會疊到其它棍子,
所以不能夠做任何prune,則會TLE。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:24
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10263 Accepted
時間: 2009/07/08 Wed 18:01:51
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 10263 Accepted
時間: 2008/03/14 Fri 10:30:24
說是Bisection…我是用computational geometry直接解…
給一條鐵路,是由許多線段組成,給一點m,試求鐵路上離m最近的點。
直接枚舉每一線段與m最近的距離,取最近的線段算出最近的點為何。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:24
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10398 Accepted
時間: 2009/07/08 Wed 18:01:53
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 10398 Accepted
時間: 2008/03/14 Fri 11:23:35
(詳見圖)試求以此幾何級數第i個三角形的邊長為何?若大於1000000000則輸出位數,
否則輸出最接近它、但比它小的整數。輸入會給第一個三角形邊長。
嗯,注意位數是取log10後<9.0,取1+r^4 == r^5做二分搜尋,精確度需在1e-15以上,
安全起見是使用1e-16,平移用1e-20。有沒有人這麼腦殘忘了把次數減一的?
位數算法:log10(s) + log10(rate) * (times-1),s為起始三角形邊長,rate為等比
級數之比,times為第幾個。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 109 Accepted
時間: 2009/07/08 Wed 18:01:55
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 109 Accepted
時間: 2008/03/14 Fri 14:10:44
太感動了,109終於過了…好,現在是100連號到131了。
給許多國家,每個國家有許多點,並由一個牆壁圍起來,這牆是恰能圍住該國家
所有點的最小的多邊形。再來給許多飛彈的落點,被炸到的國家將失去電力。
問最後失去電力的國家的總面積為何?
求每個國家的凸包,然後檢查飛彈是否落在其中,再算凸包面積。凸包面積可將
其切成許多三角形,再將面積相加。切三角形時可以一點為準,然後繞一圈。
三角形面積為外積(兩向量所夾之平行四邊形面積)的一半。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→Modify: sa072686 at 2008/03/14 Fri 15:15:24
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 132 Accepted
時間: 2009/07/08 Wed 18:01:57
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 132 Accepted
時間: 2008/03/14 Fri 15:10:41
嗯好,連到136了…
給一個可能是凹的多邊形,可能有許多條直線要兩個頂點構成,並且這些直線並
不與此多邊形相交,則這些直線以構成的點編號大者來命名。試求名字最小的直線。
已知要不相交就要凸包才行,凸包的每一條邊都不與該多邊形相交,然後枚舉
每條邊,取編號大者為名,再取名字最小者為解。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 218 Accepted
時間: 2009/07/08 Wed 18:01:59
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 218 Accepted
時間: 2008/03/14 Fri 15:32:52
給許多點,找一個多邊形使得可以包住所有點,又擁有最小的周長。試將其
依順時針順序輸出,並求其周長為何。
凸包做一下,然後衝距離公式就可以了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:28
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 361 Accepted
時間: 2009/07/08 Wed 18:02:01
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 361 Accepted
時間: 2008/03/14 Fri 16:11:46
給許多警察、搶匪和善良小市民,如果市民在任三位警察所形成的三角形中間(或是
掉在邊上也算)則說他是安全的,若否且在任三位搶匪所形成的三角形中,則說他會
被搶劫。如果不是,則說他以上皆非。
點太多,枚舉會太慢,是n^3,不過如果先衝警察和搶匪的凸包,再檢查是否在凸包內
就在建凸包時n log n,檢查時n。如果在凸包內一定可以找到三點包含它,反之則否。
掉在邊上的要小心處理,特別是在凸包面積為0時。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:28
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 675 Accepted
時間: 2009/07/08 Wed 18:02:03
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 675 Accepted
時間: 2008/03/14 Fri 16:55:42
給許多點,求其凸包。
直接求凸包即可。AC人數14是因為是最近才開始可以傳(看上傳日期就知道)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:28
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 681 Accepted
時間: 2009/07/08 Wed 18:02:05
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 681 Accepted
時間: 2008/03/14 Fri 17:15:32
唔、有中譯的寫了不能推Orz
給一些點求其凸包。
就直接求凸包…但凸包的第一個點y座標要儘量小,如果一樣則x座標要儘量小。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:28
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 811 Accepted
時間: 2009/07/08 Wed 18:02:07
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 811 Accepted
時間: 2008/03/14 Fri 18:08:14
給許多樹,要把它們圍起來;但是圍起來要用木頭,所以要砍掉其中一些樹。
不過這些樹是國王的寶物,你並不想要被砍頭,所以砍掉的樹要價值越低越好。
如果價值一樣,就砍掉越少越好。給樹的座標、價值和長度,試求最佳方案?
木牆要是周長最小但可包圍所有樹的凸多邊形。
因為要價值越少越好…總共有2^n種選擇,用priority queue配合凸包計算即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:29
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10002 Accepted
時間: 2009/07/08 Wed 18:02:09
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 10002 Accepted
時間: 2008/03/14 Fri 19:01:16
有中譯…
基本上先求凸包,然後以其中一點為準可將凸包分成許多三角形,分別求質心,
然後再利用外積算面積比當作質量比,即可求出新的質心,如此可逐步合併三角形
以求得最後質心位置。有誤差,請各加1e-6。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/03/14 Fri 19:01:55
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:29
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10078 Accepted
時間: 2009/07/08 Wed 18:02:12
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 10078 Accepted
時間: 2008/03/14 Fri 20:59:04
好,還是不能推,有中譯
直接判斷是否為凸包就行。注意要分順逆時針都討論一遍。也可以判斷順逆是否相同。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10775 Accepted
時間: 2009/07/08 Wed 18:02:14
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 10775 Accepted
時間: 2008/03/18 Tue 15:43:48
好吧又是很不應該地去幫人寫作業(炸飛)
不過、拿全世界只有79人過的(現在應該81以上了…)題目當作業啊(遠目)
給n試求一3*n大小的矩陣,將其分別置入1到3n後使得每行的總和相同,每列的總和相同。
不過,行和列的總和可以不一樣。已知n必為3之倍數。
總和(1+3n)*3n/2,行總和(1+3n)*n/2,列總和(1+3n)*3/2。
若n為偶數,則1+3n必為奇數,故列總和不為整數,必無解。
其它情形觀察之後有直接構造算法:觀察三列起始以及間隔會發現皆以
8
1+(int)(n/6)*9
6+(int)(n/6)*18
為三列之起始。間隔可觀察知必以3種差值來循環。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→Modify: sa072686 at 2008/03/18 Tue 15:44:36
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 334 Accepted
時間: 2009/07/08 Wed 18:02:16
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 334 Accepted
時間: 2008/03/18 Tue 16:10:01
這這…
給一些電腦上跑的事件,同一電腦上跑的有先後順序,再給你一些不同電腦中跑的事件
的先後順序,順序有遞移性質,即若事件a在事件b之後,事件c在事件b之後,
則知事件c在事件a之後。求不知道先後順序的事件組合共有幾個?
建完單向圖後warshall一次,然後如果a=>b和b=>a都不確定就表示是答案。
它…有點難AC,每一對事件後面都要輸出一個空白,包括最後一對。不然會PE。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→Modify: sa072686 at 2008/03/18 Tue 16:11:24
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:31
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11398 Accepted
時間: 2009/07/08 Wed 18:02:18
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 11398 Accepted
時間: 2008/03/20 Thu 20:20:49
嗯好久沒寫到題目了…
大考將近,放鬆心情,寫些腦殘的。
給一個以1為底的數字,它們分成好幾塊連續的0的區域。每個區域依其0的數目代表
1個 => 將flag設為1
2個 => 將flag設為0
n個 => 將flag拓展n-2個接在當前數字之後。
最後出來的二進制數字請將之轉為十進制輸出之。
嗯小心同一個數也有散落在不同行的可能性在。剛就這邊白痴了一下…
其它用位移運算子很好做,接上n個時原數一定先左移n位,如果是n個0不用管它嘛,
如果是n個1,那麼就是1左移n位減1,也就是了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:02:32
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 255 Accepted
時間: 2009/07/08 Wed 18:02:49
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 255 Accepted
時間: 2008/03/21 Fri 22:31:38
給國王和皇后所在位置,及皇后下一步的位置,問盤面是否合法、移動是否合法
以及國王是否會無路可走等等狀況。位置有編碼過,國王和皇后不能走對角。
嗯直接暴力吧。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:52
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 298 Accepted
時間: 2009/07/08 Wed 18:02:52
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 298 Accepted
時間: 2008/03/22 Sat 07:45:43
給一種會瞬移的車,可以瞬移到某一格去,並且每次瞬移前可以決定要跳幾格x和y,
不過只能從上一次跳的x和y的+-1或不變,一開始都是0。但跳的x和y絕對值要<=3。
路上還有障礙物,不能跳到障礙物上。問最短瞬移次數。
簡單BFS就好了。不過這麼簡單的東西我還是因為忘了判斷跳的格子絕對值在要3以內,
就又挖掉了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:57
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 211 Accepted
時間: 2009/07/08 Wed 18:02:54
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 211 Accepted
時間: 2008/03/22 Sat 13:37:30
給一堆骨牌,正反面各有0~6的數字,共28種(翻轉後相同視為同一種),現在給一張圖
上面有7*8個數字,試求有哪幾種方法可將28種骨牌都擺上去,使得點數恰好符合該圖?
骨牌可以直放、橫放。
簡單DFS。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 215 Accepted
時間: 2009/07/08 Wed 18:03:10
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 215 Accepted
時間: 2008/03/24 Mon 20:26:05
給一張表格,有的只有數字、有的有彼此間的關係。求每一格的數值,或是所有有循環
求不出值的格子。
嗯,因為只有加減法,直接暴力分析跑dp就可以了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.88(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 221 Accepted
時間: 2009/07/08 Wed 18:03:11
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 221 Accepted
時間: 2008/03/25 Tue 09:15:29
給許多棟大樓,每棟都有其高度和在地圖上的位置,並且不會重疊。
求從南邊看上去,哪些會被看到、哪些會被擋住?並依特定順序輸出。
嗯,直接用二分搜尋,每次去看某一段是否能被看到。可能擋住的條件,
必須比目前的建築物高、而且座標上必須在南邊才行。某一段是否能被看到,
如果它的中間可以被看到就是可以看到,否則去判斷這一段是否被同一建築物整個擋住。
如果整個擋住,那麼直接認定它被擋住;否則則分成左右兩段再分別討論。
主要精神是二分搜尋,直到整段被同一棟擋住就代表看不到,否則就再切割。
或是縮到只剩一點時還沒有被擋住,這樣是可以被看到的。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 230 Accepted
時間: 2009/07/08 Wed 18:03:12
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 230 Accepted
時間: 2008/03/25 Tue 13:20:30
圖書館在還書的時候,並不是將書放回原位,而是集中放置,然後再由管理人員
一一拿去放在它該放的位置。現在給一堆書的書名和作者,必須依作者再依書名
的ASCII順序來排列。給一堆借、還書的記錄,以及何時管理員會把書拿去放,
試在每次將書拿去放的時候,依歸還的書應該被擺放的順序,輸出它們應該要被
擺在哪一本書的後面。
嗯暴力排序加二分搜就可以了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 268 Accepted
時間: 2009/07/08 Wed 18:03:13
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 268 Accepted
時間: 2008/03/26 Wed 09:48:53
在一個以n為底的數字系統下,試求最小的數使得它往右轉(即,把最後一位數字
拿到最前面去後)會變成原來數字的兩倍。
暴力用類似於BFS的方式去擴展即可。觀察可發現因為要兩倍,故從個位數開始
可以馬上知道下一個數字會是什麼。個位數從1到n,不能用0。這n-1種情形,
每種都平行往下擴展,先找到的即為最佳解。當下一個數字等於個位數字時,即為所求。
記得小心處理進位,以及,輸出時每個數後面(包含最後一個數)都要加上空白,
不然就會和我一樣很白痴地PE掉…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.26(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 250 Accepted
時間: 2009/07/08 Wed 18:03:14
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 250 Accepted
時間: 2008/03/26 Wed 10:48:24
給一個矩陣每格有0到1的數字,試求一點使得以它為分界之下,上面和下面所有元素和
的差最小,而左邊右邊所有元素和的差亦最小。如果有多組解,找x、y最大者。
嗯直接暴力可,不過要注意誤差,即使從大搜到小,也必須加一點東西,
以防誤差之下,原本應該相等的,結果行列數小的算起來比行列數大的大,
所以加上1e-8之後如果還是比當前最小的小,那麼才是真的差比較小。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.26(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 258 Accepted
時間: 2009/07/08 Wed 18:03:15
作者: sa072686 (輸不得、輸不起。) 站內: sa072686
標題: [筆記] 258 Accepted
時間: 2008/03/26 Wed 11:29:13
給一個迷宮,上面有很多個鏡子,外圍以黑洞包圍,只留下一個入口、一個出口。
所有鏡子都是擺斜45度角,並且所有鏡子都可做90度旋轉。試求一種合法的擺設
使得能有一道光線從入口進來、恰好能從出口出去。光線可以和自己直角相交沒關係,
不會有任何影響。
直接用dfs跟著光線衝就好了。每次碰到鏡子就試著兩種方式都擺擺看。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.26(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10643 Accepted
時間: 2009/07/08 Wed 18:03:16
作者: sa072686 (就等一句我準備好了) 站內: sa072686
標題: [筆記] 10643 Accepted
時間: 2008/03/27 Thu 15:48:02
給一樹的邊的數量,試求讓所有節點的子節點皆為偶數個且總邊數為n的樹共有幾種?
公式題,實際推完得到
2 => 1
4 => 3
6 => 1+4+5=10
8 => 1+6+14+(4+10)=35
10 => 126
14 => 1716
發現與加泰隆正好呈現以下關係
1 => 1
2 => 3
5 => 10
14 => 35
42 => 126
正好是1、1.5、2、2.5、3倍關係。
故知設c(n)為加泰隆第n項,總邊數為2n時答案為:
f(n) = c(n) * (n+1) / 2
又知c(n) = c(n-1) * (4n-2) / (n+1)
所以在求c()的過程中,最後除n+1時另外存一份/2的下來(n+1會消掉)即為所求。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.175(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10459 Accepted
時間: 2009/07/08 Wed 18:03:18
作者: sa072686 (就等一句我準備好了) 站內: sa072686
標題: [筆記] 10459 Accepted
時間: 2008/03/27 Thu 17:33:15
給n個點,為一樹狀圖,試求以哪些點為樹根的深度會最短、哪些會最長?
dp,枚舉每一條邊,例如邊x->y,則取y->x以外所有y有的邊最長的一條。
最後枚舉每點每一條邊,找最長者即為深度。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.175(台灣師範大學)
→Modify: sa072686 at 2008/03/27 Thu 17:33:27
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 239 Accepted
時間: 2009/07/08 Wed 18:03:20
作者: sa072686 (就等一句我準備好了) 站內: sa072686
標題: [筆記] 239 Accepted
時間: 2008/03/28 Fri 16:17:06
計算一個小球鐘幾天後小球序列會回到原先初始的狀態。
小球鐘的玩法是,它有四個軌道,底部、一分鐘、五分鐘和一小時。
而一分鐘、五分鐘和一小時的球數代表有幾個一分鐘、五分鐘和一小時。
所以它可以表達1:00到12:59,但是不能表達上午下午。
一開始全部小球在底部,每一分鐘,最前面的小球跑到頂端一分鐘的軌道上。
集滿五顆球在一分鐘軌道時,軌道會因重量而傾斜導致第五顆球跑進五分鐘軌道,
餘下則依相反順序回到底部,排在最後面。五分鐘、一小時的軌道也用同樣方式處理,
不過都是累積十二顆球時,才會傾斜。五分鐘的第十二顆會跑到一小時的軌道,
而一小時的軌道第十二顆則會在前面十一顆都回到底部後,也回到底部。
由於答案可能很大、很大,所以沒辦法直接暴力去做,會太慢。
不過,做過一次之後會知道哪一個位置的球,在十二小時後會跑到哪裡去。
這些會形成一個迴路,迴路長度假設為n,則知此迴路上每一個點,
在n個十二小時後會回到原處;故知求所有迴路的最小公倍數,便知道在
幾個十二小時後,會回到原樣。由於問的是天數,除以2即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:03:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 240 Accepted
時間: 2009/07/08 Wed 18:03:22
作者: sa072686 (就等一句我準備好了) 站內: sa072686
標題: [筆記] 240 Accepted
時間: 2008/03/28 Fri 21:24:00
霍夫曼編碼,每次取頻率最低的r個合併之,並且依頻率大小自小到大編上0到r
如果頻率一樣,則比最小的字,小的在前面。合併後頻率和要一樣。
如果沒辦法剛好合併完,則取一些頻率0的字補齊,這些字字母順序恆大於任一字母,
且不該出現在輸出中。
嗯,配合heap慢慢合併字串做就好。有沒有卡很久一開印度F4就馬上抓出來並且AC的八卦?
結果是笨了陣列開太小(汗)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.59(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:00
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [亂來] 724 Accepted
時間: 2009/07/08 Wed 18:03:23
作者: sa072686 ( ) 站內: sa072686
標題: [亂來] 724 Accepted
時間: 2008/03/29 Sat 12:34:43
沒有輸入,但是你的程式要能輸出自身,還要能輸出自身的反轉。
不過題目目前有問題,以下是AC code。
main(){};
病了…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:00
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [亂來] 724 Accepted
時間: 2009/07/08 Wed 18:03:24
作者: gba356 (瑪利歐) 站內: sa072686
標題: Re: [亂來] 724 Accepted
時間: 2008/03/29 Sat 13:04:52
※ 引述《sa072686 ( )》之銘言:
> 沒有輸入,但是你的程式要能輸出自身,還要能輸出自身的反轉。
> 不過題目目前有問題,以下是AC code。
> main(){};
> 病了…
輸出自身的程式好像叫做 Quine ,
網路上有滿多範例的,這邊提供一個:
#include<stdio.h>
char *a[] = {"\"};\n\n",
"main() {\n",
" int i=0; char *b;\n",
" printf(\"#include<stdio.h>\\nchar *a[] = {\\\"\");\n",
" while(*a[i]) {\n",
" for(b=a[i];*b;b++)\n",
" switch(*b) {\n",
" case '\\n': printf(\"\\\\n\"); break;\n",
" case '\\\\': case '\\\"': putchar('\\\\'); \n",
" default: putchar(*b);\n",
" } \n",
" printf(\"\\\",\\n\\t\\\"\"); \n",
" i++;\n",
" }\n",
" i=0;\n",
" while(*a[i]) {printf(a[i]);i++;}\n",
"}\n",
""};
main() {
int i=0; char *b;
printf("#include<stdio.h>\nchar *a[] = {\"");
while(*a[i]) {
for(b=a[i];*b;b++)
switch(*b) {
case '\n': printf("\\n"); break;
case '\\': case '\"': putchar('\\');
default: putchar(*b);
}
printf("\",\n\t\"");
i++;
}
i=0;
while(*a[i]) {printf(a[i]);i++;}
}
真是優美。
--
★silkworm 來跟者一起喊:大笑~路XD
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_gba356 from_218.167.103.99(HiNet)
→ gba356 推:這邊有很多: 08/03/29
→ gba356 推: http://www.nyx.org/%7Egthompso/quine.htm 08/03/29
→ sa072686 推:喔喔,原來有啊,我都自己想自己寫XD 08/03/29
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:00
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [亂來] 724 Accepted
時間: 2009/07/08 Wed 18:03:25
作者: sa072686 ( ) 站內: sa072686
標題: Re: [亂來] 724 Accepted
時間: 2008/03/29 Sat 13:16:20
我的長這樣
#include <stdio.h>
#include <string.h>
char *p, *ptr;
char buf[100000];
void write(char *s)
{
strcpy(buf, s);
p = buf + strlen(buf);
for(ptr=s; *ptr; ptr++)
{
if(*ptr == '"')
{
*(p++) = '\\';
*(p++) = '"';
}
else if(*ptr == '\\')
{
*(p++) = '\\';
*(p++) = '\\';
}
else if(*ptr == '\n')
{
*(p++) = '\\';
*(p++) = 'n';
}
else if(*ptr == '\t')
{
*(p++) = '\\';
*(p++) = 't';
}
else
{
*(p++) = *ptr;
}
}
strcpy(p, "\");\n\trev();\n\treturn 0;\n}\n");
p += strlen(p);
*p = 0;
printf("%s", buf);
}
void rev()
{
for(ptr=buf+strlen(buf)-2; ptr>=buf; ptr--)
{
putchar(*ptr);
}
putchar('\n');
}
int main()
{
write("#include <stdio.h>\n#include <string.h>\n\nchar *p, *ptr;\nchar
buf[100000];\n\nvoid write(char *s)\n{\n\tstrcpy(buf, s);\n\tp = buf +
strlen(buf);\n\tfor(ptr=s; *ptr; ptr++)\n\t{\n\t\tif(*ptr ==
'\"')\n\t\t{\n\t\t\t*(p++) = '\\\\';\n\t\t\t*(p++) = '\"';\n\t\t}\n\t\telse
if(*ptr == '\\\\')\n\t\t{\n\t\t\t*(p++) = '\\\\';\n\t\t\t*(p++) =
'\\\\';\n\t\t}\n\t\telse if(*ptr == '\\n')\n\t\t{\n\t\t\t*(p++) =
'\\\\';\n\t\t\t*(p++) = 'n';\n\t\t}\n\t\telse if(*ptr ==
'\\t')\n\t\t{\n\t\t\t*(p++) = '\\\\';\n\t\t\t*(p++) =
't';\n\t\t}\n\t\telse\n\t\t{\n\t\t\t*(p++) = *ptr;\n\t\t}\n\t}\n\tstrcpy(p,
\"\\\");\\n\\trev();\\n\\treturn 0;\\n}\\n\");\n\tp += strlen(p);\n\t*p =
0;\n\tprintf(\"%s\", buf);\n}\n\nvoid rev()\n{\n\tfor(ptr=buf+strlen(buf)-2;
ptr>=buf; ptr--)\n\t{\n\t\tputchar(*ptr);\n\t}\n\tputchar('\\n');\n}\n\nint
main()\n{\n\twrite(\"");
rev();
return 0;
}
不過現在上傳的code必須不輸出任何東西才會AC(茶)
※ 引述《gba356 (瑪利歐)》之銘言:
> ※ 引述《sa072686 ( )》之銘言:
> > 沒有輸入,但是你的程式要能輸出自身,還要能輸出自身的反轉。
> > 不過題目目前有問題,以下是AC code。
> > main(){};
> > 病了…
> 輸出自身的程式好像叫做 Quine ,
> 網路上有滿多範例的,這邊提供一個:
> #include<stdio.h>
> char *a[] = {"\"};\n\n",
> "main() {\n",
> " int i=0; char *b;\n",
> " printf(\"#include<stdio.h>\\nchar *a[] = {\\\"\");\n",
> " while(*a[i]) {\n",
> " for(b=a[i];*b;b++)\n",
> " switch(*b) {\n",
> " case '\\n': printf(\"\\\\n\"); break;\n",
> " case '\\\\': case '\\\"': putchar('\\\\'); \n",
> " default: putchar(*b);\n",
> " } \n",
> " printf(\"\\\",\\n\\t\\\"\"); \n",
> " i++;\n",
> " }\n",
> " i=0;\n",
> " while(*a[i]) {printf(a[i]);i++;}\n",
> "}\n",
> ""};
> main() {
> int i=0; char *b;
> printf("#include<stdio.h>\nchar *a[] = {\"");
> while(*a[i]) {
> for(b=a[i];*b;b++)
> switch(*b) {
> case '\n': printf("\\n"); break;
> case '\\': case '\"': putchar('\\');
> default: putchar(*b);
> }
> printf("\",\n\t\"");
> i++;
> }
> i=0;
> while(*a[i]) {printf(a[i]);i++;}
> }
> 真是優美。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:00
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 741 Accepted
時間: 2009/07/08 Wed 18:03:26
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 741 Accepted
時間: 2008/03/29 Sat 17:31:48
給一個長度n之字串,將其環狀平移後可得n個字串,排序後可擺成一個矩陣。
告訴你這矩陣的最後一行(column),以及原字串在排序後是放第幾列,
求原字串為何?
由題意可知,最後一行的字母即為原字串之組成字母。
然後可知第一行的字母為原字串組成字母由小排到大。
接著可由最後一行和第一行去推廣,逐步求得第二行、第三行、…
便可得解。硬搜會過,不過秒數不好看。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
→Modify: sa072686 at 2008/03/29 Sat 17:32:13
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:01
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 703 Accepted
時間: 2009/07/08 Wed 18:03:27
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 703 Accepted
時間: 2008/03/29 Sat 19:07:57
給一張戰績表,其中i=>j為1則表示i擊敗j,此時j=>i為0。
若i=>j和j=>i都是0則表示平手,主對角線一定都是0。
現在問有多少三人一組的組合是無法判斷誰強誰弱的?
有以下兩種情形:a贏b,b贏c,c又贏a,或是三人間的戰鬥全部平手。
若是平手情形,則由小到大排列。若是循環情形則在第一個擊敗第二個、第二個擊敗
第三個、第三個擊敗第一個的前提下,以嚴格遞增或遞減來排列。
在這些三人一組的組合間,以不遞減順序排列之。
n^3枚舉一下,然後判斷並且建表存下,最後排序輸出即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:01
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10729 Accepted
時間: 2009/07/08 Wed 18:03:28
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 10729 Accepted
時間: 2008/03/31 Mon 16:29:09
給兩顆樹,子節點以逆時針方向給,邊和邊不能交錯,試求兩顆樹畫起來有沒有可能一樣?
把一顆建出來,另一顆枚舉可為樹根者,再枚舉可行的旋轉,最後遞迴檢查所有點即可。
一旦樹根定下來、樹根的子節點旋轉方式定下來,其餘的節點其子節點順序就固定了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:01
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10672 Accepted
時間: 2009/07/08 Wed 18:03:29
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 10672 Accepted
時間: 2008/04/01 Tue 18:56:09
給一棵n個節點的樹,每個節點上面有0或多個彈珠,全部共有n個彈珠。
將一顆彈珠從一個節點搬到另一個相鄰節點稱之為一次移動。
試問讓此樹變成每個節點均恰有一個彈珠之最小移動次數為何?
要嘛就送進一棵子樹,要嘛就從一棵子樹中拿出來,不會同時拿出送入。
則知枚舉任一節點,將以此節點為樹根之子樹所有的需求集中在樹根,
即缺的便無條件送入、多的無條件取出,並計算所有集中於樹根的花費,
則之後該點之父節點只需送入或取出此節點平衡所需彈珠數即可。
所有平衡在樹根的花費均已算出,只需算父節點提供給此子節點之花費即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:02
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 718 Accepted
時間: 2009/07/08 Wed 18:03:30
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 718 Accepted
時間: 2008/04/02 Wed 10:37:30
給n台電梯,每台各有一x、y值代表從第x樓開始每y樓停一次,問某兩樓層間是否
有可能可以通行?
用BFS掃,從可以通行起始樓層者開始,看能否通到目標樓層。掃的過程將之視為一集合,
因此已加進集合的點代表可以通行,就不再重覆做。判斷的部份取位移大者,
嘗試所有可行樓層然後檢查目標電梯可否通行,但要先檢查是否有可能,否則會TLE。
如果起始樓層差不整除位移的最大公因數則必無解。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.14(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:02
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 719 Accepted
時間: 2009/07/08 Wed 18:03:31
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 719 Accepted
時間: 2008/04/02 Wed 11:58:55
給一個字串,將其排成一個環,試求從哪個點開始,字典順序最小?如果有多組解,
找最小的起始點。
嗯,這題有過半的人TLE,我以前也是其中一個,這次回來重寫一次AC,也沒想太久。
看來有進步吧,嗯。
首先,簡單可知一定要找到最小的字母作為起始位置,這個很直觀。
再來,有可能有多個最小的,沒關係,我們先找位置最小的開始。
然後,可知下一個可能字典順序最小的起點點,字母要最小、並且一定要比上一個字母大。
否則,用上一個字母至少不會比較差。因此這種情形就不考慮進去。
當我找到一個可比較的之後,來比較兩個起始點的優劣。直接比會太慢、也會錯過一些
啟發訊息,設兩起始點i、j,則先比較i~j-1和j開頭相對應長度,這兩段。
如果i~j-1這段比較大,那麼這段捨棄,從較佳解j再繼續用同樣方式往下比對。
如果一樣大,則,設位置k為j這一小段(注意不是從j開始的n個,是剛和i比的那一小段)
再之後的第一個字母。
如果k不是最小字母,則知j開頭必較差;因i結尾後續是最小字母j,否則矛盾。
如果k是最小字母,則可比較i段和k段。
而,j段要比i段好當且僅當k段比j段好,因為i段和j段相等,則i段之後是j段,
j段之後是k段,i==j,所以,j段較好當且僅當k段較j段好。
而k段較j段好,i==j,故知k段比i段好,則可直接取k段;
得到結論:即使j段比i段好,也不會是最佳解,故合併ij段和k段繼續比較。
如果i段比較小,則知j段不會比較好,故從j再往下找符合條件的起始點去比較。
得流程:
找到最佳字母最小位置i,開始處理i
找到一個「比上一個字母小的最小字母位置j」,對i段和j段做比較。
若i<j,回上一層再找下一個,「比上一個字母小的最小字母位置j」
若i==j,合併ij段,取j段結尾k為新的j段,重新比較。
若i>j,則以j段為最佳字母位置i,記錄新的i為目前最佳解,回第一層繼續跑。
最後即可得解。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.14(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:04
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 708 Accepted
時間: 2009/07/08 Wed 18:03:32
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 708 Accepted
時間: 2008/04/02 Wed 20:42:43
給一個等式,左邊包含一個正數,右邊包含一堆數字,可能有括號,但沒運算子。
試問有無可能能在填上+、-、*運算子後,可以讓此等式成立?
唔、重建字串然後DFS硬搜再用遞迴求值跑很慢,還是把DFS改成先搜*再搜+再搜-才過。
然後請記住不要假設全部相乘會最大。不過我覺得這題還可以陰一個地方。
它說給的12個正數相乘不會超過2^30,可是不用long long居然沒出事。
如果是我的話嘛,(2^30)*1*1*1*...*1相乘並不超過2^30嘛(茶)
可是,(2^30)*(1+1+...+1)就掰了(茶)
得證ACM寫多人會變心機,每道題目都會很自然地去考慮一些怪怪的陰險測資。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.14(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:04
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10083 Accepted
時間: 2009/07/08 Wed 18:03:33
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 10083 Accepted
時間: 2008/04/03 Thu 12:18:37
嗯有中譯。
判斷a是否為b之倍數,即可知是否為整數。注意t==1分母會出現0,所以一定無解。
接下來若為倍數關係才有可能有解,可先用log判斷是否過大。
但是小心當a==b時可能數字超大,所以不能直接乘開,要當例外。
然後a為b之倍數,所以先做t^b再用t^b去生成t^a會比較快,只要做a/b-1次乘法。
最後大數暴一暴就解了。
在 UVa toolkit 中的 code 有錯,題目要小於 100 位,可是它 100 位還是輸出。
不過實測結果是,不管寫小於還是小於等於都可以 AC。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.134(台灣師範大學)
→Modify: sa072686 at 2008/04/03 Thu 12:23:34
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:04
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 787 Accepted
時間: 2009/07/08 Wed 18:03:35
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 787 Accepted
時間: 2008/04/03 Thu 17:40:11
給一個數列求非空之連續數字積最大為何?
n^2而且沒優化大數也會過,不過是卡在快爆掉的秒數…照理說是可以用O(n)的,
只是會難寫很多。
等等來優化看看結果如何吧(茶)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.134(台灣師範大學)
→Modify: sa072686 at 2008/04/03 Thu 17:40:43
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:05
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [筆記] 787 Accepted
時間: 2009/07/08 Wed 18:03:37
作者: sa072686 ( ) 站內: sa072686
標題: Re: [筆記] 787 Accepted
時間: 2008/04/03 Thu 17:47:07
優化大數後,變成一次塞三位(似乎也是極限了…)就從2.3變成0.9了(茶)
有沒有拿%3d輸出結果10000變成10 0的八卦(炸飛)
※ 引述《sa072686 ( )》之銘言:
> 給一個數列求非空之連續數字積最大為何?
> n^2而且沒優化大數也會過,不過是卡在快爆掉的秒數…照理說是可以用O(n)的,
> 只是會難寫很多。
> 等等來優化看看結果如何吧(茶)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.134(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:05
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [筆記] 787 Accepted
時間: 2009/07/08 Wed 18:03:39
作者: sa072686 ( ) 站內: sa072686
標題: Re: [筆記] 787 Accepted
時間: 2008/04/03 Thu 18:42:36
好,n^2優化成線性時間後剩0.05了。
※ 引述《sa072686 ( )》之銘言:
> 優化大數後,變成一次塞三位(似乎也是極限了…)就從2.3變成0.9了(茶)
> 有沒有拿%3d輸出結果10000變成10 0的八卦(炸飛)
> ※ 引述《sa072686 ( )》之銘言:
> > 給一個數列求非空之連續數字積最大為何?
> > n^2而且沒優化大數也會過,不過是卡在快爆掉的秒數…照理說是可以用O(n)的,
> > 只是會難寫很多。
> > 等等來優化看看結果如何吧(茶)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.134(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:05
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11417 Accepted
時間: 2009/07/08 Wed 18:03:42
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 11417 Accepted
時間: 2008/04/03 Thu 18:55:00
把任一對(i,j),1<=i<n,i<j<=n,的gcd加總起來輸出。
不用擔心overflow,不用建表,直接暴力就可以了(茶)
//可以抄題目裡面的code,也是會過的。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.134(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:05
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 715 Accepted
時間: 2009/07/08 Wed 18:03:44
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 715 Accepted
時間: 2008/04/05 Sat 10:09:09
給一些加密後的單字,這些單字只會用到前m個字母,並且它們會維持加密前的字典順序
出現,試求是否有唯一的方式可以只透過這些加密後的字來解密給你的字串?
給的字串有可能包含不在前m個字母的字母以及符號等等,只有前m個字母是有加密的,
其它則都是維持原樣。
不好想的陰險graph,基本上開拓樸判斷,如果有需要解密的字出現,就不能和其它人
分不出勝負,也就是要唯一。如果沒有需要解密的字,則前後順序不清也無所謂。
因為它說能否有唯一的方式可以解密,所以假設現在給字串abc且a>b>c,而我們不知道
de的先後順序,只知道d>abc, e>abc或是abc>d,abc>e都是可解的。
但若是只有a>b, a>d, b>c, d>c則無法判斷b, d先後,則沒有唯一解。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.149(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:06
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 869 Accepted
時間: 2009/07/08 Wed 18:03:46
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 869 Accepted
時間: 2008/04/07 Mon 10:26:15
給兩航空公司的所有航班表,如果可以通行的地點完全一樣則說它相同。
問兩家航空公司是否相同?
warshall建完連通圖後memcmp()。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:06
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 721 Accepted
時間: 2009/07/08 Wed 18:03:48
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 721 Accepted
時間: 2008/04/07 Mon 16:35:31
給一張有向圖,問從起點到所有點的最小距離和再加上所有點到起點的最小距離和。
整張圖是強連通的,並且答案不會超過int範圍,點和邊都不會超過100萬個。
噢、和2008 TOI初選第四題根本一模一樣嘛(炸)
不止題目,連輸入的大小都完全一樣。不過我覺得看那種TLE和MLE人數,
以及兩次Dijkstra+Heap跑1.4這些點來看,warshall好像不會過的樣子。
剛要找討論板的測試資料一直找不到囧,新討論板有些Volumn整個消失…
嗯、然後就是原來我的heap是錯的囧,用在Dijkstra時不應該這麼寫(汗)
沒、沒想到這樣可以對到這麼多題…
唔,總之以後知道怎麼樣才保證對了。剛推出了一些舊方法的反例…嗯。
所以用指標是錯的,萬一前面指的都被降了、在heap向上時也就會出事情,
如果直接把當前的cost給放上去就不會有這樣的問題。
基本上這題Dijkstra+Heap做兩次,第二次做反向的,也就是把i=>j的邊當作是
j=>i來做,這樣就可以了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:06
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 726 Accepted
時間: 2009/07/08 Wed 18:03:50
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 726 Accepted
時間: 2008/04/08 Tue 14:30:19
給兩份文件,第一份為原po寫的某篇文章,第二份為原po寫的一份加密過的文章,
兩份可能相同也可能不同,但因為作者相同,所以字母出現頻率會一樣。
將第一份和第二份的字母出現頻率排序,相同者依字母順序排,接著一對一對應一下,
就會知道哪些字母對應到哪些字母,接著把第二份依此解密後輸出。
兩份文件以一空白行分隔,但第二份文件可以包含空白行。
嗯直接模擬就好,可是它有一點長…開100萬字還不夠,開1000萬就足夠了。
不過,不確定實際長度為何…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→ bruce3557 推:真好,我現在補唸書補到快炸了XD 08/04/08
→ sa072686 推:沒辦法,我還要衝一發國手啊XDDD 08/04/08
→ gba356 推:學長加油! 08/04/08
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:07
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 716 Accepted
時間: 2009/07/08 Wed 18:03:52
作者: sa072686 ( ) 站內: sa072686
標題: [筆記] 716 Accepted
時間: 2008/04/08 Tue 22:22:10
給一三維的n-puzzle求是否有解。
推法一樣,求逆序數。也就是說在某數所在位置之前,有幾個數比它大。
可知每一步移動時,如果盤面邊長為奇數,則都會影響偶數個,
要嘛多一、要嘛少一,故知奇偶不變;若盤面邊長為偶數則會影響奇數個,
但加上空白格的行列位置則仍能維持不變。推廣至三維,就要再多注意層數。
不過數太多,硬搜會太慢,感謝seanwu的hint,用陣列模擬bst記錄比自己大的數個數,
然後每次二分搜尋找的時候順便計算和調整即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:07
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10537 Accepted
時間: 2009/07/08 Wed 18:03:54
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 10537 Accepted
時間: 2008/04/12 Sat 12:32:13
給一張圖和起終點,以及到達終點時需留下多少貨物以供交易。
路上有些地方會每20個單位抽一單位,有的地方只抽一單位。
請找出最少需要攜帶多少貨物以及路徑,若有多組解則找字典序最小者。
(依ASCII順序即可)
用數學式 x - x/20 = y 得 x = 20*y/19 然後微調。可知這樣算出來,
由於高斯記號的關係得到的 x 會比較小,所以用加法微調即可。
二分搜會TLE,更甭提枚舉。其它,為了字典序,用 Dijkstra 從尾做回來就好。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:07
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 318 Accepted
時間: 2009/07/08 Wed 18:03:56
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 318 Accepted
時間: 2008/04/12 Sat 12:35:04
給一堆關鍵點和一堆骨牌,從某關鍵點開始倒,給每排骨牌倒下的時間,
試求最後倒下的骨牌在哪個關鍵點,或是在哪兩個關鍵點中間。如果有多組解,
則任一皆可。
Dijkstra,注意最後倒的骨牌未必在最晚倒的關鍵點旁邊。所以每條邊都要注意一下。
注意任一組解皆可,可是一組正解中兩個關鍵點如果放反也是會wa的。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:07
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10246 Accepted
時間: 2009/07/08 Wed 18:03:58
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 10246 Accepted
時間: 2008/04/12 Sat 12:42:24
給一張地圖及許多組詢問,對於每組詢問給予的起終點,試求一條路徑,
使得在其上面請客花費最貴的城市花費加上該路徑花費總和最小。
直接做 Floyd-Warshall 或 Dijkstra 都會炸,因為都不保證最佳。
seanwu 的提示可以做 n^4,枚舉每一點作為請客點,走的路徑經過點不可以比該點貴。
即使該路徑不經過宴會點,也保證至少有一組更佳解存在,所以沒關係。
try 大神的 code 據解讀報告顯示(好啦,我承認解讀者就是我)
將點依請客花費排序,然後自小枚舉,以作為 warshall 的中繼點,
然後這樣保證經過路徑絕不會有比目前作為中繼點更貴的點。
又是自小枚舉,所以一次 warshall 結束後即為正解。和 seanwu 的解法差不多,
不過可以直接對 warshall 變型,所以還是維持 n^3 的。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:08
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 742 Accepted
時間: 2009/07/08 Wed 18:04:00
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 742 Accepted
時間: 2008/04/16 Wed 11:51:50
骨牌每張有兩面,點數由0到6,現在有兩個玩家手裡拿著一樣多的骨牌,
並且不會有重覆的,由手持點數最高的「兩面點數皆相同的骨牌」的玩家先出,
並且要出那張骨牌。接著可出的骨牌必須有一面和兩端的牌點數相同,
將相同的一面向著兩端的牌擺上去,成為新的兩端。如果都不能擺就pass,
出完就贏,問這兩人是否有贏的可能?注意這裡不要求最佳策略。
直接DFS硬上就好,兩邊輪流放可以放的牌。如果有一方可以勝就記下來,最後
再看結果就好。反正不要求最佳策略,所以所有可能情況都要考慮進去。
AC率11%/19%是PE來的吧?
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
→Modify: sa072686 at 2008/04/16 Wed 11:52:09
→Modify: sa072686 at 2008/04/16 Wed 11:55:01
→ sa072686 推:不,我不信這題難度可以是9.9.... 08/04/16
→ SKYLY 推:不,我不信這題難度可以是9.9.... 應該是 10.0 08/04/16
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:08
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 745 Accepted
時間: 2009/07/08 Wed 18:04:02
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 745 Accepted
時間: 2008/04/16 Wed 16:17:20
給一個拼圖,只有唯一一種解法。拼成後可以旋轉,但不能夠每塊拼圖分開轉。
試將拼圖拼起來,並轉成值最大的方式輸出。值的算法是將每一列看成一個數字,
然後加總起來即為值。
直接DFS硬解拼圖,然後旋轉後加總計算。由於數字有點大,最多到20位,
最好使用double型態,long long我沒試過,不過20個20位數字好像會overflow,
但double確定可以。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_210.70.137.244(台南一中)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:09
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 760 Accepted
時間: 2009/07/08 Wed 18:04:04
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 760 Accepted
時間: 2008/04/21 Mon 07:42:26
給兩個僅包含 a, t, g, c 的字串,試求所有的最長共同子字串。
注意,題目說 Longest Common Sequence(s) 不是 LCS 的意思,
不知道是不是因為 Sequence 不是 Subsequence,總之覺得很容易誤會。
子字串的話,修一下 LCS 的 DP 式為
if equal
lcs[i][j] = lcs[i-1][j-1] + 1;
else
lcs[i][j] = 0;
即可。記錄所有出現過最長的,一一取出後排序輸出就好了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:12
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10909 Accepted
時間: 2009/07/08 Wed 18:04:06
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 10909 Accepted
時間: 2008/04/21 Mon 16:38:40
給一數 n,問其能否表示為兩 lucky number 之和?
lucky number 為:從 1 開始寫,然後從 2 開始,每兩個數便砍掉一個。
然後再找下一個 lucky number,設值為 m,則每隔 m 個數便砍掉一個,…
如此持續下去,則存活者為 lucky number。
直接建會太慢,而且沒什麼規律可以抓。
但如果用 Binary Search Tree 則可以快速地找點、刪點並維持不亂掉。
感謝 DJWS 一語驚醒夢中人啊,以它為方向想了不到一秒就瞬掉了。
嗯不過要加點又想維持平衡很麻煩,那麼可以用陣列仿二分搜尋的方式模擬。
至於刪點也可以選擇用把點標掉的方式來做。
而二分搜尋樹快速找到第幾大的點,只要記錄左子樹節點數即可。
建的時候 DP 一下就可以快速建立這個資訊,而且只要 log n 維護時間。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:13
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 808 Accepted
時間: 2009/07/08 Wed 18:04:08
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 808 Accepted
時間: 2008/04/23 Wed 10:09:48
給一個蜂窩狀圖,以螺旋的方式從 1 開始往下填,試求兩格間的最小距離?
每次只能走到相鄰的格子。詳細看圖會比較清楚。
抓規律,我是去看每一行,可分成三段:上中下。
上段、中段和下段的間隔可以輕易算出,間隔每次遞增 6。
因此枚舉好每一行,把 1 到 10000 的座標都算起來。
把往上和往下設為間隔 2,左右間隔 1,則可輕易以座標算出距離。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:13
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 833 Accepted
時間: 2009/07/08 Wed 18:04:10
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 833 Accepted
時間: 2008/04/23 Wed 11:08:16
給一些線段,以及一些點,問從這些點流出的垂直的水流最後會流到底部的哪一點?
碰到線段後會流到線段端點,再往下流。
暴力判斷是否被夾在一線段的兩端點中,再以分點公式算交點判斷高低,
取交點比目前水流源點低的最高的端點,挑其低的端點為新的源點,反覆下去。
分點公式分子分母打反竟然 sample 可以全過…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:17
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11402 Accepted
時間: 2009/07/08 Wed 18:04:13
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 11402 Accepted
時間: 2008/04/23 Wed 15:39:11
給一個 0 和 1 的字串以及許多次操作,每次操作對某一段作用,
有四種情形,全設為 1、全設為 0、0 和 1 反轉或是回報這一段中 1 的個數。
先將所有操作讀入、切割(離散化)之後再去做操作,記每一段的 1 的個數。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:04:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 865 Accepted
時間: 2009/07/08 Wed 18:04:32
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 865 Accepted
時間: 2008/04/23 Wed 15:49:41
給哪些字元要加密成哪些字元,然後給一篇文章,加密後輸出。
沒指定要加密成什麼字元的不要理它,照原樣輸出。
超級白痴題,直接置換後輸出即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:22
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 897 Accepted
時間: 2009/07/08 Wed 18:04:33
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 897 Accepted
時間: 2008/04/23 Wed 16:35:23
給一數,試求比它大、比比此數大的最小的十的次方數小的範圍中,
第一個符合條件的數。條件為不論每個位數如何變換位置均為質數。
已知除了 2、5 之外,其餘的數只要位數中有 1、3、7、9 以外的數,均不合。
用 DFS 枚舉之即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:23
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11424 && 11426 Accepted
時間: 2009/07/08 Wed 18:04:34
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 11424 && 11426 Accepted
時間: 2008/04/24 Thu 10:47:25
for(i=1, sum=0; i<n; i++)
{
for(j=i+1; j<=n; j++)
{
sum += gcd(i, j);
}
}
前者詢問多,n 比較小,後者反之。
討論板說用篩法找 phi,phi(n) = n * (p1-1) / p1 * (p2-1 / p2) * ...
p1, p2, ... 為 n 之質因數,即 n 可表示為 p1^k1 * p2^k2 * ...
也就是尋找所有小於 n 且與 n 互質的數的個數的方法。
這樣可以找到所有與 n 的 gcd 為 1 的數量。
而和 n 的 gcd 為 d 者,則求與 n/d 互質者即為所求。
因為,與 n/d 互質者中,有 1/d 是擁有 d 的因數的。
每 n/d 就擁有 1/d 的話,共有 d 塊 n/d,便恰為與 n/d 互質者的個數。
而要求互質是為了不讓 gcd 超出 d。
詢問多者直接算不夠快,要用 DP,將 1 到 n-1 的答案加上 n 的 gcd 總和即可。
詢問少者這樣也可以過,但要快點的話就對 phi 來 DP,
使得 DP[n] = DP[n-1] + phi[n],如此每次詢問只要 O(n) 時間計算然後回答。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:24
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 893 Accepted
時間: 2009/07/08 Wed 18:04:36
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 893 Accepted
時間: 2008/04/24 Thu 12:33:44
給一個日期和 n,算 n 天後的日期。
嗯就暴力吧,不過 n 有點大沒辦法一天天做…先算年份,再求日期吧。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:24
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 10941 Accepted
時間: 2009/07/08 Wed 18:04:37
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: [筆記] 10941 Accepted
時間: 2008/04/24 Thu 16:21:47
給兩個字串以及一個字串集合,試求在這兩字串的尾巴接上字串集合中的任意數目字串後
能否成為相同字串,能的話輸出最小步驟數。
開 Trie 加 BFS,以兩字串間的「差異」作為狀態。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [筆記] 10941 Accepted
時間: 2009/07/08 Wed 18:04:38
作者: sa072686 (衝一發台大資工!) 站內: sa072686
標題: Re: [筆記] 10941 Accepted
時間: 2008/04/24 Thu 17:04:13
排序然後加 prunning、queue size 800、初始兩字串長度 2000、nodes 300000。
※ 引述《sa072686 (衝一發台大資工!)》之銘言:
> 給兩個字串以及一個字串集合,試求在這兩字串的尾巴接上字串集合中的任意數目字串後
> 能否成為相同字串,能的話輸出最小步驟數。
> 開 Trie 加 BFS,以兩字串間的「差異」作為狀態。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.45.241(台灣師範大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [學術] 10471 Accepted
時間: 2009/07/08 Wed 18:04:40
作者: sa072686 (人生就是一次次的收卡) 站內: sa072686
標題: [學術] 10471 Accepted
時間: 2008/07/29 Tue 18:55:57
給一棵 tree,有一 greedy 的方式:指定一個塗點的順序,依序在該點上
塗上可塗的顏色中編號最小者,使得相鄰兩點不同色,需使用 k 種顏色。
那麼換個方式,試求一棵 tree 使得 greedy 至少要塗 k 種顏色。
node 的 degree 需小於 k,node 數不得超過 2^(k-1),點編號 1 到 N。
一棵 tree 在一個 node 上塗第 m 種顏色時,當且僅當它有 m-1 個相鄰點已塗 1~m-1
這些顏色時。因此遞迴求解相鄰點的塗色即可。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 0265 (ACM 10280) Accepted
時間: 2009/07/08 Wed 18:04:42
作者: sa072686 (人生就是一次次的收卡) 站內: sa072686
標題: [筆記] 0265 (ACM 10280) Accepted
時間: 2008/09/19 Fri 08:37:46
卡好久終於過了,真開心。
原本是在 ACM 剛好卡著過,NTUJ 時限嚴了點就裂了…
不過改方法之後快好多好多啊。
首先一樣,如果下限是上限的 n %,那麼在超過上限乘以 n 之後一定可行。
所以如果要求的數目有超過,就直接輸出 0,這樣保證搜尋範圍不會超過 45 萬。
雖然這題是個背包,但是 450000 * 100 * 225 還是太慢…
就算用 list 只記錄還沒拿到過的,略過已確定可行者,還是太慢。
後來想說範圍可能有好多重覆的,就改成把所有可以放的數字建表全部 or 起來,
然後對於每種情形去枚舉所有可能數字,就從 TLE 變 0.020…
這樣最差還是 450000 * 4500,乍看之下好像快了不多…不過實際跑起來差很多。
還有在枚舉所有可能數字時,一發現可行就可以剪掉換下一個情形了。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.112.240.202(台灣大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:26
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11087 Accepted
時間: 2009/07/08 Wed 18:04:44
作者: sa072686 (人生就是一次次的收卡) 站內: sa072686
標題: [筆記] 11087 Accepted
時間: 2008/09/24 Wed 02:59:13
嘖好久都不能傳的題目,球主日紀念題。
給 n k 以及 n 個數,求配對 i, j 使得 i+j % k == 0 之數量。
i+j 和 j+i 視為相同,同一數不得使用兩次或以上,兩配對若數字完全相同也視為相同
看來我的想法並沒錯嘛,把 mod k 相同的東西放一起,把 mod k == 0 or k/2
視為特例計算,把重覆出現的先算一對。小心會有負數,
當 p < 0 求 p%q 答案為 (q+(p%q)) % q
而不是 -(p%q),要注意一下…
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.112.240.202(台灣大學)
→ godgunman 推:這題 .. XDDDD 0924 21:48
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 11547 Accepted
時間: 2009/07/08 Wed 18:05:01
作者: sa072686 (人生就是一次次的收卡) 站內: sa072686
標題: [筆記] 11547 Accepted
時間: 2008/12/05 Fri 20:32:03
簡直腦殘。照它運算做就好了…取十位數,記得絕對值一下。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.112.30.107(台灣大學)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:05:28
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [中譯] ACM#10130 題目中譯
時間: 2009/07/08 Wed 18:44:02
作者: sa072686 (人生就是一次次的收卡) 站內: sa072686
標題: Fw: [中譯] ACM#10130 題目中譯
時間: 2009/07/08 Wed 18:10:56
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (阿南) 站內: Programming
標題: [中譯] ACM#10130 題目中譯
時間: 2007/07/21 Sat 23:57:22
Problem#10130 超級特價
這是一個在SuperHiperMarket的超級特價。每個人可以用很低的價錢買走每一樣東西的一
件物品(像是一台電視、一根胡蘿蔔)。我們和一整個家庭到了SuperHiperMarket,每個人
會盡可能地拿走商場裡的東西。我們已經有了每樣東西的價格和他們的重量的清單;我們
也知道每個人可以承受的最大重量為何,那麼請問,我們可以在超級特價中所獲得物品的
最大總價值為何?
註記:每個人每樣東西只能買走一件,但是可以買走很多樣東西。
輸入格式
這個測試資料由T筆資料組成,T(1<=T<=1000)將會在測試資料的第一行被給予。
每筆測試資料包括一個單行的整數N(1<=N<=1000)表示物品種類的數量,接下來的N行裡
面包含著兩個整數P和W。P(1<=P<=100)代表該物品的價格,W(1<=W<=30)代表該物品的重
量。
接下來的一行有一個整物G(1<=G<=100),代表著這個家庭成員的數量,在接下來的G行中
每行代表著這個家第i(1<=i<=G)個人可以承受的最大重量MW。
輸出格式
每筆測試資料必須決定一個整數。請印出整個家庭可以獲取的商品之最大價值。
範例輸入
2
3
72 17
44 23
31 24
1
26
6
64 26
85 22
52 4
99 18
39 13
54 9
4
23
20
20
26
範例輸出
72
5
--
「我們都別向命運低頭,認輸的人才是真的輸了!」
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_220.132.136.186(HiNet)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:56
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: 〔學術〕約瑟夫問題DP解
時間: 2009/07/08 Wed 18:44:03
作者: sa072686 (人生就是一次次的收卡) 站內: sa072686
標題: Fw: 〔學術〕約瑟夫問題DP解
時間: 2009/07/08 Wed 18:21:30
※ 本文轉錄自 [Programming] 看板
作者: gba356 (瑪利歐-有關各板上的文,) 站內: SparkleNot
標題: 〔學術〕約瑟夫問題DP解
時間: 2007/08/17 Fri 17:50:20
以下是剛剛整理完成的,我將他PO在這:
=======
=約瑟夫問題=
=======
約瑟夫問題(或約瑟夫排列)是一個資訊科學和數學的理論問題。
有n個帶處決的人圍成一個圓圈,當一個人被處決時,往下數過k-1個人,並處決第k
人。重複此步驟,直到只剩一人留下並獲得自由。
我們的任務是給定n和k的值,求出生存者的編號。
==歷史==
這個問題是源自於弗拉維奧.約瑟夫斯(Flavius Josephus),一個一世紀的猶太
歷史學家。根據傳說,他和四十名同夥的士兵被羅馬士兵困在一個洞穴中。他們決定為成
一個圈,用間格為三的方式一個一個的自殺。但約瑟夫並不想死,他想和他的隨從投降羅
馬大軍。
但事實上,他們並不是取間隔為三輪流自殺的。他們也沒有站成一個圈或是正方形
,這個傳說也沒有告訴我們,約瑟夫擁有高人一等的代數能力。我們唯一知道的是,約瑟
夫活下來了,但原因可能是運氣好或是神的庇祐,或可能是剩下的人投降羅馬人了。
==問題解==
我們假設每數兩人便處決一人,也就是說,k=2。我們以遞迴表示我們的解法,令f(n)表
示在最初n人情況下的生存者。第一次走完圈圈時,編號偶數的人都會死,第二次是新的
第二個人處決,然後是四次…以此類推。 若初始人數n為偶數,則跑完一次圓圈位置x的
人,原來是站在2x-1。因此我們得到以下遞迴式:
f( 2n ) = 2f( n ) - 1
又若初始人數n為奇數,則每次站在一號的人都會死。因此目前站位置 x 的人,原先站在
2x+1,因此我們有以下遞迴關係:
f( 2n+1 ) = 2f( n )+1
因此我們對n和f(n)的關係建表:
n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
f(n) 1 1 3 1 3 5 7 1 3 5 7 9 11 13 15 1
因此我們可以得到f(n)=1若n是二的次方。因此如果我們善取m和l,且
0 <= l < 2^m
則
f( n ) = 2l+1
表中的值滿足了以上的式子。但數學需要嚴謹的證明,以下我們給了一個以歸納法完成
的證明:
====
=定理=
====
若n = 2^m + l 且 0<=l<2^m,則f( n ) = 2l + 1。
====
=證明=
====
這裡我們使用的是對n的完全歸納法。已知n=1時等式成立,我們只需要分別討論n是
奇數和偶數的情況就可以了。
1.若n是偶數,則選定l[1]和m[1],使得n/2=c^m[1]+l[1]且 0<=l[1]<2^m[1]。
注意,l[1]=l/2。我們得到f(n) = 2f(n / 2) - 1 = 2((2l[1]) + 1) - 1 = 2l + 1,且
此式滿足我們的假說。
2.若n是奇數我們取l[1]和m[1],滿足(n-1)/2=2^m[1]+l,且滿足 0<=l[1]<2^m[1]。
注意l[1]= (l - 1) / 2。因此同理我們可以得到,f(n) = 2f((n - 1) / 2) + 1 =
2((2l1) + 1) + 1 = 2l + 1。
由1.和2.我們可以完成完全歸納的證明,得証。
另外,如果n以二進位制表示成n=b0 b1 b2 b3… bm,則f(n)=b1 b2 b3…bm b0。這個證
明來自於n=2^m+l。
最容易完成這種題目的方法是使用動態規劃,我們得到以下遞迴關係:
f(n,k) = (f(n - 1,k) + k)模 n, 且 f(1,k) = 0
不証自明,這個演算法的時間複雜度 O(n),但對於小的k和大的n,有另外一種演算法。
第二個方法使用的也是動態規劃,但是時間複雜度為O(klogn)。他的演算法是建構在殺掉
k-th人,2k-th人,floor( n/k )-th人。
以上就是今天完成的啦,有錯請務必指正啊!
=亂碼已修正=
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_gba356 from_61.231.53.32(HiNet)
→Modify: gba356 at 2007/08/17 Fri 18:12:27
→Modify: gba356 at 2007/08/17 Fri 18:17:33
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:57
φ jack1 轉:到 [jack1] 看板,于 2010/02/10 Wed 15:22:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [函式] memory.h
時間: 2009/07/08 Wed 18:44:07
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [函式] memory.h
時間: 2009/07/08 Wed 18:29:23
※ 本文轉錄自 [Programming] 看板
作者: gba356 (瑪利歐) 站內: Programming
標題: [函式] memory.h
時間: 2008/02/16 Sat 17:53:07
在 memory.h 中,有許多以組合語言實作的函式,可供我們對記憶體做快速的運算。
例如,複製、移動、比較等。以下將介紹 memset(), memcpy(), memcmp(), memmove()。
另外,引入 <iostream> 或 <string>/<string.h> 也可以使用以下函式,但是引入
<memory.h> 會比以上兩個更具有可讀性。例如為了使用 memset() 而引入 <string> 就
會容易讓人一頭霧水。
memset() - memory-set
memset() 是四個函式中最常使用的函式。這個函式可以快速的將一塊記憶體填滿欲
指定的數值。用法如下:
memset ( void * ptr, int value, size_t num );
其中 ptr 為欲指定的陣列名稱, value 為欲指定值,以 1 byte 為單位,num 為
欲填滿之位元組數。
例如,
char s[N],t[N];
memset( s,'0',sizeof(char)*N );
這樣一來,s[N] 的內容就會全部被寫入為 '0' 了。另外,也可以這樣寫:
memset( s,'0',sizeof(s) );
兩者具有不同的意義,前者為"將 s[] 前 N 個格子填入 '0' ",後者為"將 s[] 全部
寫入為 '0' "。而我比較偏好後者,因為若只想寫入前三位,將 N 改成三即可。
另一方面,這個函式也可以拿來填充 int 等其他型態陣列。但由於 value 是
以 byte 為單位的,而 int 大小為 4 個 bytes ,因此 "除了填入 0 或 -1 以外,其他
都會出現預期外的值。"
例如:
int visited[N];
memset( visited,0,sizeof(int)*N );
就是將 visited[] 全部寫入零,可用來表示,全部點未拜訪過,因為零可以表示
false 。
而 memset( visited,-1,sizeof(int)*N ); 則可以將全部指定為 -1 ,也就是 true
,因為在 C/C++ 中,不是零的數值都被視為 true 。
memcpy() - memory-copy
memcpy() 功用如同其名,複製。除了複製之外,某些人喜歡以 memcpy() 來完成單純
的搬動動作。這在一般情況下是可以的,但是 "在起點記憶體和終點記憶體重疊時,會
發生錯誤"。因此若只是單純的搬動,請使用 memmove() 。
使用方法如下:
memcpy ( void * destination, const void * source, size_t num );
其中 destination 為終點記憶體的陣列名稱,source 為起點記憶體的陣列名稱,
而 num 代表需複製的位元組數。
舉例如下:
char source[N]="Sample string.",destination[N];
memcpy( destination,source,sizeof(char)*N );
這麼一來,destination[N] 的內容就會和 source[N] 完全一樣了。和 strcpy() 不同的
是,strcpy() 只會複製在字串結尾 '\0' 前面的字元,而 memcpy() 會連結尾後面的內
容一起複製。
memmove() - memory-move
memmove() 的用法和 memcpy() 完全相同,相異的地方在於,memmove() 可能會毀去
起點記憶體區塊的內容,而 memcpy() 不會。另外一個不同的地方是,memmove() 可以處
理起點和終點記憶體區塊重疊的情況。使用方法如下:
memmove ( void * destination, const void * source, size_t num );
舉例來說,若想將以下字串 s[] 中的 "TRASH-" 前面這段多餘的字串去掉的話,便可以這
樣寫,其中 &s[0] 為 "Sample" 欲移到的終點 s[0], s[6] 為 "Sample" 原來的位置,
而移動七個位元組則是 "Sample" 加上結尾 '\0' 的大小:
char s[N]="TRASH-Sample";
memmove( &s[0],&s[6],sizeof(char)*7 );
這麼一來,若輸出 s[] 的話,便可以得到 "Sample" 了。
memcmp() - memory-compare
memcmp() 可以快速的比較兩塊記憶體是否相同,由於是以組合語言實做而成且不必
比較字典序大小,因此若只是單純比較是否相等,會比 strcmp() 快上許多。
和 strcmp() 一樣,回傳零表示相等,其餘表達不等。
用法如下:
memcmp ( const void * ptr1, const void * ptr2, size_t num );
其中 ptr1, ptr2 為欲比較的兩陣列名稱,而 num 為大小。
舉例如下,範例程式可測試 memcpy()/memmove() 是否會毀去起點記憶體區塊的內容。
char source[N]="SampleString";
char destination[N];
memcpy( destination,source,sizeof(char)*N ); /* 測試 memcpy() */
if( memcmp( source,destination,sizeof(char)*N )==0 )
cout<<"Equal."<<endl;
else
cout<<"Unequal."<<endl;
memset( destination,'\0',sizeof(char)*N );
/* 歸零 destination[] */
memmove( destination,source,sizeof(char)*N ); /* 測試 memmove() */
if( memcmp( source,destination,sizeof(char)*N )==0 )
cout<<"Equal."<<endl;
else
cout<<"Unequal."<<endl;
而結果是,兩者都不會毀去。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_gba356 from_125.232.233.174(HiNet)
→ AikoSenoo 推:推一個 好詳細′▽`) 08/02/16
→ ghostleader 推:好棒的講義 技能習得 努力練習 08/02/16
→ gba356 推:發在靠邊 Homework28th 的原文都沒人看... 08/02/16
→ sa072686 推:學弟研究得真透澈XD 08/02/16
→ egg123 推:唔... 08/02/17
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:57
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/07/17 Fri 09:42:49
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:32:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [ACM#] 415解法圖解
時間: 2009/07/08 Wed 18:44:08
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [ACM#] 415解法圖解
時間: 2009/07/08 Wed 18:29:59
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (翔翼•藍洛) 站內: Programming
標題: [ACM#] 415解法圖解
時間: 2008/02/19 Tue 01:00:41
先PO著 細節再說
http://aikosenoo.googlepages.com/415.rar
另外 這是世界排名第2的try所用的解法。
--
「我要耕耘未來。
這裡,便是未來開端。」
──藍洛•[FGISC。Nanro] 未來開端
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
→ AikoSenoo 推:有兩個部份有錯Orz 08/02/19
→ AikoSenoo 推:β是atan(L/r) 08/02/19
→ AikoSenoo 推:面積的扇形部分 算法應該是 2 * γ/ 2 * pi 08/02/19
→ AikoSenoo 推:回去再修正 08/02/19
→Modify: AikoSenoo at 2008/02/19 Tue 09:05:13
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:57
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [筆記] 精密計時 - clock()
時間: 2009/07/08 Wed 18:44:09
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [筆記] 精密計時 - clock()
時間: 2009/07/08 Wed 18:30:48
※ 本文轉錄自 [Programming] 看板
作者: gba356 (瑪利歐) 站內: Programming
標題: [筆記] 精密計時 - clock()
時間: 2008/02/19 Tue 22:23:06
原文請見靠邊站 Homework28th 板。
[作者] gba356 (瑪利歐) [看板] Homework28th
[標題] [筆記] 精密計時 - clock()
[時間] Tue Feb 19 22:21:02 2008
───────────────────────────────────────
在演算法與資料結構這門學科中,複雜度分析是十分重要的課題。而透過對執行時間
的觀察,我們可以最直接地感受到複雜度的影響。因此計時一程式,或是其中的一道程序
,是十分必要的。
而在 C/C++ 中,<time.h>/<ctime> 提供了十分完整的時間相關函式。今天的課題只
有一個,計時。
在講解 clock() 之前,要先講解一種新定義的型態,clock_t 。 clock_t 是
<time.h>/<ctime> 中以 typedef 定義的型態,用以紀錄 "程式開始執行至今的毫秒數
",它的型態原型是 long int 。
clock() 的使用方法十分簡單,語法如下:
clock_t clock ( void );
既然使用 clock() 可以得知程式執行後的相對時間,我們便可以在欲計時的程序前
後記錄 clock() 值,進而算出該程序所使用的時間。
範例如下,請閱讀註解,<algorithm> 中的 sort() 函式就不說明了,這支小程式可
以計算以 <algorithm> 中的 sort() 排序 n 個亂數需要的時間。
#include<iostream>
#include<algorithm> /* 引入 sort() */
#include<ctime> /* 引入 clock(), time(), rand() */
#define N 4000000
using namespace std;
int n,s[N]; /* n: 欲排序的個數 */
clock_t start,stop; /* 碼表的開始點與結束點 */
int main()
{
srand( time( NULL ) ); /* 設定 rand() 用的亂數種子 */
while( cin>>n )
{
for( int i=0;i<n;i++ ) /* 寫入 n 個亂數 */
s[i] = rand()%N;
start = clock(); /* 計時開始 */
sort( s,s+n ); /* 排序,即欲計時的程序 */
stop = clock(); /* 計時結束 */
cout<<"Sorting "<<n<<" element(s) needs "
<<( stop-start ) <<" millisecond(s)."<<endl;
/* Δt = stop-start (ms) */
}
}
另外,clock() 可以做倒數計時的函式,以後有空會講解。
--
Origin StandAway.twbbs.org 《203.64.26.27》 建中電研㊣靠邊站
█▉██•▏█▉▏█▏▏█◣▏██▏▏▏▏██▏ . ┌╨╨╨╨╨╨╨╨┐
█▇▇▏ ▏▇•▏▏▏▏▉•▏▇•▏▏▏▏▇•▏█• ) ckeisc.org │
▇▇˙▏ ▏ ˙▏▏•▏█•▏ ˙▏█•▏ ▉▇▇˙ └╥╥╥╥╥╥╥╥┘
From 218-161-125-187.dynamic.hinet.net( 吃人的HiNet )
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_gba356 from_218.161.125.187(HiNet)
→ AikoSenoo 推:推一個 學弟GJ! 08/02/19
→ gba356 推:謝謝學姊 >///< 08/02/19
→ SKYLY 推:馬叔好強大!!! <(_ _)> 08/02/19
→ sa072686 推:學弟好厲害 >////< 08/02/20
→ egg123 推:謝謝瑪叔m(_ _)m 08/02/20
→ vanillagirl 推:用到了:)謝謝學長~! 08/06/16
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:57
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [學術] 96學年度台大資工甄選入學程設組題目
時間: 2009/07/08 Wed 18:44:10
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [學術] 96學年度台大資工甄選入學程設組題目
時間: 2009/07/08 Wed 18:32:09
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (翔翼•藍洛) 站內: AikoSenoo
標題: [學術] 96學年度台大資工甄選入學程設組題目
時間: 2008/03/29 Sat 13:41:43
一、
一個圖形是由m個垛所組成,每個垛是由m個球為底所組成的。
給你一個N(N<1000),求要第幾個圖形的球數總和可以被N整除。
Input
23
output
20
/*翻譯一下,這題有夠拗口。*/
總之就是堆球的,第一層1個,第二層3個,第三層6個以此類推
要注意的是他是算總和,也就是
m = 1 ===>1
1
m = 2 ===>5
1 1
3
m = 3 ===>15
1 1 1
3 3
6
以此類推。
二、
給你一個計算式,計算式內有運算元和運算子
運算子只包含(+、-、*、/)
且運算元的範圍是[0, 1000]
輸入最多不會有超過50個運算元,且不含括號。
每個運算子與運算元之間會有一個空白隔開。
請輸出其運算結果(注意運算順序,要先乘除後加減)
Input
3 - 5 * 6
Output
-27
三、
給你一堆牌堆,當兩牌堆最上層的兩張牌數字相同時即可消掉,並獲得等同於
牌面的分數。若兩排堆最上面兩張牌數字差為1時亦可消掉,但只能獲得1分
求將所有牌消掉所能獲得的最大值。
輸入包含多筆測試資料,第一行N為測資筆數。
每筆測試資料的第一行p為牌堆數目(2<=p<20)
接下來的p行,每行的第一個數字Ci為此牌堆的牌總數(0<=Ci<=12)
全部的牌總數不會超過70,且(C1+1)*(C2+1)*...*(Cp+1)<=4000000
如果沒有辦法把所有牌消掉,請輸出0
Input
2
4
1 1
1 2
1 3
1 3
5
2 20 30
2 40 50
2 30 60
2 70 80
Output
4
0
四、
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
一塊地區所種植的樹以如上方式排列成正三角形,現在有幾棵樹生病了,
為了防止感染到其他的樹,所能做的方法就是隔離。
但是隔離的區塊一定要是正三角形,給你生病的樹的編號,請求出能圍住
這些樹之最小範圍的正三角形的三個頂點編號。
測試資料的第一行有個數字N,代表病樹的總數 N<=38000 (實際上是37XXX 我忘了XD)
Input
3
6 9 14
4
6 9 14 20
Output
6 13 15
6 18 21
--
「我要耕耘未來。
這裡,便是未來開端。」
──藍洛•[FGISC。Nanro] 未來開端
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
→Modify: AikoSenoo at 2008/03/29 Sat 15:41:20
→Modify: AikoSenoo at 2008/03/29 Sat 15:45:18
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [中譯] ACM# 702
時間: 2009/07/08 Wed 18:44:11
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [中譯] ACM# 702
時間: 2009/07/08 Wed 18:32:37
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (翔翼•藍洛) 站內: Programming
標題: [中譯] ACM# 702
時間: 2008/03/29 Sat 20:47:44
The Vindictive Coach
The coach of a football team, after suffering for years the adverse comments
of the media about his tactics, decides to take his revenge by presenting his
players in a line-up in such a way that the TV cameras would be compelled to
zigzag in a ridiculous bobbing motion, by alternating taller and shorter
players. However, the team captain objects that he must be the first of the
line by protocolary reasons,and that he wants to be seen in the best possible
light: that is, he should not have a taller colleague nest to him unless
there is no alternative (everyone else is taller than him). Even in this
case, the height difference should be as small as possible, while maintaining
the zigzag arrangement of the line.
一個足球隊的教練在遭受好幾年對於他所用戰術的負面評價之後,他決定要安排他的球
員排成一個特別的隊伍──不停地交替高矮的球員──用此來報復。這個特別的隊伍會使
得這些電視媒體的相機和攝影機必須要一直做可笑的上下來回的動作。然而,這個隊伍的
隊長拒絕這樣提議,因為一些協定過的原因,他必須是隊伍的第一個,而且:他希望能夠
在最好的鎂光燈位置。換而言之,他那群不能有人比他高,除非沒有替代方案(也就是其
他人都比他高)。但就算是在這樣的情況之下,身高差還是應該要盡可能地小,同時也要
保持隊伍的高高低低狀態。
With this condition the coach addresses an expert in computation (i.e. you)
to help him find the number of different alignments he may make, knowing that
all players have a different height. They are always numbered by stature
starting by 1 as the shortest one. Of course the number of players may be
arbitrary, provided it does not exceed 22.
在這樣的情況下,這名教練寫信給了一個計算的專家(換句話說就是你)來幫他找出他應該
要把隊伍排成幾個不同的列隊。每個球員的身高都不同,所有球員的身高都是從1開始(也
就是最矮的一個),不過當然啦,球員的總數是任意的,不過不會超過22。
Input
It is a set of lines, each of which contains two positive integers N and m
separated by a blank space. represents the number of players in the line-up
and m the captain's number, who as told is always the first of the line.
在每筆測資之中都會包含兩個正整數N和m,中間用一個空白隔開。它們代表的意義分別為
球員總數與隊長的號碼(就是那個說要在隊伍最前面的那一個人)
Output
For every line of the input a line with positive integer indicating the
number of possible alignments under the above conditions.
針對每一組輸入,請輸出所有可能的解。
Sample Input
3 1
3 3
4 1
Sample Output
1
1
1
--
「我要耕耘未來。
這裡,便是未來開端。」
──藍洛•[FGISC。Nanro] 未來開端
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
→ sa072686 推:感謝 >////< 08/03/29
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 1
時間: 2009/07/08 Wed 18:44:13
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 1
時間: 2009/07/08 Wed 18:33:46
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (Maktub.) 站內: Programming
標題: [教學] 北一女中集訓用•DFS part 1
時間: 2008/07/27 Sun 14:36:46
DFS,深度優先搜尋(Depth First Search)的簡稱,又稱為縱向搜尋法。
*什麼是DFS?
顧名思義,是以Depth,也就是深度為優先考量的一種搜尋法。所謂的搜尋法,在圖論
中,就是把所有的節點(node)走一遍的方法。
也就是我以走得深為優先考量,當遇到末端時,才走向其他的路。
請注意所謂走得深是指「比這層深」,而不是在於「哪條比較深」,所以只要是比自
己深的點就可以走。而且,在一個點上的時候,我們只會知道有跟它連接的路有哪些,
而不知道這些點通往哪裡。
另外,DFS通常也會有著「循序」、「漸增」的特質,也就是當我們要從1開始走,可
以走的點有3 4 5三個, 那麼我們會先走到3,然後等到三那條走到底了,才會回來
走4,同理走完4才會走5這樣。(不過其實這是一種習慣,並非絕對,如果你要漸減也
是可以的。)
DFS的用途非常廣泛,不一定要侷限用於「圖的搜尋」,一般像是排列組合、尤拉路徑
、八皇后問題等等的,都可以用到DFS。
*從圖型來看
現在我們有一個圖型如下:
5
/ \
1-2-4-8
\ /|
3-6-7
假設起點是1,連接的點有2和3,那麼以深度優先往下看會先走到2
5
/ \
1-2-4-8
\ /|
3-6-7
以2有連接的點來說:
1.走走過的點一定是繞路
2.以深度優先為考量
3.循序漸增的特質
所以在4.5之中我們會先走到4
5
/ \
1-2-4-8
\ /|
3-6-7
4就沒有什麼好疑惑的了,往下繼續便可以走到8
5
/ \
1-2-4-8
\ /|
3-6-7
以8來說呢,他會在5 6 7之中先走到5
可是走到5就可以發現:沒有其他未走過而且可以走的路可以走
這時我們便有一個back倒退的動作;也就是會回到上一個「仍有其他路可走」的點
所以走過5之後,便又會走回8
//順帶一提,back回去的這個動作,一般來說我們稱為backtracking,也就是回溯
//其意義就是搜尋所有可能解,並於失敗時回到上一步再找其它可能解
而這時8,就可以選擇往6走去
5
/ \
1-2-4-8
\ /|
3-6-7
這時6就可以走到3或7
同樣地先走3,然後發現3沒法走其他路
就會退回6
然後走到7 這時所有的點就都被走完了
我們來看一下只保留走過路徑的圖形:
5
\
1-2-4-8
/
3-6-7
而其拜訪順序則為1 2 4 8 5 6 3 7
/****************************************************************/
/* 練習時間 */
/* 5-7 */
/* (1) /| \ 其深度優先搜尋的拜訪順序為何? */
/* 1-3-4-6 */
/* \ | */
/* 8-9 */
/* (2) 1-2-3-4-8 */
/* \ / */
/* 7-5-6 */
/****************************************************************/
*實做的方式
一般而言,我們會使用遞迴或是堆疊、串列的方式來實做
普遍來說以使用遞迴較為簡單、乾淨,也能讓程式呈現簡潔有力的感覺。
至於路徑,也就是有沒有路,我們也可以使用二維陣列來表現
1 2 3 4 5 5
1 0 1 0 1 1 / \
2 1 0 0 1 0 1-2 3 像左邊那樣的一個二維陣列,
3 0 0 0 1 1 \|/ 就可以表示這個圖
4 1 1 1 0 0 4
5 1 0 1 0 0
補充:
遞迴其實在電腦裡面是在幕後幫你做好了很多事情。
早期的程式語言並不支援遞迴的概念
實際上遞迴是有用到堆疊的暫存區的
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
→ sa072686 推:後來問了瑪莉歐學弟,應該是backtrac"k"ing 08/07/30
→Modify: AikoSenoo at 2008/07/30 Wed 23:22:39
→ AikoSenoo 推:似乎是 這份是老講義了 08/07/30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 2
時間: 2009/07/08 Wed 18:44:15
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 2
時間: 2009/07/08 Wed 18:33:47
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (Maktub.) 站內: Programming
標題: [教學] 北一女中集訓用•DFS part 2
時間: 2008/07/27 Sun 14:41:44
ACM Q291 - The House Of Santa Claus
屬於遞迴(Recursion)和深度優先搜尋(DFS)的題目,DFS最佳入門題。
觀察每一個點和其他點的連接,我們可以用一個二維陣列紀錄其關係
0 1 2 3 4 5
int map[6][6]= {{0, 0, 0, 0, 0, 0}, 0
{0, 0, 1, 1, 0, 1}, 1
{0, 1, 0, 1, 0, 1}, 2
{0, 1, 1, 0, 1, 1}, 3
{0, 0, 0, 1, 0, 1}, 4
{0, 1, 1, 1, 1, 0}}; 5
因為陣列是從0開始的,所以要注意不要把編號對應錯了。
如同DFS的名字一樣,他是以「深度」為優先考量
意即,在到達最底層之前,他不會往同樣深度的點走,也不會往回走
以第一、第二組output來說
123153452
也就是經歷了如下的過程:(最前面的標號是深度)
1.(1)從1出發→依序搜尋往1~5的路哪條可通
(2)搜尋到往2可通,走向2,把走過的路標記掉。
2.(1)從2出發→依序搜尋往1~5的路哪條可通
(2)搜尋到往3可通,走向3,把走過的路標記掉。
3.(1)從3出發→依序搜尋往1~5的路哪條可通
(2)搜尋到往1可通,走向1,把走過的路標記掉。
4.(1)從1出發→依序搜尋往1~5的路哪條可通
(2)搜尋到往5可通,走向5,把走過的路標記掉。(剛剛往2的那條已經標記掉了)
5.(1)從5出發→依序搜尋往1~5的路哪條可通
(2)搜尋到往3可通,走向3,把走過的路標記掉。
6.(1)從3出發→依序搜尋往1~5的路哪條可通
(2)搜尋到往4可通,走向4,把走過的路標記掉。(剛剛往1的那條已經標記掉了)
7.(1)從4出發→依序搜尋往1~5的路哪條可通
(2)搜尋到5可通,走向5,把走過的路標記掉。
8.(1)從5出發→依序搜尋往1~5的路哪條可通
(2)搜尋到往2可通,走向2,把走過的路標記掉。(剛剛往3的那條已經標記掉了)
9.==>在2發現所有的路都走完了,且此刻在深度為9的點上,印出結果,Return。
8.==>在5發現沒有其他的路可走了,恢復往2走的路,Return
7.==>在4發現沒有其他的路可以走了,恢復往5走的路,Return
6.==>在3發現沒有其他的路可以走了,恢復往4走的路,Return
5.(1)在5,繼續剛剛在此層的搜尋
(2)發現仍可往4走,走向4,把走過的標記掉
重複這個過程,就可以得到所有的答案:)
寫法要練習就是了~
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
→ vanillagirl 推:說實在我ㄧ直不懂要留陣列[0]的目的(?) 08/07/30
→ AikoSenoo 推:就是比較直觀啊 直接對應索引~ 08/07/30
→ vanillagirl 推:恩~了解~ 08/07/31
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:58
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 3
時間: 2009/07/08 Wed 18:44:17
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 3
時間: 2009/07/08 Wed 18:33:47
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (Maktub.) 站內: Programming
標題: [教學] 北一女中集訓用•DFS part 3
時間: 2008/07/27 Sun 15:14:40
本篇是引導式思考,採用例題為ACM Q441- Lotto
1. 看到題目,妳如何去把這題使用DFS來做?
(請闡述想法,不需要寫出任何的程式碼。)
2. 如何遞迴?
(1) 什麼情況下要return?
(2) 如何紀錄過程中走過的點?
(3) 如何標記出過程中走過的點?
(4) 如何去走比自己大的點?
(5) 遞迴應該要傳入哪些參數值?
3. 請列出必要的變數及陣列
4. 請試著按照上面的資料,撰寫程式碼。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 4
時間: 2009/07/08 Wed 18:44:19
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 4
時間: 2009/07/08 Wed 18:33:47
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (Maktub.) 站內: Programming
標題: [教學] 北一女中集訓用•DFS part 4
時間: 2008/07/27 Sun 15:20:54
本篇是引導式思考,採用例題為ACM Q441- Lotto
1. 看到題目,妳如何去把這題使用DFS來做?
(請闡述想法,不需要寫出任何的程式碼。)
每一個數字都是節點,由小而大地來跑DFS。
2. 如何遞迴?
(1) 什麼情況下要return?
1. 深度已達6
2. 無路可走時
(2) 如何紀錄過程中走過的點?
開一個陣列存放
(3) 如何標記出過程中走過的點?
開一個陣列用來標記,未走過標1,走過標0
搜尋時走過的點不走
(4) 如何去走比自己大的點?
for迴圈從比自己大的點開始走
(5) 遞迴應該要傳入哪些參數值?
目前所在的點是Lucky Number編號第幾個,目前的深度
3. 請列出必要的變數及陣列
變數:
k、傳入值的n(上一個Lucky Number編號)和len(目前深度)
i(for迴圈用)
陣列:luckynum[] 、ans[](放走過的點)、check[](標記點用)
4. 請試著按照上面的資料,撰寫程式碼。
#include<stdio.h>
int k;
int lunum[15], ans[15], check[15];
void visit(int n, int len)
{
int i;
if(len >= 6)
{
printf("%d", ans[0]);
for(i=1; i<6; i++)
printf(" %d", ans[i]);
printf("\n");
}
else
{
for(i=n+1; i<k; i++)
{
if(check[i] == 1)
{
ans[len] = lunum[i];
check[i] = 0;
visit(i, len+1);
check[i] = 1;
}
}
}
}
int main()
{
int i, cnt = 1;
while(1)
{
scanf("%d", &k);
if(k == 0) break;
if((cnt++) != 1) printf("\n");
for(i=0; i<k; i++)
{
scanf("%d", &lunum[i]);
check[i] = 1;
}
visit(-1, 0);
}
getchar();
return 0;
}
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 5
時間: 2009/07/08 Wed 18:44:22
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [教學] 北一女中集訓用•DFS part 5
時間: 2009/07/08 Wed 18:33:47
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (Maktub.) 站內: Programming
標題: [教學] 北一女中集訓用•DFS part 5
時間: 2008/07/27 Sun 15:25:53
其他DFS的題目
10098(有重複的問題)
124(較難)
10344
574
八皇后問題
http://blog.pixnet.net/aikosenoo/post/8249576
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_122.116.50.107(HiNet)
→ sa072686 推:重複有O(1)判斷法,124可以用bit-mask輔助 08/07/30
→ AikoSenoo 推:學妹不懂那個啦(默) 08/07/30
→ gba356 推:一樓嚇死人 08/07/31
→ SKYLY 推:bit-mask 耶XDD 08/08/12
→ suhorng 推:那用STL的bitset好了ˇ 08/08/20
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:46:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [學術] 最大矩形
時間: 2009/07/08 Wed 18:44:24
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [學術] 最大矩形
時間: 2009/07/08 Wed 18:36:15
※ 本文轉錄自 [Programming] 看板
作者: suhorng (su_horng) 站內: Programming
標題: [學術] 最大矩形
時間: 2009/02/11 Wed 21:50:24
分隔線 (指) XD
--
最 大 矩 型
之 O(n^2) 算法
--
0000000000000000
0000011111000000
0011111111100000
0111111111110000
1111111111110000
1111111111111111
0000000000000000
好啦,就拿這筆測資來說明吧XD。
--
0000000000000000
0000011111000000
0011122222100000
0122233333210000
1233344444320000
2344455555431111
0000000000000000
首先呢,請先用DP求出每一縱列的重複次數。
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
接下來,讓我們用堆疊來輔助計算。
先引入一個結論,堆疊中的值「從下到上」必須是遞增的。
此外,為了方便起見,我們直接從最後一行開始執行∼
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 2 位置= 1│
└────────┘
首先碰到的第一個高度是2,把它放入堆疊。
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
ESP →├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
碰到3, 3 > 2 ,因此把3放入堆疊。
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ESP →├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ESP →├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ESP →├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ESP →├────────┤
1233344444320000 │高度= 5 位置= 6│
2344455555431111 ├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
唷呵,又碰到一個比4大的了,把5放入堆疊吧!
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ESP →├────────┤
1233344444320000 │高度= 5 位置= 6│
2344455555431111 ├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ESP →├────────┤
1233344444320000 │高度= 5 位置= 6│
2344455555431111 ├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ESP →├────────┤
1233344444320000 │高度= 5 位置= 6│
2344455555431111 ├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ESP →├────────┤
1233344444320000 │高度= 5 位置= 6│
2344455555431111 ├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ESP →├────────┤
1233344444320000 │高度= 5 位置= 6│
2344455555431111 ├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
咦 ? 現在碰到的4比堆疊頂的5小了。
換句話說,高度是5的矩形已經到了「盡頭」。
把5給pop出來順便計算面積吧 !
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ESP →├────────┤
1233344444320000 │高度= 5 位置= 6│
2344455555431111 ├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
咦 ? 現在碰到的4比堆疊頂的5小了。
換句話說,高度是5的矩形已經到了「盡頭」。
把5給pop出來順便計算面積吧 !
area = 高度5 * (位置11-位置6) = 25
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ESP →├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
咦 ? 現在碰到的4比堆疊頂的5小了。
換句話說,高度是5的矩形已經到了「盡頭」。
把5給pop出來順便計算面積吧 !
area = 高度5 * (位置11-位置6) = 25
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ESP →├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
啊哈!又碰到一個比堆疊頂的小的了
pop出來並計算面積吧 !
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ESP →├────────┤
0000000000000000 │高度= 4 位置= 3│
├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
啊哈!又碰到一個比堆疊頂的小的了
pop出來並計算面積吧 !
area = 高度4 * (位置12-位置3) = 36
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
ESP →├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
啊哈!又碰到一個比堆疊頂的小的了
pop出來並計算面積吧 !
area = 高度4 * (位置12-位置3) = 36
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
ESP →├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
噢噢嘎XDDDDD !
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
ESP →├────────┤
│高度= 3 位置= 2│
├────────┤
│高度= 2 位置= 1│
└────────┘
噢噢嘎XDDDDD !
area = 高度3 * (位置13-位置2) = 33
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 2 位置= 1│
└────────┘
噢噢嘎XDDDDD !
area = 高度3 * (位置13-位置2) = 33
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 2 位置= 1│
└────────┘
噢噢嘎XDDDDD !
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 2 位置= 1│
└────────┘
噢噢嘎XDDDDD !
area = 高度2 * (位置13-位置1) = 24
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
噢噢嘎XDDDDD !
area = 高度2 * (位置13-位置1) = 24
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
嗯,所以呢 ?
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
你是不是忘了要把 1 放入堆疊啊XDDDDDD
堆疊現在是空的呀 (或說1比堆疊頂大 ?)
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 1 位置= 1│← 啊啊 這裡要特別
└────────┘ 注意一下,因為我
們在判斷 pop的時
後都是 堆疊頂>目
前高度,所以最後
再push進去的位置
要是「最後一個p-
op出來的位置。」
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 1 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 1 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 1 位置= 1│
└────────┘
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 1 位置= 1│
└────────┘
呼 ! 終於走到底了 !
最後呀,記得把Stack當中的全部pop出來喔 !
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
ESP →├────────┤
│高度= 1 位置= 1│
└────────┘
呼 ! 終於走到底了 !
最後呀,記得把Stack當中的全部pop出來喔 !
area = 高度1 * (位置17-位置1) = 16
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
呼 ! 終於走到底了 !
最後呀,記得把Stack當中的全部pop出來喔 !
area = 高度1 * (位置17-位置1) = 16
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
呼 ! 終於走到底了 !
最後呀,記得把Stack當中的全部pop出來喔 !
area = 高度1 * (位置17-位置1) = 16
--
0000000000000000
0000011111000000 ┌────────┐
0011122222100000 │ │
0122233333210000 ├────────┤
1233344444320000 │ │
2344455555431111 ├────────┤
0000000000000000 │ │
├────────┤
│ │
├────────┤
│ │
ESP →└────────┘
呼 ! 終於走到底了 !
最後呀,記得把Stack當中的全部pop出來喔 !
area = 高度1 * (位置17-位置1) = 16
--
感謝收看 XDDDDDD !
--
感謝收看 XDDDDDD !
--
--
→Modify: suhorng at 2009/02/11 Wed 21:51:18
→ suhorng 推:欸....引言過多不列入計算是哪招....我明明是手打的啊.. 0211 21:51
→ Molecule 推:因為有"--"之後都視為簽名檔 囧 0211 22:27
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:47:00
φ jack1 轉:到 [jack1] 看板,于 2010/02/10 Wed 15:20:53
→ sb283 推:借轉! 0911 17:23
φ sb283 轉:到 [sb283] 看板,于 2010/09/11 Sat 17:23:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Fw: [中譯] ACM Q10033 Interpreter
時間: 2009/07/08 Wed 18:44:26
作者: sa072686 (人生就是一次次的收卡)
標題: Fw: [中譯] ACM Q10033 Interpreter
時間: 2009/07/08 Wed 18:36:35
※ 本文轉錄自 [Programming] 看板
作者: AikoSenoo (生命的意義是經歷) 站內: Programming
標題: [中譯] ACM Q10033 Interpreter
時間: 2009/03/07 Sat 11:09:35
ACM Q10033- Interpreter
有一台電腦有10個registers且它的RAM有1000個words,而每一個register和每一段RAM之
中都有一個三位的整數(介於0和999之間,包含0和999)。這台電腦的指令(Instructions)
被編碼成一個三位的整數,儲存在RAM之中。其編碼的方式如下:
•100 代表停止
•2dn 代表把register d的值設成n ( 0<= n <= 9)
•3dn 代表把register d的值加上n
•4dn 代表把register d的值乘上n
•5ds 代表把register d的值設成register s的值
•6ds 代表把register d的值加上register s的值
•7ds代表把register d的值乘上register s的值
•8da代表把register d的值設成RAM[register a]的值
•9sa代表把RAM[register a]的值改成register s的值
•0ds如果register s的值不為0,則回到RAM[register a]
// 譯註:上方RAM[register a]代表第(register a的值)段RAM
所有register的值一開始都是000,RAM最初的值可從Input得知,第一個指令會被放在
RAM[0],其餘類推。在運算過程中若有超過1000的數,則取其除以1000的餘數。
Input
輸入的第一行包括一個單一的整數,代表有幾組測試資料,此行下方會有一行空白,每
兩組測資之間亦有一行空白。
每組測試資料會有數行(最多1000行),代表RAM之中的資料,如果沒有特別給予該段
RAM的資料,則該段RAM的資料即為000。
Output
每兩筆輸出之間有一行空白。
輸出只包含一個正整數,代表從開始到結束,此台電腦執行了多少個指令。你可以假
設執行一定會結束,且執行的次數不會超過int的範圍。
Sample Input
1
299
492
495
399
492
495
399
283
279
689
078
100
000
000
000
Sample Output
16
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_AikoSenoo from_114.32.0.42(HiNet)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 18:47:00
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [Ural] 1000
時間: 2008/06/30 Mon 19:43:52
就 A+B XDDD
min-cost max-flow?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:49:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [Ural] 1005
時間: 2008/06/30 Mon 19:55:36
一堆石頭分兩堆,重量差要最小。
2^n 的 DFS 就解了。
背包的話 weight 最大 200 萬,只算一半也有 100 萬,不會快多少…
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:49:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [Ural] 1009
時間: 2008/06/30 Mon 20:11:35
有多少長度恰 n 的 k 進位數。有連續的 0 不合法。開頭 0 不算在長度內。
簡單 DP,要嘛擺 0,要嘛擺 1~k-1,擺 0 時前面一定非零,擺 1~k-1 則任意。
以狀態 dp[n][m][o] 代表 n 位數,m 進位,o 代表擺 0 或非 0(以 0 和 1 區別)
dp[1][m][0] = 0;
dp[1][m][1] = k-1;
dp[n][m][0] = dp[n-1][m][1];
dp[n][m][1] = (dp[n-1][m][0]+dp[n-1][m][1]) * (m-1);
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:49:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [Ural] 1012
時間: 2008/06/30 Mon 20:28:11
1009大數版。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:49:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [Ural] 1013
時間: 2008/06/30 Mon 20:55:06
1012 極限版。
不記錄直接線性時間迴圈硬暴可解,不過塞 5 位的話…
1800 * 10 * 2 * 400 也不致於會爆。還是可以 DP 的。
CPU TIME 相同,不過 DP 的 mem 118XX
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:00
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [Ural] 1014
時間: 2008/06/30 Mon 21:19:01
給一數 n 求最小正整數 q 使得每位數乘積恰為 n。
簡單 greedy 但是很心機。小心 n == 1 答案為 1 以及 n == 0 答案為 10…
傳了十多次的樣子。
其它的話從 9 開始除回 2,然後記錄的序列反著輸出就好。
//我好像很懶地直接 sort 了…
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:00
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [Ural] 1017
時間: 2008/06/30 Mon 22:17:14
給 n 個積木,排成階梯,每堆高度需嚴格遞增,且至少要兩堆。問有幾種排法。
n^3 DP,排組好弱…
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:01
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0002 - Gold Coins
時間: 2008/07/09 Wed 22:24:02
第一天拿一元,之後兩天拿二元,之後三天拿三元,…
問第n天時共拿了幾元。
DP亂寫就過。直接硬算應該也可以。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
→ SKYLY 說:0001 勒? (誤) 0709 22:32
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:34
→ suhorng 推:我用 t(t+1)(2t+1)/6 , t 爆搜 (?) 0708 19:31
→ sa072686 推:頗眼熟的公式…XD 0708 19:52
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0003 - Shortest Prefixes
時間: 2008/07/09 Wed 22:25:09
給一堆字,求最短縮寫使得縮寫為其前綴且可與其它字分辨。
排序後與其前後比較至與前後均不同,即為縮寫。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:34
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0004 - Squares
時間: 2008/07/09 Wed 23:53:56
給許多點,試求能造幾組正方形。
排序,n^2 找任兩點,然後測試兩種可能方向。限編號範圍就不會重覆。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:36
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0005 - Longest Common Subsequence
時間: 2008/07/10 Thu 09:16:07
給n字串試求最長共同子序列。
明顯地長度不長,字串數卻不少。枚舉所有子字串和其它所有字串進行比對即可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from \229\173\184\231\167\145\228\184\173\229\191\131沒有故鄉 (沒有故鄉)
▲ Pointer 改@2008/07/10 Thu 09:20:11
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:36
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0001 - A+B Problem
時間: 2008/07/10 Thu 09:17:24
求A+B
此題有極強悍神妙之O(1)數學解。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from \229\173\184\231\167\145\228\184\173\229\191\131沒有故鄉 (沒有故鄉)
→ SKYLY 說:真是太神妙了!! 0710 10:12
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:37
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0006 - Good Problem
時間: 2008/07/10 Thu 09:18:43
給n字串,求任三字串lcs之最大值。
枚舉all pair做三維lcs即可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from \229\173\184\231\167\145\228\184\173\229\191\131沒有故鄉 (沒有故鄉)
▲ Pointer 改@2008/07/10 Thu 09:19:04
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:37
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0007 - Blackjack
時間: 2008/07/11 Fri 08:59:56
結果當初和蜥蜴討論好久的「難題」在看懂後變腦殘題…
二十一點,你可以看到手上的兩張牌和對方兩張的其中一張。
給你使用了幾組撲克牌,問手上兩張比對方兩張大的機率是多高。
如果自己沒有超過21點且,點數大於對方或對方超過21點,則勝利。
JQK視為10點,A可視為1或11,但視作11總和會超過21時,就只能視作1。
大腦殘,先算出已知分數再枚舉剩下那張牌所有可能性就好了。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from lcw (沒有故鄉)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:43
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0008 - Litmus Test
時間: 2008/07/12 Sat 20:30:36
化學難題。其實也不算太難啦,只是難理解而已,公式出來後直接解一元二次就好。
給四數,常數K,濃度(莫耳/每公升),每莫耳可解離出的H和鹼的莫耳數。
透過常數K = H * acid ions / acid,也就是解離掉的H的莫耳數乘上鹼的莫耳數,
然後acid是溶液中未解離部份的莫耳數。
因此可以先代nx, mx,也就是解離的部份,未解離即可依溶液濃度知其每公升的
莫耳數,代莫耳數-x,得K = nmx^2 / (p-x),n, m為溶解一單位莫耳所生成的
H和鹼的莫耳數,p為初始溶液濃度,K為常數,則可解一元二次方程式得公式解
(-K + sqrt(K^2 + 4mnpK)) / (2mn)
最後-log10(nx)即為所求。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:50:59
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0009
時間: 2008/07/21 Mon 00:12:54
給不超過 50 但至少 3 個點,有一點必為原點並且最多只有 3 個象限會有點存在。
這些點會構成凸多邊形,試求從原點開始逆時針走訪此多邊形所經過的節點。
不會有原點以外的點掉在座標軸上。
直接求凸包就好了。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:52:52
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0010
時間: 2008/07/21 Mon 00:13:57
給兩個二進制數字,輸出和的二進制表示法。最多 80 bit,加總後最多 81 bit,
輸出時要捨棄所有開頭無謂的 0。
A+B Problem 的二進制版。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:52:52
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0011
時間: 2008/07/21 Mon 00:15:35
給一個完整日期和一個只有月、日的日期(以下稱日期二),試求日期二離日期幾天,
以及日期二的完整日期(包含年)。有先後 1~7 天或是同一天、超出 7 天。
注意一天是 DAY,多天是 DAYS。
枚舉就好了。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:52:53
作者: sa072686 at 09/07/08
※ 本文轉錄自 [Pointer] 看板
作者: Pointer (Pointer) 站內: Pointer
標題: [學術] NTUJ 0058
時間: 2008/08/06 Wed 19:35:44
給 n 個點的位置,以及範圍 m,需在某些點上擺放某種東西,可以 cover 掉四周
距離 m 以內的點,試求 cover 所有點所需擺放最少數量為何。
先排序後枚舉過去,用 DP 加上一點 greedy 可以線性時間完成。
以狀態 dp[n] 代表 cover 1~n 所需的東西數,則若要 cover 點 i,
可先 greedy 找前面離 i 最遠但可以 cover 之的點 j,
擺放在 j 之後再看能夠 cover 到前面哪些點,設點 k 是 cover 的極限,
取 k-1 的解 +1 即為所求。不難知道若 m 個點可以 cover 前 n 個點,
則 m 個也必可以 cover 前 n-1 個點,所以可以 greedy 取之,因此為線性。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Pointer from 203.204.38.30 (和信超沒品)
→ Pointer 推:突然覺得根本沒必要dp,greedy取完就好了…我好弱Orz 0807 09:21
φ sa072686 轉:從 [Pointer] 看板,于 2009/07/08 Wed 18:53:06
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] APIO 解法
時間: 2009/07/08 Wed 19:06:14
作者: sa072686 ( 新的開始 ) 站內: sa072686
標題: [筆記] APIO 解法
時間: 2008/05/12 Mon 00:50:00
Beads
嗯,建表 n*m 會太大…但每個轉換點只有兩個珠子交換,
因此只需要記 2*m 個,所以先以鏈結串列串起來即可…
聽說這樣最後循序搜就可以過了,測資真弱 XD
如果把鏈結串列先行走訪一次轉為二維陣列,每組詢問
就可以用二分搜尋來搜尋,時間複雜度…
預處理掃過 m 個轉換器,O(m),再掃過表,動態配置
二維陣列來存,O(m)。
每組詢問 O(log m),共 q 組詢問的話是 O(q log m)。
q <= 300000, m <= 300000,是相當充裕的。
最慢的一組跑 0.44。
Roads
先將兩種路拆開,把混凝土先 union 起來,接著掃過一次
鵝卵石路,找出所有必要的先加進去,但不能大於 k 條。
若 k 條全加仍無解則無解,加完後不能連通亦無解。加的
時候,另外開一個 union 只放加進去的必要路。加完必要
路後,再補足到 k 條鵝卵石路,一邊 union,只要放第二
個 union 不要出現 cycle 都可以放。補完後再補混凝土路
直到全部連通即為所求。
想法:有些鵝卵石路是不加就不能連通的,一定要優先放。
接著補齊就好,因為如果混凝土可以弄到連通,則其中一些
改成鵝卵石路,還是一定可以連通起來,所以最後補足就好。
要維護兩個 union,掃過兩次鵝卵石路和兩次混凝土路,
約是 O(n) 乘上 union 的花費。
dna
題目的講法很明顯地提示了它是 DP,都說了,可從 j-1 序列
或從 j-1 序列放一個類型 1 序列…由於要計數,所以呢,
從尾巴做回來,不然不好計數。
dp[i][j][k] 記錄從第 i 個字開始到最後一個字,且第 i 個
字填小於等於 j 的字母,類型為 k 的方法數,設初始態 dp[n][i][j],
i<=4, k<=所求類型數,轉移方程為:
dp[i][j][k] = dp[i][j-1][k] +
(dp[i+1][j-1][k-1] + (dp[i+1][4][k] - dp[i+1][j-1][k]))
第二行僅當第 i 個字為 N 或是恰等於 j 時,才加上去。
題目說類型 k 可從類型 k-1 而來,先把放上 j-1 的部份先轉過來…
然後這格再放 j,這時如果下一個比 j 小,就是類型 k-1 加上類型 1 而來。
否則,則為類型 k 而來。回溯比較麻煩,要判斷掉在上述哪一種情形中…
字典序的情形,當然是放 j-1 的優先,然後是這個放 j,下一個字元放小於 j…
最後一種情形,由於有用減法,所以確定之後還要把減掉的加回去…
那麼,在做 DP 時是 O(n*4*k) = O(n*k),n為長度,k為類型。
回溯時亦同。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
→Modify: sa072686 at 2008/05/12 Mon 12:42:06
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 19:07:30
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 負債
時間: 2009/07/08 Wed 19:10:55
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 負債
時間: 2008/02/14 Thu 20:16:25
10092 - 二分圖匹配
983 - 暴力
911 - 數學
925 - 多端最短路徑
944 - 動態規劃
957 - 暴力建表
985 - 廣度優先搜尋法
986 - 動態規劃
995 - 廣度優先搜尋法
997 - 遞迴
815 - 排序
325 - 暴力
10600 - 最小花費生成樹
10616 - 動態規劃
10688 - 動態規劃
10245 - 暴力
11026 - 動態規劃
11127 - 深度優先搜尋法
11133 - 動態規劃
10928 - 暴力
11138 - 二分圖匹配
143 - 計算幾何
423 - 單端最短路徑
434 - 貪婪
10249 - 二分圖匹配
10273 - 暴力(使用鏈表)
10341 - 二分搜尋
11049 - 廣度優先搜尋法
11088 - 深度優先搜尋法
10094 - 規律
10821 - 貪婪、遞迴、樹
11081 - 動態規劃
11099 - 動態規劃
10566 - 二分搜尋
10167 - 計算幾何
300 - 暴力
397 - 暴力
520 - 暴力
410 - 排序
634 - 計算幾何
10454 - 動態規劃
11152 - 數學
638 - 枚舉、排序
11136 - 計數排序法、枚舉
632 - 字串、排序
377 - 進位制
10718 - 貪婪
187 - 暴力
347 - 暴力
391 - 暴力
362 - 暴力
276 - 暴力
394 - 暴力
398 - 暴力搜尋
418 - 暴力
556 - 暴力
581 - 暴力(100 * 60000)
613 - 暴力
10774 - 約瑟夫(動態規劃)
670 - 二分圖匹配
10991 - 數學
198 - 暴力、四則運算
10746 - 最小花費二分圖匹配
11313 - 暴力
11326 - 數學
10594 - 最小花費最大流
11385 - 暴力
11386 - 枚舉(需線性時間複雜度)
11387 - 構造
11388 - 數學
11389 - 貪婪
10804 - 二分搜尋、二分圖匹配
563 - 二分圖匹配、廣度優先搜尋法
10122 - 計算幾何、二分搜尋、二分圖匹配
259 - 二分圖匹配
663 - 枚舉、二分圖匹配
753 - 多端最短路徑、二分圖匹配
11330 - 暴力
11353 - 排序、篩法、動態規劃
11262 - 二分搜尋、二分圖匹配
11396 - 點塗色問題(深度/廣度優先搜尋法)
10779 - 最大流
10418 - 廣度優先搜尋法、二分搜尋、二分圖匹配
11307 - 動態規劃
150 - 暴力
339 - 暴力
388 - 單端最短路徑(廣度優先搜尋法佳)
381 - 暴力
379 - 模擬
395 - 模擬
603 - 模擬
616 - 模擬
588 - 計算幾何
11210 - DFS
10349 - 二分圖匹配
10366 - 模擬
10380 - 二分搜尋、二分圖匹配
10511 - 二分圖匹配
331 - DFS
505 - 暴力
518 - 暴力
188 - 模擬(用strtok會死)
535 - 數學
411 - 模擬
559 - DP
577 - 模擬
178 - 撲克牌
181 - 撲克牌
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 19:11:07
φ suhorng 轉:到 [yuscvscv] 看板,于 2009/07/08 Wed 19:36:33
φ suhorng 轉:到 [suhorng] 看板,于 2009/07/08 Wed 19:37:00
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:29:18
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:34:17
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 負債之二
時間: 2009/07/08 Wed 19:10:56
作者: sa072686 (倒數著。) 站內: sa072686
標題: [筆記] 負債之二
時間: 2008/02/22 Fri 09:40:40
10092
超單純最大二分圖匹配
983
大暴力
911
排組公式衝一下就過了
925
warshall暴一下就好了
944
邊遞迴邊建表,簡單題
957
線性時間掃過,暴力解決
985
BFS小變形一下,狀態記法注意一下
986
超多維複雜DP,難寫
995
廣先衝一下就好,想得到BFS就不太難
997
照做就好,不難。
815
排序以外有點小陷阱。
325
超麻煩暴力判斷問題。
10600
次短MST,暴力擋邊配并查集做KRUSKAL秒殺
10616
背包型DP衝一下就過了,小心負數做MOD
10688
類最佳二分搜尋樹類型DP,玩過類似題型就秒
10245
枚舉時加點小CUT就過,暴搜穩死
11026
DP衝一下,不好想,尤其要想到DP不簡單
11127
DFS+PRUNNING,可是不會太刁
11133
求因數建個鏈表,DP一下就過了,DFS可能會炸
10928
字串分析,拔掉分析的部份比一星還一星
11138
超單純二分圖匹配
143
計算幾何,參考USACO 3-4 COMPUTATIONAL GEOMATRY就秒
423
最長最短路徑,DIJKSTRA秒
434
難想,可是想通後GREEDY一下就過。有人說它是數學,我看不像
10249
二分圖匹配,不難,匪書說可以轉GREEDY。
10273
暴力會死,可是用數學方式可CUT,開鏈表暴力可過,正解合併同週期開HEAP
10341
二分搜一下,小心誤差就好
11049
基本的BFS,不過座標部份不太好做
11088
DFS WITH PRUNNING,不太好想。
10094
找規律可過,否則要用啟發式搜索。超高難度,但討論板有依規律直接構造算法。
10821
不好想,用到很多TREE和遞歸概念,可是想通後很漂亮。難得之GREEDY好題
11081
高TLE風險且不好想的DP,不過可以透過縮MOD次數通過,當然能降維更好
11099
類似136 UGLY NUMBER,不難做。
10566
數學,導出公式後可以二分搜尋
10167
計算幾何會寫的話就可以枚舉所有可能數字秒它。
300
歷法換算,可是是算像天干配地支那種的,所以很好秒
397
字串分析加四則運算,可是不難,只要你逐步合併求解,會分析就剩腦殘模擬
520
觀察一下後直接做就好
410
超低AC率可是不難寫,只是有點小陰。將自己想作出題者可破解。
634
計算幾何,可是是不難的判斷題。
10454
直接開DP就好,不會太難。
11152
數學題,會公式就秒,不會就卡到天荒地老
638
枚舉後排序,腦殘秒
11136
簡單的一題,開計數排序可秒之。
632
暴力模擬秒殺,會STRNCMP秒更大
377
長得很醜、偽裝得很不錯的一題,看出是四進位制就直接秒
10718
GREEDY O(LOG N)衝一下就過。
187
暴搜,可是IO醜題目複雜
347
暴力判斷就好,不難
391
大暴力判斷,不會太難。
362
腦殘估算腦殘秒
276
模擬一下就過了,簡單題
394
簡單暴力計算
398
暴力枚舉衝一下就過
418
枚舉的時間複雜度看似高,其實可解之。
556
模擬,題目難懂但是理解後好寫。
581
超低AC率偽裝超白痴題,暴搜一下就秒
613
暴力衝一下就過。
10774
用JOSEPH DP解秒殺。請參考小費FGISC.TWBBS.ORG的PROGRAMMING板
670
二分圖匹配,秒殺
10991
腦殘公式解,好推,瞬秒
198
超麻煩字串分析加四則運算求解,兩三百行應該跑不掉。
10746
最小花費最大流做二分圖匹配,用BELLMAN-FORD都會過。
11313
超簡單一行IF判斷題
11326
數學,不難衝可是也不太好想
10594
最小花費最大流,要用LABELING卡掉負邊開DIJKSTRA,參考討論板MCMF3.C
11385
暴力衝一下就過,腦殘題
11386
暴搜 WITH O(N^2),N LOG N會炸
11387
圖論題,有直接構造秒殺算法
11388
一個IF定死生
11389
SORT+GREEDY,保證秒
10804
二分搜尋枚舉可能距離再加二分圖匹配,小心誤差
563
點特多的二分圖匹配,沒邊權建議開BFS
10122
計算幾何夾雜二分搜尋配二分圖匹配,幸而幾何部份不甚難
259
二分圖匹配保證秒
663
枚舉每個配對設為不可逆,再匹配餘下的,超低AC率仍可一次AC
753
WARSHALL一下再衝二分圖匹配保證秒,注意N<=100,可能出現不同插座處有至多400處,
最多500種
11330
不好想,想通後O(N)硬掃輕鬆秒
11353
計數排序加篩法衝一下輕鬆秒
11262
二分搜尋加二分圖匹配中最單純的一題
11396
很難想,可是想通過線性時間做點塗色DFS就過了
10779
最大流問題,想了一、兩個禮拜,算相當難想
10418
有五星之名卻無五星之實,觀察一下,SHORTEST PATH+二分搜尋+二分圖匹配秒
11307
難想,GREEDY是錯的,可是如果直接知道是DP就可以秒
150
超難解日期換算題,寫了兩天
339
超腦殘模擬
388
單端最短路徑衝一下輕鬆AC
381
譯文在板上,很長可是很腦殘,題目三四頁寫起來不足百行,秒。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 19:11:07
φ suhorng 轉:到 [yuscvscv] 看板,于 2009/07/08 Wed 19:36:45
φ suhorng 轉:到 [suhorng] 看板,于 2009/07/08 Wed 19:37:10
→ suhorng 說:兩篇都借轉喔XDDDD 超棒的 ~ 0708 19:37
→ sa072686 推:啊你不介意這是我筆記有AC沒文章的,要轉也OK啦XD 0708 19:45
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:34:25
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: Re: [中譯] ACM# 702
時間: 2009/07/08 Wed 20:02:30
作者: sa072686 ( ) 站內: Programming
標題: Re: [中譯] ACM# 702
時間: 2008/03/31 Mon 17:37:21
感謝板主的翻譯。
這題要用DP,簡單地說是看某一群人中,以某一人排最前面的所有情形,都能視為相同。
因為如果相對高度都是一樣的,那麼不管實際高度差如何,排法都會完全一樣。
因此,以dp[n][m][d]記錄有n個人比第一個矮、有m個人比第一個高、下一個
要找比較矮的,或是比較高的。則知,轉移方式上若要找比較矮的,
那麼枚舉0到n-1,假設是i,則知比他矮的有n-i個人,而比他高的有m+i-1個,
然後下一個要找比較高的。
若要比較高的,則枚舉0到m-1,則知比他矮的有n+i個,比他高的有m-i-1個。
然後下一個要找比較矮的。
如果只有一個人(n == m == 0)則值為1。
如果n<0或m<0答案也是1,這樣可以擋掉一些特殊情形。
注意給的如果隊長最矮,則以第二個人開始,直接跳過隊長。而第二個人要擺第三矮,
然後下一個找比較矮的。
記得使用long long
※ 引述《AikoSenoo (翔翼•藍洛)》之銘言:
> The Vindictive Coach
> The coach of a football team, after suffering for years the adverse comments
> of the media about his tactics, decides to take his revenge by presenting his
> players in a line-up in such a way that the TV cameras would be compelled to
> zigzag in a ridiculous bobbing motion, by alternating taller and shorter
> players. However, the team captain objects that he must be the first of the
> line by protocolary reasons,and that he wants to be seen in the best possible
> light: that is, he should not have a taller colleague nest to him unless
> there is no alternative (everyone else is taller than him). Even in this
> case, the height difference should be as small as possible, while maintaining
> the zigzag arrangement of the line.
> 一個足球隊的教練在遭受好幾年對於他所用戰術的負面評價之後,他決定要安排他的球
> 員排成一個特別的隊伍──不停地交替高矮的球員──用此來報復。這個特別的隊伍會使
> 得這些電視媒體的相機和攝影機必須要一直做可笑的上下來回的動作。然而,這個隊伍的
> 隊長拒絕這樣提議,因為一些協定過的原因,他必須是隊伍的第一個,而且:他希望能夠
> 在最好的鎂光燈位置。換而言之,他那群不能有人比他高,除非沒有替代方案(也就是其
> 他人都比他高)。但就算是在這樣的情況之下,身高差還是應該要盡可能地小,同時也要
> 保持隊伍的高高低低狀態。
> With this condition the coach addresses an expert in computation (i.e. you)
> to help him find the number of different alignments he may make, knowing that
> all players have a different height. They are always numbered by stature
> starting by 1 as the shortest one. Of course the number of players may be
> arbitrary, provided it does not exceed 22.
> 在這樣的情況下,這名教練寫信給了一個計算的專家(換句話說就是你)來幫他找出他應該
> 要把隊伍排成幾個不同的列隊。每個球員的身高都不同,所有球員的身高都是從1開始(也
> 就是最矮的一個),不過當然啦,球員的總數是任意的,不過不會超過22。
> Input
> It is a set of lines, each of which contains two positive integers N and m
> separated by a blank space. represents the number of players in the line-up
> and m the captain's number, who as told is always the first of the line.
> 在每筆測資之中都會包含兩個正整數N和m,中間用一個空白隔開。它們代表的意義分別為
> 球員總數與隊長的號碼(就是那個說要在隊伍最前面的那一個人)
> Output
> For every line of the input a line with positive integer indicating the
> number of possible alignments under the above conditions.
> 針對每一組輸入,請輸出所有可能的解。
> Sample Input
> 3 1
> 3 3
> 4 1
> Sample Output
> 1
> 1
> 1
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_140.122.61.173(台灣師範大學)
→Modify: sa072686 at 2008/03/31 Mon 18:52:29
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 20:02:55
作者: suhorng at 09/07/08
題目大意:
給一堆線段 L[li, ri],li, ri為整數且 1 <= �<= ri <= 10000000
請依照所給的順序將線段覆蓋上去
請問,當所有線段覆蓋完後,
還能被看到的有幾條?
舉例來說,
3
1 5
2 4
3 3
答案為 3。
<Hint>
此題可以用線段樹解,將一次覆蓋的時間降為 O(log (ri-li) )
然後,應該使用與畫家演算法相反的順序,
由後往前貼,這樣可以砍掉很多不必要的消耗。
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.67.110 (中滑一番)
作者: r51303 at 09/07/08
SA大大啊...
看不完啊~~可不可以按V跳過啊
天啊∼∼怎麼做到的啊
一日近百篇文章
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by r51303 from 118.171.138.84 (中滑一番)
→ suhorng 推:一日近百題 (?) //我來亂的其實…… 0708 22:42
→ Tommy 推:樓上想說輕而易舉 0708 22:43
→ suhorng 推:學長出現了……Orz 0708 22:54
→ zenixls2 推:去sa的ptt2版上看 0708 23:50
→ sa072686 推:當字典看待可能會好過一點? 0709 00:00
→ stnirptf 推:這就叫做百題斬嗎>////< 0709 04:09
作者: sa072686 at 09/07/09
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11416 Accepted
時間: 2009/07/09 Thu 10:25:34
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11416 Accepted
時間: Thu Jul 9 10:25:42 2009
又是一題只有 13 個人 AC 但很好寫的題目
…好啦,我承認它寫起來有些複雜,不過挺直觀啊…
ACM 196 進階版本,題目幾乎一模一樣,只是多了些條件
翻譯一下
給你一張表格,column 以 A .. Z AA AB .. ZZ AAA AAB ... ZZZ 表示之
row 則以 1~1000 表示之。表格裡只有兩種內容:整數,或是以 e 開頭的 expression
expression 會是一個數學運算式,運算子僅 +-*/,運算元必參考至表格中某一格
你可以放心保證不會有循環的依賴關係,每一格都可以算得出來
所有運算均為整數運算,最後你必須輸出表格中每一格的運算結果
譯註:經實測,expression 長度 < 10005,行、列均小於 1005,
所有 expression 的運算子 + 運算元數量不超過 1000
不過怕爆炸,我還是 malloc() & free() 了
另外,expression 是帶括號的,運算不論過程結果均可以 signed long 記錄
其實就直接 DP 一下就好了,運算就中序轉後序也沒什麼困難,頗好寫
也沒什麼心機處,硬要說的話…如果不是用 atoi() 分析數字,請小心負數
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/09 Thu 10:25:42
作者: sa072686 at 09/07/09
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11414 Accepted
時間: 2009/07/09 Thu 10:25:35
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11414 Accepted
時間: Thu Jul 9 08:50:05 2009
記得好像在 math world 裡看過解法,不過證明看不太懂…囧
翻譯一下
給你 n 個點,每個點其相鄰的點的數量,問是否可能構成這樣的圖
----
拿連的點最多的出來,優先連點最多的點就可以了
連不完、沒得連都算失敗
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/09 Thu 10:25:50
作者: sa072686 at 09/07/09
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11418 Accepted
時間: 2009/07/09 Thu 14:15:06
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11418 Accepted
時間: Thu Jul 9 14:06:25 2009
嗯也是不難的一題…雖然一樣是不會證 XD
翻譯一下
現在有 n 道題目,每道題目各想了數個題名
題目以 A, B, C, ... 編號,現在想讓每題題名開頭字母與題號相同
求題目如何編排順序以及使用哪些題名可達成以上條件
同一題的題名首字字母不會一樣,且保證只有恰一組解
由於恰一組解,所以必有拓璞順序可依從,依拓璞順序即可
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/09 Thu 14:15:31
作者: sa072686 at 09/07/09
※ 本文轉錄自 [suhorng] 看板
作者: suhorng (我是書泓 快丟我XU) 站內: suhorng
標題: Re: [歡樂] ACM 11414
時間: 2009/07/09 Thu 20:02:28
※ 引述《suhorng (我是書泓 快丟我XU)》之銘言:
> 照舊啊,每次都用 degree 最高的開始連
唔……感謝 shik 學長……
http://mathworld.wolfram.com/GraphicSequence.html
r n
Σdi <= r(r-1) + Σ min(r,di)
i=1 i=r+1
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.67.110 (中滑一番)
→ sa072686 推:這篇…我要了 (咦!?) 0709 20:47
φ sa072686 轉:從 [suhorng] 看板,于 2009/07/09 Thu 20:48:18
作者: sa072686 at 09/07/09
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11420 Accepted
時間: 2009/07/09 Thu 23:02:18
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11420 Accepted
時間: Thu Jul 9 22:57:40 2009
嗯…應該算簡單吧,一看就一臉DP樣,再看連解法都瞬間想完啦
只是被三元表了一下,括錯範圍抓了很久,想說轉移方程明明沒推錯XD
翻譯一下
給一種櫃子,有許多抽屜由上至下排列,但它即使上鎖也不太安全
因為抽屜間沒有分隔,即使鎖了,如果它上面那個不鎖,抽掉上面的
一樣可以拿到底下抽屜的東西,這時底下抽屜即使鎖了也不安全
那麼試求有 n 個抽屜時,恰 s 個抽屜是安全的情形有多少種?
顯然是 DP,以狀態 dp[i][j][k] = m 表示在有 i 個抽屜、恰 j 個安全
且最底下的抽屜上鎖狀態為 k 時,共有 m 種情形
設 k=1 為不上鎖,k=0 為上鎖
則初始化 dp[0][0][0] = 1 … 櫃子最上面有擋住,所以當作第 0 層是鎖住的抽屜
轉移方式:若這格有上鎖,那麼上一格若沒鎖,這格也不安全,安全抽屜數相同;
若上一格有鎖,則這格安全,安全抽屜數便增加,得知:
dp[i][j][0] = (j > 0 ? dp[i-1][j-1][0] : 0) + dp[i-1][j][1];
若這格沒上鎖,那麼不管上一格鎖不鎖,這格一定不安全,因此得知
dp[i][j][1] = dp[i-1][j][0] + dp[i-1][j][1];
預先建表之後,對每個詢問 n, m 只要回答 dp[n][m][0] + dp[n][m][1] 即可
或是…在轉移方程上,上述似乎是等價於 dp[n+1][m][1] 的
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/09 Thu 23:02:29
作者: suhorng at 09/07/09
我的作法跟海恩的正解一樣
但是斜率改用向量可以避免掉浮點數誤差的問題
就是,計算每一個點為中心,與其他點連線的所有斜率
統計的部份用排序也很快,這樣斜率相同的就會排在一堆
總共是 O( n*(n+nlgn) ) = O(n^2lgn)
==========
看不懂 Tommy 的解法……感覺怪怪的……
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.67.110 (中滑一番)
→ Tommy 推:事後我發現那是賽到的 0710 10:05
→ godgunman 推:這題測資弱死了..我隨便random都過= = 0711 20:03
作者: suhorng at 09/07/11
題目請翻前面幾篇。
計算國家的面積的方法,
可以使用行列式 (即題目下方給的公式)
假設一個簡單多邊形共有 (x1, y1), (x2, y2), ...(xn, yn) 等點,
那麼行列式
x1 x2 x3 ... xn x1
(1/2) * abs( )
y1 y2 y3 ... yn y1
就會是這個多邊形所佔的面積。
在行列式中,左上、右下相乘是加,右上、左下相乘是減,
然後取絕對值是因為順時針、逆時針算出來的面積相差一個負號。
舉例來說,上面那個行列式展開就是
(1/2)*abs( x1y2 + x2y3 + ...xn-1yn + xny1 - x2y1 - x3y2 - ... xnyn-1 - x1yn )
注意,最後面的 x1, y1 不能漏掉。
有了這個算面積的方法後,接下來判斷點是否在凸多邊形中就容易了。
簡單來說,我們就是用該點像凸多邊形中的每個頂點連線,
計算切出來的三角形面積的和。
可以證明,如果點落在凸多邊形中時,算出來的面積就是該凸多邊形的面積。
否則,面積會大於該凸多邊形的面積。
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.69.138 (中滑一番)
▲ suhorng 改@2009/07/11 Sat 08:52:21
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/07/29 Wed 08:40:06
作者: sa072686 at 09/07/11
補充一個方法 XD
把每條邊當成一條向量,方向同為順或逆時針均可
若此點都在這些向量的同一側,則此點必在此凸多邊形中
這個可以連過去用外積判斷,轉直線方程式代入看正負應該也可以吧
※ 引述《suhorng (我是書泓 快丟我XU)》之銘言:
> 題目請翻前面幾篇。
> 計算國家的面積的方法,
> 可以使用行列式 (即題目下方給的公式)
> 假設一個簡單多邊形共有 (x1, y1), (x2, y2), ...(xn, yn) 等點,
> 那麼行列式
> x1 x2 x3 ... xn x1
> (1/2) * abs( )
> y1 y2 y3 ... yn y1
> 就會是這個多邊形所佔的面積。
> 在行列式中,左上、右下相乘是加,右上、左下相乘是減,
> 然後取絕對值是因為順時針、逆時針算出來的面積相差一個負號。
> 舉例來說,上面那個行列式展開就是
> (1/2)*abs( x1y2 + x2y3 + ...xn-1yn + xny1 - x2y1 - x3y2 - ... xnyn-1 - x1yn )
> 注意,最後面的 x1, y1 不能漏掉。
> 有了這個算面積的方法後,接下來判斷點是否在凸多邊形中就容易了。
> 簡單來說,我們就是用該點像凸多邊形中的每個頂點連線,
> 計算切出來的三角形面積的和。
> 可以證明,如果點落在凸多邊形中時,算出來的面積就是該凸多邊形的面積。
> 否則,面積會大於該凸多邊形的面積。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 09/07/11
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11428 Accepted
時間: 2009/07/11 Sat 12:54:21
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11428 Accepted
時間: Sat Jul 11 11:53:24 2009
果然非常容易,一兩分鐘就解決了
還是翻一下
給一數 n 試求兩正整數 x, y 使得 x^3 - y^3 = n
若多重解,輸出 y 最小者,無解則輸出 No solution
窮舉 x, y 就過了,不過以 y 找 x 比較好,第一個解就是 y 最小者
循序也沒多慢,bsearch大概也不會快多少
如果 x = y+1 還超過 n 就是無解了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/11 Sat 12:54:38
作者: sa072686 at 09/07/11
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11436 Accepted
時間: 2009/07/11 Sat 12:54:22
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11436 Accepted
時間: Sat Jul 11 12:53:05 2009
嗯,11428 的 EXTREME version
試了四種方法只過一種,而且跑頗慢…囧rz
先筆記一下,code 裡除了 version 1 以外都 TLE
翻譯見 11428 不過數字範圍變大了,最多 25 * 10^12
試過的解:
法一:
照抄 11428, TLE
法二:
把 11428 改成搜 j 再開三方算 i, TLE
法三:
把 i, j 改成一起動的方式,設 i=1, j=2 若 i^3-j^3 > n 則 j++
否則 i++ 直到 no solution 或 i^3-j^3 == n, 2.7 AC, 不過名次很爛
法四:
法三改良版,改用開三次方的方式估計下一個值, TLE
法五:
拆掉 i^3-j^3 變 (i-j)(i^2+ij+j^2) 然後搜 n 的因數,再二分搜 j,
並以 j 推 i, TLE
看前面 < 1 sec 的挺多的…
徵求好方法 Orz
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/11 Sat 12:54:50
作者: sa072686 at 09/07/11
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11437 Accepted
時間: 2009/07/11 Sat 14:39:42
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11437 Accepted
時間: Sat Jul 11 14:37:22 2009
不是很難但是有些麻煩的數學題
翻譯一下
http://uva.onlinejudge.org/external/114/p11437.jpg
如上圖,三角形ABC,BC邊上有D,CA邊上有E,AB邊上有F
使得BD=2DC, CE=2EA, AF=2FB,連 AD, BE, CF 後
設 AD 交 BE 於 P,BE 交 CF 於 Q,CF 交 AD 於 R
給 A, B, C 三點座標,求三角形 PQR 面積
以向量來做就不會太難,BD=2DC,故D=B+BC,依此類推
若 AB 交 CD 於點 P,則 P = A + (AB) * abs((ACxAB) / (ABxCD))
知三點後以行列式可求面積,或求兩向量再外積除以二亦可
1 │ px qx rx px │
AREA = - ││ ╳ ╳ ╳ ││
2 │ py qy ry py │
or
1/2 * abs(PQ x QR)
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/11 Sat 14:40:17
作者: sa072686 at 09/07/12
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11423 Accepted
時間: 2009/07/12 Sun 09:22:46
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11423 Accepted
時間: Sun Jul 12 09:21:31 2009
感謝 dreamoon 耐心講解和強大的 code
只能說關鍵的兩個地方自己後來都有想到,只是拼不成合用的 algo ..
研究了一下 code 就大概知道怎麼用了 XD
翻譯一下
現有 n 個 cache 以 size 的不遞減順序告訴你,接著是一堆指令
ADDR t 為丟入一個數字 t
RANGE p q r 為依序丟入一堆數字 p+q*k 這裡 k 依序為 0~r-1
STAT 輸出所有 cache 從上一次 STAT 到現在總共 miss 幾次,何謂 miss 看下面
cache 的行為如下:丟入時若該數已在 cache 則稱 hit
若該數不在 cache 則稱 miss,但若插入時 cache 已滿
則將「離上一次被丟入或查詢最久的一個」砍去,再插入新的
cache size 至多 2^20,數字範圍至多 2^24
這裡要使用一個資料結構能處理以下事情:
必須知道它在佇列中為第幾個
必須可以刪除、可以插入
必須可以查詢是否存在
目前沒有什麼現成的,就自己湊著用吧
用 hash 可以快速查詢是否存在,數字範圍不大,可以完美地 hash
如果能知道它在佇列中為第幾個…主要是為了把 n 個 cache 混著做
畢竟 n 個 cache 存的東西,前綴是一樣的,所以只要看最後出現位置,
若在 cache 可存範圍內就是 hit 否則就 miss,這樣做一次可求所有 cache 的情形
但是支援刪除,要更新不好做,這時可以借助二叉樹來達成
記錄左子樹個數,就可以推算位置,也可以在 log n 時間內完成更新
假想一棵 BST 已經放好所有 ID,接著刪去時把要刪去的 ID 砍去即可
刪去時也可以順便看刪去的位置,對哪些 cache 存在,哪些不存在
我用 complete binary tree 的編號方式,配合二進制來做
將欲刪去 ID 轉二進制,由高 bit 到低 bit 如果是 0 走左,是 1 走右
並在這裡記錄左子樹被砍去的個數,就可以推算了
走左就 << 1 走右就 << 1 再 +1 就可以了
簡單地說這棵樹,該 bit 是 0 走左,是 1 走右,中間不記東西,恰好砍半
也就是所有節點都是空的就是了,只記左子樹個數不記 ID
ID 全都讓它掉在 leaf 這樣
參考別人的寫法可是莫名其妙 0.692 比我參考的人快兩倍超過是哪招…
還是第一名,而且速度接近第二名的 1.5 倍…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/12 Sun 09:58:31
作者: sa072686 at 09/07/12
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11448 Accepted
時間: 2009/07/12 Sun 09:58:54
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11448 Accepted
時間: Sun Jul 12 09:59:10 2009
簡單但是陰險的一題…
翻譯一下
給你兩「非負」整數 a, b (雖然它是說兩「正」整數,但底下…)
a, b 的範圍介於 0 到 10^100 之間 (不是說兩正整數?…可是 sample input 也有 0)
輸出 a-b
神妙 O(1) 數學解加大數
可是陣列要開到 10005 才能過,否則會 Runtime Error
而且貌似沒有 leading zero 這回事 (不然我先算長度再比較哪會 AC .. )
算是很詭異的一件事,除非它是說 10^100 的平方不然不合理啊…
拿大的減小的,有負號加負號
大數減法還要小心減出來位數可能變少,也有可能減出來是 0
砍開頭 0 時可別多砍了…我砍法是這樣
for(i=len-1; i>0&&num[i]==0; i--);
這樣即使全都是 0,i 也會停留在 0,所以接下來
for(; i>=0; i--)
.
來輸出時,至少都會噴一個 0 出來
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/12 Sun 10:14:29
作者: sa072686 at 09/07/12
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11450 Accepted
時間: 2009/07/12 Sun 10:14:55
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11450 Accepted
時間: Sun Jul 12 10:15:09 2009
簡單 DP,瞬殺
翻譯一下
現在你有預算 m 元,要買 c 種東西,這 c 種東西各有好幾種選擇可買
但一種只能挑一樣購買,總價錢不可以超過 m,但希望越接近越好
問最佳解為花多少錢,或是否無解
dp[i][j] = T/F 代表買到第 i 種為止,共花費 j 元的情形可不可能發生
則對於第 i 種東西任一價格 p, dp[i][j] |= dp[i-1][j-p];
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/12 Sun 10:52:31
作者: sa072686 at 09/07/12
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11452 Accepted
時間: 2009/07/12 Sun 10:52:27
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11452 Accepted
時間: Sun Jul 12 10:53:13 2009
有點難理解的一題…我是看 sample 猜測了頗久
翻譯一下
現在用 1, 2, 3, 4 組成一個序列 S,將之無限重覆使其一直循環下去
接著從中擷取一段告訴你,並給你以下條件
S 在此序列中恰出現 2 次,但不超過 2 次
試找出 S,並重覆輸出至 8 個字元為止,後面加上三個 .
例: 123123 則 123 恰重覆 2 次
1231231 則 123 重覆 2 次再多一點點 (後面多一個 1) 所以 S 為 231
12312312 則 123, 231 都超過 2 次,只有 312 沒超過,故為 312
重覆至滿 8 字元為止,123 則輸出 "12312312..."
設將給定序列切為三段 rppq 其中兩個 p 連續已滿足重覆兩次的條件,r 段忽略
則 q 段若與 p 有共同前綴,判定重覆超過 2 次,失敗
但若 q 段與 p 沒共同前綴,則 p 亦不為合法 S,因為重覆 p 再切一段出來
無論如何切不出 rppq,故知 q 必須為空
又此題保證有解,故最長的 p 使得 rppq 中 q 為空,即為所求,也就是 r 最短
若 r 非最短,則 r 中必包含 p,則 p 出現超過 2 次,不包含則矛盾
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/12 Sun 11:08:38
作者: sa072686 at 09/07/12
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11455 Accepted
時間: 2009/07/12 Sun 11:14:53
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11455 Accepted
時間: Sun Jul 12 11:09:11 2009
艱深晦澀數學題
翻譯一下
正方形是矩形,矩形是四邊形,四邊形有四條邊
但四條邊未必四邊形,四邊形未必矩形,矩形未必正方形
給你四條邊長度,問是否正方形,若否,是否矩形,若否,是否四邊形
都不是就 you are the banana king
神奇奧妙數學解
若四邊有一為零,則 banana king
若四邊等長,則正方形
若四邊兩兩等長,則矩形
若三邊和恆大於第四邊,則四邊形
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/12 Sun 12:21:52
作者: sa072686 at 09/07/12
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11456 Accepted
時間: 2009/07/12 Sun 12:41:43
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11456 Accepted
時間: Sun Jul 12 12:42:19 2009
噢…簡單的 DP 不過一直腦殘戰敗
翻譯一下
依序給你 n 個東西,要你依重量排序,但你不能任意調動、交換和插入
你只能決定把下一個東西放最前面、放最後面或者捨棄
問滿足重量大到小排好的前提下,最多放幾台
做兩次 lis 就好了,從後面往前做,一次小到大,一次大到小
設 dp[n] = m 為第 n 台時 lis 為 m
則取 max(小到大的 dp[n] + 大到小的 dp[n] 再 -1) for all n 即為所求
從後面往前做,小到大的 lis 表示第 n 台後面能放幾台小於第 n 台的
大到小的 lis 表示第 n 台前面能放幾台大於第 n 台的
則兩者相加減去重複計算的第 n 台即是以 n 為排上去的第一台時能排的長度
從前面做的話,因為 dp 狀態是 lis 結尾元素,只能算以 n 為尾巴或為頭的情形
所以整體會變很複雜,如果從後面掃回來,就可以知道以 n 置中能多排幾台大和小的
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/12 Sun 12:47:50
作者: sa072686 at 09/07/12
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11462 Accepted
時間: 2009/07/12 Sun 13:10:55
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11462 Accepted
時間: Sun Jul 12 12:52:22 2009
非常容易的秒殺題…這點光看 AC 人數和旁邊一比就顯而易見
翻譯一下
你要幫某個城市裡的人依年齡排序,而你知道沒有人超過 100 歲
而且至少會有 1 歲,n <= 200 萬
(warning: 輸入檔很大,所以要使用較快速的 IO )
記錄 tbl[i] = j 表示 i 歲有 j 人
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/12 Sun 13:34:01
作者: sa072686 at 09/07/12
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11463 Accepted
時間: 2009/07/12 Sun 13:37:57
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11463 Accepted
時間: Sun Jul 12 13:38:07 2009
也是相當腦殘的一題,秒殺秒殺的
翻譯一下
給你一張圖和起、終點,你必須從起點派小兵出去,小兵們最後要到終點集合
而且每個點至少要有一隻小兵去大絕埋炸彈陰人,兩點間至多一條路
且圖是連通的,從一點走到相鄰的點要一單位時間,埋雷不用施法時間
你可以派無限多隻小兵,試問最快多久後可以使每個點都埋過雷且小兵全數到達終點?
n 小小的,挖秀也會過,不過還是堅持用 BFS 快些
能線性何苦 n^3 呢
枚舉每一點 v 從起點走到 v 再從 v 走到終點集合要多少時間
取最大值即為所求
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/12 Sun 13:38:14
作者: sa072686 at 09/07/12
※ 本文轉錄自 [suhorng] 看板
作者: suhorng (我是書泓 快丟我XU) 站內: suhorng
標題: [筆記] 直立式開方
時間: 2009/07/12 Sun 08:23:13
===
請按 PageDown 繼續
===
假設要開方的數是 405769 :
1.先將數字以小數點為中心、每兩位分成一組。頭尾不足則補0。
____________
/ 40 57 69
\/
===
假設要開方的數是 405769 :
1.先將數字以小數點為中心、每兩位分成一組。頭尾不足則補0。
2.找一個平方最靠近第一群組的數,然後依照動畫進行:
____________
/ 40 57 69
\/
===
假設要開方的數是 405769 :
1.先將數字以小數點為中心、每兩位分成一組。頭尾不足則補0。
2.找一個平方最靠近第一群組的數,然後依照動畫進行:
__6_________
/ 40 57 69
\/
===
假設要開方的數是 405769 :
1.先將數字以小數點為中心、每兩位分成一組。頭尾不足則補0。
2.找一個平方最靠近第一群組的數,然後依照動畫進行:
__6_________
/ 40 57 69
\/
===
假設要開方的數是 405769 :
1.先將數字以小數點為中心、每兩位分成一組。頭尾不足則補0。
2.找一個平方最靠近第一群組的數,然後依照動畫進行:
__6_________ ─┬───→
/ 40 57 69 │ 6+6
\/ ←──╯6*6
===
假設要開方的數是 405769 :
1.先將數字以小數點為中心、每兩位分成一組。頭尾不足則補0。
2.找一個平方最靠近第一群組的數,然後依照動畫進行:
__6_________ ─┬───→ 12
/ 40 57 69 │ 6+6
\/ 36 ←──╯6*6
===
假設要開方的數是 405769 :
1.先將數字以小數點為中心、每兩位分成一組。頭尾不足則補0。
2.找一個平方最靠近第一群組的數,然後依照動畫進行:
__6_________ 12
/ 40 57 69
\/ 36
===
假設要開方的數是 405769 :
__6_________ 12
/ 40 57 69
\/ 36
──
4
===
假設要開方的數是 405769 :
__6_________ 12
/ 40 57 69
\/ 36
──
4
===
假設要開方的數是 405769 :
__6_________ 12
/ 40 57 69
\/ 36
──
4 57
===
假設要開方的數是 405769 :
__6_________ 12
/ 40 57 69
\/ 36
──
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6_________ 12□
/ 40 57 69 x □
\/ 36 ———
──
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6_________ 12□
/ 40 57 69 x □
\/ 36 ———
──
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6_________ 12□
/ 40 57 69 x □
\/ 36 ———
──
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6_________ 12
/ 40 57 69 x
\/ 36 ———
──
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
──
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
──
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
── 36 9
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
── 36 9
4 57
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
── 36 9
4 57
3 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
── 36 9
4 57
3 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
── 36 9
4 57
3 69
———
88
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
── 36 9
4 57
3 69
———
88
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
── 36 9
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 x 3
\/ 36 ———
── 36 9
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 3
\/ 36 ———
──
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
──
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
4.將 12□ 加上 □ 並寫下來。
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
──
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
4.將 12□ 加上 □ 並寫下來。
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。
4.將 12□ 加上 □ 並寫下來。
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 457。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12□x □ 最靠近 。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6
4 57
3 69
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 12 □x □ 最靠近 。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6□
4 57 x □
3 69 ————
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6□
4 57 x □
3 69 ————
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6□
4 57 x □
3 69 ————
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6□
4 57 x □
3 69 ————
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6□
4 57 x □
3 69 ————
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6
4 57 x
3 69 ————
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。 ←╮
│
4.將 12□ 加上 □ 並寫下來。 ──╯接著回到步驟 3
__6__3______ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
———
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
4.將 12□ 加上 □ 並寫下來。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
4.將 12□ 加上 □ 並寫下來。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
88 69
───
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
4.將 12□ 加上 □ 並寫下來。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
88 69
───
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
4.將 12□ 加上 □ 並寫下來。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
88 69
───
0
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
4.將 12□ 加上 □ 並寫下來。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
88 69
───
0
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
5.如此一直重複步驟 3、4,直到到達所需要的精度為止。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
88 69
───
0
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
5.如此一直重複步驟 3、4,直到到達所需要的精度為止。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
88 69
───
0
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
5.如此一直重複步驟 3、4,直到到達所需要的精度為止。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
88 69
───
0
===
假設要開方的數是 405769 :
3.在黃色方框中找一數字,使得 126□x □ 最靠近 8869 。
5.如此一直重複步驟 3、4,直到到達所需要的精度為止。
__6__3__7___ 12 3
/ 40 57 69 + 3
\/ 36 ———
── 12 6 7
4 57 x 7
3 69 ————
——— 88 6 9
88 69
88 69
───
0
===
405769
6 3 7
===
405769
6 3 7
===
sqrt(405769) =
6 3 7
===
sqrt(405769) = 637
===
--
☆SKYLY 囧
★SKYLY XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.69.138 (中滑一番)
→ shik 推:可以轉嗎 XD? 0712 12:44
→ SKYLY 推:推!! 0712 13:32
→ sa072686 推:可以轉嗎?XD 0712 13:37
→ suhorng 推:耶耶 <(_ _)> 當然歡迎啊XD 所以我才努力做動畫(?) 0712 18:47
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/07/12 Sun 18:48:40
→ yuscvscv 推:轉~ 0712 18:49
φ sa072686 轉:從 [suhorng] 看板,于 2009/07/12 Sun 18:49:45
→ PG 推:借轉 0712 20:25
φ PG 轉:到 [PG] 看板,于 2009/07/12 Sun 20:25:36
→ mp607 推:國中就會了(菸) 0712 20:34
→ Tommy 推:樓上嗆爆了 0712 20:38
→ sa072686 推:樓上上可以考慮寫寫看大數版本,10023吧? 0712 20:43
→ mp607 推:蛤...(逃 0712 20:50
→ yuscvscv 推:樓上上題單神~~(拜) 0712 21:33
→ butterfly21 推:我還是喜歡用binary XD 0713 00:13
→ butterfly21 推:可以說明原理嗎? 0713 00:14
→ yuscvscv 推:印象中這是國中教的方法 原理不明~ 0713 00:34
→ suhorng 推:我用binary search寫10023 TLE T_T 0713 07:09
→ sa072686 推:binary比較慢 0713 09:34
→ truth 推:原因喔...(a+b)^2 = a^2 + 2ab + b^2 0713 09:37
→ truth 推:然後 就. 0713 09:37
→ truth 推:很像遞迴 a一直變 b一直往下找值 0713 09:38
→ butterfly21 推:了解... 是說大數好麻煩@@ 0713 11:19
→ suhorng 推:大數開根號超噁心Q_Q 0713 11:40
→ yuscvscv 推:真的是麻煩炸了..... 0713 13:34
→ rhodon 推:借轉~~謝謝XD 0715 12:51
φ rhodon 轉:到 [某隱藏] 看板,于 2009/07/15 Wed 12:51:53
作者: sa072686 at 09/07/13
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11419 Accepted
時間: 2009/07/13 Mon 17:40:36
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11419 Accepted
時間: Mon Jul 13 17:40:50 2009
頗難寫但貌似頗經典的一題
翻譯一下
在一個有 r 列 c 行的方格圖上有 n 個敵人,你現在擁有會無限貫穿的武器
問最少架設幾台,可以消滅所有敵人,以及架設的地點
若第 i 列第 j 行有敵人,則有邊 (i, j)
以此建圖可形成一二分圖,則每條邊代表一隻敵人,點代表放置武器的位置
則每條邊只要有至少一端點放置即可,即成為最小點覆蓋問題
由 Konig 定理,求最大匹配即可
至於如何求放置地點…這邊參考了 try 的代碼,以下是所做的事情
初始化所有點標記為 -1,對於未匹配的端點,DFS 標記相鄰的點
如果該點已為 1 則剪去,否則標記為 1 並把所有相鄰點 DFS 標為 0
對於標為 0 的點,則標相鄰點為 1
最後遍歷所有列的匹配點,若標記不為 0 則輸出,並將匹配到的行標為 0
再遍歷所有行的匹配點,若標記不為 0 則輸出,結束
原理還在理解中,徵求強者把原理逆推出來XD
另外,徵求使用 min-cut 的解法,問到都說 min-cut 但還不大會運用…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/13 Mon 17:44:01
作者: sa072686 at 09/07/13
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11466 Accepted
時間: 2009/07/13 Mon 20:50:16
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11466 Accepted
時間: Mon Jul 13 20:50:56 2009
也是不難過的一題…不過也沒有很開心 (啥鬼!?)
翻譯一下
給你整數 n (最大不超過 14 位數) 若其有 > 1 個質因數,則輸出最大質因數
否則輸出 -1,n == 0 表示結束,p 為 q 的因數當且僅當存在一整數 r
使得 pr == q
不難發現一定是篩法,然後抓到 sqrt(10^14) 大約是 10^7
接著硬拆就行了,抓到一個質因數就除到不整除為止
當除剩的數 p 小於目前抓的質數平方時,可以 break 並且 p != 1 時 p 為質數
若目前看到質數 q 而 q^2 > p 則知若 p % q == 0,必存在一質數 r 使得
qr == p,但剛已經除去所有質因數了,不該再存在質數 r 使得 p % r == 0
且 r < q,對於大於 q 的質數也不用再檢查,可以剪掉
像 32 為 2^5 所以只有一質因數,並非質數才只有一個質因數
另外 n 題目明講是十進制整數,因此有可能為負數
由於前面因數定義的關係,n 的答案與 -n 相同,並且當 n == 1 時答案 -1
此外篩法找到的質數皆在 signed int 範圍,但 n 的質因數可未必,注意型態
據說測試數據相當弱,多半為大質數之平方,從大者開始枚舉會較快
據說有招 pollard 可以使用,不過我第一次聽過…還沒去爬它
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/13 Mon 20:52:10
→ suhorng 說:學長說: [ ]就[ ]了 XDDDDD 0713 20:53
→ Tommy 說: 然後我 過 0713 21:13
→ sa072686 推: 吃個飯 AC 0713 21:14
作者: sa072686 at 09/07/13
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11470 Accepted
時間: 2009/07/13 Mon 21:19:25
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11470 Accepted
時間: Mon Jul 13 21:19:58 2009
挺弱的一題,秒秒的
翻譯一下
給 n*n 大小的方格,每格一個數字,求每一圈的數字和,以下為示意圖
5 3 2 7 9
1 7 4 2 4
5 3 2 4 6
1 3 4 5 1
1 4 5 6 3
除了暴力還能說什麼呢…
座標計算弄好點就很快秒掉
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/13 Mon 21:19:39
→ Tommy 推:搞不好以後就變成毫秒掉 0713 21:53
作者: sa072686 at 09/07/13
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11471 Accepted
時間: 2009/07/13 Mon 23:37:03
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11471 Accepted
時間: Mon Jul 13 23:36:20 2009
想了很久,結果只是暴搜…嘖嘖,那就弱弱的了
翻譯一下
給 4*3 的方格,每格要放一塊積木,現在給你十二塊積木以及它們四邊的顏色
這些積木不可被旋轉、翻轉,試求這 12! 種擺法中,有多少種擺法
可使得任兩積木相鄰的兩個邊有相同的顏色
硬搜的話 12! 會 gg
不過如果合併重覆,就可以 AC 而且很快
我覺得是,答案如果大,重覆積木一定多,合併後狀態縮減很大
如果重覆積木不多,答案大概也大不到哪去,很容易被剪掉
合併後假設第 i 種有 j 塊,答案就乘 j!,因為這 j 塊可以任意對調
所以縮減很快…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/13 Mon 23:39:09
作者: sa072686 at 09/07/14
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11480 Accepted
時間: 2009/07/14 Tue 10:12:56
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11480 Accepted
時間: Tue Jul 14 10:13:17 2009
空虛空虛的一題,看似 DP 但是複雜度過高,不過可以硬算…
翻譯一下
你現在有 n 顆球,有三種顏色 r, g, b 且每種顏色至少要有一顆
又藍多於紅,綠多於藍,問有幾種可能?(n <= 1000010)
先枚舉紅球個數 r,則 b+g == n-r
b 最少要 r+1,最多 (n-1)/2,敲定 b 之後剩餘就是 g 了
所以枚舉 b 只有 n/3 種可能,對於每個 b 可以 O(1) 算出幾種可能
因此是線性時間解
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/14 Tue 17:44:49
作者: sa072686 at 09/07/14
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11489 Accepted
時間: 2009/07/14 Tue 10:27:03
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11489 Accepted
時間: Tue Jul 14 10:27:05 2009
也是很空虛的一題
翻譯一下
有個 S 和 T 輪流行動且 S 先手的遊戲
給一個整數,S 和 T 輪流拿掉一個位數,如果輪到的人沒東西可以拿就輸了
顯然這樣看位數奇偶就知道結果,有點無聊,所以你加入了一個新規則
拿掉後,剩餘位數和必須為 3 的倍數,或是沒有任何一個位數,才算合法
給一個不大於 1000 位的數字,求誰勝
想也知道每次拿掉的必須和目前所有位數和除 3 同餘
看這樣能持續幾輪就可以了,可以先掃過每一位數記錄餘數多少者有多少個
線性建完表,之後就常數時間求解了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/14 Tue 17:44:54
作者: Tommy at 09/07/15
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> ※ 本文轉錄自 [sa072686] 信箱
> 作者: sa072686.bbs@ptt2.cc
> 標題: [學術] ACM 11436 Accepted
> 時間: 2009/07/11 Sat 12:54:22
> 作者: sa072686 (sa) 看板: sa072686
> 標題: [學術] ACM 11436 Accepted
> 時間: Sat Jul 11 12:53:05 2009
> 嗯,11428 的 EXTREME version
> 試了四種方法只過一種,而且跑頗慢…囧rz
> 先筆記一下,code 裡除了 version 1 以外都 TLE
> 翻譯見 11428 不過數字範圍變大了,最多 25 * 10^12
> 試過的解:
> 法一:
> 照抄 11428, TLE
> 法二:
> 把 11428 改成搜 j 再開三方算 i, TLE
> 法三:
> 把 i, j 改成一起動的方式,設 i=1, j=2 若 i^3-j^3 > n 則 j++
> 否則 i++ 直到 no solution 或 i^3-j^3 == n, 2.7 AC, 不過名次很爛
> 法四:
> 法三改良版,改用開三次方的方式估計下一個值, TLE
> 法五:
> 拆掉 i^3-j^3 變 (i-j)(i^2+ij+j^2) 然後搜 n 的因數,再二分搜 j,
> 並以 j 推 i, TLE
> 看前面 < 1 sec 的挺多的…
> 徵求好方法 Orz
法六:
n = x^3-y^3 = (x-y)(x^2+xy+y^2)
令 x-y = i
則可得 i(3y^2+3iy+i^2) = n (A式)
When i | n, 3y^2+3iy+i^2-n/i = 0
即解 y 的二次方程式
找 i 從 n^(1/3) 開始往下找就好了,尋找第一個 y 的正整數解
開三次往下原因: A式 中 y>=1 故 左式 >= i^3
時間複雜度是 O(n^(1/3)) 在 ACM 上跑 0.332 s
ps: 其實從 i 從 1 往上找到 n 開三次也可以啦,題目說有多組解是唬人的
講完了
--
╭═══╤═══╮ ╰═╮ ╭═╯
│ │ │╭═和平,土地,麵包═╮ │ │
│ ╭═╧╧╮╤═╤═╮═╤═╤╧╮ │ │
│ │ ││ │ │ │ │ │ ╰═╤═╯
│ │ ││ │ │ │ │ │ │
╰╧╯╰═══╯╰ ╰ ╰ ╰ ╰ ╰ ─╯
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 220.129.152.246 (中滑一番)
▲ Tommy 改@2009/07/15 Wed 11:16:41
▲ Tommy 改@2009/07/15 Wed 11:17:30
▲ Tommy 改@2009/07/15 Wed 11:23:39
▲ Tommy 改@2009/07/15 Wed 11:29:10
作者: zenixls2 at 09/07/15
for (variable = A; variable != B; variable += C)statement;
variable type: k-bit unsigned integer
輸入A,B,C,k
輸出statement跑的次數
-------
開unsigned long long ,然後做不定方程解
推導如下:
A+Cy=(2^k)(x)+B
=> (2^k)(-x)+Cy=B-A
有幾個該死的地方要注意
假如你用位元運算取2^k,記得轉型態
對於C==0,記得分開討論
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by zenixls2 from 59.113.58.181 (中滑一番)
作者: sa072686 at 09/07/15
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11472 Accepted
時間: 2009/07/15 Wed 12:43:31
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11472 Accepted
時間: Wed Jul 15 12:44:19 2009
空虛的題目但是一直腦殘…
翻譯一下
定義 beautiful number (以下簡稱 bn 好了..) 為一 n 進制數字滿足以下條件
兩兩相鄰 digit 的差恰為 1,且 0 ~ n-1 都有出現過,不能有 leading zero
給 n, m 求 n 進制中位數 <= m 者有幾個是 bn,答案 mod 1000000007
看也知道整個 DP 臉,不過我的方法比討論板的弱一些些
以狀態 dp[i][p][q][j] = k 表示長度 i, 每位數出現過最小 p 最大 q 且結尾 j
共有 k 種,已知任兩相鄰位數差恰為 1 所以出現過的位數一定是連續的
則知轉移方程
dp[i][p][q][j] = (j>0?dp[i][p][q][j-1]:0) +
(j<n-1?dp[i][p][q][j+1]:0) +
(j>0&&q==j?dp[i][p][q-1][j-1]) +
(j<n-1&&p==j?dp[i][p+1][q][j+1]);
只有結尾 j-1, j+1 才能接 j,且範圍要嘛相同,要嘛從 p, q-1 轉移到 p, q
要嘛就 p+1, q 轉移到 p, q 且這樣也不會重覆計算
初始狀態 dp[1][i][i][i] = 1 for i = 1..n-1, 這樣沒有 leading zero
討論板似乎是用 2^n 來代替 p, q 的範圍,位數小時 2^n < n^2 在這題 n <= 10
似乎是較佳的選擇,陣列少一維應該也會快不少…這樣轉移時結尾一樣是 j-1, j+1
狀態就枚舉 r 滿足 r & (1<<j) 轉的時候從 r 或 r & ~(1<<j) 轉過來就行了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/15 Wed 12:44:24
作者: sa072686 at 09/07/15
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11473 Accepted
時間: 2009/07/15 Wed 13:57:53
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11473 Accepted
時間: Wed Jul 15 13:58:39 2009
也是相當容易的一題
翻譯一下
為了美化道路,要在一條道路上種樹,這條道路由 n 個轉折點組成
這 n 個轉折點可連出 n-1 條線段,道路寬度是 0,樹之間的道路距離必須相同
也就是說,以等速度沿著道路走,會以相同的時間間隔遇到下一棵樹
總共要種 m 棵樹,並為了最大化樹之間的距離,第一棵和最後一棵樹
必須分別種在道路頭尾
相當容易,由於都是直線線段,先算出總距離除以 m-1 就是間距
再來以間距配合分點公式計算即可
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/15 Wed 13:58:05
作者: sa072686 at 09/07/15
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0062 Accepted
時間: 2009/07/15 Wed 19:39:08
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0062
時間: Wed Jul 15 19:38:55 2009
這麼快就有認真的學弟來搭訕XD 挺好地
翻譯一下
有 n 件衣服分別有各自含水量,擺著不理它每分鐘蒸發一單位
餵烘衣機一分鐘蒸發 k 單位,現在你只有一台很弱、一次只能餵一件的烘衣機
並且每分鐘可以決定餵哪件衣服,問全部烘乾至少要多久
k <= 10^9, 含水量 <= 10^9
數據上不適合 greedy, 不能 greedisgood
可以 binary search, 對於時間 t 枚舉每件衣服,將含水量 > t 者
計算其扔進烘衣機多久可以 <= t 然後就可以不理它
本來 <= t 的也可以不理它,若需要的總烘乾時間 > t 則失敗
否則 t 可行,注意總烘乾時間「有可能 overflow」
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/15 Wed 20:00:22
→ suhorng 推:直接在總烘乾時間 >= t 時就可以跳出來 就不會overflow了 0825 18:19
作者: sa072686 at 09/07/15
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11474 Accepted
時間: 2009/07/15 Wed 20:16:19
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11474 Accepted
時間: Wed Jul 15 20:17:18 2009
空虛空虛的一題
翻譯一下
有 n 棵樹和 m 個樹醫,其中一棵病了,於是其它樹就想辦法幫他傳遞訊息
一棵樹以數個點表示它所有分枝座標,兩棵樹間能傳遞訊息當且僅當
兩棵樹中各能找到一分枝,使得它們之間距離 <= k
而樹醫以一個點表示它的位置座標,若一棵樹任一分枝與樹醫距離 <= d
則該樹可以與樹醫說話,問病了的那棵樹有沒有辦法把訊息傳給樹醫
可以就有救,不可以就沒救,病了的樹一定是第一棵
數字都小小的,BFS 衝一下就過了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/15 Wed 20:39:59
作者: Tommy at 09/07/15
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> ※ 本文轉錄自 [sa072686] 信箱
> 作者: sa072686.bbs@ptt2.cc
> 標題: [學術] ACM 11480 Accepted
> 時間: 2009/07/14 Tue 10:12:56
> 作者: sa072686 (sa) 看板: sa072686
> 標題: [學術] ACM 11480 Accepted
> 時間: Tue Jul 14 10:13:17 2009
> 空虛空虛的一題,看似 DP 但是複雜度過高,不過可以硬算…
> 翻譯一下
> 你現在有 n 顆球,有三種顏色 r, g, b 且每種顏色至少要有一顆
> 又藍多於紅,綠多於藍,問有幾種可能?(n <= 1000010)
> 先枚舉紅球個數 r,則 b+g == n-r
> b 最少要 r+1,最多 (n-1)/2,敲定 b 之後剩餘就是 g 了
> 所以枚舉 b 只有 n/3 種可能,對於每個 b 可以 O(1) 算出幾種可能
> 因此是線性時間解
另一個方法是用爆搜先爆出答案
然後絕對不是建表
是運用你超強的觀察力 (注意:不是超強的記憶力,這裡沒有生命蘑菇)
觀察出前後項的遞迴式
<E> s[i]=s[i-1]+(i%6==0)+(i-2)/6 記得開 long long
--
╭═══╤═══╮ ╰═╮ ╭═╯
│ │ │╭═和平,土地,麵包═╮ │ │
│ ╭═╧╧╮╤═╤═╮═╤═╤╧╮ │ │
│ │ ││ │ │ │ │ │ ╰═╤═╯
│ │ ││ │ │ │ │ │ │
╰╧╯╰═══╯╰ ╰ ╰ ╰ ╰ ╰ ─╯
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by Tommy from 218.172.176.42 (中滑一番)
→ sa072686 推:寫ACM就是要打怪練級換裝備 0715 21:33
作者: sa072686 at 09/07/16
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11475 Accepted
時間: 2009/07/16 Thu 14:00:19
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11475 Accepted
時間: Thu Jul 16 12:36:18 2009
知道算法,沒幾行就過啦…不知道的話想破頭可能也想不出來
畢竟三個臭皮匠勝過一個諸葛亮啊! (咦? 那三個人不只臭皮匠等級吧..)
翻譯一下
如果今天有一道題目長這樣:給你一數 n 你必須輸出任意一個長度 > n 的迴文
你一定邊想著這題怎麼那麼腦殘,邊把它丟給你的弱者隊友寫
但世事總是不怎麼如意,尤其在你發現只剩幾分鐘比賽就結束了
而你的弱者隊友仍然寫不出這題時…你發現他的 code 只能生出亂七八糟的字串而非迴文
但你又沒有足夠時間重寫它,只好寫個程式接收 output 並在 output 字串「後面」
加上儘量少的字使其成為迴文,現在你必須完成這個工作
/* 譯註:騙鬼啊這最好會比重寫還快 (翻桌) */
鳥解也可以過,數據應該蠻弱小的…鳥解長這樣
枚舉每個字元,與結尾字元相比,若不相同,則這字元一定要出現在字串後面
若相同,則這兩字元中間字串若為迴文,即為所求;否則加在字串後面,然後繼續
2.4s, rank 150/152, 但離 time limit 4s 還蠻遠的.. (茶)
再來是正解,感謝 devilqxect 與 shik 一個提供解法一個講解 KMP XD
先找出原字串的反轉,用 KMP 掃過去,看到結尾時最多匹配多少字元
即,從結尾往回看最多幾個字元時,仍是迴文,接下來把剩餘字元補在尾巴就結束了
反轉後如果還能匹配到,表示是迴文,看結尾時匹配多長就是了
0.020s, 快好多啊啊啊
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ Tommy :我好弱 QQ 推 07/16 12:59
→ sa072686 :樓上拍拍, bs很好很強大啊 推 07/16 13:58
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/16 Thu 17:02:37
→ yuscvscv 推:kmp? 0717 09:12
→ sa072686 推:� 0717 09:29
→ yuscvscv 推:暑輔再研究看看好了 0717 09:36
→ suhorng 推:sa大神版有學術文呀 0717 09:37
→ yuscvscv 推:是喔 我看看 0717 09:42
→ yuscvscv 推:在哪裡啊/ 0717 09:45
→ suhorng 推:sa大神批兔那個個版>////< 0717 09:53
→ sa072686 推:修正完�後�𠺘�� 0717 10:02
→ yuscvscv 推:瞭解~ 0717 10:19
作者: sa072686 at 09/07/17
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] TIOJ 1535 Accepted
時間: 2009/07/17 Fri 11:04:51
作者: sa072686 (sa) 看板: sa072686
標題: [學術] TIOJ 1535 Accepted
時間: Fri Jul 17 10:54:05 2009
噢噢戰力好弱,這題寫了好久 XD 感謝 shik 和 SKYLY 讓我拖了很多時間
應該不用翻譯?
嗯…就用帥法…啊不,用篩法篩一下,答案最大 1300 萬上下
所以可以篩到 1300 萬左右,過程中所有質數都檢查是否為 Emirp
反轉有可能會超過篩的範圍,這時再檢查就好,其它都查表就可以了
腦殘了頗久還看錯位數,嘖嘖…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/17 Fri 11:05:22
作者: sa072686 at 09/07/17
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] TIOJ 1536 Accepted
時間: 2009/07/17 Fri 11:05:51
作者: sa072686 (sa) 看板: sa072686
標題: [學術] TIOJ 1536 Accepted
時間: Fri Jul 17 11:05:51 2009
誰說我的算法未必過的?明明就秒殺秒殺的啊∼
324 MS 也不算慢吧,嘿嘿
當然是先篩法,不過要記錄被誰篩去的
求解時,反正是要找比自己小又互質的個數,有公式可以用
f(n) = n * (p1-1)/p1 * (p2-1)/p2 * ...
p 為所有 n 的質因數的集合,也許求 p 是有些慢,但前面的篩法就派上用場
設 fac[i] = j 為記錄 i 被 j 篩去,則知若 (i/fac[i]) % j != 0
則 j 為一 i 之質因數…雖然整除也行,但可能會重複計算
於是對於一數 n 求其所有質因數的方法就變成
while(p > 1)
{
t = p / fac[p];
if(t % fac[p]) prm[cnt++] = fac[p];
p = t;
}
當 p 除掉 fac[p] 之後若不整除 fac[p] 則表示 fac[p] 只剩一次了
所以可以安心地記錄而不怕重覆記錄,也不用管 fac 出現的大小順序了
最差情形是 n = 2^m,但總也算 O(log n)
所以整體是 O(c log n) 其中 c 為要求的數字個數,n 為最大數字大小
複雜度很低啊,是哪個懷疑它不會過的?要不是該睡了,昨晚就馬上 AC 來表你 XD
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/17 Fri 11:06:04
→ sa072686 推:噢不我腦殘了…最差情形是n=2^m這種情形 0717 12:46
▲ sa072686 改@2009/07/17 Fri 12:46:29
→ sa072686 推:fixed. 0717 12:46
→ butterfly21 推:還在比賽說XD 0717 13:09
→ sa072686 推:噢…有道理XD 0717 13:26
作者: sa072686 at 09/07/17
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [算法] Knuth-Morris-Pratt, KMP
時間: 2009/07/17 Fri 14:17:34
作者: sa072686 (sa) 看板: sa072686
標題: [算法] Knuth-Morris-Pratt, KMP
時間: Thu Jul 16 19:09:30 2009
用作字串比對的算法,對一本文 T,在裡面尋找 Pattern P 出現的情形
算法的主要思想是這樣:
一般比對時,都是試著把 P 對齊 T 中的某一段文字,來比較是否相同
T: abcabcabdabc
P: abcabda
則暴力做的話是把 P 對齊 T 中的每一個字元,試著比對看看
若 T 長度 m, P 長度 n, 這樣複雜度 O(nm) 相當慢
因此 KMP 想法是,透過做一些預處理,略去一些已知不必要的比較
如上例子,比對一路順利,直到 c, d 不相同時,也看過這一段 T 裡面有些什麼了
因此不是試著比較 abcabda 和 bcabcab,而試著直接找下一個可能匹配成功的點開始
c 前面是 abcab, 而 d 前面亦是 abcab, 這是已知事實
這時我們知道,下一個可能匹配成功的點,就是 abcab 這段自己跟自己匹配時
除了頭對齊頭以外,下一個對齊點使得這段可以對齊到底,也就是
s1: abcab
s2: abcab
「找到一對齊點 p 可以匹配 s1 從 p 開始到結尾這一整段的位置且 p 最小」
就是下一個可能匹配成功的點了,設 T 與 P 剛匹配失敗,也就是發現 c, d 不同
的點為 k, 則知若點 p 不滿足可以匹配 s1 可以匹配到結尾一整段的條件
在點 k 之前便會發現匹配失敗,即 k 之前就會出現不同,已知失敗的話自然不必再看
考慮以下兩字串的比對
s1: abcabad
s2: abcabae
則在 d != e 時, 決定下一個可能匹配成功的點繼續匹配,這時考慮 abcaba
s3: abcaba
s4: abcaba
這是唯一下一個可能匹配成功的點,也許你會想說
s5: abcabad
s6: abcaba
雖然匹配成功有 ab 兩個字元,比上述者強得多,只有 a 是相同的,但是顯然
在比較 s5 後面的 d 以及 s6 的 a 之前,就已發現 d 前面的 a 匹配失敗
所以這是不需要考慮的,這是為什麼選擇能匹配到 s5 結尾的原因
至於為什麼選擇 p 最小,則是防止漏掉一些可能匹配成功的點,如下
s1: ababab
s2: ababab
則有兩種可能
s3: ababab
s4: ababab
s5: ababab
s6: ababab
取 p 最小應如 s3, s4 的情形一樣,因為這情形即有匹配成功的可能
若跳至 s5, s6 則可能錯過正解,因此先考慮 p 最小的情形,匹配失敗時
自然會再考慮到如 s5, s6 的情形
於是,在匹配過程中若遇不同者,則跳至對齊 p 點,再做比較
T: abcabcabdabc
P: abcabda
跳至 p 點後會如下
T: abcabcabdabc
P: abcabda
於是一樣比較原先失敗的 c 的位置,然後做跟前面一樣的事就行了
這時在失敗的 c 的位置之前,都已確定匹配成功
所以指向 T 的指標恆不後退,只改變指向 P 者
那麼現在問題為:怎麼知道 p 在哪?
前面看得出來都是自己和自己匹配,因為到發現不同點時,前面那段一定是相同的
所以只要自己和自己做一次匹配,就可以了
但自己和自己比對,一定是完全匹配;我們也不希望這結果
所以必須限制匹配時不能頭對頭對齊,這樣就可以了
預先自己與自己匹配,記錄每個位置匹配長度,之後就可以直接使用
以下舉個例子,P 用 abcabcabda
abcabcabda
-000123400
這邊要把最長匹配的值記錄在下一格裡,原因是我們使用到 next[p] 時
是已經確定 p 的位置匹配失敗,且 p 前面均匹配成功的情形
我們需要讓 b 之前能匹配成功,因此只需要到 b 前一個字元的匹配長度
正好這匹配長度在 index 以 0 為開頭時,正好會掉在匹配成功的下一個字元
因此恰為 b 所需要去比較的字元…換句話說
在點 p 匹配失敗時,所要知道的是 k 使得 s[0..k-1] == s[p-k..p-1] 且 k 最大
則我們移動 P 使得點 k 對到目前點 p 的位置,仍可維持 k 之前均匹配成功
只有 k 是不一定正確的,再拿 k 去和這位置比較看看
由於沒辦法知道本文 T 在點 p 究竟會是什麼,找 k 才不能包含點 p
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/17 Fri 14:20:34
→ zenixls2 推:借轉 0717 18:09
φ zenixls2 轉:到 [zenixls2] 看板,于 2009/07/17 Fri 18:10:02
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/07/19 Sun 23:16:06
作者: sa072686 at 09/07/18
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0614 Accepted
時間: 2009/07/18 Sat 16:44:27
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0614 Accepted
時間: Sat Jul 18 15:56:23 2009
非常腦殘但是不好懂…
翻譯一下
給一由大寫字母構成的字串,試問其連續且遞增的最長子字串長度為何
/* 譯註:
連續就是出現位置連續,遞增就是後字元 ASCII - 前字元 ASCII == 1
比如說 ABC 是,ABD、ABA 不是
*/
線性掃過,設長度 1, 如果滿足遞增則長度 ++, 不滿足則長度歸一
在遞增時記錄答案,若比目前找到的大就替換,這樣無腦掃就 AC 了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/18 Sat 16:47:10
作者: sa072686 at 09/07/18
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0615 Accepted
時間: 2009/07/18 Sat 16:44:29
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0615 Accepted
時間: Sat Jul 18 16:44:57 2009
話說過歸過,還不知道該給這題上什麼 tag 好…
翻譯一下
這是個兩人玩的遊戲,給你 n 顆石頭,先手者可以取走 1~n-1 顆
之後每一輪可取最大顆數為對手上一輪取走顆數之 k 倍,取到最後一顆者勝
也就是說對手取了 m 顆之後,你這一輪就最多只能取 m*k 顆
假設兩人都好威(也就是說都很卡恩)絕對不會失手,問先手者是否必敗
若必勝,則輸出第一輪可拿走的最少顆數
只能說需要觀察然後推一下,石頭數 <= 10^9 不可能硬做
先觀察 DP 過程,以 dp[i] = j 代表 i 顆石頭時的狀態
若 j == 0 表示 i 顆的情形下,先手者必敗;若 j > 0 則表示先手者最少取 j 顆
必勝,而這種遊戲就是要想辦法逼對方進入必敗態
設取走 m 顆,則 m * (k+1) >= i 時必敗,你拿 m 顆對手拿 m*k 顆
會超過 i,這時對手下一輪就可以贏,所以只考慮 m * (k+1) < i
此手必勝的條件為 dp[i-m] == 0 || dp[i-m] > m*k
如果 i-m 必敗,則對手必輸;否則,如果 i-m 必勝所需最少起手數超過 m*k
則 i-m 亦必敗,從這裡我們可以觀察到幾種情形:
當 dp[i] = j, j != 0 時,對於所有 t 滿足 t>i, 當 (t-i)*k < j 時, t 均必勝
又,當 j == 0 時,對於所有 t 滿足 t>i, 當 (t-i)*(k+1) < t 時亦必勝
可知必敗情形分佈相當稀疏,尤其在 i 越大時
然而當 j == 0 時就算到不滿足 (t-i)*(k+1) < t 時,也有可能存在其它 i
滿另 (t-i)*k < j, 考慮觀察是否有可能由一個必敗點推知下一個必敗點所在
已知一必敗點 i, 先不考慮 i 大小, 觀察發現序列呈以下結果
0 1 2 3 4 .. k+1 1 2 .. p q ..
當出現至少取走 k+1 才會勝利的情形後,序列會歸一,因為取走一顆後
對方仍無法取到 >= k+1 顆,故對方必敗;在 p 的地方發現 p*k < k+1, (p+1)*k < k+1
所以在 p 之後又會轉折,也就是說到 p 還可以取回到 k+1 顆才能必勝的地方
而 q 則必須回到上一個必敗點,因此 q 的值這裡會大跳躍一次
在這次大跳之後,自然回歸 1 2 3 4 .. 分佈,不過一旦出現 k+1 又會歸一
以 k == 2 為例,序列會長這樣
1 2 3 1 5 1 2 8 1 2 3 1 13 1 2 3 1 5 1 2 21 1 2 3 1 5 1 2 8 1 2 3 1 34 ..
觀察每次大跳的地點,發現 1 2 3 轉 1 再跳 5 是因為 2*k > 3, 所以跳回前面必敗點
再來 1, 2, 發現 3*k > 5 所以大跳回必敗點,再來 1, 2, 3, 1, 接著 2 不能跳 3,
可是 4 又不能跳 8 所以只好跳 13 回到前面必敗點,到必須大跳回必敗點之前
則序列會一直重複一樣的東西,一樣的 1 2 3 1 5 ..
而我們發現在一個大跳點之後,序列不會完整重複,直到小的大跳點跳不回大跳點
像 8 在 1 2 3 1 之後接不上 5,因為 5 跳不回大跳點,5*2 > 8, 所以插入
這個點在序列中的位置即可跳回必敗點,也就是下一次的大跳
於是到這裡,只要我們找到目標點在序列中的位置,以及夠多的大跳點
一直找最近的大跳點,如果等於目標點就是答案,否則若大跳點較小就減去
因為減去之後仍維持循環,減到最後一定找得到答案,也就得到最少取多少
又前面我們並不考慮必敗點 i 大小,這裡我們必須考慮進去了:
當大跳點 t 使得 (t-i)*k >= i 時大跳失敗,可證跳更前面的點也必失敗
而 i 從前面觀察可證已是最近點,故 t 必敗,由此可知:
兩必敗點間的距離必為序列中某一大跳點的位置,且此大跳點大於序列前面所有點
所以只當和一個大跳點第一次碰面時,有可能是下一個必敗點的位置
又 i 會越來越大,因此離下一個必敗點的距離,不會更小
可知先求大跳點位置,到大跳點 >= 所求 n, 再從第一個必敗點開始
一直找出下一個必敗點,直至找到必敗點 >= n, 若 n 恰落在必敗點,則必敗;
若 > n 則把 n 減去上一個必敗點,得出序列位置,再反求 n 的值
如此即可解出此題
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/18 Sat 16:47:19
作者: sa072686 at 09/07/18
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0619 Accepted
時間: 2009/07/18 Sat 16:44:28
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0619 Accepted
時間: Sat Jul 18 15:59:14 2009
一樣是非常腦殘,重點只在一個字…
翻譯一下
給一個簡單多邊形(simple polygon)求此多邊形中有多大面積
站在上面時可以看到所有地方,此多邊形保證為「凸」多邊形
因為是凸多邊形,在任意地點都可以看到全部,所以行列式算多邊形面積就好了…
本來應該算防破台題,但加上這點之後變成腦殘…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/18 Sat 16:47:24
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [閒聊] NTUJ 0617
時間: 2009/07/19 Sun 16:20:40
作者: syuusyou (syuusyou) 看板: sa072686
標題: Re: [閒聊] NTUJ 0617
時間: Sat Jul 18 23:25:09 2009
※ 引述《sa072686 (sa)》之銘言:
: 有沒有人可以提供中譯 Orz
: 我還是看不懂啊啊啊啊
簡單描述一下:
測值給的第一個數字
就是代表現在有n個初始值為0的數字
並且對其編號(從一開始)。
然後定義如果有兩個數字符合以下條件:
編號較小的數字 > 編號較大的數字
則稱它們為一對 Upside-Down pair
然後再來會給你幾個變化
像是sample input中的
1 +5
3 -5
2 +7
代表的就是編號多少的數字其所有的改變
我們要輸出的就是每次變化後
Upside-Down pair 的總數
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.143
→ sa072686 :喔喔,感謝!! 推 07/18 23:27
→ syuusyou :然後這題測資似乎很多,因為我一直TLE = =" 推 07/18 23:28
→ sa072686 :話說…樓上是哪位呢? 推 07/18 23:34
→ syuusyou :路過看強者ACM跟NTUJ的弱者XD 推 07/18 23:38
→ sa072686 :也就是說是同好?那可以伸個自介文認識一下嗎XD 推 07/18 23:44
→ syuusyou :ㄟ都...物理二陳秀昌 個板同ID這樣算自介嗎XD 推 07/19 08:48
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 16:21:11
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0606 Accepted
時間: 2009/07/19 Sun 16:20:41
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0606 Accepted
時間: Sun Jul 19 15:15:31 2009
頗好寫的鳥題…要不是被線段樹唬住 XD 又噴了一個莫名的小 bug
只能說隊友太威太強大
翻譯一下
給 m 條線段問最少幾條可以完全罩住區間 1~n
貪心一下,每次取一條,取的時候除了必須覆蓋住左邊界,還要右邊界最長
確立之後拿這右邊界作為左邊界,再取下一條,條件同上
由於每次都加一段使得蓋住全部,右邊界又最長,自然就能取最少條
不存在一條線段使得選擇的一條更差,因為它要不是罩不住左邊界
就是右邊界沒比較好,可能掉解,反例很容易舉,greedisgood
n log n 就輕鬆 AC,複雜度是因為要先 sort 過,這樣掃的時候
才能線性掃過不回頭.. 反正考慮過的,右邊界最長的都拿出來了
回頭也不會有右邊界更長的了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 16:21:16
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0608 Accepted
時間: 2009/07/19 Sun 16:20:42
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0608 Accepted
時間: Sun Jul 19 15:24:30 2009
ACM 題,連名字都一模一樣
翻譯一下
給兩數 s, d 求 s 所有排列方式中整除 d 者有幾種
s 至多十位吧, d 貌似 10000 以內…至少 ACM 的 d 是這麼大
DFS 暴搜也是 10! 可以解決,但是最多十位所以要 long long, 要小心不能重覆
不重覆的方式很簡單,排序後若上一個與目前這個相同,且上一個沒取過,則不取
即,決定下一個數字時,不取同樣數字超過一次
也可以試著 DP, 2^n * n * d 的時間複雜度,空間是 2^n * d
用狀態 dp[s][i] = j 表示每個數字取與不取的狀態 s 下,餘數 i 者有 j 種情形
轉移時枚舉未取過的數字,試將其當個位數,設該數 n 則
dp[s][k] += dp[s-(1<<n)][L], L = 1~d-1, k = (10*L+n) % d
擋重覆方法同上,解決
邊界為當每個數都可取時, dp[s][0] = 1
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 16:21:24
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0609 Accepted
時間: 2009/07/19 Sun 16:20:43
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0609 Accepted
時間: Sun Jul 19 15:27:02 2009
也是 ACM 題
翻譯一下
給一堆單字,試將其頭尾相接,問能否接成一串,s1 能接 s2 的條件為
s1 最後一個字母 == s2 第一個字母
尤拉路問題,先記頭尾看所有字母 degree 再 DFS 掃過檢查連通
輸入與建表 O(n), 後面全部 O(1), 字母數畢竟不因輸入大小而改變
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ anfranion :咦,我用算的耶 推 07/19 15:37
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 16:21:29
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0610 Accepted
時間: 2009/07/19 Sun 16:20:44
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0610 Accepted
時間: Sun Jul 19 15:32:22 2009
容易的排組題,ACM 有中譯題完全相同,只有題目敘述不同
翻譯一下
給 n, m 問長度 n 第 m 位二進制數為何,其中二進制數排序方法為:
1 出現的 bit 較少者排前面;相同時字典序小者排前面
簡單的排組就可以解決,對 C 用 DP 建表也很快解決
c[i][j] = c[i-1][j-1] + c[i-1][j], 用 DP 的意義而言意思是
c[i][j] 表示到第 i 個為止取 j 個,則要嘛 i-1 取了 j-1 個,再取第 i
要嘛 i-1 時就取 j 個, i 則不取
後面排組就先用 c 計算 1 出現 0 個、1 個、.. 最後就知道應該有幾個 1,設 p 個
扣去之後就知道在 p 個 1 的情形中是第幾個,再來從最大 bit 看起
如果是第 n 個 bit, 知道前面有 c[n-1][p] 種情形,比較一下就知道該放 1 還是 0
後面依此類推
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 16:21:33
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0611 Accepted
時間: 2009/07/19 Sun 16:20:45
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0611 Accepted
時間: Sun Jul 19 15:44:33 2009
不算難想的 BFS 變化題,其實也夠像 DP 的了…
翻譯一下
給一個 graph 問能否透過反轉其中恰一條單向邊,使得起終點距離縮短
可以則輸出反轉後最佳距離和反轉邊,不行就輸出原距離以及 0
若多條邊則輸出編號最小者OB
這裡 BFS 要運用一點狀態的觀念,一個點設兩種狀態:用過反轉及沒用過反轉
由此可以把用過反轉的狀態集中在一起,只考慮最佳狀態─也就是
反轉後使得距離最小,且反轉的邊編號最小
也就是說,求起點到每個點,用與不用反轉的最小距離,以及用的最小邊
則過程中,若是反轉過的狀態,設反轉邊 e, 則只看走得到的點
若這些點在反轉過的狀態中,距離可以更小,則覆蓋之;
若只能相等,則若邊 e 可以比對方目前最佳邊更小,覆蓋之
由於都會丟進 queue, 若發現抓出來的點,其狀態不是當前已知此點最佳狀態
則 queue 後面必還有更好的狀態的點,此點略過,即使更新亦無意義,早晚會被刷回來
若是未反轉的狀態,則若可走到的點能距離更短就更新,否則略過
若是走不到的點,但對方走得到自己,則可試著反轉此邊走走看
看對方的反轉後狀態能不能更佳,可以就更新之
由於需要知道走的邊的編號,以及自己走不到、對方又走得回自己的情形
加上有重邊,於是我 adjacency matrix 存這樣
map[i][j] = k 表示 i 走到 j 以 k 為最小邊,這樣反查 j, i 也好查
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 16:21:40
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0612 Accepted
時間: 2009/07/19 Sun 16:20:46
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0612 Accepted
時間: Sun Jul 19 15:48:46 2009
超簡單題,大家也都有過
翻譯一下
f(x) = floor(3 * (ln x + 3)^3)
給 n 求最小整數 x 使得 f(x) == n
just binary search x. :)
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 16:21:45
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] NTUJ 0612 Accepted
時間: 2009/07/19 Sun 16:20:47
作者: anfranion (生命的意義是經歷) 看板: sa072686
標題: Re: [學術] NTUJ 0612 Accepted
時間: Sun Jul 19 16:00:03 2009
※ 引述《sa072686 (sa)》之銘言:
: 超簡單題,大家也都有過
: 翻譯一下
: f(x) = floor(3 * (ln x + 3)^3)
: 給 n 求最小整數 x 使得 f(x) == n
: just binary search x. :)
我是另外的作法
算是解公式
因為floor其實跟原本的數不會差太多,頂多是小了一點
所以解完公式微調一下也可以
3 * (ln x + 3)^3 = N
==>ln x = (N / 3)^(1/3) - 3
==> x = exp((N / 3)^(1/3) - 3)
算出來的x取floor,帶回去算有沒有等於N
如果比較小,就加1再試試看有沒有等於N
如果沒有就代表沒有解
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 114.32.0.42
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 16:21:49
作者: sa072686 at 09/07/19
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0607 Accepted
時間: 2009/07/19 Sun 18:09:59
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0607 Accepted
時間: Sun Jul 19 18:10:33 2009
遲來好久的 AC .. 就算沒耍白痴浪費時間,我想也來不及寫完
翻譯一下
給你一堆線段代表屋頂,問每一個屋頂每秒有多少的水流量
寬度 1 單位每秒會收到天下落下 1 單位雨量,並會順著往低的地方流下
如果有剛好流到屋頂邊邊的也算流到,每個屋頂的 x1 < x2 且沒有點共點、線段不相交
也沒有恰垂直的屋頂,至多 40000 個屋頂,座標介於 0 ~ 100 萬之間
可以假設地面上每一點上均不會疊超過 100 個屋頂
題目的假設提供了一點點方向,座標有點大一個個考慮太慢
因此考慮將屋頂座標拿出來離散化,把所有端點的 x 扔進陣列排序並去掉重覆
則任相鄰兩點均會被屋頂覆蓋或沒有屋頂,不會有既覆蓋又不完全覆蓋的問題
也合併到至多 2n 個點,於是許多處理從至多 100 萬縮到 2n
考慮屋頂水流一定有個拓璞順序,以最低端點排序則有拓璞順序可用
再考慮每點上不會超過 100 個屋頂,聯想到離散化後那些段亦可視作一點
用二分搜尋找到屋頂起點後加到表中,最差 n^2 但通常不會太差,有剪枝不太會 TLE
再來記得我們是依最低端高低排序,所以有可能這樣
\
\
\
╲ \
\
較斜的會較慢加到表中,因為它拓璞順序比較後面,可是某些點它卻比較不斜的來得高
所以記得要對每一點排序一下,接著枚舉每一段算多少雨和掉在哪一段
再依拓璞順序流過一遍後輸出就可以了,除了把屋頂加到表中比較慢
但由於有離散化過,很難出現最差,之後的排序是 n * (100 log 100) 算它線性
枚舉每一段的雨量算 n * 100, 拓璞順序流下算 n * 100 都可以當作線性
複雜歸複雜,但離散化過時間就不會太緊了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/19 Sun 18:11:21
作者: sa072686 at 09/07/20
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] NTUJ 0608 Accepted
時間: 2009/07/20 Mon 14:16:32
作者: sa072686 (sa) 看板: sa072686
標題: Re: [學術] NTUJ 0608 Accepted
時間: Mon Jul 20 00:01:19 2009
→ syuusyou :我還是看不懂它在問什麼QQ 推 07/19 23:44
簡單拿個例子好了
123 2
則 123 有以下幾種 permutation
123
132
213
231
312
321
其中有 132, 312 是 mod 2 == 0 的,所以答案 2
若為 223 2
則只有以下幾種
223
232
322
所以答案顯然是 2,也就是重覆的排列不算…單純兩個相同的 2 互換位置視作相同
※ 引述《sa072686 (sa)》之銘言:
: ACM 題,連名字都一模一樣
: 翻譯一下
: 給兩數 s, d 求 s 所有排列方式中整除 d 者有幾種
: s 至多十位吧, d 貌似 10000 以內…至少 ACM 的 d 是這麼大
: DFS 暴搜也是 10! 可以解決,但是最多十位所以要 long long, 要小心不能重覆
: 不重覆的方式很簡單,排序後若上一個與目前這個相同,且上一個沒取過,則不取
: 即,決定下一個數字時,不取同樣數字超過一次
: 也可以試著 DP, 2^n * n * d 的時間複雜度,空間是 2^n * d
: 用狀態 dp[s][i] = j 表示每個數字取與不取的狀態 s 下,餘數 i 者有 j 種情形
: 轉移時枚舉未取過的數字,試將其當個位數,設該數 n 則
: dp[s][k] += dp[s-(1<<n)][L], L = 1~d-1, k = (10*L+n) % d
: 擋重覆方法同上,解決
: 邊界為當每個數都可取時, dp[s][0] = 1
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ syuusyou :啊看懂了XD 推 07/20 00:30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/20 Mon 14:17:55
作者: sa072686 at 09/07/20
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] NTUJ 0611 Accepted
時間: 2009/07/20 Mon 14:16:33
作者: sa072686 (sa) 看板: sa072686
標題: Re: [學術] NTUJ 0611 Accepted
時間: Mon Jul 20 10:11:38 2009
★xxxxxxxxx 把程式複製一份 [07/20/2009 00:33:06]
★xxxxxxxxx 城市 [07/20/2009 00:33:10]
★xxxxxxxxx 假設原本的是A,複製的是a [07/20/2009 00:33:25]
★xxxxxxxxx A->a中間有有向邊 [07/20/2009 00:33:43]
★xxxxxxxxx 然後去走BFS [07/20/2009 00:33:46]
這個…研究了一陣子,怎麼想怎麼怪,複製一份城市…
所以現在有兩個相同的 graph 然後兩者間有有向邊嗎?
我一直想成是,把 node 各生一份然後自己連到自己,就覺得怪怪..
有向邊是怎樣的有向邊也不知道XD
之後想了想,反轉邊只能走一遍,那想必是把原 graph 複製一份
並令點 i, j' 間有邊僅當 (j, i) 存在,由於 A 一走到 a 就讓它走不回來
所以保證單向邊只踩一次,這樣下去 BFS 就是對的,不過還要做一點事
但還是得保證踩的邊是最小編號…直接 BFS 保證最小距離但不保證踩最小編號
所以在 BFS 中若某點狀態為已踩過,還是得看「經過」的最小編號邊決定吧
否則有可能會出錯…如果記了又跟我的方法差不多,只差我沒直接複製一份
而是把狀態不同當作不一樣來處理,其實也挺像的
我實作也是讓已走過反轉邊的點走不回沒走過的,要想作有兩個不同 graph
中間不可逆也是可以通,未走過反轉邊就可以選擇要不要反轉
也跟考慮要不要走到複製出的 graph 一樣,只是我用狀態的相異來解釋
而這裡用 graph 的觀點來解釋吧…若是把狀態抽象化為 graph
會發現兩者幾乎是一樣的.. XD
果然是比較數學向的想法,我要是沒聽這些大概也想不出來
現在想完了也不覺得實作有比較好寫.. XD
當然如果是我想錯了請更正~
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/20 Mon 14:18:01
作者: sa072686 at 09/07/21
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] NTUJ 0611 Accepted
時間: 2009/07/21 Tue 01:07:21
作者: godgunman (its尬尬麵) 看板: sa072686
標題: Re: [學術] NTUJ 0611 Accepted
時間: Mon Jul 20 21:20:56 2009
我覺得你弄的好複雜XD
做兩次Dijkstra,起點到所有點,所有點到起點
在掃一次全部邊,看替換哪條邊比較好
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 220.143.252.39
→ anfranion :不懂~ 推 07/20 21:39
→ shik :起點到i的距離假設叫dis[i] 推 07/20 21:41
→ shik :終點到i的距離叫dis_r[i] 推 07/20 21:41
→ shik :這兩個陣列可以用兩次Dijkstra or BFS求出來 推 07/20 21:42
→ shik :之後枚舉邊(u,v) dis[v]+dis[u]+1求最小這樣 @@ 推 07/20 21:43
→ skyly :dis[v]+dis_r[u]+1 吧XD? 推 07/20 22:20
→ shik :手殘沒藥醫..感謝樓上 XD 推 07/20 22:35
→ sa072686 :好招XD 可是dijkstra複雜度比較高 推 07/20 23:00
→ sa072686 :話說照你這樣講,BFS兩次比較快 推 07/20 23:27
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/21 Tue 11:52:40
作者: sa072686 at 09/07/21
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11482 Accepted
時間: 2009/07/21 Tue 01:07:22
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11482 Accepted
時間: Tue Jul 21 00:32:53 2009
簡單題,畫 ASCII 圖但不太苦工
翻譯一下
給你 n, m 試繪出 n 層且每間房大小 m 的三角形美術館
房間以正反斜線、空白和底線構成,以下為大小 3 的例子
/\
/ \
/____\
高度 3, 寬度 6, 空白和底線可以自己算算,第 i 層會有 i 間房
詳細可參考 sample
反正就迴圈繞一繞…嫌慢要加速可以預存一段一段的字串一次輸出
由於常有要輸出一堆連續空白或底線的,可以先存一段夠長的字串
用 printf() 配上 %.*s 輸出,會簡潔很多,也會比較快速
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/21 Tue 11:52:44
作者: sa072686 at 09/07/21
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11483 Accepted
時間: 2009/07/21 Tue 01:07:23
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11483 Accepted
時間: Tue Jul 21 01:07:34 2009
雖然有點空虛的苦工…不過錯一次還真不該
翻譯一下
給 n 表示接下來有 n 行,每行一個字串,僅含英數、空白、" 和 \
試依規定格式輸出一份 code 印出這 n 行字,輸出的 code 規格如下
#include<string.h>
#include<stdio.h>
int main()
{
printf("<line1>\n");
printf("<line2>\n");
..
printf("\n");
return 0;
}
其中 <line1>, <line2> 這些代換成輸入的字串,"..." 只是代表以下依此類推
當輸出字串有 " 和 \ 時,要在前面輸出 \ 跳脫之
不難寫,不過以下幾點要注意一下…
直接複製題目中的 code,會得到全型的 ",sample input 也會有全型 "
另外 sample input 第一組 n 後面有空白行,可以不要理它,把它砍掉
全型 " 全部換回半型 ",才是正確的 input.. 至少我默認這幾件事並得到 AC
也就是說輸出輸入均不用管全型不全型…也不會要你忽略空白行
至少我默認其不用忽略空白行
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/21 Tue 11:52:47
作者: sa072686 at 09/07/21
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11494 Accepted
時間: 2009/07/21 Tue 13:31:34
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11494 Accepted
時間: Tue Jul 21 13:32:33 2009
非常空虛的腦殘題…
翻譯一下
在標準西洋棋棋盤上,給你皇后位置,以及目標位置,問最少幾步可到
已知答案只可能 0、1、2 .. 如果目標位置即原本位置,就 0 步
一步可到的話就一步,否則就兩步 .. 斜角可以用座標 x, y 相加相減判斷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/21 Tue 13:35:36
作者: sa072686 at 09/07/21
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11495 Accepted
時間: 2009/07/21 Tue 13:57:40
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11495 Accepted
時間: Tue Jul 21 13:58:48 2009
經典題目
翻譯一下
現有一個遊戲,開始前先亂數取一數 n 再取一序列為 1~n 的任意排列
兩人輪流行動,每次行動需找出兩相鄰的數使得 ary[i] > ary[i+1] 並將之對調
如果找不到這樣的數對則該人戰敗,現在給你 n 及序列,Marcelo 先手
Carlos 後手,問勝者為誰,n <= 10^5
經典題,同 10810,很直觀地發現它和 bubble sort 一樣,可是 bsort 會爆炸
所以要用 msort,在 merge 的時候觀察每個元素要往前搬幾格
由於只能和相鄰的交換位置,所以看要搬幾格,也就是前面有幾個數比自己小
就知道要移動多少次,最後看總搬移次數除以 2 的餘數,就知道誰勝誰敗
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/21 Tue 14:06:47
作者: sa072686 at 09/07/21
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11496 Accepted
時間: 2009/07/21 Tue 16:37:31
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11496 Accepted
時間: Tue Jul 21 14:28:02 2009
也是不難的一題
翻譯一下
給一個音樂的波形,並告訴你此音樂會循環播放,那麼假設把它捲起來
使得頭跟尾接在一塊,問有幾個波峰和波谷,也就是區域的最高或最低點
相鄰兩個轉折點不會一樣,第一個和最後一個也不會一樣
把它繞成一圈然後看每個元素是否為區域最大或最小即可
看法是 ary[i-1] - ary[i] 與 ary[i+1] - ary[i] 同號
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/21 Tue 16:40:39
作者: sa072686 at 09/07/21
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11498 Accepted
時間: 2009/07/21 Tue 16:37:32
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11498 Accepted
時間: Tue Jul 21 16:37:42 2009
也是有點空虛的一題..
翻譯一下
在一座標系上(有這種系嗎?XD),給新的原點座標與 q 個點
問這 q 個點掉在哪一象限,或是 x, y 軸上
沒啥好說的…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/21 Tue 16:40:44
作者: sa072686 at 09/07/22
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] TIOJ 1028 Accepted
時間: 2009/07/22 Wed 15:30:12
作者: sa072686 (sa) 看板: sa072686
標題: [學術] TIOJ 1028 Accepted
時間: Wed Jul 22 15:31:06 2009
嗯,一臉的 DP 樣…
先 warshall 一下,然後記中繼點 k 以便追溯路徑
由於 k 由小到大枚舉 .. 所以若 map[i][k] + map[k][j] == map[i][j] 時
不去蓋它,自然記到的 k 就是最佳了
接著用這張表 dp 一下,n * 2^n 那種,設 dp[s][h] = k
代表狀態 s 且目前人在 h 上,最佳路徑長 k,則轉移時對可取點 i
看 dp[s-(1<<i)][i] + map[i][h] 即可,若相等的話比較 map[i][h] 中繼點
因為要字典序最小,勢必不能只比 i 大小,中間的路比較重要
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/22 Wed 15:31:15
作者: sa072686 at 09/07/22
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11488 Accepted
時間: 2009/07/22 Wed 16:46:29
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11488 Accepted
時間: Wed Jul 22 16:48:07 2009
這題爆炸很久…原先的算法還找不出錯在哪 orz
翻譯一下
給 n 個 binary string 求其所有子集的 prefix-goodness 最大者為何
一個集合的 prefix-goodness 定義為集合中字串數乘上這些字串的最大共同前綴長度
trie 輕鬆 AC, 但我一開始先 sort 這些字串,再轉求最大矩形一直失敗…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/22 Wed 16:46:37
作者: sa072686 at 09/07/22
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] ACM 11488 Accepted
時間: 2009/07/22 Wed 18:54:52
作者: sa072686 (sa) 看板: sa072686
標題: Re: [學術] ACM 11488 Accepted
時間: Wed Jul 22 18:52:48 2009
轉求最大矩形是對的
今天還是抓不出 bug 就乾脆寫 trie 版來交叉比對,寫程式亂數產生比較
噢…附帶一提,trie 版沒優化 IO 都不小心第一名 XD
結果發現小測資全對,大測資一組就爆
後來發現長度長就陣亡,再看發現長度有負數!?
啊嘶 .. 我 stack 開 char 啊啊啊啊
改正後 AC ..
就是轉成以下問題
1111111111111
1111111
11111111111111
111
1111111111
111111
求最大矩形且此矩形左緣需貼於左邊界
用 stack 存長度,每次把高度放進去,如果比自己大的全部 pop 並計算大小
原理是如果 push 的高度大於 stack 裡最大高度,則沒問題;
若是小於最大高度,則表示該高度最多延續至此,不能再往下延伸
所以 pop 並計算高度這樣時最大矩形大小,直到 stack 裡都比自己小
再把它放進去,這樣就可以了
這題排序後可以轉這樣的問題,push 匹配到上一個字串的最長長度
並且如果沒能匹配完,則 push 自己這字串的長度,因為兩種高度都有可能
以 sample 為例吧,排序後
0000
0001
010
10101
起始高度為 4,從 stack 有一個元素 4 開始
看第二個字串,與第一個匹配最長前綴 3,3 < 4 所以把 4 pop 掉
因為高度 4 延伸到此就一定被斷,計算之後發現高度 4 的矩形寬度 1
再把 3 push 進去,並知 4 > 3 所以 3 可以從 4 的位置開始延伸
此時知有可能之後可以匹配到自己全部,所以也 push 4
此時 stack 有兩元素代表高度 3, 4 且位置分別從 0, 1 開始
接下來第三個字串,與前一字串匹配長度 1, 前面 3, 4 到 1 一定斷
計算後高度 4 寬度 1, 高度 3 寬度 2, 然後 push 1, 位置由於 3, 4 > 1
所以從位置 0 開始,又後面可能匹配完這字串全部,也考慮 push 3
現 stack 保留兩元素,代表高度 1, 3 且位置從 2, 2 開始
接下來匹配長度 0, 故全部 pop 算出高度 1 寬度 1 及高度 3 寬度 1
再來 push 0, 5 進去, .. 掃完後全部 pop 然後計算大小
原理說穿就是如果大於自己就表示會被自己斷開,pop 計算並且自己可從前面伸過來
所以位置取被 pop 掉的元素的位置,如果小於自己就沒差可以留著它
※ 引述《sa072686 (sa)》之銘言:
: 這題爆炸很久…原先的算法還找不出錯在哪 orz
: 翻譯一下
: 給 n 個 binary string 求其所有子集的 prefix-goodness 最大者為何
: 一個集合的 prefix-goodness 定義為集合中字串數乘上這些字串的最大共同前綴長度
: trie 輕鬆 AC, 但我一開始先 sort 這些字串,再轉求最大矩形一直失敗…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/22 Wed 18:57:07
作者: sa072686 at 09/07/26
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0620 Accepted
時間: 2009/07/26 Sun 15:39:39
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0620 Accepted
時間: Sun Jul 26 15:41:18 2009
事實上頗簡單,也不難寫
翻譯一下
有不超過 200 棵樹被種在一方形區域中,列間與行間的間距均相同,計為一單位
給你每棵樹的樹高,以行、列的間距為單位,樹上會有猴子但不會超過一隻
猴子喜歡站在樹頂居高臨下地看,並認定牠所能看到的樹越多牠就越強
如果視野一樣,則住在越高的樹越強,問最強的猴子住在哪棵樹上,並且視野多廣
如果同時有多隻滿足,則輸出 0 0 代替位置,樹 P 能看到樹 Q 的條件是
假設此方形區域為一平面,而樹均為垂直此平面的線段,若 P 與 Q 的樹頂
的連線不交於任何其它線段,若樹的高度為 0 代表這格沒樹
設有 n 棵樹,則看視野是 n^2, 判斷能不能看到可枚舉 n, 這樣是 n^3
當然也可以用 GCD 之類直接看可能擋到的樹, 只看以兩樹為對角
所成矩形內的樹就足夠快了,計算上可以全部用比例來算
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/26 Sun 16:11:25
作者: sa072686 at 09/07/26
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0625 Accepted
時間: 2009/07/26 Sun 15:54:41
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0625 Accepted
時間: Sun Jul 26 15:56:05 2009
不難但是麻煩 IO 加上複雜的苦工建圖…
翻譯一下
給你很多條 street 和 avenue, 其中 street 平行於 x 軸, avenue 平行於 y 軸
現要添加一些 street, avenue 或延長一些既有的 street, avenue
使得所有 street, avenue 均連通,延長或添加一單位長度花費一單位金錢
求所需最少單位金錢
直接 n^2 Prim 硬做就過了, 重點在輸入要用 strtok() + atoi() 處理
而且 street 是先給 x1, x2 再給 y, avenue 是先給 x 再給 y1, y2 這點要小心
可以保證 x1<x2, y1<y2, 心機的是 avenue 誤解成 y1, y2, x
且不假設 y1<y2 時,所有 sample input 的答案都不變..
建圖時分開計算 x, y 的距離會好算一些,若同為 street 或 avenue
則有一維直接減就可以, 另一維可以算相交與否,否的話算端點間, 是的話就 0
若不同則兩維均算相交與否,不相交再算端點,相交就 0
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/26 Sun 16:11:30
作者: sa072686 at 09/07/26
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0626 Accepted
時間: 2009/07/26 Sun 16:11:42
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0626 Accepted
時間: Sun Jul 26 16:13:17 2009
剛看到時不知道為什麼想硬搜它…後來換三四種方式依舊 TLE 就想說不然試試 DP
然後就在一秒內想完 .. 那我前面在幹嘛啊啊啊啊
翻譯一下
給一只包含 0, 1 的序列,長度不會超過 15, 現要將其全部轉成 0
允許的操作只有反轉某一段長度為 i 的連續段,0 轉成 1, 1 轉成 0
反轉長度 i 的連續段需要花費 i 的力氣,每種長度的反轉都只能用一次
問花費的最小力氣為何
將輸入序列轉二進制後 DP 處理, 設狀態 dp[i][j] = k
代表使用過反轉長度至多 i 且序列轉二進制後為 j 的情形, 最小花費為 k
則 dp[i][j] = min(dp[i-1][j], min(dp[i-1][s]+i)), s 為 j 反轉長度 i
所能生成的所有狀態, 要嘛長度 i 不使用,就是長度至多 i-1 時狀態即為 j 的情形
要嘛就從 s 轉過來,此時花費會增加 i, 枚舉所有可能 s 即可
反轉可以用位運算來做,要讓 0 變 1, 1 變 0 可以用 XOR
1^1 = 0, 0^1 = 1, 因此要反轉的部份 bit 需皆為 1, 又其它部份不變
0^0 = 0, 1^0 = 1, 因此不反轉的部份 bit 需皆為 0
則原狀態 s 從第 i 個 bit 開始反轉 j 個 bit 後的狀態為
s ^ (((1<<j)-1)<<i)
1 << j 正好是第 j+1 個 bit 為 1, 減 1 之後會變成 j 個 1,
再將之左移 i 位, 即是反轉部份均為 1, 其餘為 0 了
n^2 * 2^n, 對於 n <= 15 是足夠的
如果不用位運算, 可能會變 n^3 * 2^n 就可能不太夠了, ..但不確定會不會過
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/26 Sun 16:13:11
作者: sa072686 at 09/07/26
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0627 Accepted
時間: 2009/07/26 Sun 19:20:17
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0627 Accepted
時間: Sun Jul 26 19:21:34 2009
不是很難做的一題 XD
翻譯一下
給一個有 n 個元素的集合,求有多少子集大小是 6 且可拆成兩個大小 3 的小集合
使這兩個小集合總和相等
想說 C(30, 6) 也不太大,就直接六層迴圈硬掃,第六層 binary search
結果 TLE, 就把其中幾層加料:若第四層三倍後超過,剪去;第五層兩倍加第四層超過
亦剪去,則 9.010 AC.. 不過秒數挺弱
後來直接弄三層迴圈 C(30, 3) 約 4000 上下, 然後 n^2 掃過去
往下掃到不同為止就剪去, 這樣 0.850 就可以過了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/26 Sun 19:21:41
作者: sa072686 at 09/07/26
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0624 Accepted
時間: 2009/07/26 Sun 21:09:04
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0624 Accepted
時間: Sun Jul 26 21:10:47 2009
一樣沒有很好懂,不過懂了之後秒殺!
翻譯一下
給你本文和修改後的本文,輸出它們的相異點
相異點為一字串,是不斷將長度 >= 2 的最長共同子字串砍去、直到不能再砍之後
將刪好的本文與修改後的本文串在一起、以 _ 分隔之,即為相異點
若有許多最長共同子字串,取本文最右邊的;若在修改後的本文仍有多種選擇
也選最右邊的
n^3 硬上,先 dp 求最長共同子字串,砍去後再 dp 再砍 .. 直到沒得砍
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/26 Sun 21:12:09
作者: sa072686 at 09/07/27
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0623 Accepted
時間: 2009/07/27 Mon 00:00:03
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0623 Accepted
時間: Mon Jul 27 00:01:56 2009
這題 co 起來好難過 .. 想縮時間複雜度又想不到好招,用鳥方法複製貼上
結果錯一堆一直改一直改 Orz 縮完變成 coding 複雜度超高啦 ..
翻譯一下
給一矩陣試求有幾個大小為 k 的子矩陣使得總和最小,並輸出之
另外有幾個條件:子矩陣必須有至少一格在邊邊上,並且拿掉之後不得使原矩陣不連通
硬掃吧…可以存矩陣和 (1, 1) 到 (p, q) 然後用排容扣,可以 O(1) 算一大塊子矩陣
我好像把它弄得超苦工 Orz
求所有形狀再硬掃可以過~ 只掃邊界是 0.040
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/27 Mon 00:01:09
作者: sa072686 at 09/07/28
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0622 Accepted
時間: 2009/07/28 Tue 13:44:08
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0622 Accepted
時間: Tue Jul 28 13:41:16 2009
沒很難的一題,不過腦殘很大…
翻譯一下
給 n 個東西 (不超過 20 個) 的 id 以及 discount, 還有一份清單
代表先買哪個東西之後,下一個可以買哪些,這樣可以構成一條商品鍊
第 k 個買的東西可以獲得 k 倍 discount, 求長度 m 的商品鍊中 discount 最大者
一樣 dp, 記錄目前商品鍊鍊尾和把商品買過沒建成二進制數代表
dp[i][j] = k 代表尾巴 i 狀態 j 最大 discount k
轉移時不但要看狀態 j 能不能接某商品, 還得看尾巴 i 能不能接
最後 dfs trace 狀態就可以了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/28 Tue 13:45:36
作者: sa072686 at 09/07/28
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11597 Accepted
時間: 2009/07/28 Tue 14:01:11
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11597 Accepted
時間: Tue Jul 28 14:02:10 2009
貌似有點腦殘但是又不會證的一題XD
翻譯一下
給你 n 個點 (n 為偶數) 的無向完全圖, 求最多可以有幾棵生成樹使得邊均不共用
我是猜…邊共有 n(n-1)/2 條,一棵生成樹要用 n-1 條,所以直接除下去
結果就 AC 了.. 可是我不會證XD 想徵求一下證明~
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/28 Tue 14:28:21
作者: sa072686 at 09/07/28
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11517 Accepted
時間: 2009/07/28 Tue 14:29:15
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11517 Accepted
時間: Tue Jul 28 14:20:55 2009
腦殘 DP 可是竟然被陰頗多次 ..
翻譯一下
給你身上擁有的零錢, 以及應付金額, 你必須付比應付金額高, 但是要付最少
並且在支付最少金額的前提下, 使得使用的零錢數最少
直接找零錢 dp 降維記 dp[i] = j 代表金額 i 使用最少零錢數 j
不過做的時候雖然金額至多 10000, 但可能給 9999 9999 這樣, 所以最好做到 20000
並且降維之後要從後面做回來, 因為零錢只有一個而已, 從前面做會變成無窮多個
之後枚舉一下就可以了
不降維的話記 dp[i][j] = k 代表不拿超過第 i 個零錢, 金額恰為 j 最少需用 j 個
轉移會變成 dp[i][j] = max(dp[i-1][j], dp[i-1][j-p]), p 為第 i 個零錢金額
如果降維從前面做, 取 j-p 時會取到 dp[i][j-p] 所以可能重覆
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/28 Tue 14:29:54
作者: sa072686 at 09/07/29
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11500 Accepted
時間: 2009/07/29 Wed 16:34:28
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11500 Accepted
時間: Wed Jul 29 16:35:52 2009
終於 AC 了 .. 貌似是數學題, 不過 DP + 預處理也可以解…處理好點也許也可解
徵求漂亮一點的方法..
翻譯一下
兩隻吸血鬼打架, 分別有血量 e1, e2, 及環境常數 AT, D
每回合丟一顆骰子, 若點數 <= AT 就第一隻吸第二隻, 否則第二隻吸第一隻
吸的時候對方減少 D 的血, 自己則增加 D
問第一隻吸血鬼勝率為何
http://en.wikipedia.org/wiki/Gambler%27s_ruin
這是討論板給的公式, 不過看不太懂.. 前提是 d=1 不過做一下預處理就可以
e1 = (e1-1) / d + 1
e2 = (e2-1) / d + 1
就可以了..我是用 dp 來做, 因為會繞回自己, 所以我就讓它做一千次, 精確度就夠
可是每組測資做一千次貌似不夠快, 所以我先預處理, 枚舉所有可能 AT 各做一千次
可知 e1, e2 預處理後, e1+e2 恆相同, 所以只要枚舉 e1+e2 (2~20) 各 1000 次
最後讀入直接 O(1) 輸出可在 0.040 左右 AC
…這種會繞回自己的 DP 常常沒頭緒 Orz
討論板說可以 memoization, 不知道是不是像這樣蠢蠢地算一千次, 還是有更好方法..
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/29 Wed 16:54:32
作者: sa072686 at 09/07/30
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11504 Accepted
時間: 2009/07/30 Thu 16:26:03
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11504 Accepted
時間: Thu Jul 30 16:24:42 2009
看似腦殘,其實挺難過…噢不是很 sad 啦
翻譯一下
給 n, m 代表有 n 塊骨牌,後面 m 行每行兩數 x, y 代表敲下 x 則 y 會跟著倒
問最少敲下幾塊可以全倒
看似腦殘對吧?…
由於可能有 cycle (事實上也排得出來) 所以只看入度是不行的
不然我用 dfs 敲總行了吧?可是還要小心環…假設 1->2->3->1 是個環
敲倒 4 則 2 跟著倒,那如果環記的是敲倒 1 答案就會變敲兩塊…因為 2 不重覆敲
如果讓 2 也重覆去敲變 n^2, n <= 100000 不會過的…
不過,先敲倒所有入度 0 的總是不會錯,則知剩下所有未敲倒但入度不為 0 的
就把它們也敲掉,這些一定是環,這樣就不會算錯了
也就是若存在可以從別塊敲進一個環卻敲不出來的情形會先被過濾掉
才不會一個環只留下一個 root 在那邊,如果敲進的點不是 root 就當場死在那裡
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 210.70.137.244
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/30 Thu 16:30:16
→ sa072686 推:啊…我腦殘,感謝 shik 指出反例…這篇就別看了XD 0730 21:13
作者: sa072686 at 09/08/01
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11506 Accepted
時間: 2009/08/01 Sat 10:15:20
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11506 Accepted
時間: Sat Aug 1 10:14:09 2009
唔…不難的一題,不過腦殘沒建逆邊炸掉XD
翻譯一下
有個編程員因某件重要專案寫不出來被裁員,他非常火,決定把老闆和電腦中心
的連線截斷,他知道老闆和電腦中心透過哪些電腦連線,並估算好炸毀每台電腦
以及剪斷每條連線的花費是多少,但他不能直接破壞老闆或電腦中心。
求最少需要的花費是多少?欲使兩台電腦失去連線,需使這兩台電腦間
不存在一個序列 c1, c2, ..., cn 且此序列 ci 與 ci+1 之間有線連通
且一台連到 c1, 另一台連到 cn。
簡單地說,就是要找到一個切法把老闆和電腦中心切開,而且切過的電腦或線花費和最小
把電腦的花費改成兩個點,一個入點一個出點,中間連一條與炸毀該電腦的花費
等價的線,就變成做 min-cut,也就是說求 max flow 即可。
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ sa072686 :BFS + adjacency list, 莫名的第一名 推 08/01 10:14
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/01 Sat 10:15:35
作者: sa072686 at 09/08/01
為了解決 cycle 請用 SCC 縮點…前面 PO 的是假解囧
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> ※ 本文轉錄自 [sa072686] 信箱
> 作者: sa072686.bbs@ptt2.cc
> 標題: [學術] ACM 11504 Accepted
> 時間: 2009/07/30 Thu 16:26:03
> 作者: sa072686 (sa) 看板: sa072686
> 標題: [學術] ACM 11504 Accepted
> 時間: Thu Jul 30 16:24:42 2009
> 看似腦殘,其實挺難過…噢不是很 sad 啦
> 翻譯一下
> 給 n, m 代表有 n 塊骨牌,後面 m 行每行兩數 x, y 代表敲下 x 則 y 會跟著倒
> 問最少敲下幾塊可以全倒
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
作者: sa072686 at 09/08/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0628 Accepted
時間: 2009/08/04 Tue 13:21:02
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0628 Accepted
時間: Sat Aug 1 19:16:05 2009
腦殘題,不過題目要搞懂…
翻譯一下
給一個密碼鎖,有 n 個密碼要解,你可以用任意順序完成它們,
只要轉好一個密碼後按 Unlock 就可以了,0 往上轉變 9,9 往下轉變 0
還有一個神奇按鈕可以讓現在的密碼變成已經 Unlock 過的任一組密碼。
當你用最少轉動次數(不算神奇按鈕)轉好所有密碼時就可以解開,
一旦超過次數就會全部歸零。一開始鎖處於 0000 的狀態,
給 n 個密碼,求最小步數。
從已完成狀態中挑一個作為起始狀態開始轉,一開始從 0000,
很簡單可以從這特性看出是 MST,用 Prim 可解,n^2 Prim 跑 1.1 上下
不過.. 要注意如果密碼中不存在 0000 就不能透過按鈕回去
因為鎖只有一個,所以轉完一個密碼後就不一定是維持 0000 了…
sample 有誤解會挖掉的測資,挺善良
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/04 Tue 13:22:27
作者: sa072686 at 09/08/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0630 Accepted
時間: 2009/08/04 Tue 13:21:03
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0630 Accepted
時間: Sat Aug 1 19:22:38 2009
這題不太好寫,可是並不難想
翻譯一下
有個賭博遊戲是這樣:玩家決定一數字 M 並寫出一個序列包含 1~L 中的數字
並且數字不重覆出現,之後莊家決定一個序列為 1~L 的一個排列,
則若玩家手上長度 M 的序列正好是莊家序列的前綴,就可以得獎;
錯一個數字就全爆。給你所有長度 1~L 可得獎金及所有玩家的序列,
試求一序列使得所有玩家總獎金和最小,若有多個則輸出字典序較小的
用字母樹存所有玩家的序列,並在節點上記錄序列的玩家數量,
然後 travel 一次計算結果並取最佳的,最後 trace 結果
用 bit-wise 的方式記錄數字取過沒會比較好
注意 travel 時有可能較好的排列出現在樹上不存在的分支,標記一下就可以了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/04 Tue 13:22:33
作者: sa072686 at 09/08/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0636 Accepted
時間: 2009/08/04 Tue 13:21:04
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0636 Accepted
時間: Sat Aug 1 19:27:29 2009
沒很好寫的 DP,狀態有點令人難以決定…
翻譯一下
三人組隊參加 300 分鐘的比賽,前 20 分鐘用來看過所有題目,後 280 分鐘解題,
給你每人寫每題所需時間,並且所需時間過後一定會 AC,
但是他們規定每人不可以連續寫超過一題,一定要輪流。
求最多可以寫幾題?無視 Penalty。
dp[i][j] = k 代表剩餘題目狀態 i 時換 j 解下一題,及所花最少時間 k
則枚舉每題看狀態 i 是否寫過,若沒寫過則讓 j 寫它並加上扣去這題、
換其它人解下一題時的最佳狀態所需時間,即為所需時間。
最後檢查所有 k <= 280 的狀態,數看看最多是幾題。
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
→ godgunman :噢不會阿 我才32行XDDD 推 08/01 20:01
→ sa072686 :太強了XDD 你狀態設怎樣? 推 08/01 21:33
→ godgunman :dp[time][prob][last]=bool 紀錄這狀態有沒有出現 推 08/02 03:56
→ godgunman :time=280, prob=2^12, last=3 推 08/02 03:57
→ DarkKnightX :可以省一個啊 s[prob][last] = min time 推 08/02 07:07
→ godgunman :噢我知道這樣更新方式就比較麻煩 推 08/02 16:20
→ godgunman :記狀態的話 就只要踩過去就不要在踩就好 推 08/02 16:21
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/04 Tue 13:22:36
作者: suhorng at 09/08/07
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> ※ 本文轉錄自 [seanwu] 看板
> 作者: seanwu (Blindest) 站內: seanwu
> 標題: [筆記] 加泰隆數 Catalan Number
> 時間: 2006/11/20 Mon 14:50:11
> 2. F(n) = C(2n,2) - C(2n,n-1) C(n,m)為組合數 = n!/[(n-m)!m!]
是說第二條應該是 C(2n, n) - C(2n, n-1) XD ~
--
★sa072686 吃個飯就AC了 2009/07/13 Mon 20:34:02
→ SKYLY 推:欸這不稀奇了好嗎XD 0713 22:02
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.67.122 (中滑一番)
作者: sa072686 at 09/08/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0645 Accepted
時間: 2009/08/08 Sat 13:52:45
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0645 Accepted
時間: Sat Aug 8 13:26:30 2009
同 ACM 10917,嗯… DP + shortest path 的一題
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/08 Sat 18:32:48
作者: sa072686 at 09/08/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0647 Accepted
時間: 2009/08/08 Sat 13:52:44
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0647 Accepted
時間: Sat Aug 8 13:52:00 2009
簡直是 ACM 10382,貪心一下就可以了…
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/08 Sat 18:32:51
作者: sa072686 at 09/08/09
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0648 Accepted
時間: 2009/08/09 Sun 00:27:29
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0648 Accepted
時間: Sat Aug 8 21:29:11 2009
腦殘暴力題,秒秒的XD
翻譯一下
給 n 個字串,每次砍去每個字串最左邊的字元,直到有任兩個字串變成相同,
或是有任一字串長度變成 0 為止,問總共要幾次?
至多 100 個而已,長度也至多 100,所以最差砍 100 次,
每次砍就排序 100 個字串再線性掃過…100^2 log 100 小小的
就算 n^2 比較,也不過 100^3 還是會過…也不用真的砍字,
用指標移就可以了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/09 Sun 00:29:14
作者: sa072686 at 09/08/09
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0650 Accepted
時間: 2009/08/09 Sun 00:27:30
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0650 Accepted
時間: Sat Aug 8 21:33:07 2009
也是不難的一題,暴力硬上也是跑很快
翻譯一下
給一道磚牆,數字代表磚塊的長度,當所有放在其底下的磚塊均被抽走它就會崩潰
問只抽走一塊,最多能讓總和多長的磚塊崩潰,0 代表該位置是空的,輸入中
不會有一開始就崩潰的情形。
枚舉每一塊,然後往上掃,n^4 還是過得很開心…雖然應該可以 DP 降到 n^3
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/09 Sun 00:29:16
作者: sa072686 at 09/08/09
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0652 Accepted
時間: 2009/08/09 Sun 00:27:31
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0652 Accepted
時間: Sat Aug 8 22:30:54 2009
有些苦工而且充滿指標
翻譯一下
大致就是簡略過的 command-line 指令,cd, dir 以及 deltree
dir 會列當前目錄下的子資料和檔案,檔案會給檔案大小
假設資料夾沒有大小,砍一個目錄會遞迴地連所有子目錄一起砍
問最後砍出多大空間
嗯因為有很深的,有很多次 dir 的,我是先記錄所有指令、找出最後砍的目標,
再掃過所有指令把 dir 位置正確的拉出來算檔案大小,就不用全部記下來
不過相同的資料夾貌似不會 dir 超過一次,至少我是這麼假設的,而且過了。
不得不說真是聰明的探勘
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/09 Sun 00:29:19
作者: sa072686 at 09/08/09
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0655 Accepted
時間: 2009/08/09 Sun 00:27:32
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0655 Accepted
時間: Sat Aug 8 23:00:57 2009
一看就覺得是腦殘DP但是降維降到被陰爆,理解題意花了至少半小時,思考則不超過10秒
翻譯一下
你正缺少一些席次來使你在議會中擁有過半席次,於是你決定與一些政黨聯手,
他們可以提供一些席次,但會要求你出讓一些權力,其中 A 官擁有 25 票,
但只有一位;B 官有兩位,但一人只擁有八票;C 官一人一票,但有六人
你必須補足缺少的席次,但必須握有儘量大的權力,試問最佳情形能留這些官位各幾人
政黨可能會有多個要求,但是是 or 的關係,意即滿足其中之一即可獲得席次
DP,以狀態 dp[p][q][r][s] = k 代表前 p 個政黨中,A B C 官分別出讓 q r s 人
所能得到的最大席次為 k, 雖可對其降維把 p 拿掉,但要求出讓 (0,0,0)
這種看起來超爽的撿到一百塊的情形卻會爆炸,所以還是老實點不要降維吧
如果無法達成則輸出 0 0 0, 球主快感謝我吧嘿嘿
轉移就對於要求 (a,b,c) 及提供席次 d 判斷
dp[p][q][r][s] = max(dp[p-1][q][r][s], dp[p-1][q-a][r-b][s-c]+d)
雖然有提供缺少席次 m 的數據範疇,但太大不適合當作狀態
這樣是要求數 * 政黨數 * 1*2*6 並不會太大
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 203.204.38.30
φ sa072686 轉:從 [sa072686] 信箱,于 2009/08/09 Sun 00:29:22
作者: sa072686 at 09/08/19
XDDDDDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 163.32.78.61 (高雄一中)
→ naieeliao 推:XDDDDDDD 0821 02:30
作者: suhorng at 09/08/25
ACD測過OK
然後抱歉QQ
pB 我不會算機率
pE 我看不大懂...
這兩題可能沒辦法幫忙了QQ 抱歉...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 220.137.68.90 (中滑一番)
→ sa072686 推:沒關係,感謝XD 0825 18:34
→ suhorng 推:順便問一下……這樣的題目大概該解出幾題QQ ? 0825 22:50
→ sa072686 推:以小可魚也許能破台為目標 0826 00:03
→ sa072686 推:但是以其它人破不了台且分數不會集中在一塊為目標XD 0826 00:03
→ gloompisces 推:我就說B和E不好吧XDDDD 0903 18:10
→ sa072686 推:那就…撤了吧XD 0903 18:12
→ suhorng 說:抱歉…… 0905 23:03
→ sa072686 推:為何道歉XD 是我題目出爛了 0906 03:14
→ yuscvscv 推:3樓.......SA好善良好感動(淚) 0907 09:37
→ sa072686 推:資工一向是估worst case的 0907 19:56
→ yuscvscv 推:那不管什麼題目最差情況就是有人破台嘛~ 0907 20:30
→ yuscvscv 推:最佳就是全滅XD 0907 20:30
→ sa072686 推:為防多人破台 => 強化難度 0908 19:43
作者: sa072686 at 09/09/06
新的分類 AOAPC I: Beginning Algorithm Contests
裡面似乎有分題型和難度,看起來似乎頗適合入門
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.145 (台北帝國大學)
→ DJWS 推:let's solve it! :) 0906 17:56
→ gloompisces 推:看起來蠻不錯的 0908 13:16
作者: DJWS at 09/09/06
有個撞球檯水平邊長a、垂直邊長b,
撞球檯上只有母球,
現在要在球檯正中央發球,
發球後球碰了垂直邊m次、水平邊n次、歷時s時間,
恰跑到正中央原發球位置。
現在給a b s m n五個浮點數,
求球出發角度t、速率v為何?
答案取到小數後兩位。
輸入都為零代表輸入結束。
解法請開燈
速率:
分成水平方向、垂直方向的移動距離,
再以畢氏定理即可簡單求出球移動距離。
出發角度:
分成水平方向、垂直方向的移動距離,
再以反正切函數即可簡單求出球出發角度。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.85.126 (中滑一番)
▲ DJWS 改@2009/09/06 Sun 21:10:54
▲ DJWS 改@2009/09/06 Sun 21:12:00
▲ DJWS 改@2009/09/09 Wed 01:29:56
作者: DJWS at 09/09/07
這是一個AVG類型遊戲。
地圖上有許多房間,編號為1到N,以單向道路連接。
一開始主角在房間1,欲走到房間N。
主角一開始擁有體力+100,體力無上下限。
每個房間都有一個能量值,範圍-100到+100,
主角每走入一個房間,就會依照該房間的能量值,補充或扣除體力。
一旦主角沒有體力(<=0),遊戲即以失敗結束。
(主角可以來來回回反覆走入某房間補體力,就像一般玩家會做的事情。)
請判斷主角能不能由房間1走到房間N,而且要保持體力>0,
如果可以就印出winnable,
如果不行就印出hopeless。
輸入有好幾組測試資料,
測試資料的第一行為數字N,代表房間數目,若為-1代表輸入結束。
接下來有N行,分別代表房間1∼房間N:
每行第一個數字為該房間的能量值,範圍-100到+100(房間1的能量值一定是0);
每行第二個數字為該房間的出邊數K,其後有K個整數,為下一個可走入的房間編號。
解法請開燈
我用modified label correcting algorithm(大家叫他SPFA)並另外偵測正環。
偵測正環的方法是:如果有個房間走入N次以上,即必有正環。
如果有個房間走入N次以上,我就直接把體力設為無限大(設100*N即足夠走到終點)。
時間複雜度應該是O(V*(V+E))。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.64.205 (中滑一番)
▲ DJWS 改@2009/09/07 Mon 08:47:41
作者: DJWS at 09/09/07
這世界有三種種族:神、人、魔。
神只說實話,人白天說實話/晚上說謊話,魔只說謊話。
這世界有兩種時刻:晝、夜。
問題是:
給定一堆各角色說出的句子,
請儘可能歸納出每個角色的正確種族,
以及現在的正確時刻。
-
輸入:
X: I am [not] ( divine | human | evil | lying ).
X: X is [not] ( divine | human | evil | lying ).
X: It is ( day | night ).
給定的敘述句只有上面三種格式,
其中X是角色,只可能出現A、B、C、D、E這五個大寫英文字母。
not可出現也可不出現。
括號內的單字擇一出現。
-
輸出:
如果這些敘述句中有任何矛盾,就輸出This is impossible.
如果能歸納出某些角色的種族、或歸納出現在時刻,就將之輸出。
只有兩種格式:
X is ( divine | human | evil ).
It is ( day | night ).
輸出時,角色要按照ABCDE的順序輸出,最後再將時刻輸出。
如果完全歸納不出半點東西,就輸出No facts are deducible.
-
解法請開燈
暴搜。
窮舉各角色的種族、現在時刻,
並以各角色所說的句子進行驗證,
看看能不能找到合乎邏輯的解。
如果找不出任何一組解就是矛盾。
如果有許多解,則分析這些解當中,
若某角色的種族固定不變只有一種,就可以印出來;
若時間固定不變只有一種,就可以印出來。
如果印不出半點東西,再印No facts are deducible。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.64.205 (中滑一番)
▲ DJWS 改@2009/09/07 Mon 19:25:17
▲ DJWS 改@2009/09/07 Mon 20:09:45
▲ DJWS 改@2009/09/08 Tue 00:57:39
作者: DJWS at 09/09/07
有個陣列,要用相鄰元素兩兩交換的方式排序。
在使用最少交換次數的情況下,找出有多少種不同的交換方式,可以把陣列排序好。
輸入一行就是一筆測資。
第一個數字為陣列大小N,其後有N個整數,依序為陣列中的數字。
當N=0時輸入結束。
N的大小不會超過5......
解法請開燈
暴搜
最少交換次數 -> 只有a[i]>a[i+1]時才可交換
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.64.205 (中滑一番)
→ sa072686 推:呀…是我寫過但沒有PO的題目XD 0907 19:57
作者: DJWS at 09/09/07
http://www.youngprogrammer.com/acmhome.php
好孩子不要看!
不過我看了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.64.205 (中滑一番)
→ sa072686 推:好多XD 話說我這也有千餘份~ 0907 20:49
→ yuscvscv 推:SA拿去嗆嗆他XD 0907 21:05
作者: DJWS at 09/09/07
8 puzzle相信大家都聽過,
平常都是算兩個盤面之間的最少步解法,可能大家都看膩了。
現在給定一個盤面,請找出另一個盤面,
使得兩盤面之間的最少步解法,是最多步的。(不能找無解的盤面)
這題是黃勾,任一組解都可以。
解法請開燈
只要缺口位置一樣,移動方式都是固定的,只是盤面上的數字不太一樣而已。
缺口位置共有九種,所以找出九種步法就行了。
或者,考慮對稱和旋轉,變成只分三種:缺口在正中央、旁邊中央、角落。
知道這些步法後,順便算一下盤面上每個方塊最後會跑到哪個位置,
貼在程式碼裡面...precalculation,
然後把盤面上數字換位置一下就好了。 XD
步法只要去google搜尋一下人家的程式碼就行了。(好孩子不要學)
也可以自己用BFS慢慢算。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.64.205 (中滑一番)
▲ DJWS 改@2009/09/08 Tue 12:29:38
▲ DJWS 改@2009/09/08 Tue 12:40:20
▲ DJWS 改@2009/09/08 Tue 16:25:27
作者: DJWS at 09/09/08
給四個字串u, v, w, z,一行一個。 (僅包含小寫字母a和b
皆非空字串
長度皆<=15)
我們依序將w中各個字母作轉換,字母a變成u,字母b變成v, (所有字母都要轉換)
一堆u阿v阿交錯著,連起來成為w',
然後再將w'如法炮製變成w'',
如此不斷下去。
請問w, w', w'', w''', ...,其中是否有字串擁有子字串z? (原題目敘述不含w)
如果有就印一行YES,
如果無可能就印一行NO。
有些奸詐的測試資料:
當w=z時,要印YES。
當w包含子字串z,要印YES。
當w長度永遠無法變長,又比z短時,要印NO。
提示請開燈
因為目標字串只有字母ab,長度最多15,所以頂多有2^15個狀態。
狀態空間搜索+memoization。要用DFS或BFS看各人喜好。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.64.205 (中滑一番)
▲ DJWS 改@2009/09/08 Tue 00:23:14
▲ DJWS 改@2009/09/08 Tue 00:24:03
▲ DJWS 改@2009/09/08 Tue 01:00:44
作者: yuscvscv at 09/09/11
看起來還是沒自動更新,
我都37X了說
有查出是什麼問題嗎?
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.132.151 (中滑一番)
→ yuscvscv 說:378 0911 23:43
作者: DJWS at 09/10/05
這是個bit運算的問題。
給三個無號整數N,L,U,
找出一個無號整數M(L<=M<=U),使N|M最大。
阿就從最高位bit開始試就好了...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.80 (中滑一番)
作者: DJWS at 09/10/05
有一張圖(有向圖或無向圖皆可),
兩點之間最多只有一條邊,
另外,也不會有連向同一點的邊。
現在給定圖上的點數n, (n=0代表輸入結束)
其後再給n個整數,代表著圖上各點的度數。
請問這些數據是否能代表唯一一張圖。
是就印一行Possible,不是就印一行Not possible。
解法
http://mathworld.wolfram.com/GraphicSequence.html
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.80 (中滑一番)
作者: DJWS at 09/10/05
現在有一個字串,
我們可以不斷把相鄰的兩字母對調,
嘗試把該字串變成回文。
給定一個字串,
請問最少需要對調幾次就能成為回文?
如果不可能成功,就印一行Impossible。
解法請捲下一頁
greedy
隨便找到字串中兩個相同的字母,
要變成回文的話,
一定要把這兩字母移動到會對稱於中央的位置,
此時可以發現:
不管是移哪個字母、或者兩個都移,
只要是移到對稱的位置,都是用了一樣多步!
如此便得到一個greedy演算法:
從字串的左端開始掃描字母,
每次都嘗試由右端往左找出與左端相同的字母,並移到最右端。
有個要注意的地方是:
當字串長度為奇數時,可以允許沒配對到的一個字母移到字串正中央。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.80 (中滑一番)
作者: DJWS at 09/10/05
有條長長的道路,里程碑標記成[-10000,10000]。
每個整數點上都有一個廣告看板,
一個廣告看板上只能貼一張廣告。
這條長長的道路,有N個人走動,
一個人走動的範圍是一個固定的區間[Ai,Bi],
他會去看Ai到Bi之間所有的廣告看板,包括Ai和Bi。
某公司希望在這條路上配置M個廣告,M越少越好。
讓每個人的走動範圍都含有K個以上的廣告,
請問該如何配置?
如果有人的走動範圍實在太小,不可能放入K個廣告,就不理他。
輸入第一行是測試資料筆數。
每筆測試資料的第一行是K和N,
接下來會有N行,每行都有兩個數字Ai和Bi。 (Bi可能會比Ai小)(Ai和Bi不會超出道路)
輸出一行M,
然後輸出M行,每一行有一個數字,代表廣告位置。任一組解都可以。
測試資料間空一行。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.80 (中滑一番)
▲ DJWS 改@2009/10/06 Tue 18:49:20
作者: DJWS at 09/10/06
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> 有難寫到…
> 有n個主題要講完,每節課長l,一個主題不能分在兩節課講,並且主題有先後順序
> 所以一定要先把前面的主題講完才能講後面的。如果一節課中有些時間排不下課,
> 那麼如果是在十分鐘或以內則可以得到-c的不滿足感,否則得到(t-10)^2的不滿足感。
> t為空下來的時間。求使用最少節課講完所有主題,主題要講的時間一定在一節課的時間
> 以內。如果有多種可能可以用最少節課講完,則取不滿足感最低的方式。
> 先用greedy裝箱把最小可能幾節課先算出來,然後再做背包dp。
> 可是背包dp太慢,所以用鏈結串列代替稀疏的陣列、用指標交換代替記憶體搬動
> 然後勉強在1.400 AC了…好慢。
我用recursive, top-down DP,可以0.9秒過。
如果再加上一個cut:「前面排太空,導致後面的課排不進去」,可以0.6秒過。
至於不滿足感它不是一個遞增/遞減函數,無法好好利用,要不然應該可以再快一點。
程式碼擠一擠約57行。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.80.123 (中滑一番)
▲ DJWS 改@2009/10/06 Tue 21:26:26
作者: yuscvscv at 09/10/30
要找我討論OJ的事情
這樣應該就不會忘了吧XDD
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.136.219 (中滑一番)
作者: DJWS at 09/11/03
我在退伍之後發現
最近幾個月都沒有人在討論ACM問題
每個地方的BBS都是靜靜的沒有文章
難道是其他地方有討論區嗎?
當了一年兵...搞不好已經跟不上潮流了∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.78.95 (中滑一番)
→ yuscvscv 推:我是最近在寫全國賽和NPSC的考古題.... 1103 12:52
→ yuscvscv 推:至於討論的地方我想應該是沒有吧 1103 12:52
→ DJWS 推:我還滿好奇現在大學生都是在哪裡做討論... 1103 12:58
→ yuscvscv 推:大學生就不知道了(攤) 1103 13:04
→ sa072686 推:多半水球或練習賽的時候討論完了吧XD 1103 15:48
→ sa072686 推:最近也比較沒在寫ACM,就比較沒有文出來… 1103 15:48
→ sa072686 推:有的話好像也頗久沒轉文了XD 我轉一下吧 1103 15:52
→ sa072686 推:比較新的東西會扔在sa072686 @ ptt2.cc有時懶就沒同步轉 1103 15:53
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] NTUJ 0678 Accepted
時間: 2009/11/03 Tue 15:50:04
作者: sa072686 (sa) 看板: sa072686
標題: [學術] NTUJ 0678 Accepted
時間: Tue Aug 25 23:32:51 2009
AC 掉挺開心,就 PO 個文紀念一下,記得好像是某年 IOI 題目但當時完全沒想法XD
翻譯一下
給字串 A, B 均只含小寫字母,問把 A 轉作 B 最少幾次操作
每次操作可以把一個連續段全部變成同一字母
看了沒多久總覺得像 DP
花了不少時間把轉移方程從 n^4 * 27 弄回 n^3 * 27
然後就過了,真開心XD
很少想 DP 這麼久的,不過想出來也特別開心
狀態弄 dp[p][q][r] = k 代表某一連續段 p 到 q 塗成 r 的情形最佳 k 次操作
r 也可以是沒塗,也就是維持原樣
接下來,若目標字元 c 恰等於 r 或者維持原樣的情形下目標字元 c 恰等於第 p 字元
則轉移 dp[p][q][r] = dp[p+1][q][r]
若否,則枚舉所有位置 i 使得 sb[p] == sb[i] 且 sb[i] != sb[i+1]
(連續段塗一次就好的意思)
轉移 dp[p][q][r] = min(dp[p+1][i][sb[p]]+dp[i+1][q][r]) + 1
反正字元 p 是一定要解決的,要嘛已經解決,就跳過它 (情況一)
要嘛還沒解決,那麼要嘛是自己塗掉,要嘛塗到後面某個相同的字元
畢竟塗到不相同的字元停住是沒什麼好處的行為…
然後就 AC 啦,耶!
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:54:14
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11577 Accepted
時間: 2009/11/03 Tue 15:51:04
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11577 Accepted
時間: Sun Aug 30 15:49:43 2009
大白爛XD
翻譯一下
一組測資一行,問每行裡面 26 個字母中誰出現最多次,大小寫視為相同,
若有平手則依字母順序輸出
這也不怕雷人了XDDDDD
就數吧 !!
COUNT !!
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.30.121
→ zenixls2 :居然還有這種題目= = 推 08/30 21:41
→ yuscvscv :被中譯雷到了> < 本來要練英文的說(被毆) 推 08/30 22:09
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:54:53
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11526 Accepted
時間: 2009/11/03 Tue 15:52:04
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11526 Accepted
時間: Wed Sep 2 20:08:41 2009
腦殘題,二十行內秒殺,彼得等級的話大概不用十行
翻譯一下
題目要求的東西可以這樣算
long long H(int n){
long long res = 0;
for( int i = 1; i <= n; i=i+1 ){
res = (res + n/i);
}
return res;
}
但是 n <= 2147483647,所以照抄是不會過的
防個雷
也很簡單,有 sqrt(n) 的算法
首先觀察一下會發現重覆很大
像 10/6 10/7 10/8 10/9 10/10 都是 1
再觀察一下會發現,數字在某個程度後會出現重覆的情形
也就是若輸入為 n,則 n/p = q,知若 p => p+1 相當於 ( n/p ) * ( p/(p+1) )
則 q 必須乘上 p/(p+1) 來平衡,就是減少 1/(p+1)
當減少程度 < 1 的時候,就有可能重覆出現,也就是 q/(p+1) < 1
可推得 q < p+1,又 pq=n,所以只要做到 sqrt(n) 就可以了
比它更後面的會開始有重覆,但這時 q < p+1 所以代表剩下的 n-sqrt(n) 這麼多數字
除出來卻只有約 sqrt(n) 種結果,就從每種結果來反推個數
再來…怎麼推個數?
算出來結果為 q 者,設 p,則滿足條件的 p 將使 q <= n/p < q+1
q <= n/p 則 pq <= n 則 p <= n/q
n/p < q+1 則 n < p*(q+1) 則 n/(q+1) < p
故知個數為 n/q - n/(q+1)
由於都是從 1 枚舉到 sqrt(n) 所以可以併在一起算
但小心 n/p == p 的情形可別重覆算了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:01
▲ yuscvscv 改@2009/12/02 Wed 23:01:22
→ yuscvscv 推:補上一些敘述 更詳細~ 1202 23:01
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11525 Accepted
時間: 2009/11/03 Tue 15:52:05
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11525 Accepted
時間: Thu Sep 3 14:18:35 2009
嗯…雖然長得像排列組合,但是數據給這種形式的根本就變形了…
翻譯一下
求由 1~k 依字典序排列後的第 n 個序列為何
由於 n 可以非常大 (k <= 50000) 所以以 S1, S2, ... 方式給予,並且
n = sum( Si * (k-i)! ) for i = 1 to k
防個雷
由於給的形式的關係,已經告訴你 Si 就是第 i 個數字該是什麼了
例如若 Sample k=3 且序列 S = {1, 1, 0} 則知
在 1~k 的集合中 {1, 2, 3} 對 S1 而言是取第二個,也就是 2
之後拿掉它,變成 {1, 3} 對 S2 而言是取第二個,也就是 3
所以同是取第二個,卻因為前面有拿掉東西,結果會不一樣
因此我們需要可以在線刪除與詢問第 k 個的資料結構
很快想到在 BST 中記錄左子樹節點個數,可以做到這一點
為了初始化方便也為了怕傾斜,用數組作一棵偽 BST
定界 p, q 使得 p>q 為空,p==q 為葉節點,p<q 時設 c=(p+q)/2 為目前節點
則左子樹為 (p, c-1) 右子樹 (c+1, q) 可快速初始化並平衡之
這樣每次詢問並刪除是 O(log n) 總複雜度 O(n log n)
對數據大小 50000 是相當足夠的
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
→ Tommy :我是用 BIT + Binary Search 作 O(n (logn)^2) 推 09/03 15:48
→ zenixls2 :我覺得很像之前考學弟的題目... 推 09/03 16:57
→ suhorng :好神奇的 BST ... 推 09/03 18:47
→ sa072686 :神騎BST 推 09/03 19:29
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:46
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: Re: [學術] ACM 11525 Accepted
時間: 2009/11/03 Tue 15:52:06
作者: Tommy (Tommy) 看板: sa072686
標題: Re: [學術] ACM 11525 Accepted
時間: Thu Sep 3 16:08:02 2009
𪇵𪇵 吃光光
防雷
我的作法是這樣
一開始最直覺的想法就如同上一篇 SA 提到的
於是我把他變形金剛了一下
原本是把右邊數來第 Si 個數字搬到第一個
我改成 把右邊數來第 Si 個數字印出來並塗掉
不過這樣還是要 O(n^2)
所以我們觀察一下
假設沒有塗掉的是白色 已塗掉的是黑色
每次只要從頭往右走,遇到第 Si 個白色就是目標了
所以我們可以改成去算每次的目標在哪裡
這時再設 白色是 1 黑色是 0
我們只要走到某一格 k 使得 sum[1...k]-sum[0]>=Si 就可以了
可是符合以上的情況有可能是黑格子
所以我們要 Binary Search 他
然而,每次印出一個數字就要把白格塗成黑格
如果重新計算一次 sum[1...k] 這樣又要花 O(n) 的時間
一樣是 O(n^2) 於事無補
所以我們要用一個能夠動態地維護數列前綴和的資料結構
這不難想到就是 Binary Indexed Tree 了
每次 Binary Search 要 O(log n)
查詢數列前綴和 O(log n)
每次維護 BIT 要 O(log n)
故整個 Binary Search 的部份是 O((log n)^2)
要做 n 次 Binary Search 所以總共是 O(n (log n)^2)
唉…沒想到單純 BST 就可以做到 O(n log n) 我弄成這麼麻煩幹嘛= =
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 220.129.152.48
→ godgunman :O(n (log n)^2) 也是O(n log n) 阿 推 09/04 00:02
→ godgunman :然後我是覺得樹狀數組比BST好寫XD 推 09/04 00:03
→ sa072686 :欸不行吧,平方之後成長率有差吧~ 推 09/04 00:10
→ godgunman :噢ˊ sor 我以為是log(n^2) XD 推 09/04 15:06
※ Tommy:轉錄至看板 Tommy 09/14 01:24
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:48
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11524 Accepted
時間: 2009/11/03 Tue 15:52:07
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11524 Accepted
時間: Thu Sep 3 15:25:06 2009
噢能完成這題真的要感謝強悍的 knowbee 學長…
翻譯一下
給你三角形內接圓半徑及其與三角形之交點分別將三邊切成怎樣的比例
求原三角形面積
防個雷
設三邊分別切作 u:v, w:x, y:z 且 vw, xy, zu 分別交於三角形三個頂點
則知 vw, xy, zu 段應該等長,將 vw, xy, zu 全部同步化後簡化為 a, b, c 的比例
即三邊分別切作 a:b, b:c, c:a 然後令三邊長為 at+bt, bt+ct, ct+at
由海龍得 sqrt((a+b+c)t * a*b*c*t^3) = r*(at+bt+bt+ct+ct+at)/2 = r*(at+bt+ct)
兩邊平方得 a*b*c*t^2 = r^2 * (a+b+c) 故 t = r * sqrt((a+b+c)/(a*b*c))
面積為 r*t*(a+b+c)
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
→ zenixls2 :科科科科~數學 推 09/03 15:29
→ knowbee :.__./媽~我在這裡~我上電視了 推 09/03 21:52
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:48
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10785 Accepted
時間: 2009/11/03 Tue 15:52:08
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10785 Accepted
時間: Mon Sep 7 19:04:35 2009
腦殘題,可是我也耍腦殘耍很大…後來算法錯就砍掉重練,科科
翻譯一下
對每個英文字母,給予一個 value, 算法為:先依序編號,A 為 0,Z 為 25
則 value[i] = i%9+1,然後給你 n 你要求一個長度 n 的字串滿足以下條件
設字串最左邊為第一個字元,則奇數字元為母音 (AEIOU),偶數字元為子音
子音和母音的 value 總和要最小,並且同一個子音不得出現超過 5 次,
母音則不得超過 21 次,且此字串的字典序要最小
防個雷~ 雷~
由於是 value 優先,可以預先算出要用的子音母音有哪些,再依字母序 sort
之後再一一放進去就可以了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:49
→ yuscvscv 推:我笨到了Q Q 補一組測資 1201 16:44
→ yuscvscv 推:22 ABAJAJAJAJAJASASASASAS 1201 16:44
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11523 Accepted
時間: 2009/11/03 Tue 15:52:09
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11523 Accepted
時間: Thu Sep 3 16:59:06 2009
算是輕鬆的一題XD
翻譯一下
給 n 個東西,有些可回收,有些不可,把它們排成一列
一次可以把連續的可回收物一次拿掉,或只拿掉一個,不可回收物不可以拿掉
拿掉之後後面會遞補上來,所以永遠不會有兩物中間是空著的
問最少拿幾次可以全部拿掉?可回收一定全小寫,不可回收一定全大寫
例 a b a C a 直接一個一個拿掉是 4 次,但先拿 b 則可以 3 次拿完,
因為會變 a a C a 所以前面的 a a 可以一次拿掉,可是 C 不能拿掉
防個雷
顯然是個切段形的 DP,設狀態 dp[p][q] 代表 p, q 段清空所有可回收物要拿幾次
則顯然若 p 物是不可回收的,則次數同 dp[p+1][q]
若 p 物是可回收的,要嘛直接拿掉,次數為 dp[p+1][q]+1
要嘛跟後面的某一個相同物一起拿掉,設 i 則為 min(dp[p+1][i-1]+dp[i][q])
也就是 p 物到 i 物中間那段要先消掉,即 dp[p+1][i-1]
然後因為 p 跟 i 是一起消的,所以結果會跟 dp[i][q] 相同因為這狀態要消 i
但是注意 p 和 i 之間不可以有不可回收物,若有的話 p 和 i 不可能一起消
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:49
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10250 Accepted
時間: 2009/11/03 Tue 15:52:10
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10250 Accepted
時間: Wed Sep 9 09:22:55 2009
果然是簡單幾何 XD 果然很秒
翻譯一下
你有一個四邊形的農場,且農場對邊等長,農場四邊與四面的鄰居共用柵欄,
已知鄰居的農場為正方形,且鄰居間的農場不相交,農場的中間固定種著一棵樹
給你兩對邊鄰居的樹的座標,你有辦法算出另兩個鄰居的樹的座標,
或者判斷這種情形根本不可能發生嗎?輸出順序隨意,過小的誤差也會自動忽略
防個雷
假設我們所知的對邊的鄰居擁有邊長 x 的正方形農場,而另一對對邊則是邊長 y
則鄰居離柵欄距離為 x/2, 柵欄離我們農場中心 y/2, 故樹距我們農場中心 x/2+y/2
可知另一對邊亦是如此,因此本題所求變成給一個正方形的對角頂點座標,
求另外兩個頂點,做法很簡單,先求出兩點的中心點,再找到此兩點之向量 v
則知從中心點往向量 v 之垂直方向拉出長度 |v|/2 的向量出去,即為所求
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.30.123
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:50
→ AikoSenoo 推:這篇的作法是對的,不過解釋是錯的 0212 21:48
→ AikoSenoo 說:中間的四邊形不該假設為矩形 雖然形狀不影響答案 0212 21:49
→ AikoSenoo 說:(假設為矩形是說距離中心為x/2+y/2這點) 0212 21:50
→ AikoSenoo 說:雖然特殊情況也該符合解啦 不過會confuse Orz 0212 21:50
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 10387 Accepted
時間: 2009/11/03 Tue 15:52:11
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10387 Accepted
時間: Wed Sep 9 09:41:44 2009
也是簡單幾何,而且真的簡單…
翻譯一下
給一個水平長 a, 垂直長 b 的撞球桌,將球從桌子中心點擊出,
在 s 秒後,恰撞擊垂直邊 m 次,水平邊 n 次並回到桌子中心點
問擊球的角度 (擊球時球出去的向量與水平線夾角,介於 0 和 90 之間)
以及球的速率為何,假設撞擊及球移動過程能量並不會損失,均呈等速率運動
防個雷
簡單的幾何,撞垂直邊 m 次表示水平位移 a*m, 水平邊 n 次表示垂直位移 b*n
角度就是 atan(b*n/(a*m)), 不過弧度要換徑度,除以 acos(-1) 再乘個 180.0 即可
速率的話,已知水平和垂直位移,可用畢達哥拉斯定理算出總路徑長
路徑長除以時間 s 即為速度
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.30.123
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:50
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11111 Accepted
時間: 2009/11/03 Tue 15:52:12
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11111 Accepted
時間: Thu Sep 10 19:46:36 2009
簡單的一題牛排 XD
翻譯一下
應該大家都很熟悉一種巢狀的娃娃,就是娃娃裡面還可以再擺一隻娃娃,
現在有個玩具設計師從這受到啟發,做了一種巢狀玩具,但是它更強大一點
就是可以一隻玩具中放了好多隻玩具,如果一隻玩具的 size 是 n
然後它可以放很多隻 a1, a2, ..., ak, 且 a1+a2+...+ak < n
並且顯然地,放在 a1~ak 中的玩具並不影響 a1~ak 是否可以放進 n
現在給你一個序列,每隻玩具會有個 size k 並且在序列中恰出現兩次
一次+k一次-k,並且-k一定會先出現,夾在+k和-k中的就是放在k裡的玩具
同樣 size k 的玩具可能有很多隻,對於一個 -k 取最接近的 +k 為一對
你必須判斷這個序列是否是可行,就是說對於每隻玩具,放在其中的玩具
大小總和必須小於玩具大小,並且序列的匹配要是對的
例如 -3 -2 2 3 表示一隻大小 2 放在一隻大小 3 的玩具中
但 -2 -3 3 2 是不行的,因為 2 放不下 3
-2 -3 2 3 也不行,因為匹配失敗
防個雷
基本上用 stack 就可以了,有點類似括號匹配的 stack
不過除了匹配要正確,還要把已匹配成功的玩具大小加到上一個玩具中
如果加上去爆炸就陣亡了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.30.131
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:52
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11499 Accepted
時間: 2009/11/03 Tue 15:52:13
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11499 Accepted
時間: Wed Oct 28 12:52:30 2009
這題真是發神經了…變形還一直變錯,一整個殘啊…
翻譯一下
定義矩陣的線性化為將一矩陣的每一列 r1, r2, r3, .. 依序接成一列
給你一個 n*m 的矩陣 (n, m <= 600) 求最大子矩陣,使得線性化之後
為嚴格遞增數列,問此子矩陣大小為何
防雷頁
據討論板表示,本題使用 n^3 算法 (600*600*600 = 216000000) 會過…
雖然看起來根本不會過… Orz 難怪覺得很難,AC 率卻高得不像話
不過 n^3 的話太容易了…
想了一個多小時後 (好久…真是太弱小了) 生了一個 n^2 log n 的算法
首先,不難聯想到這題和最大矩形嚴重相關
但是枚舉起始列、起始行和結束行,再掃過去是 n^4
觀察一下發現起始行和結束行決定後,對於某一列,如果該列起始 <= 上一列結束
或是該列起始行到結束行並不嚴格遞增,這時一定沒辦法接到前面的矩形
從這可以輕易看出它有最優子問題,且幾乎和最大連續元素和一樣做法
這裡得到一個簡單的 n^3 算法,透過簡單的預處理可以 O(1) 確定
某一段是否嚴格遞增,因此枚舉起始行和結束行 O(n^2), DP 掃過去 O(n)
預處理方式很簡單,對於每一格記錄同一列中,從哪一格開始嚴格遞增到這一格
這個邊讀邊做就可以了,所以是 O(n^2),對任一格均可 O(1) 查表輕易判斷
但是這分析起來依舊太慢 (雖然據討論板的說法會過…)
就會想說,說不定能用堆疊 O(n) 求最大矩形那招
也就是在地上立著 n 堆 1*1 的積木,且相鄰兩堆的積木會並排在一起
求最大矩形面積為何,這個可以 O(n) 算出來
如果可以把它變形一下用在這題,就可以有比 O(n^3) 快的方法
假想我們把所有符合條件的嚴格遞增子矩陣塗色,則目的為求塗色區域最大矩形面積
從矩形的任一行畫一條線下去,求邊掉在這條線上塗色區域所有矩形最大者面積為何
這個可以線性求出來,枚舉每一行是 O(n),總時間複雜度就降至 O(n^2) 了
不過每一列都要 push 兩種東西,一種是在該列遞增長度最長者
一種是保證可以接上面矩形的長度最長者
考慮以下情形,把線畫在最右邊那一行,然後矩形往左邊長
0 1 2
1 3 6
顯然前者長度到 3,可是如果要接前面矩形,頂多只能長到長度 2,但是這種也要考慮
不然會掉正解 4,可是求這個長度必須 binary search, 原先 O(n^2)
為什麼前面卻說 O(n^2 log n) 就是卡在求這個長度降不下去
這樣大概跑 0.2s, Rank 10, 前面 0.000 怎麼做到的…
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:53
→ yuscvscv 推:PS 第二個解法 push的兩個東西先後順序不能變 1202 11:27
→ yuscvscv 推:要先push所接的最長,再push最大長度 1202 11:27
→ yuscvscv 推:如此push所接最長時才不會把最大長度給pop掉 1202 11:28
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11497 Accepted
時間: 2009/11/03 Tue 15:52:14
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11497 Accepted
時間: Thu Oct 29 03:16:24 2009
宵夜時間,三分鐘想好的算法馬上被總是能瞬間舉出反例的隊長秒殺
後來亂喇了一下就喇過了…有點人品
翻譯一下
有一種卡片,一張卡上可能有一、二或三個圖案,同一張卡圖案一定相同
圖案有圓形、三角形和四方形三種,共九種卡片,三張卡片滿足以下條件可以湊一組
卡片的點數要嘛三張一樣,要嘛三張都不一樣,且
卡片的圖案三張皆相同或皆相異
現在給你 n 張 (n <= 30000) 卡片,求最多可以湊幾組出來。
防雷
以下是不負責任猜想
卡片張數相當多,但光是拿相同的三張卡片湊一組,就可以湊出絕大部份情形
所以我想讓相同的三張卡片湊一組的情形儘量地多
滿足條件的方式有四種,所以我猜測同一種卡和別人湊一組比較好的情形不會超過四張
考慮最糟情形如下
1A 1A 1A 1A
2B 2B 2C 2C
3C 3C 3B 3B
要再多一張 1A 再和其它卡片湊一組的話,勢必會出現 2A, 3A, 1B, 1C 等等卡片
這時都可以讓它們跟其它兩張湊一起,讓 1A 湊出三張相同的而不會使情形更糟
於是出現以下猜想
對於任一種卡片,拿出超過四張與不同於自己的卡片湊一組,不會讓組數增加
得到以下算法
預處理任一卡片 0 至 4 張所能湊出最大組數,之後對於每組詢問
枚舉任一卡片取出 0 至 4 張湊出最大組數,加上剩餘卡片以同種三張一組方式
湊出的最大組數,取最大者,即為所求
5^9 約是 200 萬,此算法複雜度約 5^9 * 9 會導致 TLE
於是重新考慮一個較佳的算法
對於每種卡片,設張數 k 則取出 k%3 不影響組數,且取 k%3+1 不如取 k%3+3
或者直接嘗試取到最大值的四張,這樣得到一個 DFS 的 3^9 算法
約 2s 上下可以通過,名次 25/37
不過,也許可以利用上述,一者取四張則其它可能取超過三張不會較佳等等情形
來想辦法進一步減少枚舉數,但還沒試過
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:53
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11492 Accepted
時間: 2009/11/03 Tue 15:52:15
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11492 Accepted
時間: Mon Nov 2 10:14:56 2009
不難的一題,不過我嚴重懷疑我把寫法極度地複雜化了,怎麼會到快三百行…
這給彼得寫大概還不到百行水準
翻譯一下
有一對喜歡學各種語言的兄弟,他們時常聊著各種語言及文化,並發現有許多的詞
在不同語言中都存在著,只是意思不一定一樣。於是他們發明了一個遊戲,
先收集很多這樣的字做成一個字庫,再指定起始和結束語言
則必須求出一個序列使得起始字在起始語言中存在,結束字在結束語言中存在
並且相鄰的字要共同存在於某一個語言中,但他們覺得這樣太容易了
一下子就可以解出來,於是再追加兩個條件
一、相鄰字的起始字母不可以相同
二、此序列中每個字的長度加起來必須最小
由於這樣子的解可能有很多組,所以你只要輸出最小可能長度,或是無解就行了
字數 <= 2000,每個字只會屬於恰兩個不同語言
防雷
很直覺地,這是最短路徑問題,從起始語言走到結束語言
但是用語言作為節點,還必須額外記錄起始字母的資訊,使得這題變很麻煩
於是考慮以字作為節點的有向圖,字的長度作為邊權,出入邊的邊權不一定一樣
字的長度非負,於是用 Dijkstra 得到一個 O(n log n) 的算法
但是光建圖就會耗去 n^2 的時間了,查找字庫若沒用平衡樹也是最差 n^2
這題我用沒平衡 bst 建字庫,n^2 建邊,dijkstra+heap 搜解,0.9s 40/8X
把建邊改為以語言 hash 並用合併排序的合併方式避開重邊,0.8s 38/8X
有點慢,和前面一堆 0.1, 0.2 的根本不能比,不過也想不到更快的做法了
我一定是開太多 function 和小細節寫得太繁瑣…根本就是比賽大忌
最近被軟工荼毒太深了…寫法越來越拐彎抹角了
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:54
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11493 Accepted
時間: 2009/11/03 Tue 15:52:16
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11493 Accepted
時間: Mon Nov 2 02:36:41 2009
頗容易的題目
翻譯一下
有個 n * m 公尺的房間,給你 k 個寬度為 w 公分的木板及其長度
問是否能夠覆蓋整個房間,如果可以的話求最少木板數
可是這房間的擁有者很龜毛,他希望木板間不可以重疊
而且為了維持木板的品質,所以不能對木板做任何切割
為了美觀,木板必須平行放置,不能有的直放有的橫放
為了儘可能減少接縫數,一列至多只能擺兩塊木板
你可以選擇全部橫放,或全部直放
n, m <= 10000, k <= 100000, w <= 100, len[i] <= 10000 for 1<=i<=k
防雷
由於木板很多,而且每列至多擺兩塊,木板數也比木板可能長度來得大
因此較適合的資結是記錄每種長度的木板有幾塊
枚舉全部直放或橫放的擺法,先看寬度是否整除,再看木板最多可以擺幾列
計算擺幾列看法就枚舉 i 檢查 sum( min( board[i], board[n-i] ) ) 即可
注意若 i+i == n 就不是取 min 了,而是除以 2,長度恰為 n 的有幾塊就有幾列
如果可擺的列數不夠就一定無解,如果足夠的話
算使用的木板數即可,一定是貪婪地先取長度剛好的,這樣一列只要一塊
看還剩幾列就是乘以二就可以了
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:54
作者: sa072686 at 09/11/03
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11491 Accepted
時間: 2009/11/03 Tue 15:52:17
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11491 Accepted
時間: Mon Nov 2 11:26:08 2009
簡直非常容易,AC人數也明顯地比四周的題目多…可是為什麼 AC 人數比是 60%?
而且這題代碼長度和上一題明顯地天差地…僅 33 行
翻譯一下
給你 n 位數的數字,求消掉 d 位之後數字最大多少?數字不會有開頭 0
0 <= d < n <= 100000
防雷
這類型的題目多半是貪婪,畢竟高位數一大,後面不管怎樣都一定比較大
所以不計代價地讓越高的位數儘量大就是了,反正怎麼砍最終位數一定一樣
可知當一個數字比它右邊大時,把它砍掉會變比較好
由於砍的額度有限,把符合砍的條件中位數較高者優先找出來砍
不過如果用陣列做,砍掉後還要把右邊都拉過來,會變成 O(n),總複雜度就 O(dn)
所以反過來想,一個數字比它左邊大時,把左邊砍掉
可以用一個堆疊,每次 push 就把底下比自己小的一一 pop 掉
從高位開始 push 就可以解決了,也解決了砍掉後的搬移問題
這樣不管是效率還是代碼簡潔程度都相當高,大約二、三十行甚至更短
0.016s, 7/177
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/03 Tue 15:55:55
→ yuscvscv 推:應該是當一個數字比它右邊"小"時 1124 16:21
作者: sa072686 at 09/11/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11421 Accepted
時間: 2009/11/03 Tue 17:32:47
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11421 Accepted
時間: Tue Nov 3 17:25:10 2009
實在是難寫難想的一題啊…雖然寫出來了不過跑超慢的,有什麼比較好的方法嗎?
翻譯一下
給 n (n <= 50) 張相異的撲克牌,求排成一列使得相鄰兩張牌點數不一樣
且字典序為第 k (1 <= k <= 10^18) 小者為何
防雷
只要給定任意多張相異牌,能算出有幾種方式,就能一張張算出來。
也就是說,先拿掉其中一張看有幾種方式,再拿掉另一張,…,求出第一張為何
再以此方式求第二張,…
由於都是相異牌,所以同點數至多四張,因此考慮用插入的方式
慢慢把牌插入已經排好的牌中,用以製造重疊子問題
但插入時同一個間隙不能插入兩張以上,否則會同點數連在一起
但不這樣又可能間隙不夠,所以考慮一個間隙插超過兩張相同點數的牌
但是日後必須插入其它點數牌分開它們,所以設狀態為
dp[i][j] 代表塞到點數 i 的牌為止,共有 j 個間隙一定要插牌拆同點數的牌
然後就枚舉一下所有 partition 能塞幾個間隔以及造成的需拆牌數,
和實際拆了多少需要被拆的牌即可,重點是方法數要算對
以 partition 為 1 1 2 為例,造成的需拆牌數是 1,因為 2 需要被拆掉
而 1 1 2 共有四張,因此有 4! = 24 種排法,其中又可以看成 1 2 1 和 2 1 1
所以總共 72 種方法,這樣到時假設我們拆了 p 張需要被拆的牌中的 q 張
並且不需要被拆的部份有 r 個間隙,則排列數為 c(p, q) * c(r, 3-q) * 72
也就是透過係數調整,使得插入時每個 partition 即使切出來張數份數不同
也能夠一律視為相同的東西做插入的動作,接下來小心以下幾種情形即可
一、確定第 i 張後,第 i+1 張不要拔和第 i 張相同點數的牌當開頭
二、光只用 long long 可能拔第一張就溢位了
關於二我是用 long long 來做
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/04 Wed 00:29:46
作者: sa072686 at 09/11/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11490 Accepted
時間: 2009/11/04 Wed 02:58:16
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11490 Accepted
時間: Wed Nov 4 02:58:01 2009
我覺得根本就是大腦殘啊,想個幾分鐘就 AC 了,怎麼只有 4X 個人 AC 呢…
環球先生跑好快耶,怎麼做的啊?
翻譯一下
把士兵一列一列、一行一行地排成矩形區域,中間可以有恰兩個等大的正方形區域
不排士兵,這樣可以讓士兵數看起來比較多來嚇嚇對手,但是這兩個等大正方形區域
要有一樣厚的邊框,如下為 96 個士兵能排的陣形
SSSSSSSSSSSSS
SSSSSSSSSSSSS
SSSSSSSSSSSSS
SSSMMSSSMMSSS
SSSMMSSSMMSSS
SSSSSSSSSSSSS
SSSSSSSSSSSSS
SSSSSSSSSSSSS
這樣可以讓看起來的士兵數等同於平白多了八個士兵,而且缺的士兵正好是
兩個等大的正方形區域的數量,且邊框都是厚度3,除了角角
給你士兵數 s (s<=10^12) 求所有可能看起來平白多出來的士兵數。
注意因為這樣答案可能很大,輸出 mod 100000007 就可以了。
但要按士兵數由高到大排,而不是按 mod 之後的大小。
防雷
因為要所有解,所以只能枚舉。一開始我是想說枚舉兩個正方形塊的邊長,
結果發現邊長 n 厚度 1 時邊框可以只花 7n+6 個人,所以…枚舉要到 s/7 太慢
於是改想說,不然枚舉邊框厚度如何?於是發現當邊框厚度 p 正方形邊長 q 時
s = 7pq + 6p^2 (看下圖就很明顯了)
SSSSSSSSSSSSS
SSSSSSSSSSSSS
SSSSSSSSSSSSS
SSSMMSSSMMSSS
SSSMMSSSMMSSS
SSSSSSSSSSSSS
SSSSSSSSSSSSS
SSSSSSSSSSSSS
枚舉 p 解 q 的話,移項一下得邊長 q = (s-6p^2) / (7p)
可知硬枚舉也只要 sqrt(s) 大約是 100 萬上下的枚舉量,每次枚舉 O(1) 算出邊長
要注意的是邊長可能很大很大,記得先 mod 再平方乘以 2 否則會溢位
這樣約 0.6s 左右可以跑完,rank 6/43
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/04 Wed 03:01:12
▲ sa072686 改@2009/11/04 Wed 03:01:43
作者: sa072686 at 09/11/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11487 Accepted
時間: 2009/11/04 Wed 04:57:46
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11487 Accepted
時間: Wed Nov 4 04:57:13 2009
半夜睡不著爬起來吃個泡麵,可是湯太燙喝不下去又不知道要做啥,就順手 AC 了
反正 AC 後湯還是熱的,還剛好可以喝
翻譯一下
給 n*n 的方格圖,每一格可能是空地、障礙物或字母之一,字母不會跳著出現
也就是說如果出現五種字母,一定是 ABCDE 而不會有其它字母,字母也不會重覆出現
每種字母代表一種食物,你現在從 A 開始要依字母順序採集所有食物
但是你只要踩到食物就一定會把它撿起來,問最小步數以及有幾種路徑滿足這最小步數
由於路徑數可能很多,請輸出 mod 20437 之後的值。
防個雷
用 BFS 順序 DP 做狀態合併。記錄每一格在最短路徑的前提下有幾種方法可以走得到,
然後把方法數加過去可以轉移的狀態,就可以把很多 path 併起來一起轉移
反正踩過一樣多的字母且在一樣地方結束的 path 可以視為相同
轉移時看有幾種方式走得到這裡就直接加過去就可以了
不過,由於踩到就會撿,所以在走向第 k 種食物時不可以踩字母 > k 的食物
<= k 就可以踩沒關係
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/04 Wed 04:57:59
作者: sa072686 at 09/11/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11486 Accepted
時間: 2009/11/04 Wed 11:30:03
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11486 Accepted
時間: Wed Nov 4 11:13:43 2009
這題型還是第一次沒開奧步大絕 AC 頗爽,排名也不賴,不過不知道是不是正解
還是剛好符合這題而已…管它的,超爽的啦
翻譯一下
在一個有 n 列 7 行的棋盤格上,四個玩家各持一隻棋子放在第 1 列上
且四隻棋子均不在同一格,每一回合可以由一個玩家移動他的棋子,移動方式是斜向
前進到下一列的上一行或下一行,當然在第一行或最後一行,有可能只有一種選擇
但是每個格子不能被踩超過一次,即使不同玩家的棋子也一樣
給你 n (n <= 1000000000) 問總共有幾種走法,可以讓所有玩家的棋子都走到第 n 列
當然走法可能有很多種,輸出答案 mod 1000000007 就可以了
防個雷
首先把它轉二進制,然後我先找出前 7 bit 中有 4 個為 1 的,這是所有狀態
再來對這些狀態做預處理,預處理方式是 m^3 log n .. 類似 warshall
以狀態 dp[i][j][k] 代表從棋盤狀態 j 走了 2^i 步轉到棋盤狀態 k 的方法數
則轉移為枚舉狀態 r, dp[i][j][k] = sum(dp[i-1][j][r] * dp[i-1][r][k])
對於輸入的天數 n 我們就可以把它拆成二進制,看成 2^k 連乘起來
假設 6 天,可以看成 2^1 + 2^2, 於是可以透過預處理的表
先一次轉 2 天的再一次轉 4 天的就可以得到 6 天的了,這樣可以壓在 log n
rank 5/60, 0.036s
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
→ godgunman :欸我好奇所謂奧步是?你之前這種題目都不用矩陣的噢 推 11/04 11:24
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/04 Wed 11:40:22
作者: sa072686 at 09/11/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11485 Accepted
時間: 2009/11/04 Wed 12:24:39
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11485 Accepted
時間: Wed Nov 4 12:22:31 2009
不得不承認一點進去那十個並排的 sigma 的確挺嚇人,後來一分析簡直是腦殘題
翻譯一下
http://uva.onlinejudge.org/external/114/p11485a.gif
給 Set S 求這個鬼東西,裡面的高斯符號是地板,S 中的元素均為非負實數
且為了避免誤差,至多只到小數點下一位,|S| <= 100
防個雷
把 sigma 分析一下,可以知道題意其實是這樣:
在 n 個數字中取八次數字 (所以每次可取同一數字) 把它們和的 floor
減去各自 floor 的和,然後對於所有取法的計算結果加總起來即為所求
再加上題目說只到小數點以下一位,這題就顯得相當容易
先看取八個數字後,怎麼求解,我們可以把
floor(sum(p)) - sum(floor(p))
看成
floor(sum(p-floor(p))
我們稱 p-floor(p) 為 「差距」
這個想一下就可以了解,先 floor 和後 floor 會拉開 p-floor(p) 的差距
假設 2.4 + 4.8,那麼 2.4 提供 0.4, 4.8 提供 0.8, 所以結果會差 0.4+0.8=1.2
因為有 floor 所以其實是差 1,前面取什麼數字也不影響後面的選擇
所以可以 DP,把所有數字都先乘以 10 轉整數
我們只關注於取了 i 個數字後,究竟拉開了多少的差距,因此
設狀態 dp[i][j] 代表取了 i 個數字,並且差距 j 總共有幾種情形
因為前面選擇不重要,所以保留差距 j 就可以了,差距相同可視為相同
這時 i 最大到 8,j 最大到 9*8,因為只有 8 個數字,每個數字頂多提供 9 的差距
對每個狀態枚舉所有可放的數字來轉移,設枚舉的數字為 p 得到
dp[i][j] = sum(dp[i-1][j-p%10])
最後枚舉所有狀態 dp[8][j] 看有幾種情形,乘上 j/10 即為所求
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/04 Wed 13:05:50
作者: sa072686 at 09/11/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11484 Accepted
時間: 2009/11/04 Wed 13:06:00
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11484 Accepted
時間: Wed Nov 4 13:04:33 2009
也是非常容易的一題…而且寫起來自覺挺漂亮的
翻譯一下
給你一堆 nested 的標籤,但是所有標籤一定由一個最大的父標籤包起來
一開始有個指標指向父標籤,再給你一堆移動的指令,指令有四種
移到 parent, next/previous sibling, first child
標籤最多 500 個,指令最多 100 個,每個指令如果合法就移指標,不合法就不移
然後每個指令輸出指標移動後指向的標籤名稱
防個雷
就只是建 tree 然後移動而已
先把樹轉左兒子右兄妹,再加存上個兄妹和父母就可以了
遞迴去讀輸入,如果一開始讀到的是結尾,表示這節點一定是空的
否則把標籤名設定好,然後遞迴下去找兒子,等回來之後
再次遞迴下去找兄妹,然後 return
遞迴下去找兒子時,自己的結尾一定還沒找到
如果下一行就是結尾,那一定是自己的結尾,這時兒子是空的
如果下一行不是,那麼一定是兒子結束且發現兒子的兄妹為空後才回到這裡
到發現兒子的兄妹為空表示抓到一個結尾,且兄妹是空節點,這個結尾一定是自己的結尾
所以再下一行要嘛是兄妹,要嘛是父母的結尾,遞迴抓兄妹即可
於是形成一個很漂亮的遞迴:
recurs(parent, pre_sibling)
{
if(end_of_label) return NULL;
now = get_new_node(parent, pre_sibling);
now->child = recurs(now, NULL);
now->sibling = recurs(parent, now);
return now;
}
這樣四種方向的移動都有了,接下來邊讀邊移就好啦,真是歡樂
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/04 Wed 13:47:15
作者: sa072686 at 09/11/04
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11481 Accepted
時間: 2009/11/04 Wed 22:44:53
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11481 Accepted
時間: Wed Nov 4 22:38:37 2009
想了頗久,想說 n <= 1000 就弄個 n^2 算法,結果 TLE …
預處理了一些東西才勉強過,rank 94/96,真難過…徵求比較高效的算法
翻譯一下
給 n, m, k 代表你有 1~n 共 n 個數字排成一列,問前 m 個數字恰只有 k 個數字
使得數字 pi 恰擺在位置 i 上面的方法數
防個雷
有 n^2 的 DP 算法,一開始先把 1~n 按順序擺好,然後從第一個開始看
看要不要跟前面的數字對調順序,以及和誰對調
設狀態 dp[i][j] 表示看到第 i 個數字,且前 m 個恰 j 個留在自己位置上
則前 m 個時有轉移方程如下
dp[i][j] = dp[i-1][j-1] + dp[i-1][j]*(i-j-1) + dp[i-1][j+1]*(j+1)
如果不對調,它會留在自己位置上,所以留在位置上要加一,就取j-1轉移過來
如果對調,那麼看它和誰對調…假如和本來就不在位置上的對調
那麼對 j 沒有任何影響,這樣的數有 i-j-1 這麼多個
如果和原本還在位置上的對調,那麼會少掉一個在原本位置上…個數是 j+1 這麼多個
這樣要嘛 j 變動,不然就是前面某個位置變成 i 可保證不會重覆計算
也包含了所有情形,但是當第 m+1 個開始之後…
因為在不在位置上不再重要,可是還是可以跟前面對調,所以變成
dp[i][j] = dp[i-1][j] + dp[i-1][j]*(i-j-1) + dp[i-1][j+1]*(j+1)
直接做會 TLE,不過如果預處理上述第一種情形,每次從 m+1 做起就會過了…
雖然秒數和名次都相當難看
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/04 Wed 22:45:11
作者: sa072686 at 09/11/05
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11478 Accepted
時間: 2009/11/05 Thu 16:04:56
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11478 Accepted
時間: Thu Nov 5 16:04:01 2009
非常少人解,我覺得也沒有很難想啦…不過大概歪解人品過了,rank 12/12..
徵求正解Orz 應該可以壓複雜度,不然第一名 0.2 哪來的…
翻譯一下
給你一個帶權有向圖,V <= 500,E <= 2700,再給你一種操作 Halum
每次 Halum(n, d) 可以讓所有連進 n 的邊,邊權全部減 d, 連出 n 的邊,邊權加 d
問有沒有可能任意 Halum 之後讓所有邊邊權至少 > 0,或是判斷有沒有可能可以無限大
邊權絕對值不大於 10000
防個雷
先 binary search 查找最大的正整數 c 使得所有邊權 Halum 之後 >= c
對每個正整數 c 做一次 Bellman-Ford, 保存每個點的 Halum 值
如果一條邊 (u, v) 其 cost(u, v) + h(u) - h(v) < c 就把 u Halum 到讓前式
變成 >= c, 則知如果在做了 V 次之後,還是有需要 Halum 的邊
那麼就換更小的 c, 如果找不到正整數 c 就無解
如果不用 Halum 了就換更大的 c 看看,如果 c > 10000 那大概就是無限大了
2.7s 卡在邊邊過,rank 12/12.. 應該是人品解,但算法應該是正確的
複雜度約 VE log 10000 看起來也沒很糟的說,500*2700*14 ..
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/11/05 Thu 16:48:25
作者: yuscvscv at 09/11/23
數學公式
M(n) = n! ( 1/2! - 1/3! + 1/4! - 1/5! ...... + (-1)^n/n! )
可用排容證明。
正整數 1 ~ n 的全排列有n!種,
其中第k位是k的排列有(n-1)!,
當k取 1~n 時,共有n*(n-1)!種排列,
由於是錯排,這些排列應排除,
但是此時把同時有兩個數不錯排的排列多排除了一次,應補上;
在補上時,把同時有三個數不錯排的排列多補上了一次,應排除;……;
繼續這一過程,得到錯排的排列種數為
M(n) = n! - n!/1! + n!/2! - n!/3! + ...... + [ (-1)^n * n! ] / n!
提出n!
M(n) = n! ( 1/2! - 1/3! + 1/4! - 1/5! ...... + (-1)^n/n! )
DP
當n個編號元素放在n個編號位置,元素編號與位置編號各不對應的方法數用M(n)表示。
1.把第n個元素放在一個位置,比如位置k,一共有n-1種方法。
2.放編號為k的元素,這時有兩種情況:
2-1.把它放到位置n,如此對於剩下的n-2個元素,就有M(n-2)種方法。
2-2.不把它放到位置n,如此對於這n-1個元素,有M(n-1)種方法。
綜上得到 M(n)=(n-1) [ M(n-2)+M(n-1) ]
初始狀態,M(1)=0,M(2)=1
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc03.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2009/11/23 Mon 16:09:23
→ andyisman 推:咦咦 我看過這個耶XD 1123 17:59
→ andyisman 推:http://tinyurl.com/ye64djj 1123 18:38
→ andyisman 推:補一發!! 1123 18:39
→ andyisman 推:借轉 1123 19:11
φ andyisman 轉:到 [andyisman] 看板,于 2009/11/23 Mon 19:12:01
→ yuscvscv 推:據說這高2下會上到 上面的貌似是偏數學的証明 1123 20:01
→ yuscvscv 推:DP的想法是值得研究的XD 1123 20:02
→ sa072686 推:看老師吧…有的只會講公式叫你們背一背 1123 20:39
→ sa072686 推:或是跟你說C幾取幾剛好是巴斯卡三角形,誰跟你講意義.. 1123 20:40
→ sa072686 推:連11038那種題目都直接討論一節課畫兩三個黑板了XD 1123 20:41
→ yuscvscv 推:XDDD 1123 20:43
作者: yuscvscv at 09/11/23
目前板上的都掛了。
有人推薦這個,
http://codepad.org/
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.146.57 (中滑一番)
→ andyisman 推:我都用這個XD 1123 20:53
→ andyisman 推:http://nopaste.info/ 這個好像不錯 1123 22:10
作者: dreamoon at 09/11/24
使用這個版那麼久了,還是來貢獻幾題好了,不然這個版已經不敷使用XD
---
有一個老師他有很多問題學生,但若單單只有一個問題學生他還好應付,可是有某對問題學
生在同一間教室上課那可就不好應付了,這個老師想了一個辦法,那就是把所有學生分成兩
間教室上課.
現在告訴你這個老師的學生數n,以及問題學生對數m,請你找出一種教室分配的方法使得兩
間教室裡的問題學生對數和至多m/2對
Input
第一個數N代表幾組測資,每組測資第一行兩個數n,m分別為學生數和問題學生對數,接下來
會有m行,每行兩個數u,v代表編號u和編號v的學生在同一間教室的話是一對問題學生,學生
編號為1~n.
n<=100,m<=5000
Output
輸出在第二間教室的人數以及在第二間教室的學生的編號,請參考Sample.
這題以之前某個把所有題目分為10顆星的階段的難度標準來說的話大概是四星吧!
參考解答請案大寫E
一言以蔽之就是Greedy
我先簡化問題,題目就是給你一個簡單圖,如果要你把所有點分成兩組,使得兩組內邊數的
和不超過m/2
首先,我們先把所有點放在第一組,然後第二組為空集合,然後慢慢減少兩組內邊數和.
減少方式就是把一個連到同一組的點的邊數大於連到另一組的點的邊數的點移到另一組
這樣子兩組內邊數和就一定會減少,當移到不能在移時,稍微計算一下就可以知道此時兩組
內邊數不超過m/2.
接下來是實作方法
我是以下這樣做啦!不知道有沒有更好的方法?
紀錄每個點所連接的邊連到的其他點在兩組的數目,以及這個點現在是在哪一組
一剛開始把所有點都設在同一組,接著依序檢查每個點移到另外一組會不會更好,檢查順序
是1~n,1~n,...直到兩組內邊數已不超過m/2,由於有紀錄每個點連的組
數,且每次檢查1~n後邊數至少少1所以此部分時間複雜度為O(n*m)
然後每次移動時就改變每個連到他的點的所連接的點的連接到各組的數目,最多做這種操
作m/2次,且每次更新花的時間複雜度為O(n),顧這部分也是O(n*m)
所以全部的時間複雜度是O(n*m)+O(n*m) = O(n*m)
就是這樣喵~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dreamoon from 140.112.214.65 (台北帝國大學)
作者: dreamoon at 09/11/24
再來一題...
---
給你至多10條線段問你這些現段內可以找到多少三角形?其中共線的三點不算形成三角形
Input
每組測資第一行一個數n代表有幾條線段,接下來n行每行四個絕對值不超過100的整數x1,
y1,x2,y2,代表線段的兩端點為(x1,y1),(x2,y2),以EOF結束
等級也是4吧?
<提示按大寫E>
一個三角形的邊有可能是好幾條線段重疊而成的
所以一剛開始先把有重疊且平行的線段合成一條線段
於是現在有很多條沒有同時重疊和平行的線段
故此時三角形一定是由三個線段構成
所以直接用O(n^3)判斷三條線段是否互相相交就行了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dreamoon from 140.112.214.65 (台北帝國大學)
→ yuscvscv 推:咦咦 雷沒隱掉? 1124 08:17
→ dreamoon 說:一不小心就忘了一不小心就忘了... 1124 14:25
▲ dreamoon 改@2009/11/24 Tue 14:26:06
→ DJWS 推:嗯 ... 要小心三線共點 ... 0118 19:15
作者: yuscvscv at 09/11/29
給n, m。 問 n! 能不能整除 m 。
注意
m divides n!
m does not divide n!
用複製的就不會有這問題。
---------防雷----------
首先,可以得知當 m <= n 時必能整除。
另外,當 m == 0 時必不能整除,可以先判別掉。
//注意判別優先度,當m == 0 時, m 必<= n 。
然後把 m 質因數分解,
之後對於每個質因數,去檢查 n! 所含該質因數的個數。
如果 m 所含的質因數的個數 > n!所含的,必不能整除。反之則可以。
至於 n! 中含有幾個質因數 p ,
則等同 n / p + n / (p^2) + n / (p^k) (k= 1 2 3...直到(p^k)>n)
當m > n 且 m中含有 > sqrt(2147483647)的質因數時要另外判斷掉,
不然要注意overflow。
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.140.233 (中滑一番)
▲ yuscvscv 改@2009/11/29 Sun 16:17:23
作者: yuscvscv at 09/11/30
補一下更細部的算法。
防雷
--------------
設所求為 k 。
細節如下。
設 x梯子依靠點的左邊牆的高度為 L,y梯子為 R。
可得以下兩關係式。
1. L^2 + k^2 = x^2, R^2 + k^2 = y^2
2. 1/c = 1/L + 1/R //國中時期應該有學過,不證明了
如此可建立一個函式 f( k ) = c' ,且此函數遞增。
二分搜尋 k 去吻合 c。
f(k) = 1/ ( 1/sqrt(x*x-m*m) + 1/sqrt(y*y-m*m) )
----------------------------
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc03.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2009/11/30 Mon 15:42:58
作者: yuscvscv at 09/11/30
補上算法細節
防雷
-------
建議畫圖。
首先,定弦的左側與牆連接處為A,與右側連接處為B。
__ __
線段AB長 即為 弦長L,弧AB長 為 L' 。
所求是 弧中點ML' 到 弦中點ML 的距離 k。
設弧的半徑為 r,左半弧( O A ML')的角度為 m (徑度量)。
由徑度量定義 "弧長/半徑 = m" 推得 r = L'/ (2*m) // L'/2 為弧長
__ ____
在直角三角形 O A ML 中,角O角度是 m,OA長是 r ,A ML長是 L/2。
____
又知1. A ML = sin(m) * r。
2. r = L' / (2*m)
此時只要二分搜尋 r 或者 m 任一(因為兩者能互換)。
不過在這裡我搜尋角度,因為有明顯的範圍 0 <= m <= 2*PI 。
而 sin(m) * r 和 m 是成負相關,故可二分搜尋之。
求出角度之後,也等同求出半徑。
所以開始求 k 。
_____
在左半圓O A ML' 中, A ML' 是其弦,是 (r * sin(m/2) ) * 2,
^^^ 左半圓的半圓
______ _____ ____
然後在直角三角形 A ML ML' 中, 所求 ML ML' = sqrt( A ML' ^ 2 - A ML ^ 2)
____
又A ML = L/2
注意,角度的浮點數誤差需<1e-10。
-----------------------
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc03.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2009/11/30 Mon 17:52:49
作者: yuscvscv at 09/12/01
補數學解。
防雷
----------------------------------
題目給了 m 和 x%,要求出 最大的價值v 扣稅之後 < 最大的不扣稅的價格b。
不扣稅的b很明顯就是 m-1,由於價錢都是整數,可得關係式
1. v >= m
接著從v下手
v - v * (x/100) < b => 100v - vx < 100b => v (100 - x) < 100(m - 1)
v < 100(m - 1) / (100 - x)
設 100-x為a , 100(m-1)為b
由於 v 必為整數,所以當 a%b == 0, v = a/b -1
否則 v = floor( (double)a/b )
//以上可用個技巧 v = ceil(a/b - 1),注意這裡的a/b是浮點數。
最後判斷 v >= m才是所求,否則無解。
注意當 x == 100的時候會發生除以0的錯誤,很明顯這時v不存在,得事先判斷掉。
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc03.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2009/12/01 Tue 12:02:58
作者: yuscvscv at 09/12/01
補上細節算法
防雷線
-------------
設讀入n,上限為 a ,下限為 b ,所求為 m 。
就會有幾個條件(依優先度)
1. a >= m >= b
2. 使 n | m 最大
3. 符合以上兩點的 m 最小
我們可知要用or達到最大,可以直接分析原 n 的bit,然後把 0 的地方補上 1。
但在有限的情況下,補上高位的bit會比補低位的來的優。
這時候由高位 bit 開始做增減,
由於初始是0,所以只要判斷是否在m上添加 bit 。
由於如果 n的此bit 是 1,此時添加bit只會讓 m 變大,但 n|m 沒有任何改變,
都不是我們要的變化。
所以有添加的必要只有以下兩種情況。
1.在 n的此bit為0 時,只是添加時要維持 m <= a。
畢竟如果高位數已經 > a,那麼低位數再怎麼砍都還是 > a ,所以添加時要注意。
另外,
2.當 b的此bit為1 ,而當下 m < b 時。
如果高位數已經 < b,那麼低位數再怎麼增加都還是 < b ,故這個地方一定要添加。
最後只要注意讀入是unsigned int即可。
-----------------
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.136.145 (中滑一番)
▲ yuscvscv 改@2009/12/01 Tue 21:23:44
▲ yuscvscv 改@2009/12/01 Tue 21:27:13
作者: yuscvscv at 09/12/01
給你兩數N和H,(1 <= N <= 10000, 1 <= H <= 30)
求建立一個擁有N個節點,且深度不超過H的二分搜尋樹的點插入順序,
且此順序的字典序最小。
如果無法建立此樹則輸出"Impossible."
測資最後以兩個0結束。
防雷線
---------------
首先先探討無法建立BST的情況,
很明顯就是在所限定深度H下的節點數 < N,
否則可以完全填滿,
//ex. 只要把數字扔進heap塞好,塞完就是一棵BST。
而深度H所能填的最大節點數是2^H-1。
//可由等比級數推得
要求字典序最小,首要條件就是讓最高位數的數字最小。
而在建立BST中,最先插入的一定是root,
所以首先變成要求最小的root,設為 r 。
假設目前這棵樹的範圍是從數字a建立到數字b的二分搜尋樹,且深度極限h。
那麼我們可知,左右子樹的容量是2^(h-1) - 1。
然而我們發現,把節點放進左子樹需先擺入較大的root,跟所求是背道而馳。
所以在右子樹還沒滿之前,都不要放節點到左子樹。
從BST的特性可得知,
左子樹的數一定都 < root,右子樹都 > root。
如此一來可推得 r = b - (2^(h-1) - 1),
因為從b開始往前推(2^(h-1) - 1個數,都是擺到右子樹。
不過要注意當右子樹沒放滿,t會 < a,故這時的 t = a 。
//簡潔寫法 r = max(b - (2^(h-1) - 1), a);
那麼左子樹的範圍會是 a ~ t-1,右子樹的範圍會是 t+1 ~ b。
由於建BST要先放root,所以可以直接print t的值。
接著,要讓字典序最小,一定從左子樹放起,接著才放右子樹。
然後子樹又遵循這個特性......
故能寫成DFS分別遍歷左右子樹。
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.136.145 (中滑一番)
▲ yuscvscv 改@2009/12/02 Wed 00:08:17
作者: devilqxect at 09/12/02
生日快樂~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by devilqxect from 140.114.220.129 (青蛙大學)
→ sa072686 推:喔喔�蛋好久不見XD 㩧㩧~ 1202 11:08
→ truth 推:不是11/28才見面嗎................ 1202 12:33
→ sa072686 推:�么久? 1202 12:37
→ devilqxect 推:超久的,快要一個禮拜了XD 1202 15:33
→ kytu 推:樓上兩人是戀人=///= 1202 19:08
→ andyisman 推:>///////< 1202 20:16
作者: yuscvscv at 09/12/02
這邊也補一篇啦!
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc03.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
→ sa072686 推:截至目前�站都PO (但撴沒有人三站PO) 你win了XDD 㩧㩧 1202 11:10
→ yuscvscv 推:要幫忙手動轉信嗎XDDD 1202 11:26
作者: t52101t at 09/12/02
SA大神生日快樂~~~
--
「真正的神人都用小畫家。」By搗蛋
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by t52101t from 192.168.4.31 (台狼一中桑靈餓)
→ sa072686 推:XD 㩧啦~ 1202 12:38
作者: andyisman at 09/12/02
這裡也貼一篇XD
sa生日快樂XDDD
--
★naieeliao 您真是XU一哥耶!
☆naieeliao ?
☆naieeliao 有嗎Q Q
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by andyisman from 192.168.4.13 (台狼一中桑靈餓)
→ sa072686 推:XDDDDD 㩧啦~ 1202 12:38
作者: jo8246hn at 09/12/02
生日快樂
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by jo8246hn from 192.168.4.43 (台狼一中桑靈餓)
→ sa072686 推:謝謝~ 1202 12:38
作者: truth at 09/12/02
強者sa學長生日快樂
下次雷我的時候真的可以直接把東西雷光光XDDDDD
要不然跟沒雷差不多
這個簽名檔是個美麗的誤會(茶)
--
★jenny2921 老娘才不會和他閃勒= =++
★jenny2921 和學弟還差不多>\\\\\\\\\\\\\\\\< XDDDDDDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by truth from 192.168.4.33 (台狼一中桑靈餓)
→ sa072686 推:啥毛啊XDDDDD 㩧啦~ 1202 12:39
作者: PG at 09/12/02
強者我學弟sa大神生日快樂 XDD
有空也來玩一下信長吧QQ
--
ナース:先生先生!急患です∼ BJ:3000万ドルあるか。 朝田:甘いものあるか。
ナース:全部準備𠡳みです! BJ&朝田:カルテを見せて(本佋モード)
ナース:早速に治療できませんか。 BJ&朝田:これは...報酬はいいんだ...
ナース:なんでですか。 BJ&朝田:澪病......
http://PG.miko.tw TFcis 7th PG
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 140.117.192.16 (全て遠き理想𠉵)
→ sa072686 推:謝謝批居學長~ 光OS就研究不完啦XDD 1202 12:45
作者: naieeliao at 09/12/02
SA大神生日快樂!!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by naieeliao from 210.71.78.241 (台北一中)
→ naieeliao 推:好像最近很流行"大陸文"? 1202 13:19
→ naieeliao 推:SA大神生日快�!! 1202 13:19
→ sa072686 推:XDDD 㩧㩧��小乃 1202 13:36
作者: nanj0178 at 09/12/02
快樂!!~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by nanj0178 from 140.115.202.34 (中央大學)
▲ nanj0178 改@2009/12/02 Wed 13:29:27
→ sa072686 推:謝謝~ 1202 13:36
作者: butterfly21 at 09/12/02
生日快樂~~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by butterfly21 from 210.71.78.241 (台北一中)
→ naieeliao 推:一舉兩得 XD 1202 13:33
→ sa072686 推:標題是哪招XDDD 謝謝~ 1202 13:37
→ truth 推:2100PO!! 1202 13:37
→ yuscvscv 推:2100AC! 1202 14:12
→ truth 推:XDDDDDDD 1202 14:16
→ sa072686 推:ACM 02100 !? 1202 15:03
→ zeta 推:話說原PO怎麼不管PO文跟寄信都這個標題= = 1202 15:48
→ andyisman 推:原PO jizz 了 (?)(逃) 1202 18:04
→ butterfly21 推:樓上不是很正直嗎= = 1202 22:28
作者: rhodon at 09/12/02
學長~~
生日快樂!!
***ˋ(  ̄▽ ̄)ˊ***
--
★snoopymei 為朋友兩肋插刀,為男人插她兩刀 ( ′-`)y-∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by rhodon from 61.230.97.21 (中滑一番)
→ sa072686 推:謝謝~~ 1202 15:54
作者: mp607 at 09/12/02
mp607@sa ~/$ touch birthday.c
mp607@sa ~/$ cat birthday.c << #include<stdio.h> int main(){int i; for(i=0;i>0
;i++){printf("Happy Birthday!!");}return 0;}
mp607@sa ~/$ gcc birthday.c -o birthday.o
mp607@sa ~/$ ./birthday.o
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 198004.coe.ncyu.edu.tw (打貓大學宿舍四樓)
▲ mp607 改@2009/12/02 Wed 19:16:00
→ sa072686 推:哪招XDDD 謝啦~ 1202 19:17
→ naieeliao 推:linux 下的都這樣 :) 1202 21:50
作者: kytu at 09/12/02
朝拜大神!!!
大神壽誕呀!!!
祝學長生日快樂~~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kytu from 58-115-172-145.cable.dynamic.giga.net.tw (和信超沒品)
→ sa072686 推:XDD 謝謝 1202 19:17
作者: brucehsu at 09/12/03
大神生日快樂啊m(_ _)m
------
是說我們好像很久沒有聯絡了?XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by brucehsu from 59.127.240.203 (中滑一番)
→ sa072686 推:謝謝XD 是頗久的沒錯~ 1203 09:59
作者: lovemoonfish at 09/12/03
學長學長
失聯很久的學弟來跟您說生日快樂啦!!!
加油加油!!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by lovemoonfish from 140.114.220.114 (青蛙大學)
→ mp607 推:真的失連很久XD 1203 00:41
→ sa072686 推:謝啦~ 真的失連很久XDDD 1203 09:59
作者: sa072686 at 09/12/04
AC_IslandEX
之前提過 AC Island 計劃,之後沉寂了一陣子,經過更多的思考之後
決定重新來過,推動行的 AC_IslandEX 計劃
整個系統會砍掉並重新規劃,主要原因如下
一、由於先前經驗不足,導致系統維護不易,這次再起時比上次累積了更多經驗
整體架構可以做得更好
二、Ruby 語言由於先天缺陷,在規模還不甚大時已不堪使用,主因是運行速度過慢
空迴圈 10000 次要頓一下、列舉 2300 筆資料耗時近 20 秒的效率實在太差
預計使用 php 開發,雖然開發速度遠不及 Ruby 但效率會更佳
三、經過一番思考之後決定重新擬定某些規則
新的 AC_IslandEX 介紹如下
一:它是什麼樣的計劃?
它將會是個基於 web 類似 wiki 的平台,將會針對高中資訊奧林匹亞、
大學 ACM ICPC 比賽,設計一個地方專門放置相關的資料,從入門到進階
由於是針對性的,所以會以最為著名的 Online Judge: UVa Online Judge
來設計更多進階的功能,除了有解題相關資料外,也提供更多個人化的功能
二:目的為何?
有鑑於解題相關資源稀少、缺乏系統性,加上相對冷門以致入門不易
尤其是為了照顧更多缺乏資源及前輩帶領的地方,基於傳承和分享的心
將知識、技巧以及經驗散播下去,使後輩不用重新摸索這個世界
三:與這個板有何區別?
將平台從 BBS 改成 web 能使得更易搜尋、門檻更低,並且便於添加更多功能
平台大致介紹如下
一、解題資料:
會有比 BBS 更好的地方放置,可以把大家的心血集中過去,避免資源分散
並且可以共同編輯或更正錯誤,能夠更加確保正確性,也更便於提供自己不一樣的想法
也不會受限於 BBS 的限制,在顯示上能更有彈性、操作更方便,也不再只能使用純文字
二、個人化:
脫離了 BBS 的限制後,將可以做更多為個人量身打造的功能,例如題單管理與分享
將不再需要自行手動整理及維護,也可以在列表之時做一些過濾
更可以透過 tag 的追加使得搜尋、分類更加便利,也可以對題目做更多統計與分析
對於文章有任何的更正、追加或新文章出現時,也使得訂閱變得可能
三、更多額外功能:
例如提供類似 Online Judge 的系統,差別是提供 AC code 的執行檔,使用者提供數據
而我們可以提供正解為何,幫助驗證減少手算的困擾。或是對於想知道解法的題目
也可以提出來讓大家可以優先完成,以及站內信件的聯絡、供提問的討論區
或私下提問又不影響隱私的管道等等。
規則方面
一、要求詳譯題目
簡譯容易造成譯者為讀者先拆完包裝或是加入一些提示使題目變得易於思考
二、要求思考過程
在思考時通常是因為某些條件或特性而想到使用某些特定的方法求解
有時稍微敘述一下如何想到的,比直接告知思考結果更加有幫助
三、客觀的難度定義
提供投票、以及相應的規則來使難度的定義更客觀
本計劃預定寒假開始實作,待系統完成後將會需要為數不少的人力幫忙充實與更正、管理
希望屆時有空的人可以多多幫忙,大家的建議與指教也能讓這計劃更加完善
目前詳細的功能尚未完全確立,如果希望能有些什麼樣的功能也歡迎提供
那麼,敬請期待它的完工∼
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.145 (台北帝國大學)
→ truth 推:第3項的提供正解...我覺得有toolkit已經不錯了 1204 17:47
→ truth 推:把Board的測資整理一下我個人反而覺得比較有幫助 1204 17:48
→ t52101t 推:樓上的想法實做起來會累死人XDrz 1204 18:12
→ t52101t 推:我覺得有中文的討論版讓我們自己討論測資就夠了QQ 1204 18:12
→ yuscvscv 推:如果有些心機測資其實在寫wiki的時候可以寫進內文 1204 18:47
→ yuscvscv 推:討論版的話 我覺得BBS水球應該就夠了.... 1204 18:48
→ naieeliao 推:讚! 1204 23:24
→ naieeliao 推:大推! 1204 23:24
→ sa072686 推:水球是私人對話記錄..討論板大家都看得到 1204 23:48
→ yuscvscv 推:喔喔 不過討論版可以另外架 我覺得 1206 14:59
→ yuscvscv 推:頂多就是wiki把連結轉過去 1206 15:00
→ yuscvscv 推:每個東西都獨立起來會比較好整理 1206 15:00
→ sa072686 推:我構想是用個大框架把這些東西整合起來 1206 20:32
→ yuscvscv 推:喔喔 可是弄成獨立的會比較好管理啊..... 1206 23:48
→ yuscvscv 推:況且只要修一下他們看起來就是整合的了 1206 23:48
→ yuscvscv 推:例如資料庫共享 然後連結上面去做整合 1206 23:48
→ yuscvscv 推:這樣寫起來也不用寫那麼多重複的東西 1206 23:49
→ sa072686 推:其實也還好耶,而且刻個討論板又不用幾天 1207 10:51
→ sa072686 推:能合併再生一些衍生的功能不是更好嗎XD 1207 10:51
→ sa072686 推:反正寫大型程式就這樣,要有針對性功能就會失去泛用性 1207 10:52
→ sa072686 推:要維持泛用性就會失去針對性…這就是為什麼不用現成的 1207 10:53
→ sa072686 推:硬是要自己生一個的原因 1207 10:53
→ r51303 推:大推!! 1215 10:49
作者: yuscvscv at 09/12/04
補解法。
防雷線
----------------------------
由於吃了第i個,可以知道答案是 i ,還是 >i 或是 <i。
分析了一下,可以把某種策略展開成一棵BST,
然後對於 某點的搜尋花費 ,為 搜尋它時所經過的節點權重總和。
//如果所求是葉子,則不算本身
題目所求是對 i+1 ~ i+k+1 的數字作分配,建成一棵BST,
使得 對各個點的搜尋花費合達到最小 。
本來想每次切半,但是發現每個點的權重會有後效,又提到最佳。
既然是樹,應該就能切割,故嘗試以DP解之。
設DP[i][j] = k
為搜尋 區間i~j 所需的最少花費,
對於i~j的元素就暴力嘗試以他做為節點。
//設此點為t
然後算出,dp(i, t-1)+dp(t+1, j)最小。
只是,i~j的點只知道他們各自的總搜尋花費,但是要到搜尋他們之前,還得先咬t,
故要加上 w[t] * (j-i+1)。
所以對於 dp(i, j)
得dp[i][j] = min( dp(i, t-1) + dp(t+1, j) + w[t] * (j-i+1) )。 (t = i~j)
所求就是dp(0, n-1)之值。
只是這樣的複雜度是O(n^2 * t),t是測資數(<=100)。
25000000是有點慢。
接著我們再仔細看一下這個DP。
發現這種DP,在計算 i~j 的區間實際上是不變的,但是重量會影響。
由於重量是以1遞增,那麼把i, j換成重量。
所求 = dp(k+1, k+n),w[t] 就成了 t。
然而只轉換代數的結果是它本質不變,依然維持 i~j 有唯一解,
如今變成了 重量i 到 重量j 有唯一解,且後來怎麼被合併,並不影響其值。
那麼這個DP就可以不用清空,每次直接求dp(k+1, k+n)即可。
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc03.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2009/12/04 Fri 20:24:19
作者: yuscvscv at 09/12/06
Title 樂器
The Problem
胡里奧 是個在中學教古典音樂的音樂家。
他有 N 個樂器可以分給 M 個學生。( n >= m )
為了要做出最適當的分配,胡里奧讓每個學生去分別列出他們對 N 個樂器的喜好程度。
而胡里奧想要分配出讓最多學生拿到自己最喜歡的樂器。
但是很多種分配方式可以達到他的要求,
他想要知道共有幾種分配方式可以讓最多學生拿到他們最喜歡的樂器。
你必須寫個程式去計算出有多少種不同的分配方式是可行的。
當然這些分配需要讓最多的學生拿到他們最喜歡的樂器。
The Input
輸入的第一行包含 1 個整數,表示測資數。
對於每個測資,第 1 行會有 2 個整數代表 N, M。
N 代表有幾種樂器;M 代表有幾個學生。 (m <= n <= 32)
接著會有 M 行,表示這 M 個學生的清單,每行有 N 個數字以 1 個空白隔開。
這 N 個 1~N 的數字表這位學生對樂器的喜好程度。 (1表示最喜歡,剩下以此類推)
而第1個數字表示這位學生對第1個樂器的喜好程度。
第2個數字表示第2個樂器。剩下以此類推。
The Output
對於每筆測資必須輸出包含 1 個整數的 1 行。
這個數字表示有幾種可行的分配方式。
防雷線
-------------------------------
讓1個樂器分給1個人。
題目一開始看起來很像二分匹配。
不過由於題目只要求要讓拿到最喜愛的樂器的人最多。
那麼要只要把第i個樂器分給在喜好清單中,第i個數字是1的人。
其他怎麼分配都無關緊要。
而題目是要問有幾種分配法,這是因為可能會有 k 個人對某個樂器都是最喜歡的。
那麼就有 k 種分配方式都能讓 1 位學生拿到他們最喜歡的樂器。
對這 k 個學生而言,其他樂器並不是他們最喜歡的,
(因為喜好程度是 1~N 的數字,不重複)
所以不管分配到哪個都不會拿到最喜歡的樂器。
因此最喜歡第 i 個樂器的學生,和最喜歡第 j 個樂器的學生彼此毫無關聯。
分別算出第i個樂器有幾個學生填寫 1 ,設為 ki 。
那麼 k1 * k2 * k3 * ... * km ( ki > 0 ) 即為所求。
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.138.21 (中滑一番)
▲ yuscvscv 改@2009/12/06 Sun 17:51:50
作者: yuscvscv at 09/12/07
Title GCD LCM
Problem
對於兩個正整數的最大公因數G (GCD),是一個最大的正整數且皆能整除這兩個數。
對於兩個正整數的最小公倍數L (LCM),是一個最小的正整數且皆能被這兩個數整除。
一個GCD可以是很多對正整數的數的GCD,同樣的LCM也可是很多對整數的LCM。
在這個問題當中,將會給你兩個正整數,
你必須輸出以 前者為GCD,後者為LCM 的一對正整數。
Input
輸入的第1行有一個正整數 T ,表示測資數。 ( T<=100 )
接下來的T行,每行有兩個正整數G和L。 ( G, L < 2^31 )
Output
對於每筆輸入,應輸出一行,且包含兩整數a, b,且a <= b。
如果有多對的a, b那麼輸出 a最小的那一對。
如果找不到一對符合的a, b,那麼輸出-1。
防雷線
------------------------------------------------
設有兩數pa, pb互質。
那麼所求 a = pa*G, b = pb*G ,且 pa*pb*G = L 。
所以當 L不能被G整除時必無解。
然後要使pa最小,那麼pa=1。
如此 得知 a = G, pb = (L/G/pa) , b = (L/G/pa) * G
b = L/G * G => b = L。
所以當有解時,所求 a = G, b = L 。
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 118.171.146.195 (中滑一番)
▲ yuscvscv 改@2009/12/07 Mon 22:56:30
作者: yuscvscv at 09/12/08
Title Chinese Mahjong
Problem
麻將是個源自中國的4人骰牌遊戲,類似多米諾骨牌,不過是4個人輪流抽牌丟牌,
並設法湊出不同牌型,直到有人湊出 4組 3張1組的牌,和1組 2張相同的牌才算勝出。
麻將在不同地區也不太一樣,通常最少會有136張,更多點的會高達144張,
而源自美國和日本的還會更多。
常見的136張的麻將包含了:
餅(筒):就如名子一樣,每張牌含有數個圓餅。
每個圓餅代表著古時後中間有著圓方孔的銅幣。
在這題中將以1T, 2T, 3T, 4T, 5T, 6T, 7T, 8T, 9T來表示。
條(索):也如名子一樣(除了1的時候),每張牌含數根細條。
每根細條代表著串著百個銅錢的細枝。
在這題中將以1S, 2S, 3S, 4S, 5S, 6S, 7S, 8S, 9S來表示。
萬: 也如名子一樣,代表著1萬的銅錢或是100根索
在這題中將以1W, 2W, 3W, 4W, 5W, 6W, 7W, 8W, 9W來表示。
風牌:有 東, 南, 西, 北 4張。在這題將以DONG, NAN, XI, BEI表示。
龍牌(箭牌):有紅綠白3種。
龍牌是西方文化產物,是Joseph Park Babcock在他的"1920"這本書中,
引進了麻將到美國才產生的。
在更早之前,這些牌是象徵在中國的大考之中獲得一些東西。
紅色的表示你通過了考試且被任命為政府官員。
綠色的表示你的財富會變的更多。
白色的表示你會跟清廉的官員一樣好。
在這題中將以ZHONG, FA, BAI來表示。
如此有了 9*3+4+3=34 種樣式,每種樣式各有4張,所以總共有136張。
某些人或許會好奇144張的麻將多了什麼,包含了:
花牌:
在一組麻將裡,這通常被當成附屬的裝飾品。每個種類只有1張牌,
所以總共136+8 = 144張。
在這題中,我們不用考慮這幾種牌。
中國麻將非常複雜。然而我們只需要懂少許的知識來解決這個問題。
1組牌是指在同一位玩家手中的某種特定的組合。
這裡你只需要知道3種組合,(並不用考慮槓):
碰: 3張一樣的牌
吃: 3張在同個花色,但數字變成序列的牌。且不可以超過3張,
除非是有多個吃並在一起的組合。
很顯然的,風牌和龍牌不能在吃這個組合裡面。
眼: 沒有在以上兩個組合,且兩張一樣的牌。它必須是最後一個組合。
當一個玩家拿到了1組眼,加上數組(可能是0)的碰和吃,就會獲得勝利。
注意,每張牌只能在1組吃/碰/眼裡面。不能有同一張牌在多個組合裡面的情形。
當手上的牌只差1張就贏的時候,被稱為聽牌。
但聽牌的時候可能是等不只一張的牌。
給某些知道麻將的人:不用考慮一些特殊的贏法,例如"七對子"。
Input
輸入最多包含50組測試資料。
每組測試資料只有1行,並包含13張牌,且這些牌是合法的。
最後1筆測試資料後面將跟著1個0,不用對這個0做任何操作。
Output
針對每筆測資,輸出這是第幾筆測資,並列出目前正在等候的牌。
這些牌須以題目描述的順序來排列。
(1T~9T, 1S~9S, 1W~9W, DONG, NAN, XI, BEI, ZHONG, FA, BAI)
每種牌只能出現一次。
如果目前還沒聽牌則輸出"Not ready"(不含引號)。
防雷線
---------------------------
純暴力模擬,
各把每種牌,依照要輸出的順序,每次加入到這13張牌中,
變成14張牌後看有沒有胡牌。
如此發現這張牌是可行的時候可以直接輸出。
不用再sort。
至於胡牌的判斷,用DFS就可以了。
另外小心每種牌只有4張,當手上某種排有4張的時候,那這張就不是要聽的牌。
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc03.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2009/12/08 Tue 11:43:39
作者: yuscvscv at 09/12/08
補另一個解法,10分鐘秒斬用。
防雷
-----------------------------
先排序一遍,然後可以發現,只要知道時間就能推出名次,
時間的所有排列也才10 * 60 * 100 = 60000,並不會很大。
所以就從時間的最大值開始枚舉,只要在符合題目要求的當下break掉即為所求。
在仔細觀察之後可以發現,時間的最大值也只是sort後 第7名的時間+1 ,
因為這是要當第8名的最低需求,當然有可能當不上,不過是枚舉所以沒差。
另外,由於每個選手都會花掉1秒以上,所以只要枚舉的到99ms即可。
如果覺得枚舉會多枚舉,可以離散化一下,如此枚舉數就會幾乎剩下2n了。
文末防雷
--
山高雲遠人自矮,塵路獨步,誰與我行。 碩夢氣比山河豪,仰歌長嘯,餘韻九重。
蝶雲輕飄滿林空,細品花香,琴聲遊繞。 靜亭澄水徹月傲,幽夢層迴,嘆如游絲。
人生縹緲幾時了,把酒長歌,紛擾盡息。 忘卻古今自逍遙,驀然回首,孤影蹣跚。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc45.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2009/12/08 Tue 18:46:10
▲ yuscvscv 改@2009/12/08 Tue 21:25:52
作者: sa072686 at 09/12/16
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11501 Accepted
時間: 2009/12/16 Wed 06:19:34
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11501 Accepted
時間: Fri Nov 20 22:16:49 2009
嗯不難但是相當繁瑣啊…
翻譯一下
你現在在一片大海中,四周有許多凸起的木椿,你正站在其中一個上面
你現在要走到某個特定的木椿,但除非木椿之間有相連,否則只能透過木頭走過去
地圖最大 15*15, 木椿至多 15 個,S 代表木椿,B 代表起始,E 代表結束
-和|分別代表不同方向的木椿
你每次行動可以做三件事
一、把連到自己所站的木椿的木頭撿起來,木頭方向要正確才算連到自己所站的木椿
比如說,S-S 算連到,S|S 算沒連到,且同一時間只能帶一塊木頭
二、從目前所站的木椿,透過已擺好的木頭走到其它相鄰的木椿
三、把木頭放在海上使得和其它木椿相連。與其它木椿必須在同一行或同一列,
且距離恰等於木椿長度才可以放,並且中間不可以有其它木椿,也不能和其它木頭
重疊、交錯
問你最少幾次行動可以走到目的地
防雷
最小步驟解,所以不難想到是 BFS
狀態的話我是把每個點 (至多15) 的上下左右連不連通 (4) 記下來
然後拿去編碼,這樣至多 2^60,再算上所在位置和手持木頭長度
這樣空間不夠用,所以開 BST 存狀態擋重覆
每點上下左右鄰居是誰就另外建表存,距離也建表存
也許有比較好的存法吧…這樣寫起來還蠻醜的,也很繁瑣
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/12/16 Wed 06:19:59
作者: sa072686 at 09/12/16
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] ACM 11698 Accepted
時間: 2009/12/16 Wed 06:19:35
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11698 Accepted
時間: Wed Dec 16 06:14:28 2009
一開始還以為自己退化了,學妹丟了個連結說這題AC率很高但她看不懂題意
花了一個小時上下看懂後覺得很難想,怎麼會是高AC率的腦殘Orz
結果點回列表一看,…,高AC率但是只有2X個人AC啊啊啊啊啊啊
想了一兩個下午後想出來了,實作也處理了一個晚上…想法一轉再轉 Orz
簡譯一下…
對於一個 1~n 的任意排列,定義其 order 為 k 時代表 k 是最小的正整數,
使得從 1~n 之間任一數字開始,均滿足將其代換 k 次,每次代換時把目前數字 x
換成其在此排列中的位置,恰會換回原先起始的數字
例 2 3 1 對數字 1 會代換成其位置 3,再代換成 3 的位置 2,再代換成 2 的位置 1
共代換 3 次回到原本數字,對於數字 2 過程為 2->1->3->2,數字 3 為 3->2->1->3
此序列之 order 為 3,現在給你 n, m 試求 1~n 的所有排列之中,
order 恰為 m 者有多少個,n <= 100, m <= 2147483647, 答案 mod 2147483647.
防雷
首先不難想到,可以將這題轉換一下,把一個序列拆成數個獨立的集合
這些集合中任一數字開始,均會繞過所有數字恰一次後,回到自身
因為一個數只會指向一個位置,一個位置也只被一個數指向
可用類似尤拉路的方式證明之。而集合的元素個數代表繞回自己所需的代換次數,
因此長度 i 的集合在 i 的倍數次代換時,每個元素都可以被換回自身。
於是題目所求變成:將 1~n 拆成許多獨立的集合,使集合大小的最小公倍數恰為 m
轉化到這地步時,由於牽扯到最小公倍數,就很難用數學求解了
但是要算個數,本身又有排列組合的味道,於是可以嘗試用 DP 解解看
可是最難掌握的部份,也就是最小公倍數,勢必要當成狀態之一
m 的範圍是 < 2147483647 太大了,陣列存不下,也一定會跑太慢
所幸我們可以證明對於一個數字 k, 若 k 不為 m 的因數,
則不存在任一整數 p 使得 lcm(p, k) = m. 證明如下:
設 lcm(p, k) = m 且 m%k != 0,已知 lcm(p, k) 為 p*k/gcd(p, k),
而 gcd(p, k) 必整除 p 與 k, 故 lcm(p, k) 可寫作 k*(p/gcd(p, k))
p/gcd(p, k) 必整除,故為正整數,所以 m 為 k 的倍數,但 k 不是 m 的因數,矛盾
而 m 的因數個數在 2000 個以內 (不過有可能超過 1000 個)
我們只關心最小公倍數為 m 的倍數的狀態,所以將狀態壓成 m 的第 k 大因數
這樣空間和時間就都不致於太誇張。
狀態的部份,我們關心最小公倍數,所以狀態一定有它
我們也關心還有多少元素尚未被劃分到集合中,所以也一定要有
這類題目我們通常關心重覆計算的問題,也關心會不會遺漏解的問題
每次我們考慮在某一狀態中,加入一個新的集合
假設我們現在有個 1~n 依序排好的序列
現在從中挑出 q 個數作為一個新集合,然後我們將這新集合打亂至需要 q 次代換
才換得回來原本的數字。這總共有 (q-1)! 種方式,推導如下:
從任意數字 r 開始,由於它不能在自己原本的位置上,否則不能達到 q 次代換
能 q 次代換的條件是能夠一圈繞完所有元素,所以它不能繞回自己
任選一個非原本位置共有 q-1 種選擇,這時目的地的數就被趕了出來
它不能選擇一開始那數的位置,也不能選擇原先的位置,這都會導致繞不了一圈
故它只剩 q-2 種選擇,依此類推,直到最後一個數只剩一種選擇,就是到一開始那數
的位置上,故總共有 (q-1) * (q-2) * .. * 1 種,也就是 (q-1)! 種選擇
在已被劃分至剩下 p 個元素的狀態中,雖然這些情形是相異的
剩下 p 個元素的特性也是共同的。之後仍然是繼續加入新集合、劃分剩下的元素。
雖然對於剩下的 p 個元素看似可以隨意去處理、劃分,也不用怕重覆
但如果盲目地劃分,還是會重覆。因為這些情形的差異並不足以讓
接下來的 p 個元素無論怎麼劃分,都不致於出現相同的情形。
舉個例,若新集合大小為 q 則我們有 c(p, q) 種方式可以決定新的集合,可是呢
先取 q=2 再取 q=3 等同於先取 q=3 再 q=2
先取 2 取到 #2##2,先取 3 可能取 3#33# 那麼這兩者就會重覆了。
為了避免這種情形,有以下兩種思路
第一種思路是,想辦法讓每次取集合時,順序先後不造成重覆的結果
每次盲取的話可能先取和後取的結果出現重疊,比如說 5 個分成 3 和 2 時
我先取 3 的情形會取到 #33#3,先取 2 的情形會取到 2##2#
這時先取 3 和先取 2 會取到相同結果導致重覆,為了避免這種情形
我們可以規定每次取的時候一定要取走可取元素中的第一個
這樣先取 3 的話,第一個一定被 3 取走;先取 2 時第一個一定是被 2 取走
所以第一個一定不同,重覆就不會發生。這使得我們剩下 c(p-1, q-1) 種選擇。
但在每種狀態中,符合該狀態的每個情形都已被確保後續的元素無論如何劃分
都一定不會出現相同的情形。於是枚舉所有狀態 dp[i][j]
也就是已劃分 i 最小公倍數為 m 的第 j 大因數時的情形數
枚舉所有可劃分集合大小 q,便知所有狀態 dp[i+q][hash[lcm(j, q)]]
均可由 dp[i][j] 劃分集合 q 來達成,且方法數是 dp[i][j]*c(n-i-1, q-1)*(q-1)!
其中 c 和階乘均可預處理,故為 O(1), 狀態數 n*m 且轉移為 n
最差情形 100*100*2000 算是合理的複雜度,實際運行時間為 0.848 排名 17
第二種思路是在劃分集合的過程中,規定一個順序,使得劃分不會重覆。
例如上述的先劃分 q=2 再 q=3 等同於先 q=3 再 q=2,那麼我們規定:
劃分過程中 q 必須嚴格遞增,便成功地解決了這個問題
但同時它也帶來了兩個問題,第一個問題是狀態可能需要增維來記錄最大集合大小
第二個問題是如何處理相同大小的集合,我們先來探討第一個問題
如果增維的話,狀態將有 n*n*m 個,每個要枚舉 n 種集合大小,理論上太慢
因此我們想辦法降維,改以枚舉劃分集合大小 q 為主,再枚舉每個狀態
不難發現每次劃分,對於狀態 dp[i][j] 已劃分元素數量 i 只增不減,
對於最小公倍數 j 則維持不遞減狀態,故對於 i 和 j 均從大枚舉到小的話
那麼在枚舉到時,保證仍未劃分過目前枚舉到的集合大小 q
這時可以放心把 q 劃分下去,就能保證劃分過程中集合大小呈嚴格遞增了
狀態一樣只有 n*m 個,枚舉 n 種集合大小,複雜度尚在合理範圍內
接下來討論第二個問題,有個最常見的解決方式,就是一次放足
這類問題主要起因於當已劃分集合中也有大小 q 的集合時會導致重覆計算
但卻又混雜在一起,無法或不想增維來分離它們
這時不如將這些放在一起考慮,枚舉大小 q 的集合擺放個數 p
然後將這 p 個集合一次放進去,大部份情形均可以此解決
但這 p 個集合可任意互調順序,要除個 p!,可是在取餘中不能使用除法
也無法做因式分解之類的事,因此仍要借助第一種思路,
每放一個集合就一定把可取的第一個元素取走,後放的集合和先放的集合
就不可能出現位置對調的情形,便沒有重覆的問題
因此放置這 p 個集合的方法數為 c(pq-1, q-1)*c((p-1)q-1, q-1)*...*c(q-1, q-1)*
(f(q-1)^p)*dp[i][j]*c(n-i, pq),轉移目的地一樣是 dp[i+q][hash[lcm(j, q)]]
前面的連乘是針對這 pq 個元素,分配給這 p 個大小 q 的集合
之後每個集合要打散可以有 f(q-1) 種方式,p 個集合就有 f(q-1)^p 種
接下來是對於所有這樣的狀態,切出一塊大小 pq 去劃分給這 p 個集合的方法數
這樣的方法由於還要枚舉 p 因此比較慢
但由於枚舉集合大小 q 在最外頭,因此可以考慮先枚舉最小公倍數 j
一旦 lcm(j, q) 不是 m 的因數即捨去,可以加快不少
到這裡實際耗時 1.152 排名 21 估計不加這一點可能會導致 TLE
之後枚舉已劃分長度 i 時若是 dp[i][j] 為 0 則不考慮枚舉集合 q 的個數 p
可以快個十倍左右,耗時 0.124 排名 7,把查詢某數為 m 第幾大因數的部份
改用二分搜尋法,則耗時剩下 0.84 排名 5,若用 hash table 等資結也許可以更快
算是很難想,需要一些經驗轉化題目、運用 DP,並且需要技巧壓狀態、
處理重覆與計算個數等等,是混合了許多技巧應用的一題
相當不錯的題目
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ sa072686 轉:從 [sa072686] 信箱,于 2009/12/16 Wed 06:20:06
作者: dreamoon at 09/12/20
Gerg 辦了一個party,已經來了p個人,而有a個人還沒來
Gerg想讓這p個人完場團隊遊戲,可是這p個人沒辦法分成兩組以上每組超過1個人
(並不是有人不合容易吵架的關係,純粹是人數上的問題)
現在Gerg要把一個正方形的蛋糕分給所有人,Gerg喜歡把蛋糕切分成許多相同大小的正方形
,現在他想要切完蛋糕後,要為所有還沒來的a個人各留一份,而把剩下的平分給p個人,請問
他有沒有辦法辦到呢?
Input
每行兩個數a和p如同題目所述,以兩個-1作為結束
Output
若Gerg有辦法分好蛋糕輸出Yes,否則輸出No
參考答案請案大寫E
題目意即x^2≡a(mod p)中x有沒有正整數解
請自行去google Quadratic residue(這樣有沒有很不負責任呀?)
簡單來說是費馬小定理的應用
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dreamoon from 140.112.214.65 (台北帝國大學)
作者: andyisman at 09/12/22
有中譯XDD
--------我是防雷線踩不到我XD--------
就是簡單的 Flood Fill 找出區塊數
但是要注意 這邊的 Flood 要往八個方向 Flood
↖↑↗
圖: ← →
↙↓↘
------在防一次-------
--
★zeta 學弟就一副正直樣
☆zeta 中肯XD
☆zeta 我要拿來當簽名檔XDDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by andyisman from 192.168.4.15 (台狼一中桑靈餓)
▲ andyisman 改@2009/12/22 Tue 13:04:09
▲ andyisman 改@2009/12/22 Tue 13:13:12
作者: yuscvscv at 10/01/08
補充一下
※ 引述《seanwu (2,2-二甲基丙烷)》之銘言:
> 給幾個(<=20)國家的領土範圍和飛彈攻擊的座標,求「未被攻擊」的國家總面積
應該是求被攻擊的
> 飛彈落在國家的邊上「似乎」算落在內。
應該是不算在內或是不會有落在邊上的點
//因為我的算法不會計算落在邊上的點
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 114.33.135.85 (中滑一番)
作者: yuscvscv at 10/01/08
補上解法
防雷
-------------------------------------
題目給 a 和 b,你要塞很多個圓形物在 a * b 的平面上。
a 和 b 的單位,以圓形物之直徑為單位。
因此假設直徑為1。
有兩種塞法:grid 和 skew
grid: skew:
- ○○○○ ○○○○ ○○○○
| ○○○○ ○○○ ○○○○
b ○○○○ ○○○○ or ○○○○
| ○○○○ ○○○ ○○○○
- |--a---| ○○○○
首先grid的情況,最大就是規規矩矩的塞滿。
底下定義an為a方向的最大放置長度,bn亦同。
這邊的an = [a], bn = [b]
那麼最大個數就是 an * bn
([]為高斯符號,這裡是定義找到小於該數的最大整數,即floor)
接著來比較grid和skew的情況,
圖A 圖B 圖C
|---a---| |---a---| |---a'---|
○○○○ ○○○○ ○○○○ |
b ○○○○ b' ○○○ ○○○○|
可知如果像skew這樣壓縮,那麼就是其中一邊變短(b'),另一邊變長(a')
變長的那端會跟圖C一樣,但有可能會因為原先的a太短,像圖C那樣擠不下。
而稍為計算可知 a' = an + 1/2。故可以用if判斷是B狀態還是C狀態。
接著計算b'的長度。
可知是 1 + (bn - 1) * sqrt(3) / 2 <= b
移項可得 bn <= ( 2*(b - 1) / sqrt(3) ) + 1,由於bn必為整數故取高斯。
整理一下
an = [a], bn = [ ( 2*(b - 1) / sqrt(3) ) + 1 ]
這時如果是C狀態那麼最大的放置數是 an * bn。
如果是B狀態的話,那麼就得an, an-1交叉擺。
//以下的除以2是以int的運算為主
如果bn是偶數的話最大放置數 (bn / 2) * an + (bn / 2) * (an - 1)
但是如果bn是奇數的話,奇數邊會比偶數邊多1行,可知擺長的會比較佳。
最大放置數 (bn / 2 + 1) * an + (bn / 2) * (an - 1)
以上是壓縮b方向的情況。
反之亦然,如果是壓縮a方向的,那麼b方向亦會成長。
因此這題的a b是可互換的。
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 114.33.135.85 (中滑一番)
▲ yuscvscv 改@2010/01/08 Fri 20:12:03
作者: yuscvscv at 10/01/08
※ 引述《sa072686 (南一中97級小教學~*)》之銘言:
另解
防雷線
這題雖然是苦工字串題,
但是因為記憶體不用錢所以可以用很花記憶體但是比較好寫的方式。
開個結構,裡面擺兩個字串str1, str2, 再補一個n紀錄出現順序。
首先先gets慢慢讀入,讀入後全部轉成小寫。(字典檔也是小寫,判斷會比較方便)
之後先copy一份來用strtok切割,配合sscanf,讀入字串是很輕鬆的。
對於每個找到的非字典單字,
扔入結構裡,str1丟這個單字,str2丟句子,
由於目前用strtok切割,因此從位址相減可以算出目前這個單字在原字串的索引。
可以順便把str2的這個單字轉成大寫。
最後n記錄目前是第幾個非字典單字。
之後只要把str1依字典序sort,要是字典序相同就以n從小到大sort。
最後依序輸出即可。
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 114.33.135.85 (中滑一番)
▲ yuscvscv 改@2010/01/08 Fri 20:24:46
作者: yuscvscv at 10/01/08
※ 引述《sa072686 (無)》之銘言:
補上一些模組化技巧
防雷線
首先這題很明顯的是枚舉,故寫1個可以限制深度的DFS來取牌。
(深度的limit就是取的數量)
最後判斷前再補牌就好。
為了更好判斷牌型,最好把判斷時的牌型複製一份出來依數字sort
然後就針對這份sort來判斷。
之後把各種判斷都模組化。
1對的判斷就相鄰兩個判斷就可以了,不過建議寫成可以扔入引數,
這個引數就是要讓判斷的index起點,這樣後面就可以重複利用這個function。
既然寫成可以扔引數的,那麼配合扔1~4的引數,只要比對以下4組,任一成立即可。
(1, 2)
(2, 3)
(3, 4)
(4, 5)
2對的判斷可以利用1對。由於sort過了,所以2對有以下3種2對的配法。
由於才3組 配合 && ||,短短的。
(1, 2) + (3, 4)
(1, 2) + (4, 5)
(2, 3) + (4, 5)
3條建議跟1對一樣用引數模組化。
(1, 2, 3)
(2, 3 ,4)
(3, 4, 5)
葫蘆的話,利用3條+1對的判斷
(1, 2, 3) + (4, 5)
(1, 2) + (3, 4 ,5)
//由於有sort故index必連續
同花一樣模組化出來,
就用for掃過去看花色即可。
順子
那組特例sort出來會變這樣A T J Q K,
所以可以用for先判(2, 3, 4, 5)
之後用再判特例即可。
同花順可用 同花 + 順子 判斷
最後記得要取最佳的,所以要從最大的開始判。
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 114.33.135.85 (中滑一番)
▲ yuscvscv 改@2010/01/08 Fri 23:58:54
作者: yuscvscv at 10/01/11
※ 引述《seanwu (海恩吳)》之銘言:
137 - Polygons
I/O補充
Output全都在同1行,且必須在最後換一次行。
//我因為這個WA了20次,我一直沒換行......他的Sample看不出來啦....
下面用範例測資說明
Sample Input
3 5 5 8 1 2 3
3 5 5 8 1 2 3
4 1 2 1 4 5 4 5 2
6 6 3 8 2 8 1 4 1 4 2 5 3
0
Sample Output
0.00 13.50\n
^^^^^ ^^
5 2
printf("%8.2lf");
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 114.33.135.85 (中滑一番)
▲ yuscvscv 改@2010/01/11 Mon 21:30:01
作者: yuscvscv at 10/01/13
140 Bandwidth
給一個圖G(V,E),V集合是點,E集合是邊(E ≦ V * V),
給個V集合的序列,
那個對於某個點v的bandwidth被定義為,與v相連的點在序列中與v的距離,
對於這個序列的bandwidth則被定義為 各個點的bandwidth的最大值。
舉個例子,來看底下這個圖。
(參考圖一)
它有好幾種牌程序列的方法,其中兩個可行的方法,在下面用圖表示:
(參考圖二 圖三)
第一個序列,點的bandwidths是6, 6, 1, 4, 1, 1, 6, 6,這個序列的bandwidth是6。
第一個序列,點的bandwidths是5, 3, 1, 4, 3, 5, 1, 4,這個序列的bandwidth是5。
寫個程式可以對於每個圖找到一組的序列使的該序列的bandwidth最小。
Input
輸入會包含多個圖。
每個圖將出現在單獨一行內,整個測資檔在最後一行有個'#',表示這個測試檔的結束。
對於每個圖,輸入將有多個點的紀錄,且用';'來分隔,
每個紀錄會包含此點的名稱V(一個單獨的大寫字元且範圍在'A'~'Z'之間),
之後會有分號':',後面會接著多個點的名稱,這些點與點V都相接。
每個圖的點將不會多於8個。
Output
對於每個圖,每行輸出一個結果。
這個結果列出了找到的序列,並接了一個箭頭(->),最後是這個序列的bandwidth。
序列的兩個點間需要用1個空格隔開。
如果有多個可行的序列,那麼就找出字典序最小的的那個序列。
防雷線
----------------
這個問題是經典的NP-Complete問題,因此只能用DFS爆搜出所有序列,
並找出bandwidth最小且字典序最小的那個。
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc03.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2010/01/13 Wed 13:21:24
作者: aytawgf at 10/02/17
翻譯:
第一行輸入測資數量 r
接下來r行 每行一個測資 n
0 < n < 9000
輸出用科學記號表示的 2^-n
輸出格式
2^-n = x.xxxE-y
x.xxx和y是變數 //不會說明 囧
--------------------------------------
解法:
2^-n = 5^n / 10^n
可以把y預設為 n //10^-n
設迴圈 i = 1 to n
用一個變數 w 記錄 5^i
每次於迴圈內 若 w 有進位 則 y--
最後取w的前4位即可 (要四捨五入)
/* w 要開 int64 不然精確度不足 */
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by aytawgf from 203.70.74.225 (種子電信)
▲ aytawgf 改@2010/02/17 Wed 05:47:27
作者: dreamoon at 10/02/17
※ 引述《sa072686 (徵求有意合作的人∼)》之銘言:
> 噢這兩題好難解耶,有沒有人要幫幫忙解解它們?
> 目前我可以就我理解的來翻譯,解法也差不多都有想出來,
> 不過實在是繁瑣而且有些知道公式但是不會寫,也不確定對…嗯,就列在底下吧。
> 徵求勇士把它們 AC 掉 XD
> ----
> 10136
> 給至多 200 個點的座標,問以直徑為 5 公分的圓去圈,至多可以圈到幾個點?
> 座標範圍在 0.0 到 50.0 之間。
> 想到的方法(不負責任發言XD)
> 枚舉任三點求圓之後,計算該圓能圈幾個點,然後記錄最大者。
> 不過任三點要 O(n^3),每個圓看能圈幾個點,所以共 O(n^4),
> 以 n = 200 來說好像不會過…至多加個判斷,在任兩點時如果距離 > 5 則不枚舉第三點
> 不知道有沒有更好的方法?XD,而且我好像不會三點求圓…
防捏?
枚舉三點太浪費時間了(不過我猜也會AC?)
可以枚舉兩點就好
假設有一個圓是最佳解
把這個圓一直往右移直到碰到至少一個點為止
然後若現在只碰到一個點
那麼就把這個圓一直順時針旋轉直到碰到至少再一個點
此時的圓也會是最佳解
所以一定有一個最佳解是恰以其中兩點為弦的直徑五公分的圓
所以做法就是枚舉任兩點為弦的圓,求能包住的最多點數
O(n^3)
依我平常的寫法code52行
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dreamoon from 218.165.0.68 (中滑一番)
▲ dreamoon 改@2010/02/17 Wed 18:07:26
→ dreamoon 推:突然發現,另外一題我也寫過了,差不多就你說的那樣唄 0221 08:22
→ dreamoon 推:40行內 0221 08:22
→ tmt514 說:枚舉所有點,把圓周靠在上面掃一圈O(n^2lgn)不過比較難寫.. 0222 20:56
→ dreamoon 推:樓上方法不錯耶,也不會難寫多少呀 0222 22:09
→ dreamoon 推:需要的數學公式我的作法也都會用到 0222 22:10
→ dreamoon 推:應該不會多超過二十行 0222 22:10
作者: yuscvscv at 10/02/20
Unix ls
在你工作的那間電腦公司將要推出全新的電腦系列,
且公司正在開發一款可以和這系列電腦一起推出的類Unix的作業系統,
你的任務是編寫格式化的ls指令。
你的程式最後將從Pipe讀取(雖然現在是從檔案讀入),
讀入將包含一連串的檔名,
你必須將這些檔名排序(依照 字母的ASCII值 遞增),
每列的格式是依照所有的檔案中最長的檔名來決定的。
檔名長度在1~60(含)字元之間。且靠左對齊。
最右邊那行的的寬度將是最長的檔名長,
其他行的寬度會是最長的檔名長加2。
//+1也會AC = =
在每列60字當中儘可能的塞入最多行,
你的程式也需儘可能的使用最少的列數,並從左到右填入。
Input
輸入檔將含有多組測試資料,
每組測試資料的首行有個整數N (1 <= N <= 100 ),
接下來會有N行,每行是一個靠左對齊的檔名。 (長度為1~60)
合法字元是字母和數字(a~z, A~Z, 0~9),以及這3個字元{._-}(不含大括號)
輸入檔將不會有任何不合法的字元,也不會有任何的空白行。
在最後一組檔名的下一行將會是下筆測資的N或是檔尾EOF,
你必須讀入所有的測資,並分別對每組測資去編排格式。
Output
每筆測資的開頭你必須輸出含有60個負號(-)的一行。
之後輸出格式經過編排後的檔名。
被排序過的檔名 1 ~ R,將被放在第1行,
R+1 ~ 2R 將被放在第2行,以此類推。
//是行不是列
防雷線
--------------------
純照題意模擬,這題要把題目讀懂比較困難。
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 111.255.17.132 (中滑一番)
▲ yuscvscv 改@2010/02/20 Sat 16:53:44
作者: yuscvscv at 10/02/20
487-3279
企業想要一個比較好記的電話號碼。
要讓電話號碼好記的一個方法是讓它有一個好記的單字或是片語。
舉個例子,你可以用TUT-GLOP去撥給Waterloo大學。
有時候它只有一部份的數字用字母表示,
例如當你今晚回到你的旅館,你可以用310-GINO打給Gino's Pizza(披薩店)訂披薩。
另一個方法是重新將數字分段,讓它更好記。
例如你可以用"3個10" 3-10-10-10,打給Pizza Hut訂披薩。
標準的電話號碼是7位數,且在3~4位數之間有個減號連接(-) (e.g. 888-1200)。
手機鍵盤的英文和數字對照表如下:
A, B, C 對照 2
D, E, F 對照 3
G, H, I 對照 4
J, K, L 對照 5
M, N, O 對照 6
P, R, S 對照 7
T, U, V 對照 8
W, X, Y 對照 9
這邊Q和Z並沒有對應到任何數字,
連接用的減號(-)不會被撥出去,所以如果有必要的話可以隨意增減。
號碼TUT-GLOP的標準格式是888-4567,310-GINO 是 310-4466,
3-10-10-10 則是 310-1010。
如果兩個電話號碼在標準格式下是一樣的,那麼他們是相同的(撥一樣的號碼)。
你的公司正在編寫當地企業的電話簿,
為了維持電話簿的品質及減輕重量,你必須確認沒有任何企業的有相同的號碼。
//As part of the quality control process
//前半段原文,不過我不會翻,上面這樣貌似比較貼切XD
Input
輸入的第1行有1個數,表示測資數。
接著會有1個空白行。
每筆測資的第1行會有1個正整數(最大到100,000),
表示這本電話簿的所記錄的電話數量。
剩下的每行分別紀錄1組電話。
每組電話號碼由 10進位數字,大寫字母(不含Q和Z),以及連結用的減號(-) 組成。
這些電話號碼中的7個數字將會用字母和數字表示。
每組測資邊會用一個空白行分隔。
Output
找出以任何形式出現超過1次的電話號碼和出現次數,
這邊的電話號碼必須用標準形式輸出,後面接一個空白,之後再接出現次數。
輸出的電話號碼照字典順序升序排列。
如果沒有任何電話號碼有重複,輸出"No duplicates." (不含引號)
測資間空一行。
防雷線
題目的Output敘述怪怪的雖然還是可以理解,
他所謂的重複就是和敘述那邊定義的相同是一樣的東西,
總之就是轉換成標準形式如果相同就是重複,參考sample應該很好理解。
進入正題,
這題的測資規模有點大,
在查詢方面可以將電話號碼都轉成7位整數,
之後用binary search tree,或是用hash,
也可以用比較離線的方式,讀入測資後sort+binary search,
如果用hash可以在枚舉輸出的時候順便清空,這樣就不用在清空整條陣列上花太多時間。
只是這個方法的記憶體使用量頗大就是....
另外,如果轉成數字儲存,請注意號碼為0開頭時記得補0。
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 111.255.17.132 (中滑一番)
▲ yuscvscv 改@2010/02/21 Sun 00:01:25
→ yuscvscv 推:突然發現luckycat有......話說他的翻譯還加了不少東西XD 0221 00:15
→ yuscvscv 推:加了一些口語化的或是有點搞笑的用詞 0221 00:16
作者: yuscvscv at 10/02/26
Football (aka Soccer)
The Problem
足球是目前世界上最受歡迎的運動。
就如大家所知道的一樣,巴西是拿最多次世界冠軍的國家,
(共4次:分別在1958、1962、1970和1994)
世界賽以及區域賽都有很多隊伍,
因此,要追蹤各個比賽結果,並對這麼多球隊做排名是相當困難的。
所以,你的任務相當簡單:
寫一個程式讀入競賽名、隊伍名、以及各隊伍的對戰之後的結果,
並輸出這整個競賽之中,所有隊伍的排名。
一個隊伍的進球數如果高於它的對手,我們就稱這個隊伍贏了,反之亦然。
如果比數都相同的話則平手。
一個隊伍在他獲勝時將得到總積分3點,平手的話則是得到1點,如果是輸球則是0點。
隊伍排名的規則將依照下表(適用的優先度依先後順序):
1.總積分較多
2.勝場數較多
3.淨勝球數較多( 總進球數 - 總被進球數 )
4.總進球數較多
5.經過較少場比賽
6.依造不分大小寫的字典順序(A = a > B = b)
// A a的先後順序沒差,貌似spcial judge
The Input
輸入的第一行將有個整數代表總競賽數(0 < N < 1000)
然後,後面將有N個競賽要你排名。
每個競賽的輸入的首行是競賽名。
競賽名可以有任何字母、數字、空白......等,且長度最多100。
下一行將有1個整數T( 1 < T <= 30 ),代表這個競賽有幾個隊伍參加。
後面將有T行,分別代表這些隊伍的名子。
隊伍名將含有ASCII碼 >= 32的所有字元,除了'#'和'@'之外。長度不超過30。
接下來會有個非負整數G,表示這整競賽已經比了幾場比賽。
然後會有G行,分別表示各比賽的狀況,將以下面的格式表示:
隊伍_1#進球數1@進球數2#隊伍_2
用下面這行舉個例子
Team A#3@1#Team B
表示,隊伍Team A和隊伍Team B比了場賽,然後Team A進了3球,Team B則進1球。
所有的進球數將是非負整數並小於20。
你可以假設讀入將不會有沒出現過的隊名,也不會自己和自己比賽。
(所有的比賽出現的隊名都在先前的競賽隊伍列表出現過)
The Output
對於每個競賽,你必須先單獨在第1行輸出競賽名,
並在接下來的T行輸出隊伍的排名(排名方式依照題目敘述所述)。
注意如果排名是用字典序排名,得用不區分大小寫的方式排名。
輸出格式如下:
[a]) Team_name [b]p, [c]g ([d]-[e]-[f]), [g]gd ([h]-[i])
* [a] = 名次
* [b] = 總積分
* [c] = 共比了幾場賽
* [d] = 勝場數
* [e] = 平手數
* [f] = 輸場數
* [g] = 淨勝球數
* [h] = 總進球數
* [i] = 總被進球數
每個片段之間有個空白,每個競賽間都要用1個空白行分隔。
細節參考Sample Output。
防雷線
------------------------------------------------
模擬 + 排序,
討論版上說比賽給的隊伍名可能大小寫不一樣,經過實測並沒有這種測資。
基本上只要注意排序的優先度和不分大小寫的字典序排列即可。
補充,依ASCII碼的字串比對可用strcmp()。
依不分大小寫的字典序比對可用strcasecmp(),用法同上。
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 192.168.4.13 (台狼一中桑靈餓)
▲ yuscvscv 改@2010/02/26 Fri 11:30:50
作者: suhorng at 10/03/06
※ 引述《sa072686 (天翔龍閃!!)》之銘言:
> 不難的一題。雖然是四星的,可是讓人沒像四星題的感覺
> 很白痴地亂做就會過了。
> 嗯,話是這麼說啦…大小於打反讓我吃了很多WA 囧rz
補充一下題意ˊˇˋ
----------------- 其實沒有雷啦 ----------------
"He considers taking a path from A to B to be progress
if there exists a route from B to his home
that is shorter than any possible route from A "
意味著如果 B->destination 的最短距離
比 A->destination 的最短距離還短的話
那 A->B 就可以走
--
→ butterfly21 推:福洛衣得-哇咻演算法 0709 22:22
→ shik 說:媽抵φ的-福洛衣得-哇咻 XD 0709 22:41
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 210.71.78.242 (台北一中)
作者: yuscvscv at 10/03/06
11044 Searching for Nessy
BackGround
尼斯湖水怪是一隻住在尼斯湖中,神秘且未知的動物。它通常被視為一種湖怪。
尼斯湖則是北蘇格蘭的印芬尼斯市附近的一個大且深的淡水湖。
http://en.wikipedia.org/wiki/Loch_Ness_Monster
2003 年 7 月,
BBC (英國國家廣播電視公司) 曾報導了一項他們對尼斯湖所作的大規模研究,
他們用 600 支聲納也沒有辦法在湖中找到任何「水怪」(任何大型動物) 的蹤跡。
他們推論尼斯怪並不存在。現在我們要重覆這項實驗。
Problem
給你一個 n 列 m 行的格子代表尼斯湖,
6 ≦ n, m ≦ 10000,找出最少要放幾個聲納才能控制所有的方格,
條件如下:
* 一個聲納佔一格;它的監控範圍為所在的那一格及緊鄰的格子。
* 邊緣的格子不需要監控,因為尼斯怪太大了,無法𨦨在那兒。
例如,
http://uva.onlinejudge.org/external/110/p11044a.gif
其中 X 代表聲納,灰色區域則是它所監控的範圍。
底下這個圖是一組解。
http://uva.onlinejudge.org/external/110/p11044b.gif
Input
輸入的第一行有一個整數,t,代表測試筆數。
每筆測資一行,含有兩個由空白分開的數字, ( 6 ≦ n, m ≦ 10000 ),
也就是格子的大小 (n 列 m 行)。
Output
對於每筆測資輸出一行,顯示符合上述條件的最小數字。
防雷線
題目要求覆蓋除了邊界的所有方格,
假設水平方向長為x
那麼我們要完全覆蓋x-2的片段。
由於1個聲納的長寬是3,所以水平方向的聲納數為 ceil( (x-2)/3 )
// 其實歸納後可以發現 ceil( (x-2)/3 ) == x/3 (整數除法)
水平方向的聲納數 * 垂直方向的聲納數即為所求。
文末防雷
--
試途紛擾千年愁,何紛?何擾?更為何愁?
人生苦短萬古冬,何歡?何笑?含恨而終?
幕天席地風滿花,遠山近河歌繞谷。
蝶美花盛景難求,莫叫三月春虛過。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 111.255.11.222 (中滑一番)
▲ yuscvscv 改@2010/03/06 Sat 15:59:38
▲ yuscvscv 改@2010/03/06 Sat 15:59:57
作者: suhorng at 10/03/07
----------------------------------------
我的狀態是 min_cost[第幾個字][這個字的起始位置]
而這個狀態是不關心行數的
對於每個狀態枚舉下一個字的起始位置 (同時處理 "是否換行")
之所以是下一個字因為要求第一個空格最小 所以從後面往前做
-------------------------------------------
--
→ butterfly21 推:福洛衣得-哇咻演算法 0709 22:22
→ shik 說:媽抵φ的-福洛衣得-哇咻 XD 0709 22:41
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 218.167.101.131 (中滑一番)
▲ suhorng 改@2010/03/07 Sun 00:57:59
作者: suhorng at 10/03/07
5 5
1 1 2 2 3
1 2 3 4 5
記得要用 unsigned long long (%llu)
取1 1 2 3
取2 11 12 13 22 23
取3 112 113 122 123 223
取4 1122 1123 1223
取5 11223
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 218.167.100.162 (中滑一番)
作者: suhorng at 10/03/12
有一筆有後效性會 WA 的側資
1
10
1
2
3
8
10
12
12
15
22
46
答案是 64 67
-------
我是覺得說 這種作法不太算降維, 只是常數優化 (x8 speed!!) 而已
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 210.71.78.242 (台北一中)
→ Tommy 推:什麼是後效性阿? 囧 0312 17:10
→ suhorng 推:呃 狀態設計不當 是這樣說嗎 ? 0312 23:16
▲ suhorng 改@2010/03/13 Sat 10:12:20
作者: yuscvscv at 10/03/17
Lucky Cat有翻譯,
注意是測資後空一行......
Lucky Cat又翻錯了。
------------------防雷線-------------------
建一個32-bit int 範圍的質數表是不可能,
那麼因式分解就只能sqrt(n),既然如此就暴力做吧~
如果在每次讓n去除以質因數p,那麼n會逐漸縮減,
建議最後可以重新求一次sqrt(n),有助於縮邊界。
//縮減前 0.948 縮減後 0.048
另外質因數除了2以外只有奇數,這邊也可以優化。
//逐一枚舉 0.084 只枚舉奇數 0.048
文末防雷
--
試途紛擾千年愁,何紛?何擾?更為何愁?
人生苦短萬古冬,何歡?何笑?含恨而終?
幕天席地風滿花,遠山近河歌繞谷。
蝶美花盛景難求,莫叫三月春虛過。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 192.168.4.13 (台狼一中桑靈餓)
▲ yuscvscv 改@2010/03/17 Wed 09:45:26
作者: chernglin at 10/04/14
職棒打假球事件重創了我國的職業棒球運動,有許多球星因為涉案而遭球團開除退出職棒
,這也使許多球隊面臨了球員不足的窘境。因此在這段時間各球團都很積極地在自由球員
市場物色適當的球員來補足戰力的缺口,而且各球團的總經理都正為同一個問題煩惱,即
如何在有限的經費下與適合的球員簽約,使球隊的戰力獲得最大的提昇。更具體的來說,
假設標哥是某職棒球隊的總經理,他有M(<= 10000)單位的預算可以用來與球員簽約,且
他的球隊有N個位置需要引進球員補強,為了簡化問題假設每個位置都有P位自由球員可供
選擇,這N個位置可以是有關打擊、手備或投手等位置的補強,每位自由球員只專注於一
個位置,故總共會有NP位自由球員可供考慮,每個位置最多只補一位自由球員,因為該位
置可能已有球員負責。此外每位球員有三項資訊可供標哥參考並決定是否與該球員簽約,
即該球員
(1)負責的位置、
(2)簽約金額(<=10000)、
(3)戰力指數(<=100)。
戰力指數是一非負整數用來衡量一球員的能力,戰力指數愈大表示能力愈強。給定球隊的預算及須要補
強的位置數以及所有相關球員的資訊,你的任務是寫一個程式幫標哥計算如何在預算內簽
下自由球員以補充戰力並且使所簽下的球員戰力指數總和最大。
輸入:
第一行輸入一個正整數代表測試資料的組數,不同組的測資以'0'分隔開, 每一組測資的第
一行有三個正整數M(<= 10000)、N(<= 50)及P(<=50)分別代表標哥的預算、所須補強的位
置數以及每個位置的人選個數。接下來的N行中,每一行則輸入2P個正整數,其中第I行用
來代表可以勝任第I個位置的球員資訊,兩個數字一組分別用來描述一位球員的簽約金及
戰力指數,數字間以一或多個空白區隔。
輸出:
對每一組測資, 輸出一數字顯示標哥所能簽到的最大戰力指數總和。
Sample Input
2
10000 2 3
5000 2 10000 5 5000 1
5000 6 10000 5 5000 5
0
10000 3 3
1000 2 1000 3 10000 5
10000 3 5000 6 3000 5
1000 7 2000 5 2000 6
Sample Output for the Sample Input
8
16
--
最近老師在上DP和GreedyAlgorithm的時候說到這一題
想問一下有沒有人有IDEA~~
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chernglin from not-a-legal-address (沒有故鄉)
→ yuscvscv 推:TOI2010入營考 problem 3 = = 0414 08:18
→ yuscvscv 推:另外這是ZJ的題目吧....為什麼用TIOJ當標題... 0414 08:20
→ yuscvscv 推:你google一下 "分組背包"問題 如果還想不到要怎做再問吧 0414 08:21
→ sa072686 推:沒辦法ZJ要自己打..我不打算放ZJ這個類別 0414 11:58
→ sa072686 推:而且原PO並不是像我們玩OJ長大的XD 0414 11:59
→ yuscvscv 推:噢....那你跟他解釋什麼是分組背包好了.... 0414 13:16
→ cpu 推:這題是不是每個位置都一定要選到一名選手呢?? 0419 19:07
→ yuscvscv 推:貌似沒有 0420 23:21
→ cpu 推:謝謝 yu大,原來測資裡面還有 cost 為 0 的case,真陰險... 0421 13:51
作者: suhorng at 10/04/17
4
1 1 4 2 2 2 4 4
4 9 7 5 1 1 7 5
1 10 4 2 2 2 4 4
0 0 7 1 1 1 7 5
這幾筆測資在 toolkit 上的答案是 TFTT
但是我完全無法理解為什麼第二筆的答案是 F……
第二筆的答案在 luckycat 上面倒是 T Orz..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 61.217.33.136 (中滑一番)
▲ suhorng 改@2010/04/17 Sat 23:53:35
→ andyisman 推:神秘耶 我寫這題的時候耶這樣 Orz 0418 00:08
→ suhorng 推:我覺得可能 Toolkit 的答案有錯 0418 09:54
作者: suhorng at 10/04/18
後來測了UVa Board的測資 http://online-judge.uva.es/board/viewtopic.php?t=3730
跨立試驗記得要對線段平行的情況做特殊處理
兩線段平行的話,外積都會是 0
但是因為這題 "非規範相交" 也算相交 (比如只交於一點啦,重疊啦,etc...)
所以要特別小心……
像我之前是判斷在外積同號時才跳出
但是忽略了可能線段平行 但其實沒有重疊的情況 就WA了……
這裡存一份以免日後找不到……
裡面有涵蓋了大部分的情況!
(以下是Joseph Kurniawan給的測資)
input
68
4 9 11 2 1 1 7 5
11 2 4 9 1 1 7 5
12 12 24 24 19 5 25 17
4 6 15 9 1 1 11 11
19 5 25 17 12 12 24 24
0 18 8 12 1 1 11 11
2 4 4 2 1 1 11 11
-4 9 -11 2 -1 1 -7 5
-11 2 -4 9 -1 1 -7 5
-12 12 -24 24 -19 5 -25 17
-4 6 -15 9 -1 1 -11 11
-19 5 -25 17 -12 12 -24 24
0 18 -8 12 -1 1 -11 11
-2 4 -4 2 -1 1 -11 11
4 -9 11 -2 1 -1 7 -5
11 -2 4 -9 1 -1 7 -5
12 -12 24 -24 19 -5 25 -17
4 -6 15 -9 1 -1 11 -11
19 -5 25 -17 12 -12 24 -24
0 -18 8 -12 1 -1 11 -11
2 -4 4 -2 1 -1 11 -11
-4 -9 -11 -2 -1 -1 -7 -5
-11 -2 -4 -9 -1 -1 -7 -5
-12 -12 -24 -24 -19 -5 -25 -17
-4 -6 -15 -9 -1 -1 -11 -11
-19 -5 -25 -17 -12 -12 -24 -24
0 -18 -8 -12 -1 -1 -11 -11
-2 -4 -4 -2 -1 -1 -11 -11
9 1 9 2 4 3 9 6
9 2 9 1 4 3 9 6
10 3 13 3 4 3 9 6
13 3 10 3 4 3 9 6
10 6 14 6 4 3 9 6
14 6 10 6 4 3 9 6
9 7 9 10 4 3 9 6
9 10 9 7 4 3 9 6
4 7 4 10 4 3 9 6
4 10 4 7 4 3 9 6
0 6 3 6 4 3 9 6
3 6 0 6 4 3 9 6
1 3 3 3 4 3 9 6
3 3 1 3 4 3 9 6
4 0 4 2 4 3 9 6
4 2 4 0 4 3 9 6
5 3 8 5 4 3 9 6
8 5 5 3 4 3 9 6
5 3 8 3 4 3 9 6
8 3 5 3 4 3 9 6
6 4 6 5 4 3 9 6
6 5 6 4 4 3 9 6
4 3 9 6 4 3 9 6
9 6 4 3 4 3 9 6
4 3 5 4 4 3 9 6
5 4 4 3 4 3 9 6
5 3 8 3 4 3 9 6
8 3 5 3 4 3 9 6
5 3 9 3 4 3 9 6
9 3 5 3 4 3 9 6
4 4 4 5 4 3 9 6
4 5 4 4 4 3 9 6
4 3 4 5 4 3 9 6
4 5 4 3 4 3 9 6
4 3 4 6 4 3 9 6
4 6 4 3 4 3 9 6
9 2 9 5 4 3 9 6
9 5 9 2 4 3 9 6
9 2 9 7 4 3 9 6
9 7 9 2 4 3 9 6
output
F
F
F
T
T
F
T
F
F
F
T
T
F
T
F
F
F
T
T
F
T
F
F
F
T
T
F
T
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 61.217.33.136 (中滑一番)
作者: suhorng at 10/04/19
※ 引述《sa072686 (如果可以的話,我想…)》之銘言:
> 嗯。不難寫的 DP 題。
> 是 104 的加強版呢。一樣是匯率轉換。
> 翻譯一下
> 有 n(n<=30)種錢幣以及 m 種轉換,和轉換的比例是多少,轉換是單向
> 問有沒有可能有種錢幣可以轉到其它錢幣再轉回來,可以賺錢的(比例 > 1)
> ---- 分隔線 ----
我覺得不需要 O(n^4) DP,
因為題目沒有要求 "最少轉換次數",
只要用類似最短路的求法即可
我直接用 Floyd-Warshall O(n^3)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 61.217.33.136 (中滑一番)
作者: DJWS at 10/04/21
想請教一下各位0.000秒的解法是怎麼做的
輸入只有一組
該不會是直接印答案吧?
例如上傳log_2(5601)+1次?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.208 (中滑一番)
▲ DJWS 改@2010/04/21 Wed 15:07:20
▲ DJWS 改@2010/04/21 Wed 15:07:40
→ DJWS 說:已解決...不好意思打擾各位了 0421 23:40
→ suhorng 說:poao版有證明!! (吧) 0421 23:42
→ suhorng 說:該 O(NlgN) Greedy 法的證明 0421 23:42
作者: suhorng at 10/04/22
有 n 對夫婦(n <= 30,包含新郎新娘) 參加一場婚禮,
每對夫婦的夫妻都坐在長桌的不同邊(新郎新娘也是),
而新娘只看得見坐另外一邊的人。
此外,有對於給定的某些兩人組而言,
新娘不能同時看見任一組中的兩個人。
問誰應該跟新娘坐同一排(special judge)
---
2-SAT,亦即現在總共有 n 對物品
我們要從每對當中選出一個物品。
但是某些物品是互斥的,我們不能同時把兩個都選出來,
然後找出一種選法。
假設現在每對分別是 (A1, A1') (A2, A2') ...
那如果 Ai 跟 Aj 是互斥的,
選了 Ai 就代表 Aj 不能選,所以一定得選 Aj'
那我們就把 Ai -> Aj' 畫上一條有向邊
同樣的 Aj -> Ai' 也畫上一條有向邊
那假如我們選了某個點 u,那所有 u 能走到的點都要被選取。
顯然如果存在一對 (Ai, Ai') 而他們在同一個環中,就無解。
一種最簡單的方法是對於每一對尚未確定的 (Ai, Ai'),
先嘗試選 Ai,如果選失敗了換選 Ai',如果選失敗就無解,
另一種是先 SCC 縮點之後依照拓樸順序從出度 = 0的點開始選,
選了Ai之後把Ai'刪除,一直跑到結束為止。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 140.122.62.178 (台灣師範大學)
→ otis 推:我覺得SCC的方法感覺多做了很多沒必要的事~ 0422 21:18
→ otis 說:可是還沒想到簡單的改良方法 0422 21:18
作者: suhorng at 10/04/22
現在有 n 種材料, 有 m 位評審
對於每種材料, 有漢式料理及滿式料理兩種方式, 但是一種材料只能選擇其中一種烹調
每個評審會喜歡兩道菜(例如:材料x用z的烹調方式, 材料y用w的烹調方式)
而只要有任一道菜被做出來, 該評審就會被滿足
給每個評審喜歡哪兩道菜
問是否有一種做菜方式滿足所有評審的要求
---
假設評審 i 喜歡 m3 跟 h5
因為 m3 跟 h5 至少要有一個出現
亦即 h3 跟 m5 不可以同時出現
所以就變成 2-SAT 了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 140.122.62.178 (台灣師範大學)
作者: suhorng at 10/04/23
※ 引述《sa072686 (公假ing)》之銘言:
> 很難的一題,算是中國郵差問題(Chinese Postman Problem)
> 0.178sec AC,202/296
> 解法如下
> ---- 分隔線 ----
詳見 sa 學長的文,
只要我們把奇點加上一些邊,變成偶點,就存在歐拉圈了。
事實上,加上的那些邊,等同於重複走的邊。
因此等於做一次所有點對最短路之後,求奇點形成的完全圖的帶權匹配。
帶權匹配有很好的算法,不過這題只要用 2^n 形式的 DP 就可以過了
--
→ butterfly21 推:福洛衣得-哇咻演算法 0709 22:22
→ shik 說:媽抵φ的-福洛衣得-哇咻 XD 0709 22:41
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 140.122.45.66 (台灣師範大學)
作者: DJWS at 10/04/24
二維平面上有一堆點,請問有沒有點對稱。
排序,找中心點,驗證,完畢。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.157.67 (中滑一番)
作者: suhorng at 10/04/28
Input:
11
abbba baaab abab
aba bab abab
ab ba abab
abbc bbec abce
ab ab ab
abb bbc abc
z abb ab
abc abc abc
abbcd bccde abcde
abbbbc c abc
abcdedcba edcbabcde abdeab
Output:
76
9
1
4
4
4
2
8
18
8
22
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 140.122.45.34 (台灣師範大學)
作者: sa072686 at 10/05/08
※ 本文轉錄自 [shik] 看板
作者: shik (喵嗚) 站內: shik
標題: [筆記] PKU經典50題
時間: 2010/05/07 Fri 21:09:48
http://blog.csdn.net/xiaofengsheng/archive/2008/12/18/3553444.aspx
第一類 動態規劃 (至少6題,2479 and 2593必做)
2479 and 2593
1015
1042 (也可貪心)
1141
1050
1080
1221
1260
2411 (稍難)
1276
第二類 搜索 (至少4題)
1011
1033
1129
2049
2056
2488
2492 (稍難,也可並查集)
第三類 貪心 (至少2題)
1065
2054 (難)
1521
2709
第四類 最短路 (至少3題)
1062
1125
1797
2253
2679 Bellman-Ford (難)
第五類 最小生成樹 (至少2題, 而且 Prim 和 Kruskal 至少各用一次)
1251
1258
1789
2485
第六類 最大流 (至少2題)
1087
1459
1149
2516 (最小費用最大流) (難)
第七類 二分圖 (至少3題)
1325
1469
2195 (KM 算法或最小費用最大流) (難)
2446
1422 and 2594
第八類 並查集 (至少2題)
1861
1182 (難)
1308
2524
第九類 快速查找 (B-Search, Hash and so on) (至少3題)
2503
2513 (+Euler回路的判定)
1035
1200
2002
第十類 數論 (至少2題)
1061
1142
2262
2407
1811(難)
2447 (難)
第十一類 線段樹 (無最少題數要求)
2352 (可用簡單方法)
2528
第十二類 計算幾何 (至少2題,1113凸包算法必做)
1113
1292
2148 (難)
2653
1584
第十三類 高精度 (至少3題,1001必做)
1001
1047
1131
1503
1504
1060 and 1996 (多項式)
SCU1002, 1003, 1004 (http://acm.scu.edu.cn/soj)
第十四類 模擬 (至少5題)
1029 and 1013
1083 and 2028
2234 and 1067
1012
1026
1068
1120
2271
2632
第十五類 數學 (至少4題)
2249
1023
2506
1079
1019 and 1095
1905 and 1064 (二分)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by shik from 124.8.2.211 (福爾摩沙固網)
→ ar7781 推:借轉:) 0507 21:37
φ ar7781 轉:到 [某隱藏] 看板,于 2010/05/07 Fri 21:38:21
→ ducking 推:偷走這篇XD 0507 22:46
φ ducking 轉:到 [ducking] 看板,于 2010/05/07 Fri 22:48:13
→ poao 推:借轉(? 0507 22:55
φ poao 轉:到 [poao] 看板,于 2010/05/07 Fri 22:55:47
→ fei6409 推:我、我才沒有要轉這篇呢(咦) 0507 23:07
φ fei6409 轉:到 [fei6409] 看板,于 2010/05/07 Fri 23:07:23
→ willyliu 推:天哪是強者題單耶我要趕快記下來 0507 23:08
φ willyliu 轉:到 [willyliu] 看板,于 2010/05/07 Fri 23:09:05
→ naieeliao 推:steal~ 0508 00:00
φ naieeliao 轉:到 [某隱藏] 看板,于 2010/05/08 Sat 00:00:16
→ y790930 推:轉XD 0508 18:36
φ y790930 轉:到 [y790930] 看板,于 2010/05/08 Sat 18:36:23
→ sa072686 推:(伸 0508 20:18
φ sa072686 轉:從 [shik] 看板,于 2010/05/08 Sat 20:18:35
φ b821213 轉:到 [b821213] 看板,于 2011/01/27 Thu 12:55:08
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:36:30
作者: yuscvscv at 10/05/22
※ 本文轉錄自 [poao] 看板
作者: poao ( ) 站內: poao
標題: [認真] 10154 Weights and Measures
時間: 2010/04/21 Wed 23:14:41
題目簡介:
有一堆烏龜,每一隻烏龜有力量S 和體重W ,
k
一個合法的烏龜堆要求是for each turtle k ,Sk>= Σ Wi
i=1
也就是每隻烏龜的S 必須要大於等於他自己以及所有在他上面的烏龜重量和。
求出最大的烏龜堆高度
全部烏龜數量N <= 5607
首先,依照suhorng板上#896 這個題目可以sort by S 之後用類似背包的作法做到O(N^2)
接下來#1BpNuj0n (Prob_Solve) [ptt.cc] locomotion提出了O(N lg N)做法
作法大概是:
sort by S 之後S由小到大,檢查是否可以將該隻烏龜放進去,
若該隻烏龜之S>= ΣW 就將該隻烏龜接到烏龜堆後, 長度++
若否,則將所有烏龜中W最大一隻丟掉,靠Heap實做O(lg N)
總複雜度O(N lg N)+ O(N lg N)
接下來是關於幾個需要證明的細節:
1. 是否只要將最大一隻烏龜丟掉,整堆烏龜堆一定合法。
考慮兩種情況:
a. 要加入的那隻烏龜是最大的。
很顯然拿掉那隻烏龜,整個堆疊就跟之前一樣所以一定合法
b. 要加入的那隻烏龜不是最大的。
那麼拿掉最大的之後整堆重量 - Wmax + Wk 且Wk<=Wmax 所以總重量減少
而且Sk >= 最後一個的S 既然最後一個的S都能承受原本整堆的重量,
自然Sk 也能承受(整堆 - Wmax + Wk)的重量,所以也一定合法
2. 是否不會有另一個解加入現在這隻、拔掉最大值之後變成比最優解更好
也就是說要證明不會存在另外一種堆法,重量和>=最優解但是兩者拔掉最大值、加入烏龜
後變得比最優解更好。
考慮四種情況:
a. 最優解的最大值是新加入那隻, 劣解最大值是新加入那隻:
那麼兩者拿掉最大值之後變成原本的最優解 v.s. 劣解 所以一定還是最優解好
b. 最優解的最大值不是新加入那隻, 劣解最大值是新加入那隻:
那麼變成最優解 + Wk - Wmax 重量和會變更小,所以還是最優解好
c. 兩者最大值皆不是新加入那隻:
為方便起見,以下把最優解第i項稱為Ai 劣解第i項稱為Bi i=1 表示烏龜頂
令 j 為 W_Aj > W_Bj 的index且對於所有 1 <= i <= j, 皆有 W_Ai < W_Bi
如果我們把Aj烏龜跟 Bj烏龜交換。
那麼對於所有被疊在Bj之下的烏龜,因為總重量減少了所以都會合法
對於Bj 呢, Bj本來承受了 B1~B(j-1)的烏龜重量,
現在要去承受A1~A(j-1)的重量,但A1之W <= B1之W, A2之W <= B2之W, ...
所以Bj支持的重量也減少了,也絕對合法。
但是這樣交換之後A的總重量減少了,表示原本之最佳解並非最佳,所以矛盾
※關於一定能找到i 使 Ai之W > Bi之W 之證明:
反證法:假設現在對於所有i, Ai之W皆 <= Bi之W
而不要忘了一開始的假設,假設A和B分別拔掉Wmax之後 B的W和 < A的W和
那麼令A的Wmax在Aj
考慮Bj之W:
(1) Bj之W為B裡面W最大的:
兩邊拔掉max之後對所有i, Ai之W皆 <= Bi之W,故 B的W和 >= A的W和 矛盾
(2) Bj之W並非B裡面W最大的:
把Bj 和B裡面Wmax的位置交換,就同(1)
d. 最優解的最大值是新加入那隻, 劣解最大值不是:
把兩者最大值拔掉推齊之後變成和c. 一樣之狀況
綜合以上幾點討論,所以這個作法是正確的。
討論者:coquelicot, poao, raincole, shik, suhorng (依姓氏筆劃排序)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by poao from 140.122.45.89 (台灣師範大學)
→ yuscvscv 推:借轉 0522 14:28
φ yuscvscv 轉:從 [poao] 看板,于 2010/05/22 Sat 14:28:42
▲ yuscvscv 改@2010/05/22 Sat 14:29:15
→ chernglin 推:推薦這篇文章 0525 12:49
作者: yuscvscv at 10/05/22
字型
文字大小
粗體
斜體
底線
刪除線
上標 <sup> x^2 之類的
下標 <sub> log2 之類的
靠左
置中
靠右
超連結
圖片
分隔線 <hr>
表格系列 <table><tr><br>....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 111.255.16.40 (中滑一番)
作者: suhorng at 10/05/27
給一個 3x3 的 pattern, 由 '*' 和 '.' 組成。
現在你有一個 rxc 的板子 (r, c<=5)
每次你可以按一個位於 (y, x) 的按鈕, 按下之後,
以 (y-1, x-1) ... (y+1, x+1) 就會依照 pattern 去黑變白、白變黑
舉例來說, pattern 是
.*.
***
.*.
那在 r = 5, c = 5 的 (0,0)、(2,0) 處按下後板子會變成
**...
.....
**...
*....
現在要把原先全白的板子變成全黑
輸出一組步數最少的解
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 59.115.144.229 (中滑一番)
作者: sa072686 at 10/06/04
※ 本文轉錄自 [web] 看板
作者: chernglin (我也會尖叫) 看板: web
標題: [閒聊] 借版問
時間: 2010/06/03 Thu 21:18:34
我學弟想問
gcc和tcc編譯器編譯的差別
請知道答案的版友們
簡單回答這差別
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by chernglin from 140.113.99.158 (塞車大學)
φ sa072686 轉:從 [web] 看板,于 2010/06/04 Fri 20:56:12
作者: suhorng at 10/06/29
給一個由小寫字母組成的字串,長度不超過 1000,
請問最少要把它分成幾段,使得每一段都是迴文 ?
-
設 dp[i] 代表 s[1...i] 的最小分段數
則 dp[i] = min{ dp[j-1] | s[j...i]是迴文 } + 1 (枚舉最後一段的切點)
因為可以對 O(n^2) 求出所有的迴文,因此狀態轉移只要 O(n)
總共是 O(n^2 + n^2) = O(n^2)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 59.115.145.91 (中滑一番)
作者: yuscvscv at 10/07/27
翻譯lucky cat有
剛無聊在把上暑訓要用的題重寫一遍XD
防雷線
由於要求 n! 的最後一個不為0的數。
很多人直覺是只保留最後一個數,
也就是對於(a * 10 + b),只保留b的部份。
可是 ((a*10 + b) * (c*10 + d)) % 10 等價於 (b*c)%10 ,
也就是當(b*d)%10為0的時候,這時候想要(a*d + b*c)%10 就掰了,
因為a早在先前被刪去。
接著總會想到,那保留多一點的數字,只要不讓他overflow就好。
那保留到100000以下如何,然後會得到Accepted。
只是,來證明一下這個算法的正確度,
((a*100000 + b) * (c*100000) + d) % 100000,
100000 = 10^5 = 2^5 * 5^5,
要讓a*d + b*c為解,
反例在要讓b*d可以被整除,此時解為a*d + (b*d)/100000 + b*c。
由於b*c必為0,b*d / 100000,是此算法的解,所以當a*d干涉到答案的時候,
就是反例。
b*d要能被整除,d至少要有5^5 (3125)這個因數,於是稍微嘗試一下,
3125, 6250, 9375。
前兩者的a*d都沒干涉到答案。
很好,
9375 -> 3,正解是8。
很明顯這個方法是錯的。(雖然能AC)
如果把保留100萬以下的,那就會正確了,因為反例會出現在乘上因數有 5^6 (15625)。
但這題範圍只到10000,只是要注意overflow的問題。
//用這個算法來檢測9375,答案會是8。
接下來,讓我們拋開喇賽解法。
數要出現尾數0,必有10的因數,也就是 n = a * 10^b。 (b為maximun, a尾數必不為0)
所以說本題轉型為求a % 10的結果。
再更進一步分析,
n = a * 5^b * 2^b,求a%10,
也就是說答案只跟2和5的質因數有關,在階乘中2的質因數個數 > 5的質因數個數,
//2個連續數中必有1個可以整除2,5個連續數中必有1個可以整除5 (鴿龍原理)
由於a尾數不為0,於是%10不影響結果。
接下來只要計算2^k,k為扣掉b以後剩下的。
n = a * 2^k * 2^b * 5^b。
n = a * 2^k * 10^b。
所求為(a * 2^k)%10。
a % 10,可在計算n-1的結果時求得。
(2^k) % 10,4個一循環。
要求解,只要紀錄a和k兩個數即可。
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 111.255.29.242 (中滑一番)
▲ yuscvscv 改@2010/07/27 Tue 19:22:30
▲ yuscvscv 改@2010/07/27 Tue 19:23:16
作者: sa072686 at 10/08/19
搗蛋的RPG:
K2Xn4-BXbz-97Y7s-o999j-DB990-I3QP1-59qO9-I95D5
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 192.168.4.29 (台狼一中桑靈餓)
→ sa072686 推:z9Xbz-AT0Gv-98Z8r-i999Z-D8970-W8WR3-79kp9-m9XWR 0819 17:38
→ godgunman 推:1PXB8-OkHiF-Y4a6o-mx785-G79YC-3jSD0-49HK9-0Cllt 0819 17:38
→ godgunman 推:eJTO7-D8999-ny 0819 17:38
→ kytu 推:這是什麼阿XDD 0820 08:25
→ sa072686 推:小孩子不用知道沒關係XD 0820 18:41
作者: devilqxect at 10/08/19
※ 本文轉錄自 [devilqxect] 信箱
作者: sa072686.bbs@ptt.cc
標題: [RPG] devilqxect
時間: 2010/08/19 Thu 18:27:52
-load wmXG0--TX7a-97378-X999a-D7990-IWQP1-59hQ9-e9KXZ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.70.137.242
φ devilqxect 轉:從 [devilqxect] 信箱,于 2010/08/19 Thu 18:31:45
作者: yuscvscv at 10/09/27
Discription
給 3 個只含小寫字母的字串。
你必須算出有幾種方法可以用前兩個字串的子序列構造出第3個字串。
在對一個字串刪除 0個以上(含)的字母以後,我們可以得到他們子序列。
舉個例子來說, "a", "b", "c", "ab", "ac", "bc", 和 "abc" 都是 "abc"的子序列。
一個子序列可以是空字串。
現在假設有 "abc" 和 "de" 兩個字串。
經過一番組合,
你可以得到 "abcde", "abdce", "abdec", "adbce", "adbec", "adebc", "dabce",
"dabec", "daebc" 和 "deabc"。
Input
第一行有一個整數 T (0 < T < 271) 表示有幾筆測資。
每筆測資含 3 個只有小寫字母的字串,字串長度皆位於 1 ~ 60 之間。
Output
對每筆測資輸出一個整數,
表示有多少種方法可以用上述的方法把前兩個字串構造成第三個。
答案可能會相當大,你必須輸出 答案%10007。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc45.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
作者: yuscvscv at 10/09/28
Description
緊張的的氣氛布滿了整個 Swamp County 。
Swamp County 在地理上被切割成很多塊沼澤區,每區都有一位監理委員。
由於每個沼澤的人口分布不均,監理委員手上票的權重,是該地區的人口數佔全國比例,
而一個法案需要過半數全國人口的票。
結果人口較少的沼澤區,他們發現他們對監理會完全沒有發言權。
事實上,最大的沼澤區票多到可以幾乎主導整個投票,
而小一點的沼澤區幾乎是只有0票。
你的團隊的工作是寫一個軟體幫忙找出更公平的投票計畫。
監理會決定透過修正案來定一個門檻來取代現有的多數決。
為了公平起見,監理會希望讓每個沼澤區的 Banzhaf 影響力相近。
於是給你每個沼澤區的票數,你的程式需要去計算每個沼澤區的 Banzhaf 影響力。
這個沼澤區的 Banzhaf 影響力指,
有多少種情況可以讓這個沼澤區投下票後,讓法案從不通過變通過。
Input
多筆測試資料。每筆測試資料一行,最多 80 個字元。
每行一行包含一系列的數字,且用至少一個空白分隔。
該行的第一個數字是這個法案通過的最低門檻票數。
剩下的數字則是每個沼澤區擁有的票數。
(舉個例子,sample input的第一行,需要17票來通過法案,且有6個沼澤區,
分別持有 1, 7, 3, 12, 9, 1張票。)
Output
對於每筆測資,你的程式需要輸出每一個沼澤區的影響力。
對於每筆測資你得輸出在獨立的一行。
然後根據input順序輸出各沼澤區的影響力,中間用一個空格隔開。
沼澤區的數量最多不超過27個。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 111.255.23.159 (中滑一番)
→ yuscvscv 推:翻譯的卡卡的... 0928 03:42
→ naieeliao 說:監理會決定透過修正案來定一個門檻 ... 0928 16:22
▲ yuscvscv 改@2010/09/28 Tue 17:27:11
→ yuscvscv 推:感謝2F 0928 17:27
作者: yuscvscv at 10/09/29
Swamp County 地方法院最廣為人知的就是其"千年審判"。
不過最近他從其他"百年審判"的法院吸取了不少經驗,
打算新增一條規則來避免訴訟程序上的堵塞。
其中一條新規則是,各案件都要在既有的時間中,要處理最多的事務。
每個案件被允許有 8 小時的立論,240 小時的證據展示,16 小時的結論。
另一條規則則是,法院希望能在5個月之內把案子經由陪審團審理。
這些規則希望讓所有案件可以更快速的審判完畢,
但對原告和被告雙方則都是一個重大的考驗,
雙方都必須先搞清楚,如何最佳的用被分配到的時間來說服陪審員。
你的團隊和Swamp County地方法院的檢察官辦公室簽了約,
打算發展個決策系統來幫助他們制定策略,決定要使用那些證據出庭。
由於這個系統被證實了對於安排這些有時限的事務是有用的,
所以檢方辦公室要求你們做出來的系統可以有足夠彈性來處理其他案件。
這個決策系統將依評分來決定要呈現那些證據給陪審團,
越有用的證據其分數越高,所以他們希望能使提供的證據總分最高。
Input
輸入將以一行含有 1 個正整數作為開始,它表接下來有幾組測資。
接下來會有個空白行,且測資間會有個空白行。
決策系統的輸入,首先在第一行會有個整數表示被分配到多少時間來做證據的呈現。
每一行會含有一個證據的資料,第一個區域是分數,第二個區域是呈供所需時間,
第三個區域則是一些敘述,
每個區域之間用一個空白隔開,且第三個區域會含有多個空白。
分數是個整數且介於 1~10 之間,
對於每個案件,檢方被分配到的時間將不超過240個小時。
證據的總數將不超過 100,且敘述部分的文字長度將少於68個字。
證據的出現順序將是任意的,沒有任何規則。
Output
對於每筆測資,輸出必須符合以下的規則,且兩測資間得用一個空白隔開。
輸出必須要列出被呈供的證據和他們的分數及耗時、總分和總耗時。
輸出會像一個表格,如sample output。
如果在時間內無法呈供任何證據,請輸出:
"There is not enough time to present any evidence. Drop the charges."
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 111.255.22.83 (中滑一番)
▲ yuscvscv 改@2010/09/29 Wed 00:47:59
→ yuscvscv 推:解是special judge 只要何條件就好 順序沒差 0929 17:05
作者: yuscvscv at 10/09/29
Description
Jill 喜歡騎著她的腳踏車,但隨著她居住的美麗城市 Greenhills 逐漸壯大,
她有時候得使用公車來代步一段路。
她有一台折疊的腳踏車可以隨身攜帶,
當公車來到某個優美的地方,她將下車,並騎著腳踏車順著公車的路線前進,
直到到達目的地或是某個他不喜歡的地方。
如果是後者,她將搭上公車來到目的地。
累積了幾年的經驗,Jill 將每一段路的 "好感度" 做評分,
正的美好度代表她喜歡,負的反之。且沒有任何路的美好度是0。
Jill 計畫從某個站下車並開始騎車,然後在某個站停下並回到公車上,
使她騎過的這段路的 "好感度" 總和最大。
這表示說,她可能會經過一些她不喜歡的路,
但之間和之後經過的路,她喜歡到足以補償經過這段路的厭惡感。
也有可能沒有任何路徑符合條件,所以 Jill 搭著公車走完全程。
相反的,也有可能整條路她都很喜歡,從頭到尾都沒坐到公車。
接下來給出多條公車的路線,每條都會有一些公車站代表 Jill 可以上下車的地方。
她覺得程式可以幫她對每條公車路線找出最佳的路段來騎腳踏車。
Input
輸入檔包含多條公車路線的資訊。
輸入檔的第一行有個整數 b 表示有幾份公車路線資訊在這個檔。
且每條公車路線將被依序編號成 r , 1 <= r <= b 。
每一條路線資訊開頭會有一個整數 s 表示路線上有幾個公車站, 2 <= s <= 20000
接下來會有 s -1 行,每行有個整數,
第 i 行的整數 (1 <= i < s)表示 Jill 對 從第 i 站到第 i+1 站的"好感度"評分。
Output
對每條公車路徑資訊,你的程式要找出起始站 i 和終點站 j,
代表從 i 騎到 j 可以使好感度總和最大,
總和 m = 好感度_i + 好感度_(i+1) + ... + 好感度_(j-1)
如果有多條路段可以使好感度總和最大,挑最長的那段 (最大的 j-i)。
如果還是有多條路段,再選擇起始站最早的(最小的i)。
對於每條公車路徑,你應該要照下列的格式輸出一行:
"The nicest part of route r is between stops i and j"
然而,如果最大的好感度總和不為正數,那你的程式應該輸出:
"Route r has no nice parts"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc45.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
作者: yuscvscv at 10/10/18
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> ※ 本文轉錄自 [sa072686] 信箱
> 作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
> 標題: [筆記] 607 Accepted
> 時間: 2009/07/08 Wed 17:53:09
> 作者: sa072686 ( Accepted ) 站內: sa072686
> 標題: [筆記] 607 Accepted
> 時間: 2008/02/29 Fri 16:18:55
> 有難寫到…
> 有n個主題要講完,每節課長l,一個主題不能分在兩節課講,並且主題有先後順序
> 所以一定要先把前面的主題講完才能講後面的。如果一節課中有些時間排不下課,
> 那麼如果是在十分鐘或以內則可以得到-c的不滿足感,否則得到(t-10)^2的不滿足感。
> t為空下來的時間。求使用最少節課講完所有主題,主題要講的時間一定在一節課的時間
> 以內。如果有多種可能可以用最少節課講完,則取不滿足感最低的方式。
> 先用greedy裝箱把最小可能幾節課先算出來,然後再做背包dp。
> 可是背包dp太慢,所以用鏈結串列代替稀疏的陣列、用指標交換代替記憶體搬動
> 然後勉強在1.400 AC了…好慢。
先對每個主題用greedy算出到目前主題最少要用幾節課,為len[i]
設 前i個主題使用len[i]節課的最小花費dp[i],
cost(i, j)為主題 i ~ j 在一堂內上完的花費。
可知,到i最少需要len[i]節,
那我們得選擇len[j] = len[i]-1,然後從j~i全部這在堂課講完
dp[i] = dp[j] + cost(j+1, i) when len[j] = len[i]-1 && j<i
對於每個狀態只需要O(n)往前掃。
時間複雜度O(n^2),0.020 Accepted
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc45.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
作者: yuscvscv at 10/10/18
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
多重背包問題,
可以切成log n[i]個物品做01背包,
//0.116
或是用deque搭配單調性達到O(Nk)
//0.024
至於0.000怎麼做到的就不清楚了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc45.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
→ Tommy 推:多重背包問題就是問背包有多重嗎? 1018 19:01
→ yuscvscv 推:= = 多(ㄉㄨㄛ)重(ㄔㄨㄥˊ) 1018 19:24
→ sa072686 推:所以是很多個背包嗎? 1018 21:15
→ suhorng 推:重量的東西有很多個的意思 1018 21:17
→ suhorng 說: ^相同 1018 21:20
→ yuscvscv 推:就是同種物品數量有限制 1018 21:46
→ yuscvscv 推:一般的01背包是同種類只有1個 個別獨立 1018 21:46
→ yuscvscv 推:像零錢問題那種則是同種類無限個 這種則是有限個 1018 21:47
→ suhorng 推:這題倒也有在很多DP優化的文章中出現 可以減小狀態數目 1023 10:32
→ DJWS 推:雖然叫做多重背包 可是實際上卻是多重物品囉? 1024 14:24
→ yuscvscv 推:網路上有不少文章將這種問題叫做多重背包 1024 14:25
→ yuscvscv 推:其實就是 每種物品有限個數的背包問題 1024 14:25
→ DJWS 推:soga...原來是 bounded knapsack problem 1024 14:27
作者: suhorng at 10/10/30
把 cos(nA) 以 cosA 的多項式表示,n為整數
<Hint>
隸美弗 (de Moivre)
n n k n-k
(cosA + isinA)^n = cos(nA) + isin(nA) = Σ C (cosA) (isinA)
k=0 k
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 61.217.34.149 (中滑一番)
作者: suhorng at 10/11/01
提供另一種算法
觀察
t [20/t]
1 20
2 10
3 6
4 5
5 4
6 3
7 2
8 2
9 2
10 2
11 1
12 1
13 1
14 1
15 1
16 1
17 1
18 1
19 1
20 1
_ _
觀察到有很多重複的(事實上對 √a 以上的所有t, [a/t] 也只有最多 √a 種值)
那不妨把一樣的壓在一起算
考慮 [a / t] = x, 求出最大的 i 使得 [a / (t - i)] = x
=> 設 a = tx + r, 0≦r<t
= (t - i)x + r_i, 0≦r_i<t - i
t - r
顯然 r_i = r + ix => 0≦r + ix<t - i => 0≦i<-------
x + 1
所以每次可以 O(1) 算出最大的 i
因此總加法次數就是總複雜度
_ _
而對於 √a 以上的所有 t, 總共只加最多 √a 次
_
而對於 √a 以下的所有 t, 恆有 i = 0
_
所以總複雜度就是 O(√a)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 61.217.33.29 (中滑一番)
作者: suhorng at 10/11/02
※ 引述《seanwu (海恩吳)》之銘言:
11159 Factors and Multiples
給A,B兩組數,在這兩組數中各刪掉一些數,
使得任一個B中的數皆不是任一個A中的數的倍數
最少需要刪掉幾個數?
<Hint E>
maxflow
-
啊補一個測資
1
2 5 0
2 0 25
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 210.71.78.241 (台北一中)
作者: DJWS at 10/11/02
> 頗難寫但貌似頗經典的一題
> 翻譯一下
> 在一個有 r 列 c 行的方格圖上有 n 個敵人,你現在擁有會無限貫穿的武器
> 問最少架設幾台,可以消滅所有敵人,以及架設的地點
> 若第 i 列第 j 行有敵人,則有邊 (i, j)
> 以此建圖可形成一二分圖,則每條邊代表一隻敵人,點代表放置武器的位置
> 則每條邊只要有至少一端點放置即可,即成為最小點覆蓋問題
> 由 Konig 定理,求最大匹配即可
> 至於如何求放置地點…這邊參考了 try 的代碼,以下是所做的事情
> 初始化所有點標記為 -1,對於未匹配的端點,DFS 標記相鄰的點
> 如果該點已為 1 則剪去,否則標記為 1 並把所有相鄰點 DFS 標為 0
> 對於標為 0 的點,則標相鄰點為 1
> 最後遍歷所有列的匹配點,若標記不為 0 則輸出,並將匹配到的行標為 0
> 再遍歷所有行的匹配點,若標記不為 0 則輸出,結束
> 原理還在理解中,徵求強者把原理逆推出來XD
> 另外,徵求使用 min-cut 的解法,問到都說 min-cut 但還不大會運用…
寫了老半天不過...原來是忘記印出換行...
由於怨念讓我想好好的回這篇文...
證明請參考這張圖片:
http://en.wikipedia.org/wiki/File:Koenigs-theorem-proof.svg
原理就是greedy。
未匹配點的旁邊一定要有點覆蓋上的點,才罩得到未匹配點所連著的邊。
greedy地,把點覆蓋上的點都盡量擠向未匹配點的方向。
所以距離未匹配點1、3、5、7...的點,當做點覆蓋是很ok的。
這裡給出一個graph:
1 1
1 2
1 3
6 8
7 8
8 8
10 10
11 11
12 12
找完最大匹配後,可以發現有三種情況要分別處理:
甲、未匹配點在左邊,自成一塊connected component。
乙、未匹配點在右邊,自成一塊connected component。
丙、沒有未匹配點,一條一條的匹配邊。
這三個情況不相交、不干涉。
用DFS/BFS分別跑完甲與乙之後,沒遇到的匹配邊就是丙。
然後照著前面那種擠法,把甲、乙擠一擠,丙的話擠那邊都沒差。
擠完了就是答案了。
另外,只要小心處理的話,是可以印出字典順序最小的點覆蓋的。
至於會不會有一個connected component剛好左邊右邊都有未匹配點呢?
無可能...因為這樣就有擴充路徑了...
--
最後是min cut
二分匹配可以轉換成最大流
最大流又可以轉換成最小割
所以...就只是這樣而已...
要找點覆蓋還是得照上面方法找。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.152.41 (中滑一番)
▲ DJWS 改@2010/11/02 Tue 23:47:13
▲ DJWS 改@2010/11/03 Wed 00:00:35
作者: DJWS at 10/11/03
有一種特別的騎士是斜著走的。走過的點不會再走。
給定盤面大小(<=15)、起點座標(0~14)、終點座標(0~14),
問可不可以剛好用質數步到達,
再看可不可以用合成數步到達,
要不就不能到達。
可能是這題目太簡單了,
出題目的人故意搞複雜一點。
解法如下:
本來我是想說用 BFS + memoization
開一個visit[15][15][9]的陣列
去記錄每一個格子有哪幾種步數可以走到
可是這個方法是不行的
因為走過的格子不能再走 且不是在找最短路徑
這種方式沒辦法紀錄路上經過的格子
只好用backtracking暴搜了
想當然 O((15*15)!) 肯定 TLE 的
比較有效率的方式是
先用一次BFS算算看是否有路徑
確定有路徑之後 再用IDS慢慢搜出質數長度的路徑
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.216 (中滑一番)
▲ DJWS 改@2010/11/03 Wed 16:06:47
作者: DJWS at 10/11/03
N x N 的西洋棋盤上有一隻馬
這隻馬有三種變身型態(是吃了動物果實嗎...)
甲、普通馬:走兩格往旁邊一格。
乙、超級馬:走三格往旁邊一格。
丙、超級兵:直或橫走一格。
這隻馬一開始可以是任何一種型態,
每走一步就會變成下一種型態,以甲乙丙順序不斷輪流。
給定棋盤大小(4~20),問題數目(<=1000),起點與終點(已編成index,1~N^2),
問起點走到終點的最少步數。
起點不會等於終點。
另外,要走最後一步的時候,又剛好是超級兵的時候,
此時他可以和國王一樣四面八方走。
解法如下:
解法很簡單 就是BFS
queue的節點設計為 {x, y, type}
一開始三種型態同時丟下去當起點
再用個記憶體 dist[20][20][3] 記錄各種型態走到該座標的步數
唯一要小心的就是超級兵斜走不要放進queue
如果對程式語言很熟悉
寫出來的行數並不會很多
這是考驗coding能力的好題目
我覺得高中比賽應該出這種類型的題目才對...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.216 (中滑一番)
▲ DJWS 改@2010/11/03 Wed 16:01:58
▲ DJWS 改@2010/11/03 Wed 16:04:57
作者: DJWS at 10/11/03
N x N 的正方形棋盤地圖,
三隻小豬住在(1,1),
他們的好朋友住在(N, N)。
有一天三隻小豬要去拜訪他的朋友。
小豬們想說出門之後,
到處去撿一些玉米當作禮物,
一直撿一直撿,撿越多越好。
每隻小豬都不能走過自己走過的路,
但是三隻小豬的路線是可以互相重疊的。
小豬可以往四個方向走,不能走出棋盤
奸詐的大野狼在地圖上放了很多個陷阱,想要捕捉小豬。
不過小豬已經用特異功能知道所有的陷阱位置,以及所有的玉米位置。
請問三隻小豬最多可以撿到多少玉米,安全的到達朋友家?
如果三隻小豬都難逃陷阱,則印出-1。
0 代表沒東西
1 代表玉米一枚
2 代表陷阱一枚
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.216 (中滑一番)
▲ DJWS 改@2010/11/03 Wed 16:35:33
▲ DJWS 改@2010/11/03 Wed 16:36:38
作者: DJWS at 10/11/03
驗證一個有向圖是不是cactus graph仙人掌圖。
所謂有向仙人掌圖就是:圖上每條邊隸屬於恰好一個有向簡單環。
換個說法:許多有向環,相互銜接,接縫恰好是一點,銜接方式是樹狀。
至於解法呢...
有向環就是scc強連通單元 (連通成分 連通分量....好多種翻譯)
用 tarjan's scc algorithm 改一改就行了
至於怎麼改...我也不知道...有請高人指點...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.159.154 (中滑一番)
▲ DJWS 改@2010/11/03 Wed 23:33:59
▲ DJWS 改@2010/11/03 Wed 23:35:53
→ suhorng 說:好熟悉的題目XDD 原來TIOJ 1484就是這裡來的 1103 23:36
→ suhorng 說:做法有很多種,我明天來PO我的做法XD 1103 23:36
→ DJWS 推:感謝感謝 :D 1103 23:48
→ poao 說:原來我在TIOJ AC作法是錯得QQQ 1104 00:34
→ suhorng 說:說不定只是小地方寫壞掉QQ 請蚯蚓傳傳看嘛~ 1104 08:49
→ DJWS 說:所以現在是? @@ 1104 10:57
→ willyliu 推:我沒寫過, po一下想法不知道對不對... 1104 11:22
→ willyliu 推:想像一個dfs的樹形圖, 由dfs性質 1104 11:22
→ willyliu 推:若有cross edge, front edge則它不是仙人掌 1104 11:22
→ willyliu 推:因此只剩下back edge 和tree edge 1104 11:23
→ willyliu 推:維護一個"每條邊屬於幾個圈"的差分表, 索引值為邊的深度 1104 11:23
→ willyliu 推:遇到back edge(u, v)時就把index u的-1, v的+1. 1104 11:23
→ willyliu 推:剩下應該好想像了... 1104 11:26
→ suhorng 說:PO好了~ 1104 11:34
作者: suhorng at 10/11/04
誠如上篇所述,就是判斷一個圖是不是一堆環接成一棵"環樹",且接縫只能是一個點
假設已經判斷出原圖一整張圖就是一個強連通元件
考慮對他 DFS, 弄出一棵 DFS Tree, 並考慮 圈 與 back edge 之間的關係
那麼對於它 DFS Tree 中的一個點 v 而以及某條邊 (v, u) 而言
1. (v, u) 是 back-edge
若 v 原先就已經可以回溯到更上面的節點, 那一定會使得某些邊被一個
以上的簡單圈包含。
2. (v, u) 是 cross-edge 或 forward edge
那這圖就不符合仙人掌性質了
3. (v, u) 連到 v 的某棵子節點
若 v 已經可以從某條邊回溯到上面的節點, 且此棵子樹可以回溯到
v 以上的節點,那必然造成某些邊會被一個以上的簡單圈包含。
綜合以上三種狀況就可以判斷了
然後我們需要紀錄最多能回溯到哪個點 這可以用類似找 AP 點的方法來記
//據說另一種做法是直接DFS拔邊 我不清楚詳細是怎麼做( ̄▽ ̄#)﹏﹏
--
★SKYLY 看來你果然是人品太好..
★SKYLY 果然吃素就是不一樣(?)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 210.71.78.241 (台北一中)
→ DJWS 說:3.的情況應該就是forward edge吧? 1104 11:39
→ DJWS 說:另外我還有一個問題: 要怎麼偵測forward edge? 1104 11:39
→ DJWS 說:DFS拔邊我猜是類似Euler Circuit的求法 一次拔掉一個環 1104 11:42
→ DJWS 說:並且mark起來 剩下的圖 任何一條路徑端點都不能是mark的點 1104 11:43
→ DJWS 說: 不能都是 1104 11:45
→ willyliu 推:只要有一條非tree edge, 連到目前不在stack中的點 1104 11:45
→ willyliu 推:而且那個點被拜訪過, 那它就是cross或front edge 1104 11:46
→ suhorng 說:嗯對用stack 1104 11:47
→ suhorng 說:嗯...我把 3 的描述修正一下XD" 我的意思是 tree edge 1104 11:49
▲ suhorng 改@2010/11/04 Thu 11:49:14
→ suhorng 說:例如 1->2, 2->3, 2->4, 1->4 那 1->4 是 forward edge 1104 11:50
→ willyliu 推:可以用disjoint set判斷 front edge(如果你堅持判斷) 1104 11:51
→ suhorng 說:但是如果DFS時先走到 1->4 也沒關係 那樣的話變成 2->4 1104 11:51
→ suhorng 說:會是 cross-edge, 一樣能判斷出來 1104 11:52
→ suhorng 說:所以不用管那麼多 (? 1104 11:52
→ DJWS 說:感謝大家!我懂了! 1104 13:09
作者: DJWS at 10/11/04
懂了! 請容許我試著換句話再說一遍!
使用 DFS ,會遇到三種情形:
一、 (i, j) 是 cross edge 或 forward edge:
tree edge 和 back edge 剛好構成仙人掌全部的邊,
所以不會有 cross edge 與 forward edge。
如果有的話,就表示不是仙人掌。
實作時,可利用 DFS stack 判斷,
如果 j 不在 stack 又已經拜訪過(也就是 j 已經從 stack 彈出來了),
則表示 (i, j) 一定是 cross edge 或 forward edge。
二、 (i, j) 是 back edge:
如果從 i 就已經有路可以走回到 i 的祖先(也是會經過其他的back edge),
此時 j 又走回到 i 的祖先,表示環重疊,不是仙人掌。
範例一:12 23 34 45 56 62 53! // i = 5 and j = 3
範例二:12 23 34 45 51! 53! // 怎麼好像在寫棋譜...
實作時,累加 i 回到祖先的路有幾條,只能是恰好一條。
可利用關節點演算法的原理,記錄 i 可到達的最高祖先。
三、 (i, j) 是 tree edge:
與 2. 的概念很像,不過要在 DFS 的回溯階段才能判斷。
如果從 i 就已經有路可以走回到 i 的祖先,
此時 j 又有路走回到 i 的祖先,表示環重疊,不是仙人掌。
範例一:12 23 34 45 56! 67! 72! 58! 89! 91! // i = 5 and j = 8
範例二:12 23 34 45 51! 58! 89! 91! // 同上
實作時,累加 i 回到祖先的路有幾條,只能是恰好一條。和(二)一起累加。
可利用關節點演算法的原理,記錄 i 可到達的最高祖先。
DFS 結束之後,
最後要判斷 DFS 是否能順利走到圖上所有點。
附註:樹根不用走到祖先,要當做例外處理。樹根隨便怎樣都好。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.175 (中滑一番)
▲ DJWS 改@2010/11/04 Thu 13:38:17
→ DJWS 說:忘了說...這個演算法跟 tarjan's scc algorithm 沒有關係... 1104 13:46
作者: suhorng at 10/11/04
※ 本文轉錄自 [suhorng] 信箱
作者: suhorng.bbs@fgisc.twbbs.org (to the sky)
標題: Re: [資結] Suffix Array
時間: 2010/11/04 Thu 16:25:28
作者: suhorng (書泓(阿書)) 站內: Programming
標題: Re: [資結] Suffix Array
時間: 2010/02/14 Sun 00:58:33
對於構造一個字串的 Suffix Array,我們還有另外一個 O(nlgn) 的倍增法
----
假設對於一個字串:s1s2...sn 而言 它的所有後綴是
1 s1s2...sn
2 s2...sn
...
n sn
首先,我們先定義 SA-k 是指 "所有後綴的前 k 個字元" 所排列而成的 Suffix Array
接著,我們可以觀察到以下事項:
1. SA-1 就是直接對所有後綴的第一個字元排序,可以在 O(n) 內完成。
2. SA-k 和 SA-2k 之間似乎有某種神奇的關聯性。
關係在於,一個後綴 s_i 的第 k 個字元開始將會是另一個後綴 s_(i+k)
(此處字串的第 x 個字元從 0 開始算)
這似乎代表了什麼?
也就是說,我們若要比較任兩個後綴在 SA-2k 中的排序關係
只要透過參考他們在 SA-k 中的排序關係,可以在 O(1) 中得到比較結果
換句話說 → 因為每次比較只需要 O(1) 的時間,
所以我們可以在不超過 O(nlgn) 的時間內利用 SA-k 來排序 SA-2k
(事實上,透過 Radix Sort(or Counting),只要 O(n) 的時間。)
→ SA-1 只需要 O(n) 的方式得到
可以在 O(n) 中由 SA-k 推到 SA-2k
∴得到 SA-n 只要 O(nlgn) 的時間
那,我們究竟怎麼透過 SA-k 的內容來比較 SA-2k 中任兩 s_i 之尖的關係?
假設 SA-k 已知,由「一個後綴 s_i 的第 k 個字元開始將會是另一個後綴 s_(i+k)」
所以 1. 如果 s_i 和 s_j 在 SA-k 當中的順序原本就不相同了
那在 SA-2k 當中他們的相對關係也不會改變
2. 如果 s_i 和 s_j 在 SA-k 當中的順序原本是相同的,
(即前 k 的字元的內容相同)那我們可以去比較 s_(i+k) 和 s_(j+k)
在 SA-k 當中的順序關係來確定他們在 SA-2k 當中究竟
誰先誰後,還是順序關係仍然不確定(前 2k 的字元都完全相同)。
那比較的問題也圓滿的解決了XD。
----
欸斗……這樣結束好像有點突兀,不過確實講完了(?)
還有就是在從 SA-k 推到 SA-2k 那邊就算不寫 O(n) 的 sort (用內建 O(nlgn) )
其實跑起來還是很快的XD。
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_suhorng from_218.167.131.200(HiNet)
→Modify: suhorng at 2010/02/14 Sun 18:16:36
φ suhorng 轉:從 [suhorng] 信箱,于 2010/11/04 Thu 16:26:09
作者: suhorng at 10/11/04
※ 本文轉錄自 [suhorng] 信箱
作者: suhorng.bbs@fgisc.twbbs.org (to the sky)
標題: Re: [資結] Suffix Array
時間: 2010/11/04 Thu 16:25:35
作者: suhorng (書泓(阿書)) 站內: Programming
標題: Re: [資結] Suffix Array
時間: 2010/02/14 Sun 15:43:21
OK,在建構出 Suffix Array 之後,我們已經可以完成某些神奇的事情。
但是這篇中,要再介紹另一個和 Suffix Array 有關的東西 -- Depth Array 的建構
1.前提 (一些簡稱)
輸入的字串 s[0 ... len-1] 寫為 s
而 s+i 代表 s[i ... len-1] (從 s[i] 開始的 suffix,也是個字串)
Longest Common Prefix (最常公共前綴) 簡寫為 LCP
Suffix Array 將簡稱為 SA
SA 的相反則稱為 Rank (即,Rank[SA[i]] = i)
Depth Array 將簡寫為 DA
而對於任意 0 < i < n ,DA[i] 指 LCP( s+SA[i-1], s+SA[i] ) 的長度
我們定義 DA[0] = 0
舉例來說,XDXDXDrz 的所有後綴為
s+0 XDXDXDrz
s+1 DXDXDrz
s+2 XDXDrz
s+3 DXDrz
s+4 XDrz
s+5 Drz
s+6 rz
s+7 z
則 XDXDXDrz 的 (在此假設大寫字母 < 小寫字母)
i s+i Rank[i] SA[i] s+SA[i] DA[i]
0 XDXDXDrz 3 1 DXDXDrz 0
1 DXDXDrz 0 3 DXDrz 3
2 XDXDrz 4 5 Drz 1
3 DXDrz 1 0 XDXDXDrz 0
4 XDrz 5 2 XDXDrz 4
5 Drz 2 4 XDrz 2
6 rz 6 6 rz 0
7 z 7 7 z 0
2.定理 (證明略去)
DA[Rank[i]] >= DA[Rank[i-1]] - 1
3.建構 Depth Array
每個 DA[Rank[i]] 其實就是在問 s+i 和 s+SA[Rank[i]-1] 的 LCP 長度
^^^^^^^^^^^^ s+i 排在 Rank[i],所以排
在 s+i 前一個的後綴就是
s + SA[ Rank[i]-1 ]
但是我們有 DA[Rank[i]] >= DA[Rank[i-1]] - 1
也就是 LCP( s+i, s+SA[Rank[i]-1] ) 的長度最少是 DA[Rank[i-1]-1
換句話說,他們最少有前 DA[Rank[i-1]]-1 個字元是相同的,可以不用比較
因此,我們在比較 s+i 和 s+SA[Rank[i]-1] 時 (確定 DA[Rank[i]] 時)
可以直接從 (s+i) + DA[Rank[i-1]]-1 開始比較
由此特性,如果我們在構造 DA 時用 DA[Rank[0]] ... DA[Rank[n-1]] 的順序來構造
每次在構造 DA[Rank[i]] 時,我們只要比較 DA[Rank[i]] - DA[Rank[i-1]] + 2 個字元
那麼,總的比較次數將不會超過 4n
所以時間複雜度為 O(n)
另外注意兩個邊界條件:
i = 0 時我們將從頭開始比較 ( 沒有前一個 DA[Rank[i-1]] 可以參考)
Rank[i] = 0 的時候我們定義 DA[0] = 0 ( 沒有前一個後綴,也就沒有 LCP )
* 更詳細的資料請參閱 2004 年 國家集訓隊論文許智磊 《後綴數組》
// 嗯…… 有某些小細節有講錯 XDrz
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_suhorng from_218.167.131.200(HiNet)
→ suhorng 說:對了!! 有了 SA 和 DA,我們還能夠比較簡單的在 O(n) 0214 18:13
→ suhorng 說:的時間內建構出一棵 Suffix Tree (Trie) !! 0214 18:13
φ suhorng 轉:從 [suhorng] 信箱,于 2010/11/04 Thu 16:26:15
作者: DJWS at 10/11/04
有一個性向測驗,
統統都是選擇題,
每一題都是五個選項。
所有選擇題的題目都一樣(例如你最喜歡啥活動),
只有選項不同(例如游泳、打球、寫程式...)。
選項最多有A~Z一共26種。
並不是所有選項都會出現在考試中。
學生作答時,
都是會選五個選項當中他認為最正確的一個,
例如有一題選項為 A B C D E,學生如果選了 D。
就表示學生認為 D>A D>B D>C D>E,
D 比其他答案好。
給定題數n,
以及每一題的五個選項+作答答案,
請找出所有的矛盾集合(以及不矛盾的單獨選項),按照字典順序印出。
矛盾集合是指循環,像是 A > B > C > A 這樣,
也就是 A B C 在受試者心中的地位是不清楚的。
解法:找出所有強連通元件!
性向測驗亂填,其實是測的出來的。
矛盾越大圈就表示越不了解自己所要。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.175 (中滑一番)
作者: DJWS at 10/11/04
給定一個無向圖,
現在要把圖上的無向邊統統改成有向邊,並且新增一些有向邊,
讓圖上任意兩點都有路相通。
問:最少要新增多少有向邊?
解法在下面
如果無向圖上有橋,則改成單行道之後必定會不通。
所以考慮把所有環縮成一點,可以得到一個森林。
接下來請至討論板看解法說明...
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.175 (中滑一番)
▲ DJWS 改@2010/11/06 Sat 19:07:35
▲ DJWS 改@2010/12/24 Fri 23:44:33
作者: DJWS at 10/11/04
給定一個有向圖,
尋找最大的弱連通元件(Weakly Connected Component, WCC)是有幾個點?
(題目廢話好多...)
WCC的意思是:一個子圖,所有點對(s,t),s~>t或者t~>s,至少一邊有通,或兩邊都通。
解法在下面:
我的做法是這樣:
先找 SCC,變成 DAG,再用個 TS,最後再 DP。
(噢...好像太精簡了一點...)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.175 (中滑一番)
▲ DJWS 改@2010/11/04 Thu 19:42:24
作者: DJWS at 10/11/04
在微軟倒閉之後過了好幾年,來到了一個沒有通信設備的時代。
有個帝國,擁有 N 個火車站,有些火車站之間有鐵軌,鐵軌是雙向通行。
一開始所有的火車站之間都可以靠鐵軌連繫,
不過有個恐怖組織,製作了一顆飛彈,想要把其中一個火車站炸掉,阻攔訊息傳播。
帝國打算訓練一些鴿子,作為應變措施,
一旦有火車站被炸,就用飛鴿傳書,飛到各個被隔絕的火車站,以傳遞訊息。
(帝國不在火車站旁邊,所以就算沒有火車站被炸,至少還是需要一隻鴿子。)
帝國正在衡量要準備多少鴿子。
請問:被炸掉之後,帝國需要準備最多鴿子的火車站。
求出鴿子需求量排名前 M 名的火車站,以及對應的鴿子需求量。
輸入:
N(<=1000)與M(<=N),接下來是一堆數對表示鐵軌,以-1 -1結尾。
火車站編號為 0 ~ N-1。
輸出:
輸出M個數對,分別是被炸掉的火車站編號,以及需要的鴿子數目。
這M個數對,先以鴿子數由大到小排序,平手時再以火車站編號由小到大排序。
然後依序印出。
解答在下面:
就把每個火車站嘗試炸一炸,看看會被分成幾塊連通元件。
可以先把關節點都找出來,這樣就可以少試幾個火車站。
求關節點的途中,就可以順便計算會被分成幾塊連通元件。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.175 (中滑一番)
▲ DJWS 改@2010/11/04 Thu 20:18:18
作者: DJWS at 10/11/04
沙漠中有 N 個綠洲,M 條雙向道路,兩綠洲間可能不只一條路。
每條路都有一個長度值和溫度值。
現在給定起點綠洲、終點綠洲,
請找出最高溫度盡量低的路線,如果有多條,再找出長度最短的那一條。
輸入的順序是綠洲A、綠洲B、溫度R、距離D
輸出的第一行是路徑。輸出的第二行是「距離」再「溫度」,小數點一位。
解法在下面:
先用溫度找MST,再用距離找SPT。
找SPT時,只要符合溫度限制的邊都可以用,不一定只有MST上的邊可以用。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.175 (中滑一番)
→ poao 推:如果長度最短還是很多條呢QQ 1104 20:42
→ DJWS 說:題目沒有提到。我在猜是不是黃勾。 1104 20:48
▲ DJWS 改@2010/11/04 Thu 20:49:26
→ poao 說:黃勾是什麼Q 然後MST不唯一也會影響到答案吧? 1104 20:50
→ DJWS 說:噢...黃勾是舊系統的東西了 沒有移植過來 1104 21:08
→ DJWS 說:就是任何一組符合條件的解都可以 1104 21:09
→ yuscvscv 推:special judge? 1104 21:09
→ DJWS 說:剛剛試了一下,任何一組解都可以! 1104 22:06
→ poao 說:那我的實做一定爆炸了orz 1104 22:20
▲ DJWS 改@2010/11/04 Thu 22:45:21
→ DJWS 說:加油! 1104 22:47
→ poao 說:剛才找到癥結了xD 所以這題真的是Special Judge(? 1104 22:48
→ poao 說:其實出字典序最小Judge比較方便(思 1104 22:49
→ DJWS 推:luckycat有舊系統頁面的mirror 不過luckycat目前似乎死機中 1104 22:50
→ DJWS 推:哈...我也是印字典順序最小的 1104 22:51
→ yuscvscv 推:我記得有些題目要字典序最小反而難度會翻倍(?) 1104 22:55
→ poao 推:翻倍才好玩啊(? 1104 22:58
→ yuscvscv 推:樓上腹黑 1104 23:02
作者: DJWS at 10/11/05
有一位神勇的小朋友騎著三輪車去找他阿公。
當他騎到阿公的村莊大門口時,發現村莊裡的路不太平坦,騎車會很累。
於是他決定背著腳踏車走一條路,然後再接著騎一條路,兩者輪流,這樣比較不會累?
神勇的小朋友決定他一開始要先用背的,因為他來村莊大門口之前,已經騎有點累了。
他也決定最後一條路一定要用騎的,這樣才能讓阿公看到他帥氣騎著腳踏車的模樣。
請問小朋友能不能順利從村莊大門口騎到阿公家呢?
如果不行請印出「?」,如果可以就印出最短路徑長度。
輸入的第一行路口數 N (<=500) 和道路數 M。
道路不會有自迴圈。道路是雙向的。兩點間可能有多條道路。
接下來的M行是道路。
路口編號為0~N-1。村莊大門口是0,阿公家在N-1。
解法如下:
找一條長度為偶數的最短路徑。
把陣列開成 d[500][2] ,分成「背著車到達某點」與「騎著車到達某點」兩種。
然後跑 dijkstra 就可以了。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.175 (中滑一番)
▲ DJWS 改@2010/11/05 Fri 00:42:21
作者: DJWS at 10/11/05
學生步行時速 10km/hr
捷運行駛速度 40km/hr
學生想要用最快的時間到學校。
輸入第一行給定學生家座標,學校座標。
接下來是好幾條捷運線,一行一條捷運線,以-1 -1結尾。
相鄰兩個捷運站之間是直線前進,所有捷運站的座標都都以整數數對列出來。
整個地圖上最多有200個捷運站。
經過實測一行最多達到10000個字元(因為這個一直WA...)。
問學生到學校最少需要多少時間,四捨五入取整數。
可以假設學生去捷運站可以走直線,
轉車不花時間,學生可以直接跳上奔跑中的車子。
真是太理想了。
解法下一頁
很明顯的是最短路徑問題。
節點是200個捷運站+學生家+學校,
然後算好兩兩節點之間要花多少時間到達,
可能是坐捷運時間或步行時間這兩種其中一種。
最後跑個單源最短路徑就出來了。
要小心同一條地鐵線但是不相鄰的地鐵站,是不能以直線坐車到達的。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.175 (中滑一番)
▲ DJWS 改@2010/11/05 Fri 13:14:03
▲ DJWS 改@2010/11/05 Fri 13:29:15
▲ DJWS 改@2010/11/05 Fri 14:33:28
作者: DJWS at 10/11/05
這個城市有 N 個路口,
現在你要從一個路口花錢搭車到另一個路口,途中可以在路口轉車。
你所要考慮的是時間與金錢。
可以坐的車種有四種:
Name Type 時速 起跳(最低消費) 續跳 到車所需等待時間
三輪車 人力 10 km/h 5 元 / 前 1 km 2 元 / per km 2 min
電動車 機動 30 km/h 20 元 / 前 2 km 10 元 / per km 3 min
計程車 機動 50 km/h 20 元 / 前 2 km 16 元 / per km 10 min
公車 機動 40 km/h 2 元 / 前 5 km 1 元 / per km 30 min
道路一共有三種:
人力車道路 N、機動車道路 M、人力車/機動車都得通行道路 A。
道路都是雙向通行的。兩點間可能有多條路和多種路。
輸入:
第一行是路口數 N (<=100) 與道路數 M (<=N*N, >=0)
第二行是起點與終點。(路口編號0 ~ N-1)
第三行之後是M條道路,
每一行依序是起點、終點、長度(<=20整數)、道路類別(N/M/A)。
輸出:
第一行Case#1。
第二行印出最快路線的開銷與時間。若有多條時間最少路線,則再選開銷最少的。
第三行印出最省路線的開銷與時間。若有多條開銷最少路線,則再選時間最少的。
若不能到達,兩個都印UNREACHABLE。
開銷是整數。時間取小數兩位。
解法下一頁...
這一題的程式結構很複雜
要用兩個 adjacency lists 分別記錄人力路線和機動路線,我是這樣開的。
// adj[0] 是人力,adj[1] 是機動。
struct Road {int j, length;} adj[2][100][10000];
int size[2][100];
然後要開一個表格記錄四種車子的各種值,我是這樣開的:
const int car_type[4] = {0, 1, 1, 1};
const double speed[4] = {10, 30, 50, 40};
const double fare_cost[4] = {5, 20, 20, 2};
const double fare_time[4] = {1, 2, 2, 5};
const double jump_cost[4] = {2, 10, 16, 1};
const double wait_time[4] = {2, 3, 10, 30};
接下來是演算法。大原則是最短路徑,不過細節很繁瑣。
有一個重要的細節是(sample data測不出來的):
車子開始跳錶之後就變得很貴。
有時候為了更省錢,可以坐到一半忽然下車,然後再等一次車,
就算等的車還是跟剛剛同一種車。當然也可以視情況不下車繼續坐。
這就表示,當我們計算最短路徑時,
必須要紀錄現在坐的車子,自從從上車之後到底開了多遠,
這樣才能判斷有沒有跳錶,才能算出正確的開銷,才能找出最小的開銷。
所以狀態得開成 d[節點數][車種數][距離] 這麼多才行,
表示從起點到達某節點,目前搭的車是哪一種,以及這台車開了多遠。
我們發現公車是 5km 才開始跳錶,5km 是所有車種當中距離最大的,
所以狀態可以開成 d[0~99][0~3][0~5],也就是 d[100][4][5+1]。
(這邊講的不太清楚,可能要請各位多想想。)
接下來是實作。
一開始我用 dijkstra 實作,結果發現我想錯了。爆難寫的。
於是我改用狀態空間搜尋來做,並且建立一個 priority queue。
節點設計成這樣:
struct Node {
int i; // 抵達的路口
double time; // 時間
int cost; // 開銷
int car; // 車種
int drive; // 目前搭的這台車開了多遠
};
這個問題要求兩種路線,一種是最快路線,一種是最省路線,
其實只差在 priority queue 的排序方法不一樣而已。
所以我就寫了兩支比較函式給priority queue來用(C++的pq是由大排到小):
struct cmpTime {
bool operator()(const Node& a, const Node& b) const {
return a.time > b.time || a.time == b.time && a.cost > b.cost;
}
};
struct cmpCost {
bool operator()(const Node& a, const Node& b) const {
return a.cost > b.cost || a.cost == b.cost && a.time > b.time;
}
};
狀態空間搜索就寫成這樣:
template <class cmp>
bool UCS()
{
priority_queue<Node, vector<Node>, cmp> q;
.......
}
這個語法很少見,所以特別介紹一下。
接下來就簡單了,把四種起點塞入queue,然後慢慢pop,
每次pop,就嘗試搭四種車,嘗試搭到各個鄰點,並嘗試換車/不換車。
大致上就是如此了。
只要有毅力就能寫出來。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.175 (中滑一番)
▲ DJWS 改@2010/11/05 Fri 19:48:31
作者: DJWS at 10/11/05
有家觀光巴士公司,想要從一些觀光景點當中,
看看有沒有適當的觀光路線,建立一套便宜的旅遊行程。
關於巴士方面,巴士的所有費用就是油錢,再加上巴士進入觀光區要付的入場費。
公司打算以巴士所有費用的10%作為公司的利潤(這樣司機才有薪水...),
由參加的旅客平均分攤這些錢,當作旅客要負擔的車資。
簡單的說,巴士所有費用的110%由全體旅客分攤。
觀光巴士公司當然希望巴士費用越低越好,這樣旅客才不會覺得車錢太貴,不划算。
輸入:
觀光地點的數目 N (<=20),接下來是 N 個觀光地點名稱與車子入場費。
道路數目 M,接下來是 M 條道路與道路長度。油錢是道路長度的兩倍。
問題數目 Q,接下來是 Q 個起點和終點,以及參加的遊客數目。
針對每個問題,請輸出巴士費用最少的路線,以及每個遊客要負擔的車資。
解法在下一頁:
當然是最短路徑。
由於圖上的點和邊都有權重,
所以必須把一個點分裂成兩個點,中間加條邊,其權重是點的權重。
並且從無向圖改成有向圖,再來跑最短路徑。
然後 N 只有 20,所以看你喜歡用什麼演算法都可以。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.175 (中滑一番)
作者: suhorng at 10/11/06
※ 引述《seanwu ( )》之銘言:
> Lucky貓有中譯,這裡就不再多說了...
> <Hint PageDown>
順便提一下這種東西怎麼找
先找出遞迴式 C_{n+1} = C_n + C_{n-1} + 1, C_0 = C_1 = 1
因為有三項所以考慮 3x3 矩陣
/ ? ? ? \ / 1 \ / 1 \
| ? ? ? | * | C_{n-1} | = | C_n |
\ ? ? ? / \ C_n / \ C_{n+1} /
接下來比一比就很容易找出來了
第一列應該是 1 0 0
第二列要是 0 0 1 //把第三列的 C_n 移到第二列去
第三列就是遞迴式係數 1 1 1
//應該算高三課程範圍內 ?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 59.115.145.164 (中滑一番)
→ DJWS 說:高三學這個可能有點揠苗助長... 1106 13:56
→ DJWS 說:學過線性代數之後會對這個東西的性質比較熟悉 1106 13:57
→ yuscvscv 推:唔 我高一看完樓上的Q matrix 硬記起這個技巧了> < 1106 14:27
→ yuscvscv 推:NPSC超愛考QAQ 1106 14:27
→ DJWS 說:真的? 原來荼毒高中生的罪魁禍首就是我... orz 1106 14:43
→ yuscvscv 推:也不能這樣說啦 應該說NPSC才是罪魁禍首XD 1106 15:10
→ suhorng 推:我不覺得會揠苗助長啊Q______________Q 完全沒學過線代rz 1106 17:47
→ suhorng 說:對我來說他就是一種用來加速DP狀態轉移的方法而已ˊ___ˋ 1106 17:47
→ yuscvscv 推:同意樓上 感覺頗酷炫的東西XDD 1106 19:48
作者: DJWS at 10/11/06
有一個糊塗的教授把他的上課投影片都亂疊在一起了。
(就是那種透明膠片,在上面用簽字筆寫字畫圖,然後用光學投影機投出影像。)
(現在時代進步,各位可能已經沒在用這種東西了。可能只聽過強力小點投影片吧...)
好家在教授在投影片上面的某處都有寫上編號,
這樣他可以用編號判斷投影片的先後順序。
這教授有點ACM中毒現象。想要找自己麻煩。
他想要的整理方式是:
凡是有一張投影片,能夠一眼就看穿它是什麼編號之後,就抽出來。
如果一張投影片,不能一眼就確定它一定是那個編號,就不去碰他。
請問教授可以抽出多少投影片?
投影片以ABCDE...表示,編號以12345...表示。
一開始輸入會給N張投影片的座標,
投影片都是長方形,而且都放置的很端正,平行於座標軸,
座標以左界、右界、下界、上界表示。
接下來會有N個編號的座標,編號不會在投影片邊界上面。
(我想編號應該也都會在投影片裡面,不會有一個編號在所有投影片外面。)
輸出則是按照投影片順序輸出,
如果一張都抽不出來,就印出none。
每組輸出最後都要空一行。
解法在下一頁
有兩種作法,一種是greedy,一種是二分匹配。
[greedy作法]
單純的用greedy把投影片一張一張抽出來是行不通的。
因為要考慮兩種情況:確定是的,可以抽出來。確定抽不出來的,其實也可以過濾掉。
(例如投影片A與B,剛好都擁有編號1與2,此時AB互咬,確定抽不出來了。)
考慮這兩種情況就可以解出來了。
[二分匹配的做法]
理論上,隨便都可以做出一個完美匹配,找個匹配不是大問題。
重點在於,一張投影片,只能擁有剛好一個編號,不能多也不能少。
當一張投影片對應到一個特定編號後,
如果剩下來的投影片與編號可以形成完美匹配,
表示這張投影片對應到這個編號是很ok的。
現在這張投影片嘗試換一個編號,
如果剩下來的投影片又可以形成完美匹配,
這代表這張投影片改用這個編號也是很ok的,
這同時代表我們無法確定這張投影片的編號是多少,不能抽出來。
要找出所有可以抽出來的投影片,
只要依序窮舉這些投影片,並且驗證看看他是否剛好只有一個編號,如此便可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.156.248 (中滑一番)
▲ DJWS 改@2010/11/06 Sat 14:45:05
▲ DJWS 改@2010/11/06 Sat 14:49:36
作者: DJWS at 10/11/06
某人在一個花園,這個花園他再也熟悉不過,花園長怎樣他都知道。
這人好生無聊,
到了花園裡某處就定位後,戴上眼罩後自轉好幾圈,直到搞不清楚方向。
現在他要走出這個花園,要盡量避免踩到花。
(他感覺不到自己有沒有踩到花。)
他一定是往東西南北四個方向走,但是他不知道實際方向,
也就是說,他想好一種走法後,實際走下去可能會有四種不同路線。
因為地圖他都背起來了,他也知道這四種路線當中,會有一條路線會踩到最多的花。
所以他可以算出一種走法,最多可能會損失多少花。
請幫他想一個走法,這個走法的最多損失量是最少的。
花園是正方形,最大 21 x 21。
「.」代表草地,「R」代表花,「P」代表那個無聊的人。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.156.248 (中滑一番)
▲ DJWS 改@2010/11/06 Sat 23:26:45
作者: DJWS at 10/11/08
有 N 位素未謀面的兄弟想要進入一家餐廳,
每位兄弟都有一個江湖味程度值 Pi,另外還有一個奇摩子程度值 Si。
這家餐廳有個門,打開的程度以 0 1 ... K 表示,0表示門全關,K 代表門戶大開。
一開始門是關的,每經過一個時刻,
門可能會更開了一點 +1,也可能關上了一點 -1,也可能跟原來一樣 +0。
這些兄弟各自會在某個時刻 Ti 經過這間餐廳門口,
如果門開合的程度,剛好等於他的奇摩子,就會進入餐廳吃飯,不然他就走了。
請設計一個開關門的方式,
讓進入餐廳裡的兄弟們,整體江湖味最重。(這樣是想幹什麼...)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.21.25 (中滑一番)
作者: DJWS at 10/11/08
有 N 個玩家,
全部有三種職業,叫做 batsman bowling all-rounder。
每個人分別有三個能力值 Batting Bowling Fielding。
一個玩家若投入特定職業,則他的強度可以這樣計算:
投入batsman:0.8 * Batting + 0.2 * Fielding
投入bowler:0.7 * Bowling + 0.1 * Batting + 0.2 * Fielding
投入all-rounder:0.4 * Batting + 0.4 * Bowling + 0.2 * Fielding
(算出來的強度要馬上四捨五入。)
(也就是說這三個職業有點相關性。)
現在要出團了,這團要有a個batsman、b個bowling、c個all-rounder。
從 N 個人之中挑選 a+b+c 個玩家出來。
請讓整體強度總和最高。任意一種組合皆可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.21.25 (中滑一番)
▲ DJWS 改@2010/11/08 Mon 20:25:15
▲ DJWS 改@2010/11/08 Mon 20:50:29
作者: DJWS at 10/11/08
法院的審理結果會參考陪審團的意見。
現在有 N (<=200) 個陪審員,每個陪審員會為案件打兩個分數,
一個是有罪的分數,一個是無罪的分數。分數是 0~20 之間的整數。
法院想要挑出 M (<=20) 人,
讓這 M 個人的讓有罪分數總和、無罪分數總和,兩者的絕對值相差最少。
如果有多種選擇,就再找出有罪分數總和、無罪分數總和,兩者總和最大的。
如果還有多種選擇,則任意一種皆可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.156.100 (中滑一番)
→ DJWS 推:有人會寫嗎? 1108 21:11
▲ DJWS 改@2010/11/08 Mon 21:11:41
→ poao 說:昨天才看過這題 XD 不過沒有去想 1108 21:14
→ DJWS 推:這麼巧 XD 我在想可能是要弄一個 400 x 400 的狀態... 1108 21:15
→ suhorng 說:再乘上 20 ? 1108 21:16
→ suhorng 說:天哪還要輸出一組解 1108 21:18
→ DJWS 推:yes you got it! 不過時間複雜度太大了 XD 1108 21:18
→ poao 說:coquelicot: 200 * 20 * 400 * 2 1108 21:22
→ DJWS 推:噢...我好像隱約想到了... 先來寫寫看 1108 21:22
→ poao 說:不過他說好像失敗了XD 1108 21:23
→ DJWS 推:我想的是 20 * (400+400) 的狀態 然後同時算三種東西 1108 21:24
→ DJWS 推:我們講的是一樣的嗎? 好像一樣耶 XD 1108 21:25
→ poao 說:我好像知道你在講什麼xD 我寫寫看orz(? 1108 21:25
→ poao 說:三種東西還兩種ˊ口ˋ(思 1108 21:26
→ DJWS 推:我覺得是三種 其中兩種是要相加用的 1108 21:28
→ suhorng 說:絕對值嗎? 1108 21:28
→ suhorng 說:^差的 1108 21:28
→ DJWS 推:噢...後來我也用兩種了 不過我還是WA了... 1108 22:30
作者: suhorng at 10/11/08
給一個有理數 P/Q, 把它轉換成連分數輸出
也就是 a0 + 1/{ a1 + 1/{ a2 + 1/{ ... {a_{n-1} + 1/{an}} ... }}} 的形式
注意 P, Q 為整數,雖然 Q != 0 但是 P, Q 可能為負
P, Q 都不超過 2,000 位
即使 P, Q 為負輸出也不用多加括弧
癥結點: [ -1.3 ] = -2 => 所以 9 -5 的輸出應為 -2+1/{5}
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 61.217.33.120 (中滑一番)
作者: DJWS at 10/11/08
這一題以前有rejudge過,
我想我用的方法就是以前錯誤的方法。
我是建 bool table[1..200][0..20][-200...+200] 這麼多狀態,
用來存前N個人中,選出M個人,(有罪總和 減 無罪總和) 這個數值湊不湊得到。
如果中途有平手狀況,
則再比 (有罪總和 加 無罪總和) 比較大的。
不過後來想想,這個方法是錯的。
並不能保證目前總和比較大的,以後也會比較大。
subset sum problem 理論上是 NP 問題,不能用 greedy 解決。
目前正在想其他解法當中...
※ 引述《DJWS (...)》之銘言:
> 法院的審理結果會參考陪審團的意見。
> 現在有 N (<=200) 個陪審員,每個陪審員會為案件打兩個分數,
> 一個是有罪的分數,一個是無罪的分數。分數是 0~20 之間的整數。
> 法院想要挑出 M (<=20) 人,
> 讓這 M 個人的讓有罪分數總和、無罪分數總和,兩者的絕對值相差最少。
> 如果有多種選擇,就再找出有罪分數總和、無罪分數總和,兩者總和最大的。
> 如果還有多種選擇,則任意一種皆可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.156.100 (中滑一番)
▲ DJWS 改@2010/11/08 Mon 23:13:52
▲ DJWS 改@2010/11/08 Mon 23:15:43
→ poao 推:原來這樣是錯的Q! 1108 23:19
→ DJWS 推:啊...算好後再用backtracking硬幹 才2^20 應該會過。 1108 23:20
→ DJWS 推:趕快來試試看。 1108 23:20
→ poao 說:還沒參透這樣DP錯誤的原因(思 1108 23:23
→ DJWS 推:讓我想一下怎麼解釋好了...這有點抽象 1108 23:25
→ DJWS 推:結果還是TLE 似乎不是2^20 1108 23:54
→ kelvin 推:感覺狀態存的如果是 最小有罪+無罪總和是多少 應該沒有錯? 1109 02:40
→ yuscvscv 推:感覺用樓上的方式好像會變成一般的背包問題? 1109 07:46
→ DJWS 推:樓樓上我也有想過 不過這樣似乎也不能確定絕對值最小 1109 08:28
→ yuscvscv 推:多設個狀態維護>0的最小值和<0的最大值? 1109 08:33
→ DJWS 推:這樣一樣是subset sum喔 就跟正文講的情況類似 1109 08:35
→ DJWS 推:我現在是開一個 200 x 200 的陣列用 bitmask 硬上 1109 08:36
→ DJWS 推:不過正在 TLE 當中...正在想 cut 1109 08:37
→ kelvin 推:為啥我覺得可以呢... 陣列已經有一個index是差值了阿 1109 13:47
→ DJWS 推:但是陣列裡面沒有一個index是總和,這就是問題所在。 1109 23:52
→ DJWS 推:如果要解決subset sum`, 1109 23:52
→ DJWS 推:DP的狀態要有一個index是數值範圍才行。 1109 23:53
→ DJWS 推:而這個問題要同時滿足兩種subset sum,所以不能只算其中一種 1109 23:55
→ DJWS 推:有一種特例,狀態不用有一個index是數值範圍,就可以解 sub 1109 23:57
→ DJWS 說:sum,例如數字都是 1,或者數字剛好是 1 2 4 8 這種的。 1109 23:58
作者: suhorng at 10/11/09
給一張加權 DAG, 第一個點叫 Calgary, 最後一個點叫 Fredericton
有很多詢問, 每個詢問問從 Calgary 到 Fredericton 中間最多經過
q_i 個中繼點時的最少 cost。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 210.71.78.241 (台北一中)
作者: DJWS at 10/11/09
AC了
原來是有好幾個bug造成TLE...
解法下一頁
使用 UVA 10032 的技巧
開一個 200 x 400 x 400 的陣列,每個陣列元素都是 bitmap。
用來判斷 (A, B) 是否能湊到,能湊到的 M 都在 bitmap 裡面。
最後再窮舉 400 x 400 看看哪個絕對值最小。
我用 bottom-up DP 跑 1.3 秒左右
如果想要更快
可以用 top-down DP ,窮舉絕對值的時候注意一下順序,這樣應該可以跑很快。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.23.115 (中滑一番)
▲ DJWS 改@2010/11/09 Tue 12:55:04
▲ DJWS 改@2010/11/09 Tue 13:27:01
作者: suhorng at 10/11/09
※ 引述《sa072686 (藝術)》之銘言:
> ---- 分隔線 ----
超級卡特蘭 (Super Catalan Number)
http://mathworld.wolfram.com/SuperCatalanNumber.html
"Super Catalan numbers count the number of lattice paths with diagonal steps
from (n, n) to (0,0) which do not touch the diagonal line ."
S(1) = S(2) = 1
3(2n-3) S(n-1) - (n-3) S(n-2)
S(n) = ------------------------------------
n
那這樣就可以對應到括括弧了...嗎Orz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 210.71.78.241 (台北一中)
作者: kelvin at 10/11/10
※ 引述《DJWS (...)》之銘言:
> AC了
> 原來是有好幾個bug造成TLE...
> 解法下一頁
> 使用 UVA 10032 的技巧
> 開一個 200 x 400 x 400 的陣列,每個陣列元素都是 bitmap。
> 用來判斷 (A, B) 是否能湊到,能湊到的 M 都在 bitmap 裡面。
> 最後再窮舉 400 x 400 看看哪個絕對值最小。
> 我用 bottom-up DP 跑 1.3 秒左右
> 如果想要更快
> 可以用 top-down DP ,窮舉絕對值的時候注意一下順序,這樣應該可以跑很快。
其實你原本的方法應該是對的
所以其實只要開一個 opt[200][20][數值範圍(20*20*2)] 的陣列就可以了
opt[i][j][s] 代表 在前 i 人中, 挑 j 個, sigma(A)-sigma(B) 能否湊到
(^ 注意沒有絕對值)
能湊到的話, 最大的可能 sigma(A)+sigma(B) 是多少
並不會有你說的 "現在最大之後不一定最大的問題"
對於同樣 sigma(A)-sigma(B) 值的解裡面, 我們永遠只要考慮總和最大的這是一定的
細節注意一下就 ok 了
ps. A 是有罪, B 是無罪分數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by kelvin from 140.112.245.53 (台北帝國大學)
▲ kelvin 改@2010/11/10 Wed 09:11:57
作者: DJWS at 10/11/10
在 PKU 這個解法會 AC
在 UVA 這個解法會 WA
我看了幾個網路上的程式碼
很多都是用這裡所說的方法
但是我把程式碼送到 UVA 都是 WA
我自己實作的結果也是錯誤的(可能是那裡有疏忽?我再重寫一遍看看。)
如果你 AC 了,麻煩將程式碼借我研究一下,謝謝!
※ 引述《kelvin (球主)》之銘言:
> 其實你原本的方法應該是對的
> 所以其實只要開一個 opt[200][20][數值範圍(20*20*2)] 的陣列就可以了
> opt[i][j][s] 代表 在前 i 人中, 挑 j 個, sigma(A)-sigma(B) 能否湊到
> (^ 注意沒有絕對值)
> 能湊到的話, 最大的可能 sigma(A)+sigma(B) 是多少
> 並不會有你說的 "現在最大之後不一定最大的問題"
> 對於同樣 sigma(A)-sigma(B) 值的解裡面, 我們永遠只要考慮總和最大的這是一定的
^^^^^^^^^^^^
問題就在於為什麼這是一定的。
儘管 sigma(A) - sigma(B) 有最佳子結構,
但是此時並沒有保證 sigma(A) + sigma(B) 也有最佳子結構,
以大陸人的說法,就是這個 DP 沒有後效性。
這是我個人覺得,也可能是我想錯了。
應該要舉個反例才對,不過我也想不出什麼反例。 XD
> 細節注意一下就 ok 了
> ps. A 是有罪, B 是無罪分數
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.157 (中滑一番)
→ DJWS 說:慘了慘了 1110 14:19
→ DJWS 說:一下RTE 一下WA 真不知道我有沒有寫錯 XD 1110 14:20
→ DJWS 說:有沒有誰有 POJ 帳號 願意幫我送一下程式碼... 1110 14:22
→ DJWS 說:http://nopaste.csie.org/95e55 1110 14:24
→ DJWS 說:POJ 1015 UVA 323 1110 14:25
→ suhorng 說:POJ WA... 1110 14:27
→ DJWS 說:感謝 那應該是某個地方寫錯了 我再努力看一下... 1110 14:31
→ DJWS 推:啊...我終於AC啦!!! 1110 14:58
→ DJWS 推:沒錯沒錯 你的方法沒有錯! 1110 15:02
→ kelvin 推:XDD 恩我有AC, 不過也是在改了好一些 bug 之後XD 1110 15:39
→ DJWS 推:歡天喜地∼ 總算是徹底解決了∼ 1110 15:51
→ DJWS 說:這題我送了快要100次 XD 1110 15:51
→ poao 推:偷偷推一個AC(欸 不過UVa測資比PKU強好多orz 1110 16:47
→ DJWS 說:感謝各位指導。 :D 我也已經把之前寫錯的那篇文章刪掉了。 1110 21:35
作者: suhorng at 10/11/12
我們定義一個長度為 N 的 0-1 字串為 (N, K, M) 的 Tweedle number 如果
1. 這個字串開頭是 '1'
2. 這個字串剛好分成 K 塊 (連續的一串 '1'、'0' 為一塊)
3. 字串中的每一塊長度都不超過 M
給定 N, K, M 以及許多 Tweedle number,
對於所給的每個 Tweedle number,輸出它在 (N, K, M) 的 Tweedle numbers 中
依字典序排排第幾。
1≦N, K, M≦33.
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 210.71.78.241 (台北一中)
作者: suhorng.bbs@fgisc.twbbs.org at 10/11/14
作者: suhorng (to the sky) 站內: Programming
標題: Re: [ACM#] 10152 - ShellSort
時間: 2010/11/14 Sun 00:23:46
就是...其實這題可以直接線性XDrz //之前莫名寫爛WA害我困惑了很久...
考慮題目給的操作 (....) a (....) => a (....) (....)
直覺上會想到把一個數往左跑 然後去找出哪個數要移動這樣
但是換個方向想,這就等於我們可以從給定的序列中選出任意幾個數 (假設是 k 個)
用 k 的花費把這 k 個數依照我們希望的排列方式塞在新序列的左邊
然後舊序列剩下的數則往右依序塞在新序列的右邊那樣
我們希望 k 盡量小,也就是要讓塞在右邊的序列盡量長
而塞在右邊的序列因為不能重排 所以一定是 k+1, k+2, ..., n-1, n
那這樣做的總複雜度是 O(n + s), s 是字串總長
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_suhorng from_59.115.144.168(HiNet)
作者: DJWS at 10/11/25
有 N (< 20) 條單向環狀公車路線,D (< 30) 個司機,S (< 50) 個公車站牌。
每個司機固定跑其中一條路線,一直開下去。
如果兩台公車同時抵達同一個站,司機就會八卦一下。
所有公車都是定速定時,前往下一站都是固定時間。(是用傳送嗎...)
請問全部的司機是否都在同一個八卦網裡面,如果可以就印 Yes ,不行就印 No。
輸入第一行 N D S。 0 0 0 代表程式結束。
接下來有 N 個區塊,每個區塊有兩行,
第一行是環狀路線依序經過的站。至少兩站。而且環狀路線可能會重複經過一樣的站!
第二行是一堆數對 s d,代表司機 d 開的是這一條路線,從 s 站開始開。
解法請開燈
兩兩司機看看有沒有八卦機會。
gcd 催下去就對了。
最後判斷整張圖是否連通。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.152.252 (中滑一番)
▲ DJWS 改@2010/11/25 Thu 17:47:49
▲ DJWS 改@2011/01/16 Sun 17:23:08
作者: DJWS at 10/11/25
請看題目的範例輸入。地圖大小40x80,另外有一條底線。
請找出兩個@之間的最短路徑,並且是轉彎最少次的。統統印出來。
只能上下左右走。路徑長度是走過的格子數,包含起點終點。
外圍一定有牆。
解法請開燈
Dijkstra先跑個一次。比大小的原則是先比長度,再比轉彎次數。
實作時用priority queue比較好做,一次把整條直線上的節點都放進pq。
最後以回溯方式計算路徑數目,順便標記路徑。記得用DP。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.152.252 (中滑一番)
▲ DJWS 改@2010/11/25 Thu 17:45:13
作者: DJWS at 10/11/25
※ 引述《seanwu (海恩吳)》之銘言:
> 10089 Repackaging
> 有三種不同樣式的咖啡杯,以及N(3<=N<=1000)種包裏,每種包裏中有特定數量的咖啡杯
> 以(a,b,c)分別表示第一、第二、及第三種咖啡杯在這種包裏裡的數量
> 每種包裏的數量都是無限的,現在你必須拿出一些包裏使三種咖啡杯的總和一樣多
> 利如有 (1,2,3)、(1,11,5)、(9,4,3)、(2,3,2) ,則可以取
> (1,2,3)三個、(9,4,3)一個、(2,3,2)二個,於是三種咖啡杯的總和皆為 16個
> 輸出可不可以達成
另外一種解法:
把 (a, b, c) 統統弄成 (b-a, c-a) 的格式。
總和要一樣,也就是說這些向量可以互相打平,也就是說要有方向相反的向量。
把這些二維向量全部畫出來,中心在原點。
然後檢查兩兩相鄰向量的夾角是否都小於等於 180 度,若是則有解。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.152.252 (中滑一番)
作者: DJWS at 10/11/26
給定N種化合物
每一種化合物由A B C三種元素組成,比例是整數。
請問這N種化合物
能不能混成目標化合物
輸入第一行是N
後面有N行分別是N種化合物的A B C比例
最後一行是目標化合物的A B C比例
解法請開燈
有兩種解法
第一種:seanwu在10089所說的解法。
第二種:線性規劃 linear programming。這種我不會 XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.36 (中滑一番)
▲ DJWS 改@2010/11/26 Fri 14:36:51
作者: yuscvscv at 10/11/30
Happiness
Description
教授Kaykobad給了Nasa買點心給ACM參賽者的任務。
Nasa打算買n種不同的點心組成套餐,於是就問了m個參賽者他們分別可以吃下多少東西。
可是他們給不出一個客觀的答案,只說盡可能的多。
不過Nasa知道,給他們太多只會浪費食物,於是他決定不讓這種情況發生。
所以他巧妙的算出每個參賽者在得到某種點心1單位的時候時各能得到多少"飽足感",
但是當某個參賽者得到超過他自己的"飽足感"上限的時候就會浪費食物。
有可能會有某種點心讓某參賽者獲得0的滿足感。
所以他決定不要讓任何一個人獲得超過他自己的"飽足感"上限。
且可以給分數單位(非整數)的某種點心,但不要讓某個人超過他想要的數量。
然後還有個限制就是給每個人的各種點心數量都要一樣,這樣才不會有人抱怨。
//也就是每個人的配方都要一樣
最後,他希望知道他最多可以花多少錢在這個套餐組合上。
//我把happiness翻成飽足感可能會比較順暢
Input
輸入會有多筆。
對於每筆測資,
第一行包含2個整數 n (3 <= n <= 20)和 m (3 <= m <= 20)。
下一行包含n個實數,代表每單位的點心各花多少錢。
接下來的m行會各有n+1個實數表示每個參賽者的情形,
前n個數是這位參賽者吃了每單位的各點心會獲得多少飽足感。
最後一個數則是他的飽足感上限。
Output
對於每筆測資輸出一個整數代表Nasa最多可以花掉多少錢,如果答案非整數,向上取整。
你可以假設沒有任何的input會造成嚴重的浮點誤差。
Sample Input
3 3
1 0.67 1.67
1 2 1 430
3 0 2 460
1 4 0 420
Sample Output
Nasa can spend 1354 taka.
Solution
Linear Programming
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc45.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
作者: r51303 at 10/12/02
中譯:
應該沒看錯...
在索尼的使用者名單中
出現了一行很紅的程式碼
9 sa072686 AC Island EX 內測中 台北帝國大學 閱讀文章 獸猩
解題的方式聽說要問問SA大神本人才行
最後...敬祝
╭ ╭ ┌┐ ╭ ┌─╮ ╮
˙ ◢██◣ ◢██◣ ●│ │ ● │ │┌─╮ │●│
◢█▌█████▌██◣ ├─┤╭─╮├─┘│ │ ╰─┤
◢█◣██◤˙˙◣██◤█◣ │ ││ ││ ├─┘ │
◢█╭˙████████˙╭█◣ ┘ ╰╰─┴ ● │ ● ╰─┘●
★ ◤██◣█◤█◣◤█◣█◤██◣
█▌████▌██▌███▌██ ˙ ╭
◣██◤█◤█◣◤█◣█◣██◤ ★ ◢██◣ ★
█˙████▌██▌████˙█ █▌██
˙ █˙███╭█████╲██ █ ˙ ╲█◣██◤█ ˙
█ ╲█˙◤██◣H a p p y ╲█ █ █ ╲████╱ ◣
█ ╲██▌██ Birther Day╲█◤ █ ╲██╱ █
█ ╲◣██◤███████ ˙█ ◥ ╲╱ ◤ █
█◥ ——————————— █ ◥ ◥ ︳ ◤ ██
█◥ ︱ ˙█˙█˙█˙█˙█ █ ◥ ◥█◤ ██◤
★ █◥███████████ █ ∣∣∣ ◥████◤
█◥█˙█˙█˙█˙█˙█ ╰┼╯
███████████ ★ ∣ ˙
┬─╮ ★ ˙ ∣要幸福快樂喔By yuy1212000 ˙
│ │ ─ ∣ ╮ ┬─╮ ╮ │
├─┴╮│ ├╮─┼─ ├╮ ┌─╮ ├─╮ │ │ ╭─╮ ╰─┤ ★
│ ││ │ │ ∣∣ ├─╯ ∣ ╯ │ │ │●│ │
┴──╯ ╰─ ∣╰ ╰─╯ ┴─╯ ╰─┴ ╰─┘
--
→ リボーン說:廢材阿綱是不需要想太多的!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by r51303 from 208145.N.ncyu.edu.tw (鳴人的新家)
▲ r51303 改@2010/12/02 Thu 22:31:47
▲ r51303 改@2010/12/02 Thu 22:31:59
▲ r51303 改@2010/12/02 Thu 22:32:11
→ r51303 推:圖文轉載已經過原著同意 1202 22:32
作者: mp607 at 10/12/03
sa大神生日快樂XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by mp607 from 198018.coe.ncyu.edu.tw (嘉義大學)
作者: PG at 10/12/03
學弟生日快樂阿∼
期待老一歲之後可以來版上多多澆水 (誤
懷念sa大神的ACM文 XD
---
其實我還有很多八卦想問QQ
--
推 l17:五樓是手槍發電機
推 l17:五樓發電量可以亮起整座鬼島
推 l17:五樓來回簡協運動可以抗衡一次閃電
推 NaNaShinichi:蓋(?
推 l17:希望五樓可以替西子灣亮起一道曙光
→ l17:幹 四樓蓋闢
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by PG from 140.117.178.141 (西子灣大學)
作者: yuscvscv at 10/12/17
翻譯個水題
Description
社會研究組識打算用一組簡單的參數來模擬我國政黨運作,
其中一個參數為正整數 h (稱為 罷會參數(hartal parameter)),
用來表示同一個政黨連續兩次罷會的間隔時間,
雖然這個參數太過簡略了,但還是可以用來預測政黨罷會所帶來的負面影響。
接下來的例子會有清楚的說明:
考慮有三個政黨的情況,
假設 h1 = 3, h2 = 4, h3 = 8,其中 hi 為政黨 i(i=1, 2, 3)的罷會參數,
接下來我們模擬這三個政黨在N=14天內的罷會行為,
模擬的情況總是設定第一天為星期日,
每週的例假日(星期五與星期六)不會有罷會的情況。
//因為根本就沒開會= =
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Days
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
Party 1 x x x x
Party 2 x x x
Party 3 x
Hartals 1 2 3 4 5
上述的模擬結果顯示14天內將罷會5天(第3, 4, 8, 9, 12日),
而第6天沒有罷會是因為該天是例假日星期五,因此可看出兩週的議程已去掉了5天。
本問題會給定各個黨政的“罷會參數”與總議程的天數N,
你的任務是算出在N天內共有多少個工作天因為各政黨的罷會而導致議程延岩。
Input
輸入的第一列為一個用來表示有幾組測試資料的整數T。
每組測試資料的第一列為整數N ( 7 <= N <= 3650 ) ,用來表示所模擬議程的天數。
下一列為另一個整數P ( 1 <= P <= 100 )表示共有P個政黨,
接下來的P列分別為各政黨的罷會參數(絕不會為7的倍數)。
Output
輸出的每一列表示每一組測試資料所模擬出來的罷會天數(損失多少個工作天)。
Sample Input
2
14
3
3
4
8
100
4
12
15
25
40
Sample Output
5
15
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc45.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2010/12/17 Fri 13:13:51
作者: yuscvscv at 10/12/23
※ 引述《sa072686 (還太弱…練吧。)》之銘言:
翻議前文有,補個比較高效率的解法
防雷
> ---- 分隔線 ----
> 其實不會太難,時間似乎不緊。嗯,首先會想說對於每個長度而言
> 我們只需要最佳的。也就是說,很容易想到從長度 i 使用一個短字串組到長度 j
> 那麼我們需要知道的是長度 i 的最佳解,因為同樣使用一個短字串的話
> 使用最佳的方式組成長度 i 再加上一個短字串會比較好
> 因此,我們保留字串中每個長度 i 的最佳解,再看看能配上哪個短字串
> 再延伸出去,這樣子,因此使用 DP[i] 代表到長字串長度 i 時最少短字串數
> 那麼枚舉所有在長度 i 時剛好可以使用的短字串 s
> 則 DP[i+len(s)] 可由 DP[i] + 1 而來,只要檢查它是不是比較好的解即可
> 這樣設長字串長度 n,對於每個長度 i 枚舉 m 個短字串及它們的反轉
這個部份可以優化
> 設短字串長度最長 l 則最差情形是 O(n * m * l),最差是 10000 * 50 * 100
> 不過效率仍可以接受。並且,不以 DP[i] 去檢查所有 DP[i-len(s)] 的話
> 那麼由於 DP[i] 可能是稀疏的,就可以減少不少的時間
把所有短字串以及其反轉塞進trie,O(mL)。
之後每次轉移都是O(L),共n次。
我們可以在O(nL)的時間內完成轉移, 10000 * 100 頗快
在trie做靜態宣告,但沒有做優化的情況下,我是跑0.016。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 302pc45.c302.tnfsh.tn.edu.tw (台狼一中桑靈餓)
▲ yuscvscv 改@2010/12/23 Thu 10:43:43
作者: yuscvscv at 10/12/27
A Grouping Problem
Description
給你一個有 N 個正整數的集合,你可以任意取 K 個不同的元素來形成一個小組。
兩個小組如果有至少一個元素不相同就被當作是不同的小組。
舉個例子來說,假設這裡有 4 個元素 a, b, c, d。
你可以取 2 個不同的元素來形成 ab, ad, bc, cd 諸此之類的合法且不同的小組。
對於每個 K 可以形成一個完整的小組系統,
裡頭都是合法且不相同的小組,且數量最大化。
對於上面的例子,{ab, bc, cd, bd, ad, ac}是 K = 2 的完整小組系統。
對於一個特定的完整小組系統,有個"合適度",他是這樣計算的:
1.對於這個系統裡的每個小組都有個貢獻值,這個值是該組內的所有元素相乘。
2.總貢獻值是所有小組的貢獻值總和。
3.這個完整的小組系統的合適度是 總貢獻值 mod M , M是一個已知的參數。
在上面的例子,對於 K = 2,貢獻度 F2 = (ab+bc+cd+bd+ad+ac) mod M。
假設 K = 1, F1 = (a+b+c+d) mod M。
在這個問題,你必須找出擁有最大合適度的完整小組系統。
Input
每組測試資料將以兩個正整數 N (2 <= N <= 1000), M (1 <= M < 2^31) 開始。
接著幾行會共有 N 個正整數,每個正整數最大 1000。
輸入將結束於 N = M = 0。
Output
對於每組測試資料輸出一行,表示可能的最大合適度。
Sample Input
4 10
1 2 3 4
4 100
1 2 3 4
4 6
1 2 3 4
0 0
Sample Output
5
50
5
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by yuscvscv from 111.255.19.54 (中滑一番)
作者: DJWS at 10/12/27
※ 引述《sa072686 (sa~*)》之銘言:
> AC了,0.146sec,25名
> 據某s姓學弟說要用兩次warshall,我是只用一次啦囧
> 就談一下我的方法好了,學弟的就自己po吧XDDD
> 首先抓不重覆走的最短路徑和次短路徑
> 再拿最短路徑上所有點去重覆走看看
> 已知走出去後繞一圈再回來不會比較好,反正是雙向道路
> 所以一定可以直接回來,這是最佳策略,故取路上所有點
> 出去回來最短者為最佳,此為必重覆走之最短路徑
> 比較不重覆走與必重覆走之次短路徑即可
先跑一次Floyd-Warshall
針對每次查詢 (s,t)
窮舉邊 (i,j),找出 shortest(s,i) + adj(i,j) + shortest(j,t) 最大者,
但是不可以等於 shortest(s,t)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.173 (中滑一番)
作者: DJWS at 10/12/30
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> 排序然後加 prunning、queue size 800、初始兩字串長度 2000、nodes 300000。
> ※ 引述《sa072686 (衝一發台大資工!)》之銘言:
> > 給兩個字串以及一個字串集合,試求在這兩字串的尾巴接上字串集合中的任意數目字串後
> > 能否成為相同字串,能的話輸出最小步驟數。
> > 開 Trie 加 BFS,以兩字串間的「差異」作為狀態。
介紹一個好用的工具
struct cmp_str {
bool operator()(char const* a, char const* b) {
return strcmp(a, b) < 0;
}
};
set<char*, cmp_str> visit;
有了這個你可以少寫100行。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 220.137.22.143 (中滑一番)
→ yuscvscv 推:set<string> XD 1230 16:09
→ skg 推:STL?? 1230 20:11
→ yuscvscv 推:是啊XD 1230 22:22
→ DJWS 推:因為字串都已經存到陣列裡了 所以用char*就夠了 省空間! 0105 01:03
作者: DJWS at 11/01/07
有一個橫向卷軸2D畫面,
奇數座標位置有垂直的牆壁,高度不一。
現在有一個水龍頭在座標0一直滴水,
請問要流出多少水量,才能讓水流出最左邊或最右的牆壁外面。水量以面積計算。
輸入一開始是兩個整數,代表最左邊和最右邊的牆壁位置。一定是奇數,可以是負值。
接下來是一連串非負整數,代表由左到右每個奇數座標位置的牆壁高度。
請愛用long long。
解法請開燈
這題是在考驗程式設計功力
一、在左與右弄出一個無限高牆壁,比較好寫。
二、由左到右找遞增序列,直到超過原點。
由右到左也一樣算一次。兩者的最小值就是答案。
三、當超過原點的那一剎那,小心牆壁一樣高的情況。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.156.167 (中滑一番)
▲ DJWS 改@2011/01/07 Fri 01:38:54
作者: DJWS at 11/01/07
每組input兩行
第一行是一個數學等式,但是沒有運算符號,僅有一個等號。
第二行是可運用的運算符號,只有加減乘除四種。
請把運算符號全部插入到式子當中,讓等式成立,並印出等式,任何一組解都可以。
如果等式不可能成立就印出 NO SOLUTION
運算符號沒有優先次序,一律由左往右算。
注意不能除以零、不能有開頭為零的數字、加減法運算符號不能當正負符號來用。
解法請開燈
統計一下運算符號。
窮舉所有可能的式子,每窮舉一個式子,就算一下等式兩邊相不相等。
這題不用cut也能通過。概念上很簡單,就是考驗你程設技巧。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.81 (中滑一番)
作者: DJWS at 11/01/07
題目很長,只講題幹。
每組輸入一開始有兩個數字K(1<=K<=7)和N(1<=N<=2000000000)。
(想像一下現在有一個長度為K的數列,共有K個整數。)
接下來有K個整數數對,代表數列每一項的下限與上限。
(可以填這個範圍以內的任意一個整數值。)
問總和為N的數列共有幾種。
答案最多有60位數。
解法請開燈
排容原理+重複組合H
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.81 (中滑一番)
▲ DJWS 改@2011/01/07 Fri 19:24:42
▲ DJWS 改@2011/01/07 Fri 19:26:02
作者: DJWS at 11/01/07
給三個數字 A B N (0 <= A <= B <= 2000000000) (0 <= N <= 999)
求區間 [A, B] 有多少數字,含有一段字串是 N。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.81 (中滑一番)
作者: DJWS at 11/01/08
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> ※ 本文轉錄自 [sa072686] 信箱
> 作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
> 標題: [筆記] 184 Accepted
> 時間: 2009/07/08 Wed 17:51:00
> 作者: sa072686 (為未來舖路) 站內: sa072686
> 標題: [筆記] 184 Accepted
> 時間: 2008/02/15 Fri 11:53:07
> 給許多點,求是否有超過兩個點的直線。最多三百個點,同一直線上不會有超過十個點。
> 用向量做n^3的枚舉就可以了。最後建表排序輸出。
一開始就先按照(X,Y)座標排序。
然後三層迴圈窮舉,窮舉的順序剛好就會是印的順序。
已經共線的點對就標記起來。
時間複雜度 O(N^3 * 10)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.157.226 (中滑一番)
作者: DJWS at 11/01/09
10366 的復仇。
現在有一個3D空間和一個地板,以1x1x1的方塊工整的疊在地板上,左上角座標是(1,1)
第一行代表地板大小 M 與 N (1<=M,N<=10)
第二行代表水龍頭座標 R 與 C,水龍頭會在地板範圍以內。
第三行之後是 M x N 個數字,代表每個位置疊起來的高度,高度只有0到9。
水只會往四方向流,不會流斜角。
根據討論區說明,水會立即擴散到所有與該格等高的地方,然後同時且平均的往低處流。
請問要水龍頭流多少水量之後,水會溢出邊界。
答案印到小數點兩位。
這題解法跟之前那題完全不一樣。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.154.201 (中滑一番)
▲ DJWS 改@2011/01/09 Sun 17:40:08
作者: DJWS at 11/01/14
有一個部落,每年都會把原來的酋長給吃了,然後選新的酋長。
選酋長的方法,就是大家圍成一個圈圈,
然後由整個部落年紀最大的人開始數數,
每數到第15人,就讓此人離開圈圈,然後由他的下一位繼續開始重新數,
最後剩下的那一個人當酋長。
你已經預先查到整個部落年紀最大的人是誰,
你想知道到時候你該距離他多少人次,你才不用當酋長。
但是你不知道到時候是順時針數還是逆時針數。
每筆輸入是一行兩個數字,
為部落總人數的可能範圍(高低可以顛倒),不會超過1000000人,已經去掉現任酋長。
請求出一定安全的位置,如果有多個,就選數字最小的那個。
如果沒有一定安全的位置,就印出Better estimate needed。
另外就是,你不會是年紀最大的那個人,所以答案至少是一。
解法請開燈
這就 Josephus Problem。
因為人數範圍大,所以要用DP,預先建表,把1-1000000人的結果都算出來。
每個查詢,暴力法把危險位置標在bool陣列,然後再掃描一遍陣列找安全位置。
bool陣列的索引值,是你與年紀最大的人的距離。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.152.139 (中滑一番)
▲ DJWS 改@2011/01/14 Fri 13:30:16
▲ DJWS 改@2011/01/16 Sun 19:53:17
作者: DJWS at 11/01/14
在一個棋盤狀格子點上,從(0,0)開始走,
直走一格,然後左轉或右轉,
直走兩格,然後左轉或右轉,
....
直走N-1格,然後左轉或右轉,
直走N格,回到(0,0),而且與第一條直線垂直。
路線不相交、不重疊,而且相鄰直線皆垂直,這種圖形稱作 Golygon。
但在本題當中,第一條直線和最後一條直線可以不必垂直。
輸入一開始有個正整數代表測試資料有幾組。
資料第一行有一個正整數(<=20),代表最後一條直線有多長(即是直線數量)。
第二行代表障礙物數目(<=50),Golygon不得穿過障礙物。
接下來列出所有障礙物的座標。座標範圍不知道,應該沒有超過正負150。 XD
請輸出所有的Golygon走法,以及Golygon個數。
每組輸出後面都要空一行。
解法請開燈
根據 mathworld 網頁,Golygon的直線數目一定是 8 的倍數。
這一題因為第一條直線和最後一條直線可以不必垂直,加上直線數量不超過20。
所以我們只要尋找直線數量為 7 8 15 16 這四種情形即可。
要預先建表,甚至直接寫死在程式碼裡面。
http://bal4u.dip.jp/mt/program/2006/05/uva-225-golygons.html
真對每組測試資料,就拿出所有路線,每一條實際走走看會不會碰到障礙物。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.107 (中滑一番)
▲ DJWS 改@2011/01/14 Fri 14:47:11
作者: DJWS at 11/01/14
有個正方形房間,大小為(0,0)到(10,10)。
B在房間裡藏了一個東西讓A找。A進入了房間,站在(0,0)。
接下來A開始移動到下一個座標,然後停下來等B回覆。
如果A離東西更近了,B就會喊Hotter。更遠則喊Colder,一樣遠則喊Same。
輸入不超過50行,每一行代表A移動到的座標(浮點數),以及B的回覆。
請隨時輸出藏物的可能位置的面積大小,印到小數點第二位。
如果B講的話不合理,就印 0.00。接下來不管講什麼應該都是印 0.00。
解法請開燈
半平面交
上一點為p 這一點為q
hotter: pq 的中垂線,p側的半平面。不含邊界。
colder: pq 的中垂線,q側的半平面。不含邊界。
same: pq 的中垂線。看看是否目前的面有沒有跟中垂線相交。
但是不管有沒有相交,答案都是0.00。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.107 (中滑一番)
▲ DJWS 改@2011/01/14 Fri 17:47:15
作者: DJWS at 11/01/14
第一行為測試資料數,資料間以空行隔開。
資料第一行是原字串。
第二行以後都是轉換規則,可以不斷利用。
只要字串的任何一個地方有出現該片段,就可以轉換。
原字串和轉換規則的字串,只會有英文字母,並以雙引號框起來。
問原字串經過任意次數轉換,所能形成的字串共有多少種。
若超過一千種,就印「太多了」。
每組輸出間空一行。
解法請開燈
用暴力法,逐一比對所有可能的位置,嘗試生成新字串。
生成新字串就紀錄起來。已有的字串就不再生。
善用 STL 會寫的愉快。主要會用到 string::find() 以及 set<string>。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.107 (中滑一番)
▲ DJWS 改@2011/01/14 Fri 20:19:00
作者: DJWS at 11/01/15
求複數的n次方根,
輸出時,將所有根按照降序排列,先排實部,再排虛部,印到小數點後三位。
解法就是棣美弗定理De Moivre's formula,高三數學。
想要自己慢慢算,或者利用複數的函式庫來弄,都是可以的。
雖然不難算,但是這題官方測資很有問題,非常難AC。
幸好討論板已經有強者發明一堆招數,弄到可以AC了,在這裡列一下。
1) 排序的時候,判斷大於、等於時,一定要用 eps = 1e-6。
2) 不能印出 -0.000 這樣的東西,
可以先用 sprintf 印到字串,然後再用 sscanf 把數字讀回來,就可以去掉正負號。
3) 最後印出來時,實部和虛部一定要再加上 eps = 1e-6。
這樣就會莫名其妙的過了。
我有試過很多方法,例如先截出三位數之後,再直接排序,結果還是會錯。
把人家舊系統會AC的程式碼拿來送也會錯,總之這題很奇怪。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.107 (中滑一番)
▲ DJWS 改@2011/01/15 Sat 01:53:26
▲ DJWS 改@2011/01/15 Sat 01:55:39
▲ DJWS 改@2011/01/15 Sat 13:35:32
作者: DJWS at 11/01/15
有一種加密方式,是把字元逐字替換成數字。
這加密方式設計不良,解密時可能會有多種結果。
現在給一密文,請問本文會有哪些可能,按字典順序印出。
若超過100種可能,就只印前100個。
每組資料第一行為N,代表接下來有多少種編碼規則。 N=0代表結束。
接下來的N行,每一行會有一個小寫英文字母,以及一個小於100的正整數。
小寫英文字母是本文,正整數則是相對應的密文。
注意到密文開頭可以自由添加0。
例如輸入 a 25。
當本文含有a,a就可以替換成25,也可以替換成025,0025,00025等等。
資料的最後一行,是密文,長度不超過100。
討論板上有很多測試資料都是不符合格式的。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.158.105 (中滑一番)
作者: DJWS at 11/01/16
奧林匹亞賽事中,比賽優異的選手會獲得金銀銅牌,
我們可以把每個國家獲得的金銀銅排統計一下,
就知道那個國家表現最好。
然而有些國家很少拿到金牌,
又加上每個國家派出的人數都不一樣多,
所以不管是用得牌總數目來決定國家強弱,或用字典順序來決定國家強弱,都不太公平。
尤其是對加拿大這種拿很多銀牌卻拿不到金牌,參賽人數又很少的國家,
用上述方式來評比,加拿大就變得表現相當差。
於是現在加拿大想要設計一種新的評比方式,
令金牌數乘上加權 N^(-j),銀牌數乘上加權 N^(-k),銅牌數乘上加權 N^(-l),
然後三個數值加起來,當作一個國家的分數。
N是大會發出去的總牌數,j k l 是任意整數,可正可負可為零。
問有沒有辦法找到一種加權方式,讓加拿大成為第一名的國家。
如果有就印出「加拿大贏」,沒有就印出「加拿大不會贏」。
每組測試資料的第一行是參賽國家數目X,
接下來會有X行,每行有一個國家名與金銀銅得牌數。
最多有20個國家,總牌數小於100。
X=0代表測試資料結束。
解法請開燈
如果 N 夠大,而且 j k l 的大小順序決定之後,則 j k l 實際數值不重要。
例如 N = 100,且 j < k < l < 0,可以發現金牌數加權之後就變暴多的,
銀銅牌也就沒必要比了,管他 k l 有多大,金牌決定一切。
所以這一題就產生一個奧步解法,只測少量的 j k l 然後去算分數。
找出 j k l 所有可能的相對關係,然後代入簡單的數字,例如-3 ~ +3。
每一組 i k l 都看看加拿大是不是第一名即可。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.157.176 (中滑一番)
▲ DJWS 改@2011/01/16 Sun 17:06:24
▲ DJWS 改@2011/01/16 Sun 17:13:55
▲ DJWS 改@2011/01/16 Sun 21:49:15
▲ DJWS 改@2011/01/16 Sun 21:52:24
作者: DJWS at 11/01/16
二維棋盤上面有O和X,至於.代表空格。
現在所有O與X同時各自移動一格、或不動,移動方向是四方向之一。
移動之後不能有相疊的情形。
給定兩盤面,問左盤面變成右盤面,兩元素剛好對調的最少次數。
如果左盤面不可能變成右盤面,就印出-1。
我用的解法很爛,希望有人可以教我更好的解法。
我的解法是 5^(8*8) 的暴搜,用了幾個cut之後,僥倖的過了:
1) OX前後數目不一樣多,就一定是無解。
2) 如果當前的對調次數,超過或等於當前最佳解,就cut。(此即bounding)
3) 如果是一樣的元素對調,就cut。
4) 紀錄右盤面的每個元素是從哪裡移來的。
每橫向掃完一行,就檢查上方一行,是不是都就定位了。沒有就定位就cut。
(也可以每做完一格,就檢查上方格是否已經就定位。)
時間 1.468
雖然是很難的題目,但是還是存在奧步。 :D
補充一下,剛剛又想到一個cut。
5) 記錄前n行的對調次數最小值。當前的對調次數若超過此最小值則可cut。
(此即memoization。我猜DP應該也是使用這個原理。)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.157.176 (中滑一番)
▲ DJWS 改@2011/01/16 Sun 21:33:44
▲ DJWS 改@2011/01/16 Sun 21:34:11
▲ DJWS 改@2011/01/16 Sun 21:43:28
▲ DJWS 改@2011/01/16 Sun 21:44:37
作者: DJWS at 11/01/16
(這個題目跟資訊安全有那麼一點關係。)
有一個古老的加解密方式叫做 playfair cipher。
雖然他在古代是非常好用的加解密方式,但是到了現代已經能用電腦破解了。
你所要做的事情就是親自用電腦證明這件事。
以下要介紹加密的過程。首先是第一階段。
1) 首先去除所有非英文字母的字元,只留下英文字母。
2) 英文字母全部轉成大寫。
3) 字母J都換成字母I。
4) 從頭開始,每兩個字母一組,字母的先後關係仍然存在。每一組都稱做一個digraph。
5) 從頭開始檢查digraph,目標是讓digraph都是不一樣的兩個大寫字母。
5-1) 如果digraph的兩個字母一樣,就在第一個字母後面插入X。後面順移並重組。
5-2) 如果digraph的兩個字母都是X,就在第一個字母後面插入字母Q。後面順移並重組。
6-1) 如果最後一個字母是單獨的,就在後面加上字母X。
6-2) 如果最後一個字母是單獨的,剛好又是X,就在後面加上字母Q。
第二階段。
7) 建立key,key是一個5x5的方陣,裡面剛好有25個不同的大寫字母,不含字母J。
8) 每個digraph各自加密。
8-1) 如果digraph的兩個字母,出現在方陣的同一橫線,
那麼第一個字母變成他在方陣中的右方字母,第二個字母亦如是。可橫向循環。
8-2) 如果digraph的兩個字母,出現在方陣的同一直線,
那麼第一個字母變成他在方陣中的下方字母,第二個字母亦如是。可直向循環。
8-3) 如果digraph的兩個字母,出現在方陣的不同橫線且不同直線,
第一個字母變成第一個字母在方陣中之橫列、第二個字母在方陣中之直列,
該位置的字母。
第二個字母變成第二個字母在方陣中之橫列、第一個字母在方陣中之直列,
該位置的字母。
都是橫向移動。
至於解密方式,則是各位的問題了,相信大家都能想出來。(這句話是題目說的)
接下來是輸出入。一開始有資料組數。
每組資料有三部分,每個部分的結尾都有一個#用來隔開。
第一部分:明文。
第二部份:對應的密文。
第三部分:另一個待解密的密文。
你的目標是先用第一部分與第二部分暴力破解key,然後解密第三部分。
請輸出第三部分解密之後的digraph們。給定的測試資料保證能正常加解密。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.157.176 (中滑一番)
▲ DJWS 改@2011/01/16 Sun 23:38:35
作者: DJWS at 11/01/18
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> 長度一定大於1,而且加密後的字串前兩字與加密函數的第二個參數一致。
> 已知密碼長度5~8,扣去中間特殊字元,另一單字最短2個字元,因此單字長度
> 最長不得超過5個字元。所以如果長度不在2到5之間就不用考慮,接著是
> 如果直接枚舉任兩個單字會造成TLE,可是只枚舉長度相加和等於7的,
> 就可以在1秒左右AC,也就是說很奇怪的是答案長度一定是8。
> 密碼長度5到8,可是默認只有長度8竟然也會AC。
1) cin.getline(s, 1<<15, EOF) 可以直接讀到檔案結束,非常快樂。
2) 用個 for 迴圈把非字母都改成空白鍵,然後用 sscanf / istringstream,非常快樂。
3) 或者用個 for 迴圈把非字母都改成 '\0'。記得要算好字串總長度。
4) 用個 set<string> 或 set<char*> 記下長度為2-5的單字。自動去除重複單字。
5) 然後枚舉任兩個單字,中間插入0/2/4/8,然後試看看是不是密碼。
答案長度剛好是8,應該是測試資料太弱的關係。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.155.58 (中滑一番)
▲ DJWS 改@2011/01/18 Tue 13:47:16
▲ DJWS 改@2011/01/18 Tue 13:50:04
作者: DJWS at 11/01/30
有 N 個圓環,M 條等長的繩子,
兩兩圓環用繩子繫住,就像 o-----o 這樣。
繫好之後,
右手拿某一個環,左手拿另一個環,並且盡力張開拉直。
此時有些環會拉成一直線,有些環會垂下來。
請問在直線上的繩索最多是幾條?
拉的時候可以假設環不會互相纏住。
輸入一開始是測試資料組數。
每組測試資料一開始有兩行,分別是 N 與 M。
接下來是 M 行,每一行代表哪兩個環有用繩子連接。
環的編號是 0 ~ N-1,
不會有繩子兩端繫在同一個環的情況。
相異的兩環之間最多也只會繫一條繩子。
解法請參考討論板!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.156.41 (中滑一番)
→ yuscvscv 推:N <= 120, M <= N(N-1)/2 0130 00:14
作者: DJWS at 11/01/30
有一個公園,N個路口,M條直線小徑,
任意兩個路口之間最多只有一條路可通。
現在要在某些路口設置路燈,路燈只能照到相鄰的小徑。
讓所有小徑都能被燈光照到,這樣就不會有人迷失在某個路口。
請輸出
(1) 最少要幾個路燈
(2) 同時被兩個路燈照到的小徑最多是幾條。
(3) 剛好被一個路燈照到的小徑最少是幾條。
解法請開燈
無向樹(森林)的 minimum vertex cover。
必須用DP來解。dp[i][0]代表根沒放路燈,dp[i][1]代表根有放路燈。
(2) 是 (1) 的次要條件,也就是當 (1) 平手時要小心處理。
(3) = E - (2)
最後要小心單獨的點。單獨的點不用放路燈。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.156.139 (中滑一番)
▲ DJWS 改@2011/04/03 Sun 16:49:41
作者: dreamoon at 11/02/01
Volumn I中鮮少人寫得但並不複雜的題目
這題竟然沒人翻譯我有點難過...
---
Impecunia這個地方沒有徵稅,他們的政府靠發行彩卷賺錢(有點強迫式的就是了)。
他們的彩卷原本是八碼,從右邊數來第八碼是區域碼,區域碼為1~9的整數。
不過現在彩卷以不敷使用,且又增加了一個區域,所以彩卷增加了兩碼變為十碼,區域碼
仍在右邊數來第八碼而區域碼也增加了0這個數(不過0那個區域沒有0000000000這張彩卷)
。
每個區域的得獎號碼是個別抽的,他們希望你能計算每個位數的各個數字的分佈。
現在給你某個區域的彩卷下一張被賣出的彩卷號碼,以及要你計算已賣出彩卷數字分佈的
位數(彩卷賣出順序是由小到大賣出),把所問位數為0~9的彩卷個數依序輸出。
---
簡化題目:
給你一個10位數d和一個1~10的整數k
要你求出0000000001 ~ d 中 右邊數來第八位和d相同的所有數字
從左邊數來第k為的數字是i的有幾個(i=0~9依序印出)
測資當讀到0000000000 0時結束
輸出:
每組測資會有十個數字
每個數字自己一行對齊右邊第11個column
每組測資間空一行
舉例:
4810000000 1
第一位數是0的有0010000000~0919999999共100000000個
第一位數是1的有1010000000~1919999999共100000000個
第一位數是2的有2010000000~2919999999共100000000個
第一位數是3的有3010000000~3919999999共100000000個
第一位數是4的有4010000000~4719999999共80000000個
第一位數是5~9的都是0個
---
翻得好爛Q_Q
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by dreamoon from 125.226.248.221 (中滑一番)
作者: DJWS at 11/02/05
給一個房間,房間的牆壁一定是水平或垂直,牆壁也不會重疊。
所有牆壁以水平、垂直、水平、垂直的順序連接成一個簡單多邊形。
問能不能在房間裡面的某一點放一個監視器,
讓監視器轉360度後可以看到整個房間。
輸入第一個數字是轉角數目N (N<=100), N=0代表程式結束。
接下來是N個牆壁轉彎處的座標,以順時針順序排列,座標都是整數。
轉彎一定是轉90度。
解法請開燈
這個問題就是在問一個簡單多邊形是否有核(kernel)。
不過由於牆壁都是垂直或水平的關係,所以就有很簡單的判斷方法。
以順時針順序來看的話,
1) 當看到一個往下的牆壁,它的右半面有往上的牆壁,那就無解。
2) 當看到一個往左的牆壁,它的下半面有往右的牆壁,那就無解。
3) 當看到一個往上的牆壁,它的左半面有往下的牆壁,那就無解。就是 1)。
4) 當看到一個往右的牆壁,它的上半面有往左的牆壁,那就無解。就是 2)。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.155.182 (中滑一番)
▲ DJWS 改@2011/02/05 Sat 20:34:36
▲ DJWS 改@2011/02/10 Thu 14:02:34
作者: DJWS at 11/02/09
科學家手上有一台疑似可以與外星人溝通的電腦:
一、每當使用者輸入一個字元,螢幕就會立即出現該字元,
同時電腦也會把這個字元以電磁波方式傳送到外太空。
二、當電腦接收到來自外星人的回覆,也會馬上將接收到的字元顯示在螢幕上。
最後螢幕上就會出現一字串,
有著使用者輸入的字元,並且混雜著外星人回覆的字元。
但是我們分不清什麼字元是使用者打的,什麼字元是外星人回覆的。
舉例來說,使用者輸入ABC,外星人回覆ABC,螢幕上的顯示結果可能是:
ABCABC
AABBCC
AABCBC
ABABCC
......等等等等
科學家想請你幫忙寫個程式,判斷電腦裡出現的訊息是不是真的是外星人回覆的。
一、凡是使用者輸入了字元,外星人就一定有回覆,而且是回覆一樣的字元。
二、回覆的順序與輸入的順序完全一樣。
三、無論任何時刻,尚待回覆的字元數目,不超過十個。
輸入第一行是字串數目N,接下來有N個字串,字串長度會「略大」於1000個字元。
請判斷給定字串是下列三種情形的哪一種。
請依序判斷,只要有可能是,就算是。
一、An echo string with buffer size ten:
使用者輸入的每個字元,外星人都有做回覆,且回覆順序也正確。
無論任何時刻,尚待回覆的字元不超過十個。
例如 01234567890123456789
例如 00112233445566778899
不屬於這種情形的 0123456789A0123456789A (尚待回覆的字元超過十個)
二、Not an echo string, but still consistent with the theory
跟一差不多,只是最後有些字元尚未收到回覆。
例如 0123456789
例如 0123456789012345
不屬於這種情形的 0123456789A
不屬於這種情形的 012345678956789
三、Not consistent with the theory
不可能是一也不可能是二。
解法請開燈:
暴搜,記得做memoization。
回覆一定是對應到最先出現的相同字元。
可能也可以使用DP,變成括號對稱之類的問題,並記錄括號層數。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.152.114 (中滑一番)
→ dreamoon 推:題目意思很難搞懂... 0210 20:20
→ DJWS 說:我又改了一下,這樣有沒有比較清楚? 0210 21:49
▲ DJWS 改@2011/02/10 Thu 22:09:10
→ DJWS 說:我又改了很多下... 好吧 希望不要再改了 XD 0210 22:09
→ dreamoon 說:我是看到討論區說 0210 22:52
→ dreamoon 說:01234567890123455678AB是 0210 22:53
→ dreamoon 說:Not an echo string, but still consistent with the 0210 22:53
→ dreamoon 說:theory 0210 22:53
→ dreamoon 說:就嚇到了,跟我理解的不一樣 0210 22:53
→ dreamoon 說:然後我覺得沒可能用括號對稱之類的方法做 0210 22:55
→ dreamoon 說:他沒有括號的性質 0210 22:55
▲ DJWS 改@2011/02/11 Fri 00:46:11
→ DJWS 說:又改了一下 XD 0211 00:46
作者: DJWS at 11/02/11
→ dreamoon 說:我是看到討論區說 0210 22:52
→ dreamoon 說:01234567890123455678AB是 0210 22:53
→ dreamoon 說:Not an echo string, but still consistent with the 0210 22:53
→ dreamoon 說:theory 0210 22:53
→ dreamoon 說:就嚇到了,跟我理解的不一樣 0210 22:53
********** * **
01234567890123455678AB
****** ***
Not an echo string, but still consistent with the theory.
→ dreamoon 說:然後我覺得沒可能用括號對稱之類的方法做 0210 22:55
→ dreamoon 說:他沒有括號的性質 0210 22:55
直接來看是沒有。
凡事都是很難講的,說不定就有人知道怎麼用DP寫。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.142 (中滑一番)
→ dreamoon 說:我覺得可能有好的dp的作法 0211 15:00
→ dreamoon 說:然後我不理解你說的括號對稱是指什麼 0211 15:01
→ dreamoon 說:若是說到每個右括號為止右掛號數一定不大於左括號數 0211 15:02
→ dreamoon 說:這種性質顯然沒有 0211 15:02
→ DJWS 說:就是一種感覺... 只是單純的覺得或許可以往這方向想 XD 0211 23:55
作者: DJWS at 11/02/12
我還沒寫,先翻譯看看。
有 N 個小朋友 (1<=N<=24) 要等分成兩個班級(兩個班級最多只差一個人)。
分好之後,兩個班級就同時開始「互相認識時間」,
每個小朋友會找到自己班上另外一個陌生人,
然後兩個人就會花一分鐘開始聊天,認識彼此。
一分鐘結束後,每個小朋友又再去找自己班上不認識的人聊天,
直到每個人都互相認識為止。
舉例來說,如果有20個小朋友,都不認識對方,那麼這個活動總共要花19分鐘。
當然囉,有些小朋友以前已經是鄰居,常常玩在一起,所以就沒有必要認識彼此。
請問「互相認識時間」最少要花幾分鐘?
輸入第一行是 N
接下來有 N 行,每一行有一串數字,例如:
17 4 5 2 14 22
代表 17 號小朋友早已認識四個人,為 5 2 14 22 這四個小朋友。
小朋友編號為 1 到 N。
輸入一定會滿足雙向關係,如果A認識B,那麼B就一定認識A。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.158.131 (中滑一番)
▲ DJWS 改@2011/02/12 Sat 22:47:03
→ suhorng 推:這...怎麼有點像Just Talking的簡化版 0212 22:50
→ suhorng 說:我看錯題目了Orz? 0212 22:53
→ DJWS 推:我發現UVA已經把這一題的題目拿掉了 XD 0212 22:56
→ DJWS 推:應該是不能寫的題目 0212 22:56
作者: yuscvscv at 11/04/01
SA大神生日快樂!!!!!!!!!!!
罩我3 4模啊>\\\\\\\\\\\\\\\\\\\\<
<(_ _)>
--
燭火空燒,一腔熱血灑成空,
煙雨迷濛,滿江淚水隨雨落。
旁人紛紜,直道無心於書冊,
茫然無知,卻害孤火更消弱。
--
◢▆◣ ▉▃◤ ◢▆◣ ◢▆◣ ◢▆◣
台南一中 █◤ ▕█◥▎ █◤ ◥▆◣ █◤ 索尼小站
◥▆◤ █ ▕◣ ◥▆◤ ◥▄◤ ◥▆◤
Origin ☆ sony.tfcis.org。bbs.tfcis.org Author ☆ yuscvscv
From ☆ 111.255.10.19(中滑一番)
→ sa072686 推:等下 四模是三小XD 0401 00:19
→ sa072686 推:噢理解了 0401 00:22
作者: PG at 11/04/01
SA大神生日快樂!!!!!!!!!!!
我也要大神罩我3 4模∼∼
---
あの時最高の現琔が向こうから�いにきたのは 最終現實在此時迎面而來
僕らの存在はこんなにも𢘫純だと笑いに�たんだ 正為了嘲笑我們的存在不過如此單純
この星の無�の塵の一つだと 身為這星球上無數塵埃之一
今の僕には理解できない 現在的我仍無法理解
恐れを知らない𨧻士のように振る舞うしかない 只能像不知恐懼的戰士一樣 持續奮鬥
アインストール - ぼくらのOP TFcis7教學 PG http://blog.pixnet.net/smartPG
--
◢▆◣ ▉▃◤ ◢▆◣ ◢▆◣ ◢▆◣
台南一中 █◤ ▕█◥▎ █◤ ◥▆◣ █◤ 索尼小站
◥▆◤ █ ▕◣ ◥▆◤ ◥▄◤ ◥▆◤
Origin ☆ sony.tfcis.org。bbs.tfcis.org Author ☆ PG
From ☆ 140.117.178.141(西子灣大學)
→ sa072686 推:哪招 我去考也考不到前四啊QQ 0401 00:50
作者: truth at 11/04/01
SABER 我都聽不懂dijkstra...QQQQQQ
怎麼辦啦QQQQQ
你在生日快樂可是我還是看不懂dijkstra...
--
shik 咦 為什麼會那天沒有學妹 QQ!
--
◢▆◣ ▉▃◤ ◢▆◣ ◢▆◣ ◢▆◣
台南一中 █◤ ▕█◥▎ █◤ ◥▆◣ █◤ 索尼小站
◥▆◤ █ ▕◣ ◥▆◤ ◥▄◤ ◥▆◤
Origin ☆ sony.tfcis.org。bbs.tfcis.org Author ☆ truth
From ☆ 59.113.79.77(中滑一番)
→ sa072686 推:那練SPFA好了 0401 18:44
作者: b821213 at 11/04/05
有點囧的一題質數題
題意:
求第n對twin prime,n<=100000,其中(p,p+2)為twin prime當且僅當兩者皆為質數
解法:
很直接的暴力作法,但是因為時限很緊所以建議做一點優化。
例如說,開平方的時候不要每次都開,紀錄上一個數開平方的值s,如果現在這個數
> (s+1)^2 在把s+1即可。 再來就是找質數的方法,用一般找法勉強會過,但6n+-1的找
法會快一些,而且稍微分析一下就知道twin prime一定會是6n+-1的關係, 一邊找可以
一邊判斷,組數夠了就可以停止了。
一般的本機上跑一定會超過3s,不過覺得可以了就大膽的submit吧! 會AC的XD
(P.S.方才測試用線性篩法做,發現快非常多......看來正常找法衰微啦> <)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-174-85.dynamic.kbronet.com.tw (比光快電信)
▲ b821213 改@2011/04/05 Tue 11:56:49
▲ b821213 改@2011/04/05 Tue 11:57:56
作者: b821213 at 11/05/15
這題太陰險了.......
應該說是我太天真?
題意:
有十個外交官要圍桌吃飯,要求你安排一個可行座位表。
要求相鄰(左右)的外交官皆能談話。
兩個外交官能夠談話當且僅當
1.兩個國家互相承認(單方面並不算)
2.兩個外交官會說共同的語言
以上兩點皆成立
此外,第一個人一定要坐在位置一
可能會有相同的國家派出一個以上的外交官,一個國家與自己的國家永遠互相承認。
但是同一個國家派出的外交官可能不會說共通的語言。
輸入格式:
依序給定每個外交官的資料
國家 會說的語言 承認的國家們
其中全部的字都是大寫,每個國家用三個字表示,而每種語言用一個字母表示。
每個外交官會說 1~5 種語言
每個國家最多有九個友好國家,也可能沒有!
每筆測試資料後面會有一個空行。
注意:陰險點在此
每行後面可能會有多餘空白字元
友好國家中可能會有沒來參加吃飯的國家。
輸出格式:
位置編號 和上一個人說的共通語言 國家名稱 和下一個人說的共通語言
如果有多組解,任意一個皆可。
否則輸出不可能。
暴搜可能會過,畢竟很多情形會cut掉。
最糟糕的情況可能會導致 tle ,或者在邊線。
正解應該是 TSP 的 DP。
特別感謝 DJWS 燃燒他的生命跟我一起 debug 。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-160-117.dynamic.kbronet.com.tw (比光快電信)
▲ b821213 改@2011/05/15 Sun 12:48:16
作者: sa072686 at 11/05/27
因為某些原因有空了! (至於原因就別問了XD
ACI 就重啟吧!
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 61.64.181.138 (所以內特)
→ DJWS 說:因為ptt2壞掉了 0527 20:23
→ y790930 推:推 0527 20:37
→ butterfly21 推:讚 0527 21:06
→ sa072686 說:少了批兔都沒地方碎碎唸QQ 0527 21:40
→ DJWS 說:哈哈 我也是 X 0527 21:53
→ DJWS 說: D 0527 21:54
→ yuscvscv 推:XDDDDD 0527 23:04
→ DJWS 說:我發現如果不補個D會被誤認為我在生氣 XD 0527 23:49
→ sa072686 說:屏蔽字嗎XDDD 0528 08:35
作者: DJWS at 11/05/27
※ 引述《sa072686 (南一中九七級小教學~*)》之銘言:
> 首先是公式,其實我是憑直覺猜中的,然後再慢慢想辦法解釋為什麼是這樣
> 當有n人時一定有n!種組合,其中若某父親有m個兒子
> 則我們只看這m+1個人時,只有一個能夠站在最前面
> 故得符合的情況只有m+1人取1,由於不管再插進多少人都一樣
> 故n!種組合再除以每個父親的兒子數再加1
> 不過光這樣還不夠,必須連孫子也算進去,所以最後的結果應該如下:
> n! / 每人之子孫數 + 1
> 計算的方法我是把階乘直接因數分解回去,再把子孫數因數分解
> 然後把次方數相減處理後再乘回來,不過是個低效率的爛方法
由於題目是要求答案除以 1000000007 的餘數,這個數剛好是個質數。
在模數系統中,除以x,即是乘以inverse(x)。(用gcd可以算inverse)
所以嘛......先把每個數的inverse都算一算,
運算過程全部都可以改成乘法囉。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by DJWS from 59.115.153.66 (中滑一番)
▲ DJWS 改@2011/05/27 Fri 20:27:39
▲ DJWS 改@2011/05/27 Fri 20:28:10
作者: winston1907 at 11/06/01
這題敘述有點亂,先翻譯一下好了
給定n層樓(0~n-1),然後每層樓的屋頂都有m個洞
給你i層各個洞到i+1層各個洞的通過時間,且每爬一層樓需要2分鐘
請求出要從0層到n-1層最少需要多少時間?(第0層不用爬,且不可往下走)
拿input說明一下
3 2 (3層 每層有2個洞)
1 2 (代表第0層的第1個洞 到 第1層的第1個洞 和 第1層的第2個洞 的所需時間)
3 4 (代表第0層的第2個洞 到 第1層的第1個洞 和 第1層的第2個洞 的所需時間)
...以此類推
圖大概長這樣
一洞 二洞
第2層 ○ ○
│╳│
第1層 ○ ○
│╳│
第0層 ○ ○
10= 1 + 2 + 5 + 2
應該可以稍微了解了(抱歉圖畫的不好> <")
▲ winston1907 改@2011/06/01 Wed 20:02:24
▲ winston1907 改@2011/06/01 Wed 20:15:08
▲ winston1907 改@2011/06/01 Wed 20:15:24
作者: winston1907 at 11/06/06
感覺滿有趣的一題
你被雇用到一個公司當系統管理員,現在有n(<=100)台電腦被m條電纜連結
電纜在傳遞訊息時會有時間延遲,已知在傳遞訊息的過程中,電腦總是選擇最短的路徑
你將每一台電腦試著發送訊息給其他每一台電腦,並記錄其傳遞的時間(input)
你的任務是,根據這些傳遞的時間"反推"有幾條電纜,以及各電纜連接著哪兩台電腦和
此電纜延遲的時間
若產生矛盾輸出"Need better measurements."
題目叫 反warshall XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by winston1907 from 122.117.241.28 (中滑一番)
▲ winston1907 改@2011/06/06 Mon 21:39:12
→ sa072686 推:看來你最近在練最短路 0606 23:03
→ winston1907 推:嗯嗯XD 感覺warshall變化很多 0606 23:12
→ jeremy89183 推:warshall超恐怖= =" 0606 23:17
→ winston1907 推:我還是想不到104怎麼做才好QQ 0606 23:33
→ jeremy89183 推:題目? 0606 23:46
→ jeremy89183 推:也是ACM的嗎XD 0606 23:51
→ winston1907 推:嗯嗯 0606 23:57
▲ winston1907 改@2011/06/07 Tue 01:06:32
→ sa072686 推:104算DP領域了 只是用到warshall那種型 0607 08:43
→ yuscvscv 推:後來仔細想想104跟warshall沒啥毛關係XD 0607 13:44
→ jeremy89183 推:直覺原本跟我說是分數規劃XD 0607 18:37
→ yuscvscv 推:然後樓上就崩潰了 0607 19:04
→ b821213 推:其實這題解法也是warshall XDDD 0612 18:37
作者: winston1907 at 11/06/10
有一個航空公司,他的航班可抵達n(<=2500)個地點
兩地之間形成一條航線,且航線是雙向的
你從A地到B地可能需要轉機
事實上,任兩地間必有一條路線,且路線唯一
最近,航空公司接到很多乘客抱怨 到目的地要轉機太多次
航空公司為了不想失去客戶,決定要刪除一條航線,並且用另一條航線替代
幫助這個公司寫一個程式,找出最好的方案
使得航線更改後,乘客最大的轉機次數能夠最小化
輸入
多筆測資(<=20)
輸出
航線更改後的最大轉機次數 及 刪減的航線 和 增加的航線
時間限制:10秒
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by winston1907 from 122.117.241.28 (中滑一番)
▲ winston1907 改@2011/06/10 Fri 17:26:59
▲ winston1907 改@2011/06/10 Fri 17:27:35
▲ winston1907 改@2011/06/10 Fri 17:29:43
作者: poao at 11/06/19
這題題目絕對要看清楚orz 我花了很多時間在看錯題目意思
===簡單的翻譯(不逐字翻了...字好多)
安裝軟體有很多依存關係,例如說你沒有TCPIP你就裝不起來TELNET。
所以如果明確(explicity)要裝TELNET,你會附帶地把TCPIP裝起來。
等你下次裝FTP(也需要TCPIP)時,就不用重裝一遍TCPIP。
但同樣的,在TELNET還裝著的情況下你不能把TCPIP移除。
有時候我們需要移除一些程式。為了省出更多空間,我們在移除某些程式時會把一些
只為了這個程式能正常運行才附帶安裝的檔案一起移除。
例如說如果我們為了裝TELNET而把TCPIP附帶裝起來,之後我們移除TELNET時發現,
TCPIP只是為了讓TELNET能正常運作而附帶安裝,TELNET移除後TCPIP將沒有存在的必要
便會順便將TCPIP解除安裝。
已經裝上的軟體不會再被安裝一遍(因為附帶而安裝的軟體不會因為再被安裝一遍而
變成明確要安裝的軟體)、已經移除的軟體也不能再被移除。
===
支援以下操作:
DEPEND it1 it2 [it3 ... ] it1的安裝依存於it2, it3 ...
INSTALL it1 明確地裝起來it1、附帶安裝必須檔案
REMOVE it1 嘗試移除it1、並移除沒存在幣要的附帶安裝檔案
LIST 依照安裝順序輸出所有已安裝檔案
END 結束程式
保證DEPEND會出現在其他所有指令之前。輸出格式請參考範例
===
好像有Special Judge,另外總軟體數量沒估錯的話在2000~2500之間
用一些STL的東西的話其實這題Parser的部份不難寫。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by poao from 111.243.24.94 (中滑一番)
作者: b821213 at 11/06/23
給定一個無向圖網路,每條邊的容量都是一個給定的數。
並且每條邊都有權重,代表傳送資料所需的時間。
現在給你有多少資料需要傳送,起點終點都只有一個,求最短傳送時間。
唯一要注意的是無向圖要注意方向判斷。可以用流量判斷。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-185-120.dynamic.kbronet.com.tw (比光快電信)
▲ b821213 改@2011/06/23 Thu 19:16:07
作者: b821213 at 11/06/23
頗白爛的一題。很簡單但是有陷阱(應該說是題意敘述不清)。
你要幫一個航空公司安排飛行方式。題目會給一個X,代表目標離起點距離。
假設你都是直線飛行,並且有以下規則:
1.每100公尺可以變換一次高度。
2.高度只有0~9,每個地點每個高度都有一個風阻值。
3.基本上如果選擇提昇高度需要60花費,持平要30花費,下降要20花費。
但是要考慮進風阻值,花費是 基本花費 + 當前格風阻值。
(題目沒講清楚是當前格@@)
4.由於到X地點後不可能繼續飛,所以給的風阻值是0~X-100。
(這個題目也沒講是 0~X-100 還是 100~X )
5.只有在起點和終點飛機可以也必須在 0 高度。中間的過程不能在 0 高度!!!
(這個陷阱最嚴重。因為題目會給每個地點 0 高度的風阻值,而且題幹說明是說
不能低於 0 高度,而非必須高於 0 高度)
求航程最低花費。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-185-120.dynamic.kbronet.com.tw (比光快電信)
作者: b821213 at 11/06/25
本題抄襲自 USACO Training ,當然也可能是 UVa 被抄襲
anyway 就把 nocow 上的翻譯貼過來了
你剛剛繼承了流行的“破鑼搖滾”樂隊錄製的尚未發表的 N 首歌的版權。
你打算從中精選一些歌曲,發行 M 張 CD。每一張CD最多可以容納 T 分鐘的音樂
一首歌不能分裝在兩張CD中。
不巧你是一位古典音樂迷,不懂如何判定這些歌的藝術價值。
於是你決定根據以下標准進行選擇:
1.歌曲必須按照創作的時間順序在CD盤上出現。
2.不僅同光碟上的歌曲寫入時間要按順序,前一張光盤上的歌曲不能比後一張歌曲寫入
時間要晚。
解答要求最多可以放進幾首歌。
值得一提的是,UVa本身是沒有給任何一個數字的範圍的。
但 USACO 給的範圍都是 <= 20
兩邊是否一樣就有待無聊人士試驗了XDD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-185-120.dynamic.kbronet.com.tw (比光快電信)
→ suhorng 推:類似題TIOJ 1623 國王烏龜的接駁車 0625 16:40
→ poao 推:TIOJ那根本同一題吧等等XD? 0625 22:06
→ b821213 推:難怪做那題時感覺很熟悉XDDD 0625 22:28
作者: poao at 11/06/27
給定 N <= 10000、M <= 100000、S、T、P和一張有向正權圖
定義一條路徑的Highest Toll是該路徑中的最大邊權,
求S到T所有路徑長<=P的路徑中、Highest Toll的最大值
(無合法路徑輸出-1)
如果一條u->v的邊 滿足dist[S-~>u] + 邊權 + dist[v-~>T] <= P
那就表示至少存在一條S到T路徑長<=P的路徑的Highest Toll >= 該邊權
作S跟T的SSSP、枚舉所有邊就好
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by poao from 111.243.5.170 (中滑一番)
作者: b821213 at 11/07/05
這邊補充一下
其實不用n^2建邊
把點拆開後
只要記錄當前點是哪個點切出來的
以及從什麼字母開頭的串走過來的
接下來出去的邊全部都可以共用
只要不考慮跟走過來的開頭字元一樣的邊集就好了
用 vector + map STL大軍也才跑了 0.148
至於 rank 1 怎麼跑到 0.000s 的
我只能說,要馬他是神,要馬他作弊 = =
rank 2 也才 0.056 有 gap 阿....
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118.232.98.76 (比光快電信)
作者: winston1907 at 11/07/08
有一個帝國,試圖破壞一個小國內的首都(編號1)和最大的城市(編號2)兩者之間的通訊
給n個城市(n<50),m條 存在的連結 及 破壞連結所需的花費 (m<500)
求出完全分離這兩部分所需的最小花費
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by winston1907 from 122.117.241.28 (中滑一番)
▲ winston1907 改@2011/07/08 Fri 01:01:22
作者: b821213 at 11/07/11
這種題目反而很容易 wa .....
還記得超無聊的圈叉棋嗎?誰先獲得直橫斜三連星就贏了。
本題中要你求一個圈叉棋盤面是否合法,注意到這裡是叉叉先走。
------------------------------------------------
特別注意一些陷阱:
1.如果X贏了,那麼X個數一定要是O個數+1
2.相同的,O贏了個數一定要跟X一樣
3.注意個數上的不合理。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118.232.98.76 (比光快電信)
→ poao 推:可以用書泓那招XD 0711 15:57
→ suhorng 說:用爛招嗎XD 0711 18:13
→ esrever 推:我覺得不錯ㄚ XD 0711 21:00
→ esrever 說:一堆case甚麼的最討厭了 Q 0711 21:00
→ jeremy89183 推:蘇蹦那招超好笑XD 0711 21:05
→ shik 推:哪招阿 XDD 0711 23:15
→ shik 推:難道是直接從起始盤面搜出所有合法盤面嗎 (?) 0711 23:15
→ b821213 說:樓上正確XD 0712 21:32
作者: b821213 at 11/07/11
Lucky 貓有翻譯,ZJ也有貼,這裡就不翻譯了。
-----------------------------------------------
乍看之下很難,也沒有太多剪枝可以作。
不外乎就是算出可行範圍(使其可以遞增),還有判斷跟先前找好的數是否不互質。
gcd 可以預處理算好,這樣互質於否判定就變常數。
只做了這樣而已... 0.092s , rank 26 。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118.232.98.76 (比光快電信)
作者: winston1907 at 11/07/21
給n個人,有m種貼紙,並且知道其他人的貼紙種類及張數
你可以和其他人交換貼紙,但條件是那張貼紙的種類對方沒有
並且只能一張換一張,現在假設其他人不會互換貼紙
請求出能換到的最大貼紙種類數
(n<=10 m<=25)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by winston1907 from 122.117.241.28 (中滑一番)
作者: winston1907 at 11/07/31
有10台電腦,編號0~9,且一台電腦只能做一個工作
現在給你一些工作和支援此工作的電腦編號
如果有可行方案使得所有工作皆可完成 請輸出配對方案
若不可行則輸出"!"
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by winston1907 from 122.117.241.28 (中滑一番)
▲ winston1907 改@2011/07/31 Sun 17:51:19
▲ winston1907 改@2011/08/03 Wed 01:54:12
作者: winston1907 at 11/08/02
主人帶著一隻狗,給定主人的行走路線
此行走路線由點組成 (x1, y1) (x2, y2)...
在旅途上可能會有一些"有趣的地方"
這隻狗和主人從起點一起出發,一起回到終點
且狗的速度是主人的兩倍
規定若狗在(xn, yn)離開主人,必須要在(xn+1, yn+1)再度回到主人身邊
請你設計一個方案,使得狗可以玩過最多"有趣的地方"
n(主人走的點), m(有趣的地方) <= 100
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by winston1907 from 122.117.241.28 (中滑一番)
→ yuscvscv 推:這題頗有趣的XDDD 0802 20:48
→ b821213 推:共匪書給的練習題∼∼ 0806 13:51
▲ winston1907 改@2011/08/24 Wed 15:06:51
作者: winston1907 at 11/08/05
有一台可以清掉積雪的機器
你的目標是要清掉所有在道路上的積雪
道路(<100)是完全直線的 所以可以用起終點的座標來表示
機器在積雪上的速度為20km/h 在清掉積雪的道路上是50km/h
並且保證一定可以到達各條道路
給你一開始機器的座標 請求出清掉所有積雪再回到原點的最小時間
(機器不能跑到道路外)
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by winston1907 from 122.117.241.28 (中滑一番)
▲ winston1907 改@2011/08/05 Fri 01:49:58
作者: winston1907 at 11/08/09
給兩個正整數m, n(m<=n<100)
求出一個最短的序列,使得此序列可以透過切割找到m~n間所有整數
ex: 1 13
1101213456789
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by winston1907 from 122.117.241.28 (中滑一番)
▲ winston1907 改@2011/08/12 Fri 01:03:41
▲ winston1907 改@2011/08/13 Sat 17:46:32
→ b821213 推:發問一下 如果數字不是連續的 還能做嘛? 0815 19:04
→ winston1907 推:其實這題我沒想到解法> <" 不知道誰可以提供一點想法 0817 16:52
→ b821213 說:如果範圍這麼小 可以直接亂做 0817 18:24
→ b821213 說:除掉完全涵蓋的情況 很容易可以知道每兩個數字 0817 18:25
→ b821213 說:最多只能夠省掉一個字 0817 18:25
→ b821213 說:接著就亂做吧XD 能省就省 也不用考慮誰來省 0817 18:26
→ b821213 說:唔 等下 上面那句有錯 0817 18:28
→ b821213 說:接著就是一個類似圖論的問題了 數學家迴路那個 XD 0817 18:28
→ b821213 說:等下 似乎不用考慮誰來省 這似乎是正確的 0817 20:31
→ b821213 說:然後不確定的話也可以二分圖匹配 迴路那個我是看board 0817 20:32
→ b821213 說:有人提到 不過我個人感覺那就是貪心亂做而已@@ 0817 20:32
→ winston1907 推:怎麼轉化成二分圖匹配啊> <? 0818 14:39
→ b821213 說:每個點拆成兩個點 剩下不雷了XD 0818 18:48
作者: b821213 at 11/08/13
不是我故意要翻水題,真的是其他的都有人翻了 > <
給出N(N<=1000)顆星星在天空中的位置,如果某兩顆星的直線距離小於等於給定的值 D
我們就判定這兩顆星屬於同一個星座
請問有多少個星座?
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-174-85.dynamic.kbronet.com.tw (比光快電信)
→ esrever 推:範圍? 0813 21:56
▲ b821213 改@2011/08/13 Sat 22:11:44
→ b821213 說:已經修改了,n^2可以輕鬆過關 0813 22:11
→ b821213 推:不過如果n^2 不能過 就不知道要怎麼做了.... 0813 22:12
→ suhorng 推:直線距離? 0813 22:13
▲ b821213 改@2011/08/13 Sat 22:14:55
→ b821213 說:yes 已補充 0813 22:15
→ jeremy89183 推:星座的定義是此星座中任兩點距離皆小於D? 0813 22:24
→ jeremy89183 推:還是可以一個連一個這樣OAO 0813 22:25
→ esrever 推:一個星座是一個完全圖吧? 0813 22:45
▲ b821213 改@2011/08/14 Sun 09:22:52
→ b821213 說:to jeremy: 就是向我講的那樣,只要兩顆星距離不超過D 0814 09:23
→ b821213 說:就判成同一個星座。題目只講這樣,實際上就是一個連一個 0814 09:24
→ b821213 說:to esrever: 不懂意思? 0814 09:24
→ suhorng 推:真有點像 TIOJ 1129 ... 不過那題測資比較小 0814 09:26
作者: suhorng at 11/10/23
※ 引述《sa072686 (AC Island 開發中)》之銘言:
> 給一個數列 s,試求這數列的某排列 q 使得 q[q[i]] = q[i]。任一符合條件者皆可。
> ---- 防雷頁 ----
> 持續把 q[i] 扔到 q[q[i]] 去就好了。不過交換過來的東西也要扔去它該在的位置。
若數字 v 有在 q[0]...q[n-1] 中出現 那顯然 q[v] = v
把所有出現過的數字處理完後
剩下沒排到的隨便怎麼填都沒差
> ---- 文末防雷 ----
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by suhorng from 61.217.34.132 (中滑一番)
▲ suhorng 改@2011/10/23 Sun 16:45:24
作者: sa072686 at 11/12/13
infbugs.blogspot.com
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219-85-203-201-adsl-KHH.dynamic.so-net.net.tw (所以內特)
→ YiPo 推:好讚哪! 1222 01:30
→ b821213 推:辛苦了,雖然真懷疑 lucky cat 到底還有沒有在翻... 0205 13:25
→ sa072686 說:有新翻譯, 不過貌似都是抓別人翻好的.. 0205 14:30
作者: b821213 at 12/02/05
給你 N 個方塊,N不超過500,每個方塊有六面,每面都有一個顏色。
為了你的方便,我們保證全部的顏色不超過100種並且以 1~100 來編號。
現在你要用這些方塊來疊成一座塔,每種方塊只能用一次,並且滿足
1.輕的方塊在上面,重的在下面
2.上面的方塊的底面要跟下面的方塊的頂面同色
3.滿足條件1,2並且要盡量高
現在按照方塊重量由輕到重給你每個方塊六個面的資料
請你給出最高可以多高以及該方案(從最上面到最下面依序打印出方塊編號及朝上的面)
如果有多組解,哪一組都可以。
===============雷================
O(N^2) DAG_longest_path or
O(N) DP
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-174-85.dynamic.kbronet.com.tw (比光快電信)
作者: sa072686 at 12/02/12
As title.
10015用鏈表仍然可過..,還以為打算強化數據了結果還是沒多強
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219-85-175-142-adsl-KHH.dynamic.so-net.net.tw (所以內特)
▲ sa072686 改@2012/02/12 Sun 18:38:12
→ b821213 推:要怎麼知道他有沒有rejudge阿? 0212 22:18
→ sa072686 推:要勾用電子郵件收judge result, rejudge時就會收到 0213 09:27
作者: sa072686 at 12/02/12
的確很白爛..而且題意有些不清,不過sample io不會太曖昧所以還好
※ 引述《b821213 (Q_Q)》之銘言:
> 頗白爛的一題。很簡單但是有陷阱(應該說是題意敘述不清)。
> 你要幫一個航空公司安排飛行方式。題目會給一個X,代表目標離起點距離。
> 假設你都是直線飛行,並且有以下規則:
> 1.每100公尺可以變換一次高度。
> 2.高度只有0~9,每個地點每個高度都有一個風阻值。
> 3.基本上如果選擇提昇高度需要60花費,持平要30花費,下降要20花費。
> 但是要考慮進風阻值,花費是 基本花費 + 當前格風阻值。
> (題目沒講清楚是當前格@@)
> 4.由於到X地點後不可能繼續飛,所以給的風阻值是0~X-100。
> (這個題目也沒講是 0~X-100 還是 100~X )
> 5.只有在起點和終點飛機可以也必須在 0 高度。中間的過程不能在 0 高度!!!
> (這個陷阱最嚴重。因為題目會給每個地點 0 高度的風阻值,而且題幹說明是說
> 不能低於 0 高度,而非必須高於 0 高度)
> 求航程最低花費。
神秘了,我的code沒考慮第五點,好像還是過了?所以應該可以飛高度 0 吧..
防雷
嗯,相當簡單的DP
設狀態為 dp[i][j] = k 表示飛到地點 i 時高度為 j,最小花費為 k
標準的把我們關心的東西全部塞進狀態就可以AC的題目
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219-85-175-142-adsl-KHH.dynamic.so-net.net.tw (所以內特)
作者: sa072686 at 12/02/12
超級心機的腦殘題..而且題意不太清楚,簡譯一下
給兩個不大於 32000 的整數,求這兩數之間 (包含) 所有的 Determinate Prime
Determinate Prime 的定義是:「連續」「三個以上」等差的「儘量長的」素數數列
連續表示不能跳過,3 7 11 不算,因為跳過 5
儘量長表示..假設有 Determinate Prime 數列 3 5 7 9 存在,則不承認 3 5 7 或 5 7 9
防雷
腦殘歸腦殘,會素數篩法即可,可是心機很重
首先一個素數不一定只屬於一個 Determinate Prime
再來一個 Determinate Prime 必須完整位於 x 和 y 之間,比如說今天你有 3 5 7
那題目問你 [3, 6] 或 [4, 7] 你就不能回答 3 5 7,因為沒完整包含
假設今天你有 3 5 7 9 那題目問你 [5, 9] 你不能回答 5 7 9,因為有 3 5 7 9
所以 5 7 9 就不算 Determinate Prime 了..同理 [3, 7] 也要小心不能答出 3 5 7
長度 4 的 Determinate Prime 在 260 附近,可以自行驗證一下
討論板似乎說範圍內總共是 72 組
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219-85-175-142-adsl-KHH.dynamic.so-net.net.tw (所以內特)
作者: sa072686 at 12/02/13
Lucky 貓有中譯,而且被當作一星題,數據非常弱..雖然範圍夠大但數據太虛
防個雷
隨便搞個 insertion sort 弄個 n^2 就會 AC 了,雖然 n 到 10000
這題觀察一下發現我們需要 insert 之後,能夠知道中間兩個元素的數據結構
最直觀的想法是 sorted array,但是對於 insert 相當難處理
需要在線的 sort 會第一個想到 bst, 用記左子樹節點數的方式可以 log n 查詢第 k 大
但是不平衡還是會歪掉,map 貌似又不能問第 k 大..的樣子
想想會發現除了正中間兩隻以外,其它都不用知道,所以可以用雙 heap 大招
開一個 max heap 存前半,一個 min heap 存後半,這樣兩個 heap 的尖端就是正中央
也就是中位數所在,insert 只要看尖端就會知道新元素應該在前半還是後半
先 insert 之後如果兩邊不對稱再 pop & push 調整一下就行了
拉尖端出來是 O(1),只有 push & pop 要錢,O(lg n),每個元素至少 push 一次
如果不對稱要 push, pop 各一次,基本上是 3n lg n 相當便宜
0.012, 相當戰勝..如果不是用 STL 偷懶,也許更快 XD
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
Lucky貓新中譯
防雷
稍微用到費氏數列,兩邊之和必須大於第三邊,所以要組不成三角形,邊長又成長最慢
就是費氏數列了,排序後暴力枚舉一下前 70 大的邊就會找到最佳解了
不過關於正確性可能要用到不少數學性質,我不會證XD 留待強者補充
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
裸算法題,而且是經典算法..
簡譯一下
政府覺得路燈花費太高,實際也用不到所有路燈。可是沒路燈的路非常危險,
告訴你所有的路每天要花多少錢在路燈上面,政府希望關掉一些路的路燈來省錢
又希望任意兩個地點之間,至少有一條有路燈的,安全的路徑可以走
問最多一天能省多少錢,圖保證連通,點數和邊數都最多 20 萬
防雷
拔最多邊使全圖任兩點間有路徑,基本就是拔到剩MST
點多邊少,標準的 kruskal
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題,不過輸出輸入都是時間,可以當作練 IO 的一星題
簡譯一下
告訴你在鏡中看到的時鐘顯示幾點幾分,問你現實時間幾點幾分。十二小時制。
防雷
其實也沒啥好防的,輸入可用%d:%d但是不能用%i,會吃土
輸出就%02d:%02d就好了,計算上把12點換回0點,輸出再換回去比較好
計算上,其實就是兩邊互補,所以相加會是12小時,扣一扣就好了
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
Lucky貓新中譯,基本上是腦殘題..暴力亂做就過啦,練迴圈或遞歸還行吧
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
▲ sa072686 改@2012/02/13 Mon 10:11:39
作者: sa072686 at 12/02/13
也是腦殘題,不過很麻煩
簡譯一下
咱們有五項屬性,初速度 u, 加速度 a, 時間 t, 新速度 v, 以及位移 s
現在有四種輸入,每種一行,第一個數字告訴你這是第幾種,對應輸出如下:
1 u v t (打印 s, a)
2 u v a (打印 s, t)
3 u a s (打印 v, t)
4 v a s (打印 u, t)
也就是說利用給的三種屬性算出餘下兩種
防雷
物理+數學題, 用到幾個公式
v = u+at
s = ut+att/2
它蠻善良的,照打印順序解就好,然後有時解 t 會需要解一元二次式
(a/2)tt+ut-s=0
要會公式解(-b+sqrt(bb-4ac))/(2a), 基本上不會有時間是負的
所以不用考慮另一根,也不會給到無解之類的,整理一下得到
t = (-u+sqrt(uu+2as))/a
是個簡單但是寫起來麻煩費時的一題..
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題連發
翻譯一下
給一個字符串,將其依列優先擺至 n*n 方格中,再以行優先順序打印
若該字符串找不到 n 使其能剛好一個不差擺進 n*n 方格中,則打印 INVALID
解法不解釋..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題大放送
簡譯一下
告訴你有 n 條道路要命名,並且你有 m 個數字可以用作道路名
問你最少需要追加多少種後綴才足以對所有道路命名,超過 26 種則無解
解法不解釋,可以直接算
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
簡單的素數題
Lucky 貓新中譯
防雷
基本上篩法篩過一遍,然後 BFS 就可以了,狀態數非常少
可以用篩法記被誰篩掉,可以在 lg n 時間內找出所有質因數
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
篩去時不要只記該數被篩過未,而是記被誰篩去,這個可以拿來做很多事或很多DP
畢竟如此一來我們手上就擁有每個數的其中一個質因數,可以拿來連鎖
求最多大於 1 的自然數連乘: 貪心一下全用質因數最優
dp[i] = dp[i/k]+1;
求質因數個數: 類似上面,但要確認是否有重覆計算,i/k如果有因數k就不要多算
dp[i] = (i/k%k ? dp[i/k]+1 : dp[i/k]);
求質因數和: 同上,+1改成+k
求因數個數: lg n時間可以算出i含有k的幾次方,以及扣完k這個質因數後的數字 p
根據因數個數公式會是 p 的因數個數乘上k的次方數+1
問階乘的話拿上面的方法疊加起來就是了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題,不過練基本字串處理還不差
簡譯一下
給你兩個字串 s1, s2 如果相同就是 AC,「s1 拔掉所有空白」後和 s2 相同就是 PE
還是不同就是 WA,輸出相對應結果
解法不解釋,細心點就能過了,題目保證 s2 不含空白,只有 s1 可能含空白
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
還是腦殘題
Lucky貓新中譯有
因為很腦殘所以解法不解釋..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
依舊腦殘題
簡譯一下
瑪莉歐現在在庫巴城前,他必須從一根柱子跳到下一根柱子上,慢慢跳過去。
為了安全起見,不能一次跳過許多柱子,必須謹慎地跳到下一根
如果下一根高度大於目前立足點高度,稱它高跳;下一根高度小於目前高度稱它低跳
問你高跳和低跳分別要幾次才跳得到
基本上是模擬了所以不解釋
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題海
簡譯一下
給你分數,要你計算成績,成績如下
Term 1 – 20%
Term 2 – 20%
Final – 30%
Attendance – 10%
Class Tests – 20%
它會直接給你乘過以上加權後的成績,然後Class Tests有三次,取最高兩次的平均
結果分成等第制如下
A >= 90%
B >= 80% & < 90%
C >= 70% & < 80%
D >= 60% & < 70%
F < 60%
基本也是腦殘題,三次擇最優兩次可以看成三次總和減去最低的一次
等第可以用 else if 就不用用到 && 了,比較好寫,其它不解釋
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題連打中
簡譯一下
給你 n 個數字,請輸出最大的數字
沒啥好說的了..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題連發中
簡譯一下
N 個人圍成一圈,分別順時針編號 1 到 N,從編號 K 的人開始,每次傳球將球傳給
順時針方向的下一個人,問傳了 M 次之後球在誰手上?
不解釋..已經不是劣化 joseph 的水平了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題連打中
簡譯一下
給你 n 個數字,求這 n 個數字的任意子集中,GCD 最大值為何,n <= 100
不解釋,只要不要真的去找所有子集應該死不了..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
也是腦殘題,練字串也許不錯
簡譯一下
給你一個不超過 100 位的數字,再給一個 digit K,求把這數字中出現的所有 K 拔掉後
會變成多少?開頭零不算
不解釋,小心判斷開頭零就行了,sample不弱
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
數學題
簡譯一下
給你三角形三邊長,問你這個三角形是不是直角三角形
不解釋,商高定理應該大家都懂
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題大集合
Lucky貓新中譯
沒啥好說的..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
�汝佳出的題目
簡譯一下
每三個空瓶可以換一瓶飲料,你手上有 N 個空瓶,請問你可以免費喝到多少瓶
可以先借空瓶來用,但是必須要還得起才能借
比如說你有 10 個空瓶,先換 3 瓶喝掉,再換 1 瓶喝掉,這時會剩兩瓶
先借一瓶來湊 3 瓶換一瓶喝掉,然後再把剩下的空瓶還回去,總共可以喝 5 瓶
防雷
忘了怎麼證明了,答案會是 floor(n/2)
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題,但是有陷阱
Lucky貓新中譯
防雷
不要真的照它的步驟去做,會需要處理很麻煩的大數問題..
大數除小數的餘數是非常好做的,線性掃過即可
每加一位進來,數字會變成原數乘10加新數,只有乘和加,所以對除法有分配率
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題又一發..
簡譯一下
你現在有 n 顆蛋及其重量,還有一個碗,碗最多只能放 P 個蛋,且只能承受 Q 公斤
花 12 分鐘可以煮熟碗裡的蛋,你現在擁有 12 分鐘,問你最多能煮熟多少蛋
蛋會由重量最輕給到重量最重
防雷
連排序都不用,輸入就排好了..只能煮一次所以貪心地從最小的開始放就是了
注意要把輸入讀完,邊讀邊做就 break 的話會吃土
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
數學題
Lucky貓新中譯,但是注意: 以下這件事非常重要
lucky貓的sample io是錯的,第一筆是937.555 mL而不是37.555 mL
防雷
要算角度,且要注意倒超過一半時和不超過一半時的形狀,要拆case討論
比較一下 tanθ 和 h/l 就可以知道有沒有過半
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題,需要點數學知識
Lucky貓有中譯
只要知道三角形任兩邊和需大於第三邊就行了
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題
lucky貓有中譯
暴力硬上就行了,不解釋
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題
Lucky貓新中譯
建好mapping table就OK了..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
苦工題
Lucky貓新中譯
其實硬數會過,反正天數不多,只是苦工而已,注意閏年
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
▲ sa072686 改@2012/02/13 Mon 11:42:01
作者: sa072686 at 12/02/13
苦工題
Lucky貓新中譯
係數可以預建巴斯卡三角形,或預建組合數C,或是現場計算都可以
巴斯卡三角形第 n 列的性質是
f[0] = 1;
f[i] = f[i-1]*(n-i+1)/i
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題,算物理..嗎?也不算,公式都給了
Lucky貓新中譯
不解釋..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
終於有難題了
Lucky貓新中譯
防雷
只有一項操作不符合 union set 的操作,就是單獨拔一個點出來
我們希望拔點之後不影響原本指向它的點,又希望新加入的點跟隨它
所以我們留下一個屍體給原本跟隨它的人,讓那些人不會跟著跑掉
然後這傢伙改個名,新跟隨者就跟隨新的名字,也就是說對該點relabel
該扣的扣掉的話,留個屍體不太影響,小心點數會變多,數組要開夠大
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
不錯的好題目,雖然不難但適合作為練習題
Lucky貓新中譯
防雷
有頻繁的 insert 也不能用數組的奧步解決,適合練習鏈表
當然也可以用一堆 string 來做,最後接起來,但是效率比較不佳
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
�汝佳的題目,有一定的難度
Lucky貓新中譯
防雷
數據結構的題目,有兩種解法,基本差不多快,都短短的很好寫
一種是對它做 index sort,掃過 index 列表後就會知道每個數第一個出現在哪
接下來每組詢問,去看該數第一個出現在哪,往後加 k 就是第 k 次出現,如果不到 k 次
那那個位置會是別的數,基本上 index sort 之後相同數會湊在一起所以有這性質
而透過 index 又可以直接知道在原數列中的位置,相當適合,複雜度 n lg n
基本瓶頸出現在 stable_sort 上面,0.120 sec AC
一種是開足 100 萬個 vector 然後每個進來就 push_back() 一下
最後直接反查 vector 就可以知道原本位置,每一步都是 O(1) 理論上複雜度線性
用 count 的方式,可以把初始化的複雜度壓在線性 (n),而不用全部初始化 (100萬)
0.144 sec AC,可能 vector 常數大了些
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
簡單的數據結構題
Lucky 貓新中譯
其實說穿了就是模擬,看行為是否符合預期,所以需要實現三種數據結構,沒啥好防雷的
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
算簡單題,因為很好猜..XD
簡譯一下
計算對 n 個元素做 bubble sort 交換次數的期望值為何
防雷
交換次數等於逆序數對個數,考慮將 k 插入 1~k-1 的一個隨機排列
則 k 因為大於所有現存元素,插入位置即代表會產生多少逆序數對
故除了既有逆序數對,加上插入 k 時的位置產生 0~k-1 個逆序數對
最後乘上排列數,得到逆序數對數
dp[k] = dp[k-1]+((k-1)*k/2)*(k-1)!
最後要的是期望值,所以結果會是 dp[n]/n!,設 dp2[n] = dp[n]/n!
dp2[k] = dp2[k-1] + ((k-1)*k/2)*(k-1)!/k!
整理一下消掉 k!
dp2[k] = dp2[k-1] + (k-1)/2
另解:
這樣相當難推,但是我們可以從逆序數對得到另一個想法
n 個數總共會有 n*(n-1)/2 個數對
如果我們把這序列反轉,則所有逆序數對會變成非逆序數對,而非逆序數對會變逆序數對
對於 n 個數的 n! 種排列,我們發現每個排列和它的反轉排列,逆序數對和恰為數對個數
所以總共有 n!/2 對排列與反轉排列,每對的逆序數對恰為 n*(n-1)/2 個
很簡單可以得到逆序數對個數總和是 n!/2*n*(n-1)/2 個,期望值要除以 n!
得到解為 n*(n-1)/4,想法對了這題就變得非常容易
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題..練數組么
簡譯一下
給你十組網址,不含空白,每組給你一個人氣指數,請輸出所有人氣指數最高的網址
就是個暴力題,不解釋
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題
Lucky貓新中譯
一樣日子範圍不多,一天天數即可,不知道1/1星期幾就隨便敲一個再對照sample修正
或是windows右下角小時鐘也可以找得出來2011年的1/1星期幾
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
困難題的小數據版,到底難不難呢..應該還能暴搜
簡譯一下
問你 n 個東西 (n < 11) 有幾種可能的大小關係,東西間可以大於、小於或等於
但是必須符合遞移律,也就是 a<b 且 b<c 則 a<c 同理 a=b 且 b=c 則 a=c
小心 a=b=c 和 a=c=b 其實算是一樣意思,別重覆計算了
後面有一題 12034 是這傢伙的強化版,n 上千的,解法一樣就到時再說
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
數學題..吧?
簡譯一下
請輸出 n 個東西隨機排列出現全錯排的機率,用分數方式且不用約分
方法不解釋,全錯排不會做的話可以搜之前的文
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題又一發
簡譯一下
你要從地面爬上 N 階樓梯,每一階都要踩不可以跳著爬,如果你力氣有 K 的話
則你只能爬高度 K 以內的,如果爬 K-1 以內沒有問題,但如果爬高度恰為 K 的
那麼你的力氣會只剩下 K-1,問你最少需要多少力氣才能爬完
防雷
基本會發現體力 K 爬得完,K+1 就肯定爬得完;最低限度體力是和差最多的一階一樣
不過如果這樣爬不完,+1之後就會體力無限了所以掃一遍就知道了..
雖然也有 binary search 的性質但是根本不用那麼麻煩
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
終於來一題困難題了
簡譯一下
給 n 個東西,問它們之間可能的大小關係有多少種。兩物間可以 >, <, 或是 =
大小關係必須符合遞移律,n <= 1000, 結果 mod 10056
防雷
先考慮把 k 「種」不同大小的東西由大排到小,再把新東西插進去會有幾種可能?
1. 把它插到這些東西之間,那麼會有 k+1 個位置可以放
2. 讓它和這些東西一樣大,那麼會有 k 個位置可以放
所以重要的是有幾種不同大小的東西
狀態 dp[i][j] = k 代表放了 i 個東西之後,共有 j 種不同大小,結果數為 k
dp[i][j] = dp[i-1][j-1]*k + dp[i-1][j]*k
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
不難但是需要想的題目
簡譯一下
給你兩個無序集合,求最少總共刪去幾個東西才能使這兩集合相等
防雷
因為是集合所以順序不重要,先排序然後兩個指標從小到大掃過去
一樣大就一起前進,不一樣大的話砍掉小的前進;大的有可能不用砍,但小的一定沒救
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
簡單的數學暴力題,用到GCD
簡譯一下
給你 N 個數字,你要計算
http://uva.onlinejudge.org/external/120/3288img1.png
N <= 8,每個數字最大 100
防雷
都是最大值 100 也只有 10^16 所以不用怕 long long 開下去直接通分
然後 GCD 就好了,很暴力的,通分後的分子用新分母去除原本的分母就好了很愉悅的
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/13
腦殘題
Lucky貓新中譯
防雷
觀察一下在大小 N*N 的方形中,大小 1*1 則有 N*N 格能作為它的左上角
大小 i*i 則有 (N-i+1)*(N-i+1) 格能作為它的左上角,實際畫一下就知道了
所以結果會是 1^2 + 2^2 + ... + n^2,可以 DP 一下
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 219.85.140.135 (沒有故鄉)
作者: sa072686 at 12/02/17
腦殘題..
簡譯一下
給你 a, b, c, d, e 以及 f(x) = axx+bx+c, 問你 f(0), f(1), ..., f(e)
共有多少個函數值為 d 的倍數,e < 1000, a, b, c 絕對值 <= 1000, d < 1000000
數據長這樣就不解釋了..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
作者: sa072686 at 12/02/17
簡單題
簡譯一下
給你 n 種硬幣,每種無限多個,給你每種硬幣高度,然後 m 組詢問,每組詢問給你高度
現在你要疊四組等高的硬幣,且同一組必須要用相同硬幣,問最接近的高度為何
每組詢問分別回答最接近且 >= 和最接近且 <= 的高度
防雷
任選四種硬幣,能疊出來的高度會是硬幣高的LCM的倍數
求LCM再枚舉即可,除下去再乘回去就知道最接近的高度了
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
作者: sa072686 at 12/02/17
大腦殘
簡譯一下
有個小孩在學寫 one, two, three 但是他還小所以可能寫錯,請你寫個程式辨認
長度一定是對的,最多只會寫錯一個字母,寫的一定是 one, two, three
防雷
最簡單的是 3, 看長度就知道, 看 s[3] 最快
餘下的就計分,s[0]=='o', s[1]=='n', s[2]=='e' 對一個計一分,兩分以上就是 1 了
除此之外就是 2
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
作者: sa072686 at 12/02/17
不錯的基本題
簡譯一下
你現在有 N 塊地要買,但是一年只能買一塊,可是地每年都會漲價
假設地價 k 則第 i 年買它要花 2*k^i 這麼多錢,問最少要多少錢才買得完
如果超過 500 萬就輸出太貴買不完,地不會超過 40 塊
防雷
貪心即可,從成長最快的買起就是最佳選擇,排序一下就好
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
作者: sa072686 at 12/02/17
簡單題
簡譯一下
你每天會有 N 件工作,你必須做到剛好剩 M 件否則會被裁員,所以你決定請工讀生
每位工讀生做一件工作要領 A 元,幫你直接放大絕做掉一半工作要領 B 元
不整除時直接無條件捨去,你只想請一位工讀生,輸出這些工讀生的名字
以及把 N 件工作處理到 M 件所需最小花費,輸出依花費排序,同花費依名字字典序排序
防雷
先減再除一定比較不好,所以一定先除再減
貪心除到除以 2 比 M 小,或是一次做一半比一件件做還不划算時,剩下全部一件件做
最後排序即可,貪心和排序的入門題
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
作者: sa072686 at 12/02/17
數學題
簡譯一下
給你三角形對應三邊的三個高,求三角形面積,如果不可能則輸出不合法
這題有些特別,是在集滿特定組不合法數據後結束
防雷
設三邊 a, b, c, 對應三高 a', b', c' 則知
.5aa' = .5bb' = .5cc'
所以三邊比 1/a' : 1/b' : 1/c'
設三邊為 k/a', k/b', k/c' 由黑輪公式可得
1/2*(k/a')a' = 1/4*kk*sqrt((1/a'+1/b'+1/c')(1/a'+1/b'-1/c')(1/a'+1/c'-1/b')
(1/b'+1/c'-1/a'))
兩邊平方可得
kk = 1/4*kkkk*(1/a'+1/b'+1/c')(1/a'+1/b'-1/c')(1/a'+1/c'-1/b')(1/b'+1/c'-1/a')
整理一下
k = 2/sqrt((1/a'+1/b'+1/c')(1/a'+1/b'-1/c')(1/a'+1/c'-1/b')(1/b'+1/c'-1/a'))
三角形面積 = .5aa' = .5(k/a')a' = .5k
= 1/sqrt((1/a'+1/b'+1/c')(1/a'+1/b'-1/c')(1/a'+1/c'-1/b')(1/b'+1/c'-1/a'))
但是 a', b', c' 可能為 0 或負數,光是判斷根號內的數是否為零或負並不足夠
因為除下去就先完蛋了..
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
▲ sa072686 改@2012/02/18 Sat 09:05:16
作者: sa072686 at 12/02/18
數學題,想對方向就很容易
Lucky貓有中譯
防雷
設三隻寵歲數分別是 a, b, c, 可知以下關係
a = c+y
b = c+s
a+b+c = 12+j
所以代換一下得到
3c+y+s = 12+j
c = (12+j-y-s)/3
但是這個不一定整除,因為歲數不一定一起成長,所以要分開討論
到這邊數學很難處理了,因為歲數的等式不是一定的
考慮 b+p = a 這個等式,可以推論出在 b 出生時,a 有可能剛長一歲,或過了幾天了
所以可知 a 一定比 b 早增加一歲,同理 a, b 一定比 c 早增加歲數
但是由 c 來考慮時 a, b 之間歲數關係不一定,要看 c 出生時的歲數差 y-s
如果 y-s == p 則一樣是 a 早增加一歲,否則就是 a 增加完一歲而 b 還沒的情形
所以 y-s != p 時 b 會早增加一歲,這時看最後 (12+j-y-s) % 3 餘數多少
來決定 a, b 的歲數
總之這題重點是找到「誰會先增加一歲」的線索,後面就會很好處理
文末防雷
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
作者: sa072686 at 12/02/18
腦殘題,練IO用,�汝佳的題目越出越善良了啊..
簡譯一下
輸入很多行計算題的答案,最後輸出有幾組答案是對的,算式只會有兩種情形
a+b=c
a-b=c
c 有可能是 ? 代表算不出來,a 和 b 是給好的問題所以不會出現 ?,沒有開頭零
而且都是不大於 100 的非負整數,同一行不會有空白,同一個算式不會被換行隔開
其實也沒啥特別技巧..不解釋
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
▲ sa072686 改@2012/02/18 Sat 11:25:18
作者: sa072686 at 12/02/18
腦殘題,而且好像在哪裡寫過..
簡譯一下
你要辨識六種語言的 HELLO,如果不是就打印UNKNOWN
只是 mapping, 練字串比對用的題目, 雷就不防了..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
→ yuscvscv 推:某次NTUJ練習賽的題目 0320 21:38
作者: sa072686 at 12/02/18
腦殘題,建表題
簡譯一下
f[0] = 1
f[i] = f[floor(i-sqrt(i))] + f[floor(log(i))] + f[floor(i*pow(sin(i), 2))]
輸入 i 問你 f[i], i <= 1000000
不解釋了..
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 140.112.248.106 (台北帝國大學)
作者: b821213 at 12/02/26
Lucky 貓有中譯。
基本上就是超水模擬題。End。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-174-85.dynamic.kbronet.com.tw (比光快電信)
作者: b821213 at 12/02/26
Lucky貓有中譯。
基本上就是模擬水題,End。
比較值得提的是題目沒有字串長度。我開1000就AC了zz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-174-85.dynamic.kbronet.com.tw (比光快電信)
作者: b821213 at 12/02/26
Lukcy貓有中譯。
用調整法想就可以知道了。依舊算水題,End。
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-174-85.dynamic.kbronet.com.tw (比光快電信)
作者: b821213 at 12/02/26
Lucky貓有中譯。
老實說我不知道有沒有好作法,這題建表反而會悲劇,因為100w以內的質數實在太多了。
不過我猜大概也就這樣而已,除非手動建表。如果有理論可以快速找出這樣的數對,
那哥德巴赫猜想就被證明了 = = +
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 118-233-174-85.dynamic.kbronet.com.tw (比光快電信)
作者: b821213 at 12/04/24
幸運貓有翻譯。
反正超水,就直接雷了,LCS。 XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 203.68.26.6 (沒有故鄉)
作者: drazil at 12/08/28
自101年度上學期開學當週起,每週指定一個主題公告,讓學員自行利用這週的時間尋找
相關資料研讀,下一週的進度賽題目會有大部分是關於此主題的練習,並摻雜其他類型題
目藉以訓練學員判斷題目的能力
比賽進行方式為"非同步賽",時間長度三小時,開放時間每週一早上08:00到週日晚上
23:59﹝在開放時間內登入系統點選開始比賽之後才能看到題目,並開始計時三小時之內
可以上傳作答,三小時結束之後無法再上傳,週日24:00開放時間結束之後系統才會開始
判定答案,如果同一題有重複上傳會取最後一次上傳為準﹞
主題的安排考量高一新生/程式設計初學者,從基礎語法練習開始,逐次探討常用而基本
的演算法,預計在能力競賽中區複賽之前達到複賽程度
歡迎所有高一、高二有興趣參加資訊科競賽者踴躍參與
線上解題系統網址: http://tcfshoj.twbbs.org
中一中學生請以學號註冊,外校請填寫"學校"欄
--
★ben196888 ACM比較好玩XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by drazil from 122.117.50.81 (中滑一番)
→ xatier 推:蜥蜴耶! 0828 03:59
作者: b821213 at 12/10/02
你有 c 種顏色的糖果,現在給你這 c 種顏色的糖果分別的數量
請你把它分堆,可是分堆要求一堆
1. 每堆至少要兩個糖果
2. 每個糖果要完整地分在一堆裡(不能切成碎片或者磨成糖粉,呵呵)
3. 堆分成兩種,純色堆跟混色堆。其中純色堆只由一種顏色的糖果組成,混色堆則 c 種
顏色的糖果都要有,而且每種糖果的數量還要一樣
4. 每個顏色至少都要有一個純色堆
5. 全部至少要有一個混色堆
6. 不管是什麼堆,都要有一樣數量的糖果
問:有幾種分配方式
------------------------------------------------------------------------------
純粹是個數學題,我分成兩種 case 來做
不過合理懷疑 n * sqrt(10^9) 會過,根據實驗10^9以內因數最多的數字也只有168個
因數而已。
可以做到 sqrt(10^9),解法就不雷了 XD
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 140.112.239.114 (台北帝國大學)
→ esrever 推:這不是HW嗎 ww 1003 19:10
→ b821213 說:是阿 寫完順便翻譯 1004 12:23
→ sa072686 推:這題號根本費氏數列XDDD 1008 17:54
→ b821213 說:而且還是本系通識承認表 XD 1012 18:37
→ lantw44 說:A12358 1012 19:36
作者: b821213 at 12/11/20
Lucky cat 有翻譯
可以暴搜,不過我是用dp解
比較麻煩的是要變換成正數
理論上估計起來跑得應該還不錯... 想不到實際運行非常慢
至少我的 dp 跑了 5.6s XDrz
聽說位元壓縮效果非常好
不過我就懶得做了
有興趣的人可以測試看看
此外不知道把所有運算預處理會不會比較快 XDrz
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 140.112.239.114 (台北帝國大學)
→ esrever 推:可以給個懶人連結 OAO 1120 15:11
→ b821213 說:可惜我懶到連懶人連結都懶得給(欸 1120 15:17
作者: b821213 at 13/02/02
給你一棵無向樹,每個節點都有一個value。
再給你一個數 K。
現在你要在樹上選最多 K 個最小 1 個點,滿足
1. 這些點彼此沒有直系血緣關係(即不存在某點是另一點的祖先)
2. 這些點的value和要是盡量大的
問:這若干個點的value和是多少?
點數 2 <= N <= 10^5,1<= K <= 100
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 106.1.36.236 (沒有故鄉)
作者: sa072686 at 13/02/03
正式名稱未定
http://phantom.tfcis.org/~sa072686/lcat/
輸入 uid 可以濾掉 Lucky焩 已AC的題目, 附帶提交連結
其它沒啥功能了, 對有在寫中譯題的應該算方便
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 36.239.222.100 (中滑一番)
作者: b821213 at 13/05/10
給你一個序列,問是否存在一個連續的子串滿足
這個連續子串的和是一個質數
輸入的序列都是 10000 以內的非負整數
並且序列長度不超過 10000
我也不知道為什麼篩法在他們主機上跑很慢
直接篩到 10^8 就需要快兩秒(工作站上很快阿 @@
不過他根本很難構造到夠大才是質數的 case
所以隨便寫一個判定就好了
n^2 似乎沒好作法
然後不出所料經過實測後發現有解的情況下
長度不會超過 30
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by b821213 from 140.112.239.114 (台北帝國大學)
作者: sa072686 at 13/05/26
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@ptt2.cc
標題: [學術] 巫術社的使魔群
時間: 2013/05/26 Sun 17:02:29
作者: sa072686 (sa) 看板: sa072686
標題: [學術] 巫術社的使魔群
時間: Sun May 26 00:45:39 2013
好久沒出現這個分類了XD
嗯大致就是我把之前所有關於教學的想法給砍掉重練之後, 寫出來的編程教程
目前只有入門, 但日後會慢慢寫更多更進階的內容
目標是把枯燥的教程寫得有趣又好懂,同時避免丟失一份教程該有的深度
http://cmusu.blogspot.tw
歡迎大家提供建議或幫忙抓bug, 同時如果你願意幫忙宣傳, 歡迎隨意轉載本文
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 114.25.29.83
φ sa072686 轉:從 [sa072686] 信箱,于 2013/05/26 Sun 17:13:44
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 592 Accepted
時間: 2013/08/12 Mon 14:10:01
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 592 Accepted
時間: Sat Jul 3 00:54:50 2010
大致是不太難想,但也不太好瞬殺的一題暴力題
翻譯一下
島上有五個人 A, B, C, D, E, 並且分成三種類型 divine, evil, human
給你一堆敘述 (不超過 50 個) 要你判斷哪些人屬於哪種類型,以及現在是白天還是晚上
divine 只說實話,evil 只說謊話,human 在白天只說實話,在夜晚只說謊話
敘述的格式大致是
人: X 是(或者不是) Y
X 可以是 A, B, C, D, E 任一人,或是指現在白天晚上
Y 可以是 divine, evil, human, lying (對人) 或是 day, night (對白天晚上)
如果矛盾輸出 impossible, 無法判斷時不輸出,全部無法判斷時另外印訊息
這題最底下防雷頁後面有範例的解說,不太懂的話可以看看
以下有大雷
這題看起來難想,但如果用正確的角度去看它的話其實還好
首先觀察,邏輯問題很難處理,但是人很少,只有五個,算上白天夜晚也就六個
所以可以枚舉所有情形,每種情形都給五個人假設一種類型,還有白天夜晚
如果沒有矛盾存在,表示這是一種可能解,就存下來;否則捨棄
把這些可能解全部 or 起來,如果有人有唯一的可能解就是可判斷
如果有些人是多種可能解,就是不可判斷;沒有任何可能解就是無解了
敘述除了 lying 比較麻煩以外都是直接說某人是 XXX
lying 不知道怎麼處理,可是如果只有說某人是 XXX 就很好處理
那就想說能不能把 lying 轉成說某人是 XXX 來處理
這裡是重點,能好好處理 lying 這題就不太會卡了
會 lying 的只有 evil 和夜晚的 human,所以可以依白天晚上來處理 lying
如果晚上說一個人 lying 那可以看成說一個人是 evil 或者是 human
所以可以把敘述合併成說一個人是 XXX 或者是 YYY 來做處理,說某人不是 XXX
也可以轉成說某人是 XXX 的情形,不過要處理多種身份比較麻煩
所以考慮位運算,就會簡單許多
明顯地說某人是 XXX 其實是說某人「只能是」XXX
於是在特定假設之下,跑過所有敘述,把對同一個人「只能是」XXX 這些訊息
合併起來,因為是說「只能是」某種或某兩種情形,所以用 & 較適合
說謊的情形用 ~ 來轉換就可以了
最後去檢查每個人「只能是」什麼類型,如果都和目前假設類型符合
那這假設就成立,反之只要有人不符合就不成立
把所有成立的假設用 or 疊起來,就會知道所有人所有可能類型
有任一人所有類型都不可能,就表示敘述有矛盾,無解
如果有人只有一種可能類型,表示這人是可以判斷的,就輸出
如果有多種可能,那表示無法判斷,就跳過
沒出現在對話中的人也可以當作這類型
如果所有人都有多種可能,那就表示完全沒有得到任何資訊
這樣就可以解出這一題了,另外敘述先後是不影響事情結果的
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
→ yuscvscv :看完題目....這跟TIOJ上某題很像,好像只能暴力 推 07/03 01:12
→ sa072686 :這題的分類就是暴力,問題是在怎麼暴力XD 推 07/03 01:14
→ yuscvscv :我是暴力解白癡........ 推 07/03 01:39
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:14:34
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11584 Accepted
時間: 2013/08/12 Mon 14:11:01
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11584 Accepted
時間: Wed Jul 7 14:00:07 2010
唔..雖然題目看完方法也想完了,不過這麼簡短的行數還可以噴蟲
而且跑起來莫名地慢 Orz 0.388, 優化後還是 0.292 明明複雜度很合理
翻譯一下
給一個字串,問可以切成最少幾段迴文,長度 < 1000
雷雷雷雷雷雷
n^2 可以求每一段是不是迴文,這很簡單就不用提了
顯然是 DP 設狀態 dp[i] 為 0~i 這一段最少可以拆成幾個迴文
然後枚舉所有以 i 結尾的迴文,設開頭 j 則找最小的 dp[j-1]+1
反正重點就是不要切兩段分開遞迴,切一塊確定的迴文出來後遞迴另一段就好
狀態數可以少一維,就可以 n^2 做到
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:14:59
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11512 Accepted
時間: 2013/08/12 Mon 14:11:13
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11512 Accepted
時間: Wed Jul 7 17:52:36 2010
不怎麼好處理的一題..而且我的方法頗慢,不知道有沒有更適用的..
翻譯一下
給一個字串,找出出現次數兩次以上且最長的子字串中,字典序最小者及其出現次數
雷雷雷
可以利用 KMP 的特性
做 n 次 KMP 每次從不同地方開始做起,過程會知道最長匹配長度
等於是做一次 KMP 可以知道以位置 i 字元開頭的子字串,出現兩次以上的有多少個
只要在不是原本位置匹配得到就是第二次出現了,次數在 KMP 過程也會知道
但是不同位置開始的不要疊加,會重複計算,反正取最先出現的一定不會漏算
每次 KMP 是 n+n 所以差不多是 n^2 可以過,但不快 (我的 0.7 左右)
不過就時限 7s 來說還算很寬鬆的
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:15
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: Re: [學術] ACM 11584 Accepted
時間: 2013/08/12 Mon 14:12:02
作者: sa072686 (sa) 看板: sa072686
標題: Re: [學術] ACM 11584 Accepted
時間: Wed Jul 7 14:01:32 2010
是說這題我求迴文時用 top-down 的方式求迴文結果 TLE .. Orz
只不過是把預處理改成用到才 DP 看看這一段是不是迴文..
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
→ yuscvscv :拿一些奇怪的算法看看能不能優化? suffix array 推 07/07 17:09
→ sa072686 :不知道耶你寫寫看 我預處理的狀態轉移已經O(1)了 推 07/07 17:53
→ sa072686 :也試了記錄同結尾的迴文把稀疏的轉移串起來了 推 07/07 17:54
→ sa072686 :還是一樣慢XD 只快了0.1不到 推 07/07 17:54
→ yuscvscv :我suffix array目前還處於知道這東西 但是不會用XD 推 07/07 19:04
→ yuscvscv :實際能用在哪不太清楚 相關的字串題不多 推 07/07 19:04
→ suhorng :常數問題嗎 我也是這樣寫跑 0.094 推 07/14 11:06
→ suhorng :還是學長每次都memset全部 推 07/14 11:06
→ yuscvscv :樓上 這題能不能用SA打他? 推 07/14 13:12
→ yuscvscv :我對SA的應用不太熟耶說真的QQQQQQQ 推 07/14 13:12
→ sa072686 :我一向都memset全部啊XD 推 07/16 03:43
→ suhorng :那大概這個影響很大@@ 推 07/16 16:03
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:16
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11588 Accepted
時間: 2013/08/12 Mon 14:12:03
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11588 Accepted
時間: Wed Jul 7 14:15:07 2010
大水題..
翻譯一下
給 n*m 字母,每字母代表一 pixel,出現最多次的字母被認定是重要區塊
多個字母擁有最多出現次數時全部視為重要區塊,重要區塊字母一個花 p byte
其它區塊字母一個花 q byte 問總共要幾 byte
雷雷雷
掃過每一格統計下次數,然後枚舉所有字母加總一下即可..
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:19
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11586 Accepted
時間: 2013/08/12 Mon 14:12:04
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11586 Accepted
時間: Wed Jul 7 14:29:39 2010
也是大水
翻譯一下
給一堆軌道組件,每塊兩端是凹或凸,只有凹和凸可以接起來,但自己不能接自己
問能否用完這些組件,拼出一個沒有死路或岔路的簡單迴圈
雷雷雷雷雷雷
算兩端的 F 和 M 看左 F 和右 M 是否一樣多、左 M 和右 F 是否一樣多
注意如果只有一塊一定爆炸
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:20
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11713 Accepted
時間: 2013/08/12 Mon 14:12:05
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11713 Accepted
時間: Tue Aug 31 21:34:02 2010
白爛.. 時間普通,沒寫太慢但是腦殘了一下.. 一次過
給兩字串,如果長度一樣且只有母音換成其它母音則輸出 Yes
反之輸出 No
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:21
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11677 Accepted
時間: 2013/08/12 Mon 14:12:06
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11677 Accepted
時間: Tue Aug 31 21:42:12 2010
也是白爛..
給兩個時間,以 24 小時制的時與分表示,第一個時間代表現在,第二個時間是鬧鐘設定
問多久後鬧鐘才響
呃,硬要說.. 心機點在 sample 就測得出來了
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:22
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11727 Accepted
時間: 2013/08/12 Mon 14:12:07
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11727 Accepted
時間: Tue Aug 31 21:55:51 2010
白爛
給三數,試求中位數
嗯..
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:23
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 10920 Accepted
時間: 2013/08/12 Mon 14:12:08
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10920 Accepted
時間: Tue Aug 31 22:10:28 2010
白爛
給棋盤大小和走幾步,問座標,棋盤與走法如下
R5 13 12 11 10 25
R4 14 3 2 9 24
R3 15 4 1 8 23
R2 16 5 6 7 22
R1 17 18 19 20 21
C1 C2 C3 C4 C5
棋盤可大到 100000
解法.. 雖然 100000 平方有點大,但反正只轉折 4n 次所以硬上的話還是會過
嗯,過了但跑很慢,1.1s 左右,45X / 55X 名.. 正解應該是用完全平方數找到所在的環
然後去算在環上的哪裡,這樣可以 O(1) 算出來
還有數據很弱,雖然最大棋盤有 100000 平方這麼多格,可是第二個數 int 存得下..
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:23
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11689 Accepted
時間: 2013/08/12 Mon 14:13:03
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11689 Accepted
時間: Tue Aug 31 22:16:31 2010
也是白爛,但沒寫得很順.. 雖然也沒很慢
你原本有 a 瓶飲料,路上撿到 b 瓶超爽的,然後回收 c 瓶可以換 1 瓶來喝
問你至多可以換到幾瓶
嗯.. log n 吧
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.145
→ yuscvscv :NTUJ練習賽 proA XD 推 08/31 23:09
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:23
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: Re: [學術] ACM 11689 Accepted
時間: 2013/08/12 Mon 14:13:04
作者: DJWS (...) 看板: sa072686
標題: Re: [學術] ACM 11689 Accepted
時間: Sat Oct 16 20:42:11 2010
剛好路過
想說推文的話你可能會看不到 XD
ptt math板
搜尋「糖果」
推文中有簡潔的公式
我沒仔細看題目 不過我猜應該是同一題吧?
※ 引述《sa072686 (sa)》之銘言:
: 也是白爛,但沒寫得很順.. 雖然也沒很慢
: 你原本有 a 瓶飲料,路上撿到 b 瓶超爽的,然後回收 c 瓶可以換 1 瓶來喝
: 問你至多可以換到幾瓶
: 嗯.. log n 吧
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 59.115.155.54
→ godgunman :還有可樂應該也是同類型的 推 10/16 21:31
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:24
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 12000 Accepted
時間: 2013/08/12 Mon 14:13:05
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 12000 Accepted
時間: Fri Aug 5 12:02:14 2011
果然這種題目絕對會看到某隊長AC,而且名次還相當前面..我的鳥方法慢了二十多倍
翻譯一下
給你 n (n <= 10^9) 以及 k (k <= 3) 問你 1~n 的排列有多少個是 k-transformed 排列
k-transformed 定義是第 i 個數字 A[i] 離原本該在的位置 A[i] 不可以超過 k
也就是 |i-A[i]| <= k
唔然後我的方法,到現在連正確性都不會證..Orz 雖然是AC了
提一下好了,有好心人的話幫忙大致證一下或是提供更好的方法吧XD
總之先防雷
DP,狀態為 n 個數時,最後三個數還能往後移幾格不會違反規則,總共4^k種
轉移就是第 n 個數放 n 然後看要往前移 0 ~ k 格,並看這樣轉移後會長什麼樣子
第 n 個數不管往前移幾格,一率讓它只能往後移 k 格,不能超過
這步我不知道為什麼設 k 剛好會對 XD 本來覺得應該要 k+1 ~ k+2 但是會TLE
然後因為 n 很大所以弄個 (4^k)^2 大小的矩陣,硬湊數字出來然後縮到 log n
就..過了! XD
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 61.62.172.8
→ yuscvscv :看起來有點像模考題OAO 推 08/05 12:27
→ gloompisces :我的方法是做logn次的矩陣相乘 推 08/05 15:25
→ gloompisces :其實和你的很像 但是我把所有可能情況的對應建表 推 08/05 15:26
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:24
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: Re: [學術] ACM 12000 Accepted
時間: 2013/08/12 Mon 14:13:06
作者: sa072686 (sa) 看板: sa072686
標題: Re: [學術] ACM 12000 Accepted
時間: Fri Aug 5 12:04:28 2011
前20名有䪤子䤑和�翼德耶XD
不過通通被隊長幹掉了
※ 引述《sa072686 (sa)》之銘言:
: 果然這種題目絕對會看到某隊長AC,而且名次還相當前面..我的鳥方法慢了二十多倍
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 61.62.172.8
→ CindyLinz :隊長是呂布嗎? ^^| 推 08/05 13:02
→ gloompisces :你還沒看到關雲長 馬孟起 還有黃漢昇 推 08/05 15:23
→ sa072686 :zenix表示: 推 08/05 15:51
→ butterfly21 :我還以為你12000題了 推 08/06 00:17
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:25
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 12372 Accepted
時間: 2013/08/12 Mon 14:13:07
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 12372 Accepted
時間: Mon Dec 17 18:13:27 2012
很難的一題..嗯,我是指他題目很難懂,我花了三次 Submission 才猜中
小翻一下
給你一個物件的三個維度 x, y, z 問是否三個維度均 <= 20
嗯..不解釋
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:25
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 12403 Accepted
時間: 2013/08/12 Mon 14:13:08
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 12403 Accepted
時間: Mon Dec 17 18:26:46 2012
嗯很有愛心的一題,前面都是募款救人的相關訊息..
小翻一下
給你 N 條指令,一開始 0 元,輸入 denote v 就代表有人捐了 v 元,加上去
輸入 report 就要輸出目前募了多少錢
解法不解釋..
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:25
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11518 Accepted
時間: 2013/08/12 Mon 14:13:09
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11518 Accepted
時間: Mon Dec 17 18:43:06 2012
不難的一題,不過腦殘手滑了一下..
小翻一下
給你 m 個數對 x, y 代表 x 被推倒時, 會使得 y 也被推倒
給你 l 個數字,問你若手動推倒這 l 個骨牌,總共會倒多少塊骨牌?
題目還會給 n 代表骨牌數,所有數字都不超過 1 萬
解法不解釋,不過拿來練怎麼存一個圖還算不差
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:26
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 12468 Accepted
時間: 2013/08/12 Mon 14:13:10
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 12468 Accepted
時間: Mon Dec 17 18:45:24 2012
也是不難的一題
小翻一下
你的搖控器被你家的狗咬壞了,你只剩上下可以按,數字鍵全壞了
現在你家電視有 100 個頻道,編號 0 到 99 且它是環狀的,即在 99 按下一個頻道
會跳到 0,在 0 按上一個頻道會跳到 99,給你數對 x, y 問從 x 頻道轉到 y 頻道
至少要按幾次按鍵?
解法不解釋..就算暴力踹也不會怎樣
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:26
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11849 Accepted
時間: 2013/08/12 Mon 14:13:11
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11849 Accepted
時間: Mon Dec 17 20:23:46 2012
嗯算簡單題,適合新手思考?
小翻一下
給你兩個嚴格遞增序列,問這兩個序列中都有出現的數字有幾個
----
利用嚴格遞增的特性,用兩指針 i, j 一起掃過陣列 a, b
若 a[i] < b[j] 則知 a[i] < b[j+1] 不可能相等, 反之 a[i+1] 有可能 = b[j]
所以把 i 往下移, 反之把 j 往下移不會錯
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:27
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 10814 Accepted
時間: 2013/08/12 Mon 14:13:12
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10814 Accepted
時間: Mon Dec 17 20:25:12 2012
麻煩題
給你一分數之分子分母 x, y (均小於 10^30) 求此分數之最簡分數
大數 gcd 和大數除法,應該也沒別招了吧..
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:27
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 1225 Accepted
時間: 2013/08/12 Mon 14:13:13
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 1225 Accepted
時間: Mon Dec 17 20:48:07 2012
算數學題?
小翻一下
給你 n 要你算從 1 寫到 n 的過程中,0 ~ 9 每個數字分別要寫幾次
----
D&C, 分別計算每一數字 k 在每個位數出現的次數
例如 2 出現在 91236 的千位數的情形
則萬位數可以是 0~8 (0 的情形代表寫的數字 < 10000) 且每種情形個十百都有 10 種
萬位數是 9 的話,最小的 92000 也會超過
02000 ~ 02999
12000 ~ 12999
..
82000 ~ 82999
所以總共有 9*10*10*10 這麼多種
出現在百位數的情形,千位和萬位可以是 0 到 90 共 91 種,也可以是 91 但比較特殊
00200 ~ 00299
01200 ~ 01299
..
09200 ~ 09299
10200 ~ 10299
11200 ~ 11299
..
90200 ~ 90299
91200 ~ 91236
所以會是 91*10*10 (0~90) + 36+1 (91 時末兩位從 00~36)
出現在十位數的情形,百千萬位可以是 0 到 912 共 913 種,912 接 2 不會超過
00020 ~ 00029
00120 ~ 00129
..
91120 ~ 91129
91220 ~ 91229
所以共有 913 * 10 這麼多種
注意 0 的情況比較特別,因為 0 不能擺在數字最前面,其它都照上述就可以了
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:27
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11917 Accepted
時間: 2013/08/12 Mon 14:13:14
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11917 Accepted
時間: Mon Dec 17 21:05:00 2012
練字串用?大概..
小翻一下
給你 n 個字串和數字,再給你一個字串 s 和一個數字 k
如果該字串 s 沒出現在這 n 個字串中,或出現了但該字串的數字 > k+5 則輸出第三種
如果出現了但數字掉在 k+1 和 k+5 之間 (包含) 輸出第二種
否則輸出第一種
只要掃一次所以 map 或 hash 說不定還比較慢?當作練 strcmp() ..
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:28
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11839 Accepted
時間: 2013/08/12 Mon 14:13:15
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11839 Accepted
時間: Mon Dec 17 21:16:21 2012
嗯簡單題..
小翻一下
給你 n 組數字,每組五個數字,介於 0~255,<= 127 算 Yes, 否則算 No
如果一組數字中算 Yes 的不恰為一個,則輸出 *;否則依它是第幾個數字輸出 A~E
沒啥好講的,就做吧
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:28
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 10720 Accepted
時間: 2013/08/12 Mon 14:13:16
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10720 Accepted
時間: Mon Dec 17 21:57:14 2012
圖論題..
小翻一下
給你 n 個數字,問是否可能形成一個 graph 恰有 n 個點且這些點的 degree 恰為這 n
個數字
http://en.wikipedia.org/wiki/Degree_(graph_theory)
----
簡譯一下附上的 wiki 裡的算法
每次拉 degree 最大的點出來,假設 degree d,拔掉它,並且讓它連目前除了它以外
degree 前 d 大的點 (也就是此時前 d 大的點,degree -1) 如果此時剩下的點不到 d
那表示無解;如果可以全部做完沒剩半個點,就是有解
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:29
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 10646 Accepted
時間: 2013/08/12 Mon 14:13:17
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 10646 Accepted
時間: Tue Dec 18 00:01:37 2012
簡單題,不過可能對新手小棘手?容易噴小錯又不容易除錯的類型
小翻一下
現在有 52 張牌牌面向下,定義一張牌的值,若數字是 2~9 則為 2~9,否則為 10
首先拿起 25 張牌放在手上,設 y = 0 然後做以下事情 3 次 (都和手上的牌無關)
1. 抽起牌堆最上面那張
2. y += x (這張牌的值)
3. 將這張牌以及目前牌堆最上面(10-x)張棄掉不用
做完後把手上的 25 張依原本樣子放回去牌堆,問從牌堆最底下起算第 y 張牌是什麼
就.. 照著做,注意它給的順序是從牌堆底下開始,所以牌堆最上面那張其實是輸入的
第 52 個字串
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:29
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11850 Accepted
時間: 2013/08/12 Mon 14:13:18
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11850 Accepted
時間: Tue Dec 18 00:16:22 2012
嗯..有點無聊的一題
小翻一下
你的車充電後可以跑兩百公里,你從 0 出發要到 1422 公里處的目的地再回來
給你路上充電站的位置,問是否可能來回
就..硬做吧,注意除了要到達目的地,還要能從目的地回來
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:29
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 11034 Accepted
時間: 2013/08/12 Mon 14:13:19
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 11034 Accepted
時間: Tue Dec 18 00:48:28 2012
也是有點..無聊,寫起來有點小麻煩
小翻一下
你要控制船接送汽車過河,方法是讓汽車一台台開上船排成一排,過河後再一台台下來
上船運送順序按照汽車到達時間先後,先到先上,船會開到對岸的條件是岸上有車要送
或是對岸有車要送,給你船的長度、每台車的長度以及它在左岸或右岸,按抵達順序給,
船一開始在左岸且所有車都抵達後才開始運送,問最少需要過河幾次
嫌複製貼上麻煩的話可以用指標交換或是 index 0-1 互換 (k = 1-k)
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:30
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 551 Accepted
時間: 2013/08/12 Mon 14:13:20
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 551 Accepted
時間: Tue Dec 18 01:06:09 2012
沒什麼特別的,就字串上有點小麻煩
小翻一下
給你一個字串,試求其括號是否匹配正常;不是的話輸出最早從第幾個位置可發現異常
比較特別的是 (* 和 *) 只算一個位置,且 (*) 視作 (* 以及 )
----
算 stack 經典型了,看到上括號 push,看到下括號 pop 如果不符合就有問題
符合就繼續
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:30
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] ACM 12243 Accepted
時間: 2013/08/12 Mon 14:13:21
作者: sa072686 (sa) 看板: sa072686
標題: [學術] ACM 12243 Accepted
時間: Tue Dec 18 01:18:54 2012
字串處理..嗎?
小翻一下
一個單字的定義是連續出現的大小寫字母,一句詩句的定義是該句每個單字首字母相同
輸入每一行是一句,問每一句是不是詩句
會找單字字首就不難的一題
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 140.112.248.106
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:31
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] UVa 12405 Accepted
時間: 2013/08/12 Mon 14:13:22
作者: sa072686 (sa) 看板: sa072686
標題: [學術] UVa 12405 Accepted
時間: Sun Jun 2 13:26:41 2013
在找簡單題餵新手, 就想說把lucky貓的新一星題踩一踩
所以不用翻譯XD
防雷
貪心! 從左掃到右,如果有一個該覆蓋的點沒被覆蓋,那稻草人放它右邊不會比較差
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 36.227.197.90
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:31
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] UVa 12439 Accepted
時間: 2013/08/12 Mon 14:13:23
作者: sa072686 (sa) 看板: sa072686
標題: [學術] UVa 12439 Accepted
時間: Sun Jun 2 17:21:10 2013
嗯lucky貓有..
基本上就是苦工, 討論板有挺詳細的測資
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 36.227.197.90
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:31
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] UVa 12459 Accepted
時間: 2013/08/12 Mon 14:13:24
作者: sa072686 (sa) 看板: sa072686
標題: [學術] UVa 12459 Accepted
時間: Sun Jun 2 17:21:51 2013
Lucky貓也有
基本上就是個long long不會overflow, 免大數的fibonacci
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 36.227.197.90
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:32
作者: winston1907 at 13/08/12
※ 本文轉錄自 [winston1907] 信箱
作者: winston1907.bbs@ptt2.cc
標題: [學術] UVa 12520 Accepted
時間: 2013/08/12 Mon 14:13:25
作者: sa072686 (sa) 看板: sa072686
標題: [學術] UVa 12520 Accepted
時間: Tue Jun 4 01:14:17 2013
麻煩,超級麻煩,但是根本沒考驗什麼編程技巧
小翻一下
把邊長n*n的土地切成n^2個邊長1*1方塊,要求選m塊出來,求選m塊土地使周長和盡量大
n <= 10^6
防雷
空間足夠時顯然擺梅花陣最佳,有以下兩種擺法,視最左上角是擺或不擺
101 010
010 101
101 010
我們稱左邊為A陣,右邊為B陣
每選一塊就提供周長4,很簡單的
空間不是很足夠時,在梅花陣裏擺中間的話周長-4,擺邊邊周長-2,擺角角周長不變
所以貪心從角角擺起,而角的數量又因土地邊長單雙數而相異
邊長雙數:
A陣B陣會長得一模一樣,必只有兩個角落
擺這兩個角周長不變,之後擺邊上每一塊-2,之後擺中間每一塊-4,貪心地擺直到擺完
邊長單數:
這比較特別,因為A陣可以多擺一格,B陣可以多四個角
設B陣擺滿時總共有x塊,這時A陣和B陣都是周長4x
x+1塊時,A陣4x+4,B陣只能擺角落不變,4x,A勝
x+2塊時,A陣擺邊4x+2,B陣還有三個角落,4x,A勝
x+3塊時,A陣擺邊4x,B陣還有兩個角落,4x,平手
x+4塊時,A陣擺邊4x-2,B陣還有一個角落,4x,B勝
之後直到B陣擺滿邊邊為止,都比A的周長多2,所以A陣只贏兩種情形
所以唯一的兩種A陣較佳的特例處理一下,其它都用B陣來擺
擺邊邊周長-2,擺滿邊邊之後擺中間就是周長-4,貪心擺直到擺完
但是圖很大所以硬擺一定TLE,要去推算每種情形是幾塊,以及周長怎麼計算
非常..麻煩,對了記得long long,輸入就要
文末防雷
--
※ 發信站: 批踢踢兔(ptt2.cc)
◆ From: 36.227.197.90
φ winston1907 轉:從 [winston1907] 信箱,于 2013/08/12 Mon 14:15:32
作者: sa072686 at 06/07/15
題號 難度 解法 必備能力 備註
100 低 迴圈硬解 基本語法 無
272 秒殺 字元判定 字元的相等 以SCANF讀入%C時除"外都直接輸出
458 秒殺 ASCII碼運算 對ASCII碼的基本了解 CHAR亦為整數型態,直接運算可
476 中 座標運算 浮點數/平面座標 看座標就能判定是否落在正方形中
477 難 座標運算 同上 同上+用距離公式計算
488 秒殺 迴圈硬解 基本語法 無
494 秒殺 字元判定 ASCII碼 依題意解,換行便輸出
579 低 浮點數運算 浮點數/角度 以%.3F輸出
591 秒殺 陣列計算平均 陣列的加總 算出平均後一個個處理再加總
10018 難 整數反轉/迴文 整數反轉/迴文 迴文以字串看,相加以整數加
10035 中 取各位數相加 進位判斷 注意像是1+999這類數字
10038 中 陣列的相減 絕對值 無
10055 秒殺 取絕對值 絕對值 用DOUBLE
10062 低 字元計數 ASCII碼/陣列計數 歸零
10071 秒殺 國中物理 國中物理/基本語法 事實上就是輸出2VT
10082 低 字元陣列 建表/循線搜尋 可另撰一程式協助建表
10107 難 排序 任一排序法 讀入一次排序一次
10141 極難 排序 字串讀入/任一排序法 仔細看就會發現需讀入字串數都有給
10209 極難 數學公式題 數學公式 見262篇
10222 低 同10082 同10082 同10082
10300 低 同10071 同10071 10071麻煩版,試著化簡
10340 中 字元比對 字元比對 以CHAR讀入並計字串長度即可
10370 中 取平均/比對 陣列加總/浮點數運算 以%%來輸出%符號,%C指定ASCII也行
10473 難 十/十六進位 取餘數/判定幾進位數 以%X可輸出十六進位數
10499 秒殺 公式 公式(N*25 %) 1例外,用LONG LONG,%的輸出同上
10550 中 角度運算 角度運算 小心轉的方向
10589 中 類似477 判定是否在圓內 無
10673 難 數學 數學 詳見該文
10696 難 自定函式 函式 照題目定函式即可
10783 秒殺 迴圈硬解 基本語法 無
10789 極難 質因數分解 陣列計數/質因數分解 善用SQRT()開根號(需MATH.H)
10812 秒殺 奇偶判斷 奇偶判斷/和差公式 無
10878 難 二進位運算 二進位運算/字元讀入 做二進位運算,再以此為ASCII輸出
10903 難 字元判定 浮點數/字元判定 %S讀入,基本上看首字便夠判斷
10924 極難 質因數分解 質因數分解/ASCII 先對ASCII處理後再加總
10929 中 大數 字元讀入/11倍數判斷 一加一減可以消掉ASCII多出之48
11059 極難 暴力 暴力 不像一星,請參考198篇
難度…參考就好,考慮了複雜、使用的語法難度(有用函式會較高)
以及必要能力(質因數分解等較高)、題目好不好看出解法等等
而且那是題目相對而言,如果是高手的話,大概沒幾題不是秒殺了
參考用,很多東西都不是唯一解法
習慣上一星題我都用%C讀入,大部份反而方便
一星題也沒什麼好講的,就直接建表就好…
二星以上或英文題才有一題一篇文章XD
--
TFCis 97th小教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/07/22 Sat 10:20:37
▲ sa072686 改@2006/07/31 Mon 20:27:29
▲ sa072686 改@2006/08/05 Sat 20:58:20
▲ sa072686 改@2006/08/16 Wed 09:35:49
▲ sa072686 改@2006/08/16 Wed 09:36:13
▲ sa072686 改@2006/08/17 Thu 00:24:20
φ ben196888 轉:到 [ben196888] 看板,于 2007/06/08 Fri 03:23:42
→ newmoon 推:以前不是這樣嗎? 1106 20:12
φ r51303 轉:到 [r51303] 看板,于 2007/11/09 Fri 23:13:57
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:26:39
φ brucehsu 轉:到 [brucehsu] 看板,于 2008/09/19 Fri 09:20:03
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:00:30
φ blackjack 轉:到 [blackjack] 看板,于 2009/09/28 Mon 16:06:01
φ blackjack 轉:到 [blackjack] 看板,于 2009/11/05 Thu 00:50:23
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:28:47
→ aszx87410 推:借轉謝謝~ 0115 20:08
φ aszx87410 轉:到 [aszx87410] 看板,于 2010/01/15 Fri 20:08:21
φ txs 轉:到 [txs] 看板,于 2010/04/24 Sat 22:27:36
→ sb283 推:借轉~ 1007 12:57
φ sb283 轉:到 [sb283] 看板,于 2010/10/07 Thu 12:57:45
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:37:01
作者: sa072686 at 06/08/05
※ 本文轉錄自 [masnec] 看板
作者: masnec (小賢賢) 站內: masnec
標題: 一些不錯的網站
時間: 2006/07/04 Tue 01:41:45
這些是我曾經用過的
提供給學弟參考
大家加油^^~
-----------------------------------------------------------------
Lucky Cat
http://www2.dmhs.kh.edu.tw/
C++學習筆記
http://caterpillar.onlyfun.net/Gossip/CppGossip/CppGossip.html
演算法和資料結構
http://algorithm.diy.myrice.com/
大榕樹(演算法技巧)
http://www.mydrs.org/program/
演算法
http://www.cyut.edu.tw/~ckhung/b/al/
離散數學
http://www.cis.nctu.edu.tw/~is83039/discret/discrete6.html
查函式用法
http://www.cplusplus.com/ref/
http://www.cppreference.com/
Math World
http://mathworld.wolfram.com/
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站│sony.TFcis.org│ │
╰─────────╯ ╰─┼
by masnec from 61.64.165.137 (所以內特)
φ sa072686 轉:從 [masnec] 看板,于 2006/07/12 Wed 08:20:37
→ ben196888 推:借轉 0131 19:11
φ ben196888 轉:到 [ben196888] 看板,于 2007/01/31 Wed 19:11:57
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/03/16 Fri 13:23:11
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:27:11
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:00:41
φ hkhs7821 轉:到 [hkhs7821] 看板,于 2011/11/20 Sun 09:42:54
作者: sa072686 at 06/12/11
還是感謝cs >///<
Done * 00112 Tree Summing *
Done * 00140 Bandwidth *
Done * 00155 All Squares * 一塊分成四小塊
Done * 00165 Stamps * 用做不出來的那個值當 limit
Done * 00193 Graph Colouring * 基本 DFS
Done * 00195 Anagrams *
Done * 00208 Firetruck *
Done * 00216 Getting in Line * 8! with some cuts
Done * 00280 Vertex *
Done * 00296 Safebreaker *
Done * 00301 Transportation *
Done * 00349 Transferable Voting (II) *
Done * 00380 Call forwarding *
Done * 00384 Slurpys *
Done * 00399 Another Puzzling Problem *
Done * 00416 LED test *
Done * 00441 Lotto * 基本 DFS
Done * 00469 Wetlands of florida *
Done * 00529 Addition chains * 可用 IDA* (但不會比較快)
Done * 00539 Settlers of Catan *
Done * 00565 Pizza Anyone? *
Done * 00571 Jugs (bfs appr) *
Done * 00574 Sum It Up *
Done * 00590 Always on the run *
Done * 00598 Bundling Newspapers *
Done * 00610 Street Directions *
Done * 00620 Cellular Structure *
Done * 00652 Eight *
Done * 00657 The die is cast *
Done * 00677 All Walks of length n ... *
Done * 00628 Passwords *
Done * 00639 Don't Get Rooked * 圖形的暴搜題 類八皇后
Done * 00656 Optimal Programs *
Done * 00729 Hamming Distance Problem *
Done * 00732 Anagrams by Stack *
Done * 00743 The MTM Machine *
Done * 00776 Monkeys in a Regular ... *
Done * 00782 Contour Painting * Flood Fill?
Done * 00784 Maze Exploration * Flood Fill
Done * 00785 Grid Colouring * Flood Fill
Done * 10004 Bicoloring * 著色問題
Done * 10063 Knuth's Permutation *
Done * 10068 Treasure Hunt, the *
Done * 10073 Constrained Exchange Sort * IDA*
Done * 10098 Generating FastSorted ... *
Done * 10181 15-Puzzle Problem * IDA*
Done * 10186 Euro Cup 2000 *
Done * 10276 Hanoi Tower Troubles Again! *
Done * 10285 Longest Run on a Snowboard *
Done * 10344 23 out of 5 *
Done * 10364 Square * 接完三邊後就不必接第四邊了
Done * 10400 Game Show Math *
Done * 10419 Sum-up the Primes *
Done * 10422 Knights in FEN * IDA*
Done * 10447 Sum-up the Primes II *
Done * 10496 Collecting Beepers *
Done * 10501 Simplified Shisen-Sho *
Done * 10503 Domino Solitaire, the *
Done * 10513 Bangladesh Sequences *
Done * 10582 ASCII Labyrinth *
Done * 10605 Mines for Diamonds *
Done * 10637 Coprimes *
*********************************************
************* BFS ******************
Done * 00321 The new Villa *
Done * 00336 Node too far * 基本 BFS, 亦可 Floyd-W...
Done * 00383 Shipping routes *
Done * 00429 word transformation *
Done * 00567 Risk *
Done * 00589 Pushing boxes *
Done * 00633 Chess knight *
Done * 00642 Word Amalgamation *
Done * 00707 Robbery *
Done * 00762 We Ship Cheap * 基本 BFS, 走過的點不再走
Done * 10009 All Roads Lead Where? *
Done * 10422 Knights in FEN * 用 IDA* 解的
**************************************
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
▲ sa072686 改@2006/12/11 Mon 18:11:59
▲ sa072686 改@2006/12/11 Mon 19:49:15
▲ sa072686 改@2006/12/12 Tue 09:42:02
▲ sa072686 改@2006/12/12 Tue 13:01:16
▲ sa072686 改@2007/02/26 Mon 20:56:11
φ zenixls2 轉:到 [zenixls2] 看板,于 2007/03/07 Wed 13:23:31
▲ sa072686 改@2007/03/13 Tue 10:43:22
φ ben196888 轉:到 [ben196888] 看板,于 2007/06/08 Fri 03:23:34
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/14 Sun 02:40:41
▲ sa072686 改@2007/10/28 Sun 01:36:29
▲ sa072686 改@2007/10/28 Sun 07:43:00
▲ sa072686 改@2007/10/28 Sun 09:57:29
▲ sa072686 改@2007/10/28 Sun 18:53:22
▲ sa072686 改@2007/10/29 Mon 00:23:47
▲ sa072686 改@2007/10/29 Mon 09:35:04
▲ sa072686 改@2007/10/29 Mon 11:22:58
▲ sa072686 改@2007/10/29 Mon 13:37:42
▲ sa072686 改@2007/10/30 Tue 11:48:00
▲ sa072686 改@2007/10/30 Tue 14:48:35
▲ sa072686 改@2007/10/30 Tue 16:21:21
▲ sa072686 改@2007/11/01 Thu 08:49:34
▲ sa072686 改@2007/11/01 Thu 16:10:12
▲ sa072686 改@2007/11/01 Thu 20:00:09
▲ sa072686 改@2007/11/01 Thu 20:20:34
▲ sa072686 改@2007/11/01 Thu 23:16:59
▲ sa072686 改@2007/11/02 Fri 12:11:19
▲ sa072686 改@2007/11/02 Fri 21:33:17
▲ sa072686 改@2007/11/04 Sun 08:59:28
▲ sa072686 改@2007/11/09 Fri 08:36:36
▲ sa072686 改@2007/11/12 Mon 14:16:48
▲ sa072686 改@2007/11/12 Mon 16:31:55
▲ sa072686 改@2007/11/12 Mon 22:28:56
▲ sa072686 改@2007/11/13 Tue 08:12:01
▲ sa072686 改@2007/11/14 Wed 09:49:29
▲ sa072686 改@2007/11/14 Wed 11:51:06
▲ sa072686 改@2007/11/15 Thu 07:46:33
▲ sa072686 改@2007/11/15 Thu 09:48:03
▲ sa072686 改@2007/11/16 Fri 10:13:27
▲ sa072686 改@2007/11/16 Fri 15:49:45
▲ sa072686 改@2007/11/16 Fri 20:50:06
▲ sa072686 改@2007/11/16 Fri 23:13:17
▲ sa072686 改@2007/11/17 Sat 21:52:28
▲ sa072686 改@2007/11/18 Sun 09:37:05
▲ sa072686 改@2007/11/18 Sun 12:38:44
All done.
▲ sa072686 改@2007/11/18 Sun 12:39:19
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:27:17
→ SKYLY 說:借轉感謝<(_ _)> 0715 18:45
φ SKYLY 轉:到 [SKYLY] 看板,于 2008/07/15 Tue 18:46:16
→ LFKing 推:好物 感謝分享~~! 0729 23:06
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/01 Thu 14:09:19
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:00:56
φ t52101t 轉:到 [t52101t] 看板,于 2009/05/08 Fri 20:15:15
φ txs 轉:到 [txs] 看板,于 2009/05/26 Tue 18:02:42
→ brucehsu 推:借轉 0922 18:06
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/09/22 Tue 18:07:09
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:28:57
→ sb283 推:借轉~ 1007 12:57
φ sb283 轉:到 [sb283] 看板,于 2010/10/07 Thu 12:58:03
φ b821213 轉:到 [b821213] 看板,于 2011/01/13 Thu 07:53:50
φ hkhs7821 轉:到 [hkhs7821] 看板,于 2011/11/20 Sun 09:41:04
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:37:14
作者: sa072686 at 06/12/11
感謝cs >///<
Done 711 Dividing Up
Done 10081 Tight Words
Done 10482 The Candyman Can
Done 10549 Russian Dolls
Done 10558 A Brief Gerrymander
Done 10201 Advantures in Moving Part IV
Done 10154 Weights and Measures
Done 10259 Hippity Hopscotch
Done 10261 Ferry Loading
Done 10280 Old Wine into New Bottles
10379 Pit Stop Strategy
10529 Dumb Bones
Done 10559 Blocks
Done 10593 Kites
Done 10599 Robots (II)
Done 10604 Chemical Reaction
Done 10617 Again Palindrome
Done 10635 Prince and Princess
Done 10645 Menu
Done 10690 Expression Again
Done 10721 Bar Codes
Done 10723 Cyborg Genes
Done 10739 String to Palindrome
Done 10755 Garbage Heap
Done 10759 Dice Throwing
Done 10817 Headmaster's Headache
Done 10819 Trouble of 13-Dots
Done 10827 Maximum Sum on a Torus
Done 10860 Many a Little Makes a Mickel
Done 10874 Segments
Done 10913 Walking on a Grid
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
→ Zero 推:CS XD 1208 21:23
→ sa072686 推:好人>///< 1208 21:27
→ DarkKnight 推:10549 應該不能用 DP 做....還有他少給了很多好玩的 1210 20:43
→ csftwpt 推:我沒看到清單中有 10549, 另外這是 uva board 上的 1210 22:41
→ sa072686 推:有看到10549XDDD 不過這題沒什麼想法 囧rz 1211 12:51
▲ sa072686 改@2006/12/11 Mon 18:17:23
→ sa072686 推:487題裡面只有一題有在表中…囧rz 1211 18:17
→ csftwpt 推:囧 原來清單沒有排序過 神經病 1211 20:02
→ sa072686 推:寫個程式排 >///< 1211 20:14
▲ sa072686 改@2006/12/12 Tue 07:45:39
→ sa072686 推:對了,10549有某外國人說是DP經典題 1212 07:48
→ csftwpt 推:那還真抱歉, 排名一三名是 DarkKnight 跟我 1212 10:21
▲ sa072686 改@2007/03/15 Thu 10:03:17
φ ben196888 轉:到 [ben196888] 看板,于 2007/06/08 Fri 03:23:22
▲ sa072686 改@2007/09/03 Mon 20:23:55
▲ sa072686 改@2007/09/05 Wed 18:38:48
▲ sa072686 改@2007/09/07 Fri 11:21:44
▲ sa072686 改@2007/09/10 Mon 07:42:54
▲ sa072686 改@2007/09/10 Mon 08:57:02
▲ sa072686 改@2007/09/10 Mon 10:42:06
▲ sa072686 改@2007/09/10 Mon 11:57:19
▲ sa072686 改@2007/09/11 Tue 10:02:51
▲ sa072686 改@2007/09/11 Tue 10:30:17
▲ sa072686 改@2007/09/12 Wed 10:06:43
▲ sa072686 改@2007/09/12 Wed 16:05:59
▲ sa072686 改@2007/09/12 Wed 20:53:36
▲ sa072686 改@2007/09/13 Thu 09:07:35
▲ sa072686 改@2007/09/14 Fri 07:50:26
φ devilqxect 轉:到 [devilqxect] 看板,于 2007/10/14 Sun 02:40:54
▲ sa072686 改@2007/11/22 Thu 09:47:30
▲ sa072686 改@2007/12/05 Wed 15:37:18
▲ sa072686 改@2007/12/06 Thu 15:47:07
▲ sa072686 改@2007/12/07 Fri 09:42:13
▲ sa072686 改@2007/12/11 Tue 12:20:13
▲ sa072686 改@2008/03/03 Mon 18:58:31
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:27:25
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/01 Thu 14:09:31
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:01:03
φ t52101t 轉:到 [t52101t] 看板,于 2009/05/07 Thu 00:04:33
→ brucehsu 推:借轉 0922 18:06
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/09/22 Tue 18:07:14
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:29:03
φ txs 轉:到 [txs] 看板,于 2010/07/29 Thu 12:23:16
→ sb283 推:ru,45j03 1007 12:58
→ sb283 推:借轉~ 1007 12:58
φ sb283 轉:到 [sb283] 看板,于 2010/10/07 Thu 12:58:22
φ hkhs7821 轉:到 [hkhs7821] 看板,于 2011/11/20 Sun 09:41:19
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:37:21
作者: sa072686 at 06/12/11
一樣感謝cs >///<
Done 259 - Software Allocation
Done 563 - Crimewave 點莫名其妙的多?!
Done 663 - Sorting Slides 簡單的配對題
Done 670 - The Dog Task 也是不難的配對
Done 753 - A plug for Unix
Done 820 - Internet Bandwidth 最簡單的一題
Done 10080 - Gopher II 也是很容易的一題
Done 10092 - The Problem with the Problemsetter 點很多的配對問題
Done 10122 - Mysterious Mountain 好像很有趣?
Done 10249 - The Grand Dinner Flow --> Greedy
Done 10330 - Power Transmission 把節點當作邊來做
Done 10349 - Antenna Placement
Done 10366 - Faucet Flow Simulation? 是這樣嗎?
Done 10380 - Shogi Tournament
Done 10418 - Hyper Toy Soldiers
Done 10511 - Councilling
Done 10594 - Data Flow
10735 - Euler Circuit
Done 10746 - Crime Wave - The Sequel min-cost flow, 小心誤差
Done 10779 - Collectors Problem
Done 10804 - Gopher Strategy 6.8 秒 AC, 沒寫好會 TLE
Done 10888 - Warehouse min cost flow
--
台南一中資訊社九七級程設教學~*
ACM帳號:11557
--
┼─╮ ╭───────╮
│ │台南一中.索尼小站∣sony.TFcis.org│ │
╰─────────╯ ╰─┼
by sa072686 from 203.204.38.30 (和信超沒品)
φ ben196888 轉:到 [ben196888] 看板,于 2007/06/08 Fri 03:23:15
▲ sa072686 改@2007/11/14 Wed 12:09:18
▲ sa072686 改@2008/01/11 Fri 21:30:50
▲ sa072686 改@2008/01/14 Mon 19:10:30
▲ sa072686 改@2008/01/14 Mon 19:12:11
▲ sa072686 改@2008/01/14 Mon 23:10:56
▲ sa072686 改@2008/01/24 Thu 09:59:52
▲ sa072686 改@2008/01/27 Sun 13:46:33
▲ sa072686 改@2008/01/28 Mon 01:14:00
▲ sa072686 改@2008/01/29 Tue 12:28:22
φ aytawgf 轉:到 [某隱藏] 看板,于 2008/04/27 Sun 22:27:49
φ yuscvscv 轉:到 [yuscvscv] 看板,于 2009/01/01 Thu 14:09:41
φ yves1204 轉:到 [yves1204] 看板,于 2009/04/28 Tue 13:01:11
→ brucehsu 推:借轉 0922 18:07
φ brucehsu 轉:到 [brucehsu] 看板,于 2009/09/22 Tue 18:07:19
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:29:09
φ b821213 轉:到 [b821213] 看板,于 2011/01/13 Thu 07:54:02
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:37:27
作者: sa072686 at 09/07/08
※ 本文轉錄自 [sa072686] 信箱
作者: sa072686.bbs@fgisc.twbbs.org (人生就是一次次的收卡)
標題: [筆記] 負債
時間: 2009/07/08 Wed 19:10:55
作者: sa072686 (為未來舖路) 站內: sa072686
標題: [筆記] 負債
時間: 2008/02/14 Thu 20:16:25
10092 - 二分圖匹配
983 - 暴力
911 - 數學
925 - 多端最短路徑
944 - 動態規劃
957 - 暴力建表
985 - 廣度優先搜尋法
986 - 動態規劃
995 - 廣度優先搜尋法
997 - 遞迴
815 - 排序
325 - 暴力
10600 - 最小花費生成樹
10616 - 動態規劃
10688 - 動態規劃
10245 - 暴力
11026 - 動態規劃
11127 - 深度優先搜尋法
11133 - 動態規劃
10928 - 暴力
11138 - 二分圖匹配
143 - 計算幾何
423 - 單端最短路徑
434 - 貪婪
10249 - 二分圖匹配
10273 - 暴力(使用鏈表)
10341 - 二分搜尋
11049 - 廣度優先搜尋法
11088 - 深度優先搜尋法
10094 - 規律
10821 - 貪婪、遞迴、樹
11081 - 動態規劃
11099 - 動態規劃
10566 - 二分搜尋
10167 - 計算幾何
300 - 暴力
397 - 暴力
520 - 暴力
410 - 排序
634 - 計算幾何
10454 - 動態規劃
11152 - 數學
638 - 枚舉、排序
11136 - 計數排序法、枚舉
632 - 字串、排序
377 - 進位制
10718 - 貪婪
187 - 暴力
347 - 暴力
391 - 暴力
362 - 暴力
276 - 暴力
394 - 暴力
398 - 暴力搜尋
418 - 暴力
556 - 暴力
581 - 暴力(100 * 60000)
613 - 暴力
10774 - 約瑟夫(動態規劃)
670 - 二分圖匹配
10991 - 數學
198 - 暴力、四則運算
10746 - 最小花費二分圖匹配
11313 - 暴力
11326 - 數學
10594 - 最小花費最大流
11385 - 暴力
11386 - 枚舉(需線性時間複雜度)
11387 - 構造
11388 - 數學
11389 - 貪婪
10804 - 二分搜尋、二分圖匹配
563 - 二分圖匹配、廣度優先搜尋法
10122 - 計算幾何、二分搜尋、二分圖匹配
259 - 二分圖匹配
663 - 枚舉、二分圖匹配
753 - 多端最短路徑、二分圖匹配
11330 - 暴力
11353 - 排序、篩法、動態規劃
11262 - 二分搜尋、二分圖匹配
11396 - 點塗色問題(深度/廣度優先搜尋法)
10779 - 最大流
10418 - 廣度優先搜尋法、二分搜尋、二分圖匹配
11307 - 動態規劃
150 - 暴力
339 - 暴力
388 - 單端最短路徑(廣度優先搜尋法佳)
381 - 暴力
379 - 模擬
395 - 模擬
603 - 模擬
616 - 模擬
588 - 計算幾何
11210 - DFS
10349 - 二分圖匹配
10366 - 模擬
10380 - 二分搜尋、二分圖匹配
10511 - 二分圖匹配
331 - DFS
505 - 暴力
518 - 暴力
188 - 模擬(用strtok會死)
535 - 數學
411 - 模擬
559 - DP
577 - 模擬
178 - 撲克牌
181 - 撲克牌
--
═╬╬═╮˙ ∵ ﹒ ☆ origin_fgisc.twbbs.org
╭═╬╬═╯ . 。 ◢◤ ◢◤
北一資研。FGISC ╰═╬╬═╮ 基 斯 特 ◣◥ ◣◥
───────────┐ ╯║ ╯┌─────────────────────
by_sa072686 from_203.204.38.30(和信超媒體)
φ sa072686 轉:從 [sa072686] 信箱,于 2009/07/08 Wed 19:11:07
φ suhorng 轉:到 [yuscvscv] 看板,于 2009/07/08 Wed 19:36:33
φ suhorng 轉:到 [suhorng] 看板,于 2009/07/08 Wed 19:37:00
φ cjack 轉:到 [cjack] 看板,于 2009/12/05 Sat 01:29:18
φ alfar01 轉:到 [alfar01] 看板,于 2012/01/16 Mon 22:34:17