解题者黄锦辉.docx
- 文档编号:9683792
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:19
- 大小:22.46KB
解题者黄锦辉.docx
《解题者黄锦辉.docx》由会员分享,可在线阅读,更多相关《解题者黄锦辉.docx(19页珍藏版)》请在冰豆网上搜索。
解题者黄锦辉
XX文库专用
★★★☆☆
題組:
ACMProgrammingContestWorldFinals,1998
題號:
ProblemA:
CrystalClear
解題者:
黃錦輝
解題日期:
1998年7月28日
題意:
可把題意視為在xy座標圖上,forallx,y=0,1,2,3,..., 以(x,y)為圓心,半徑為1/2作無數多個圓。
在給定一多邊形後,求在此多邊形內所包函的圓的面積,其中多邊形內所包函的面積計算方式為,若該圓完全落在多邊形內,則完全計算;若該圓圓心落在多邊形邊上,則只計一半;若該圓除了圓心以外,有其他部份跟邊相交,則不於計算(若該圓與邊相切,視為在多邊形內);若該圓圓心為多邊形上的一頂點,則面積為此一頂點的內角(PS:
n邊形內角和為(n-2)π)。
題意範例:
無(題目上有)。
解法:
從輸入中先求出min(x)、max(x)、min(y)、max(y),forall(x,y),min(x)<=x<=max(x)&min(y)<=y<=max(y),儉驗(x,y)為圓心的圓是屬於那一類,再根據題意加以計算。
解法範例:
已知五邊形的頂點分別為(0,2)、(3,5)、(6,3)、(6,0)、(1,0),所以min(x)=0、max(x)=6、min(y)=0、max(y)=5,經儉驗得(1,2)、(2,1)、(2,2)、(2,3)、(3,1)、(3,2)、(3,3)、(3,4)、(4,1)、(4,2)、(4,3)、(5,1)、(5,2)、(5,3)共十四點所成的單位圓完全落在此五邊形內;(1,4)、(2,0)、(2,5)、(3,0)、(4,0)、(5,0)、(6,1)、(6,2)共八點圓心落在邊上;(1,1)、(4,4)雖落在五邊形內,但卻是圓心沒若在邊上而與邊有相交,不於計算,所以所要求的解為 (14+8/2)*(1/4)π+(5-2)/2*(1/4)π=15.315。
討論:
無。
程式:
無。
★★★☆☆
題組:
ACMProgrammingContestWorldFinals,1998
題號:
ProblemB:
FlightPlanning
解題者:
葉韋宏
解題日期:
1998年9月13日
題意:
設計一個有關航空飛行的程式,在一次飛行旅程中,至少有一個以上的小行程(leg),舉例來說,有一段旅程是從台北到紐約.途中可能先飛到東京,再轉至夏威夷,其次到洛杉磯,最後才抵達紐約,此段飛行共有四個小行程,即(台北,東京),(東京,夏威夷),(夏威夷,洛杉磯),(洛杉磯,紐約).程式要計算出每段小行程中,飛機的飛行高度,使整個旅程飛機的耗油量為最少.
假設飛機以固定每小時400knots的飛行速度(airspeed)行進,而最有效的飛行高度為30,000feet,此高度飛行的耗油量為每小時2000加侖,若不在30,000feet的高度飛行,每差1000feet,每小時耗油量加10加侖,飛機每爬升1000feet要消耗50加侖的油,下降則不消耗油.飛機起飛和降落都在0feet的高度,且飛機爬升或降落都不花費時間.若遇到順風,飛機的速度(airspeed)會增加,若遇到逆風,則飛行速度會減少,舉例來說,如果飛行速度為400knots,風速為–35knots,則飛行速度變為350knots.
原則上,飛機都以1000feet倍數的高度飛行,且介於20,000feet~40,000feet之間.
題意範例:
假設有一旅程有兩段小行程(leg),每段小行程有三組資料,分別為行程長度,20,000feet高度的風速,40,000feet高度的風速.20,000feet~40,000feet之間的風速採線性插值(linearinterpolation)的方式,資料表示如下:
2---------------->表示有兩段小行程
1500–5050
100000
解答為第一段飛行高度為35,000feet,第二段飛行高度為30,000feet,總共耗油量為13985加侖.
SampleInputOutputfortheSampleInput
2(表示有兩個旅程要計算)Flight1:
353013985
2Flight2:
20304023983
1500–5050
100000
3
1000500
2000020
1800–50100
解法:
因需計算飛機在每段小行程之間轉換時爬升或下降而耗費的油量,所以小行程(leg)之間不獨立,須利用dynamicProgramming的方法.
解法範例:
無
討論:
無
程式:
無
★★★☆☆
題組:
ACMProgrammingContestWorldFinals,1998
題號:
ProblemC:
LeadorGold
解題者:
黃嘉茂
解題日期:
1998年8月25日
題意:
點石成金,設有A、B、C三種元素,今有數種由A、B、C組成之混合物,若將這些混合物一某比例合成時,此合成物為黃金。
題意範例:
現有混合物三種,比例為1:
2:
3、3:
7:
1、2:
1:
2,現在想做出3:
4:
5比例的合成物。
當八份的1:
2:
3、一份的3:
7:
1、五份的2:
1:
2合成時,恰組成3:
4:
5的合成物,此為其解。
解法:
做一矩陣,第一行為1X+3Y+2Z=3,X、Y、Z為合成時三種混合物的比例。
Ex:
1323
2714
3125
如X、Y、Z有正解,這題即為有解。
解法範例:
Ex:
1323
2714
3125
第一行乘2減去第二行乘3減去第三行
->1323
01-3-2
0-8-4-4
第二行乘8加上第三行
->1323
01-3-2
00-28-10
檢查第三行是否前三項的正負都和第四項相反,如果是,此題無解,再檢查上一行,如果都有解,此題有解。
討論:
上次討論出判斷是否有正解的方法,應推廣到每一行都需做此判斷。
程式:
無
★★☆☆☆
題組:
ACMProgrammingContestWorldFinals,1998
題號:
ProblemD:
PageSelectionbyKeywordMatching
解題者:
史忠榮
解題日期:
1998年8月28日
題意:
由關鍵字(Keyword),找出『最接近』的5頁Pages。
每頁Page最多有8個關鍵字。
『最接近』定義如下:
假設Page1:
A B C
Page2:
C D
Page3:
C
A,B,C,D為關鍵字。
查詢(Query)條件為C A,設一數N(本題為8)。
則:
Page1的關聯度為(8*6)+(7*8)=104;Page2為(8*8)= 64;Page3為(8*8)=64。
所以Output為:
P1P2P3。
題意範例:
參照『題意』。
解法:
無特殊解法,對每一個Query,各別求出每頁Page的關聯度。
解法範例:
無。
討論:
無。
程式:
/*
Sampleinput:
PSmalltalkprogrammingcomputers
Pcomputersprogramming
PcomputersSmalltalk
PFORTRANprogramming
PCOBOLprogramming
Pprogramming
QSmalltalk
Qprogramming
Qcomputers
QSmalltalkcomputers
QSmalltalkprogramming
QcookingFrench
E
Sampleoutput:
QueryPages
Q1P1P3
Q2P6P1P2P4P5
Q3P2P3P1
Q4P3P1P2
Q5P1P3P6P2P4
Q6
*/
#include
#include
#include
#defineN8
charpage[25][8][21];//每頁Page的Keywords
intlen[25],pagen;//每頁Page的Keyword數;全部頁數
intcompare(constvoid*,constvoid*);
//記錄關聯度
structrec
{
intindex,value;
};
voidmain()
{
FILE*in;
charstr[300],*ptr;
//讀入Page的Keyword
in=fopen("page.in","r");
for(pagen=0;;)
{
fgets(str,300,in);
ptr=strtok(str,"\n\t\r");
if(strcmp(ptr,"E")==0)
break;
if(strcmp(ptr,"Q")==0)
continue;
for(len[pagen]=0;;len[pagen]++)
{
ptr=strtok(NULL,"\n\t\r");
if(ptr==NULL)
break;
strcpy(page[pagen][len[pagen]],ptr);
}
pagen++;
}
fclose(in);
//讀入Query的Keyword
in=fopen("page.in","r");
printf("QueryPages");
for(intq=1;;)
{
charquery[8][30];
intqlen;
fgets(str,300,in);
ptr=strtok(str,"\n\t\r");
if(strcmp(ptr,"E")==0)
break;
if(strcmp(ptr,"P")==0)
continue;
for(qlen=0;;qlen++)
{
ptr=strtok(NULL,"\n\t\r");
if(ptr==NULL)
break;
strcpy(query[qlen],ptr);
}
recvalue[25];
for(inti=0;i<25;i++)
{
value[i].value=0;
value[i].index=i+1;
}
//計算關聯度
for(i=0;i<=pagen;i++)
for(intj=0;j<=len[j];j++)
for(intk=0;k if(strcmp(query[k],page[i][j])==0) value[i].value+=(N-j)*(N-k); qsort((void*)value,25,sizeof(rec),compare); printf("\nQ%d",q); for(i=0;i<5;i++) { if(value[i].value! =0) printf("P%d",value[i].index); } q++; } fclose(in); } intcompare(constvoid*a,constvoid*b) { rec*x=(rec*)a,*y=(rec*)b; if(x->value return1; //假如關聯度一樣,Page頁碼由小到大 if(x->value==y->value) if(x->index>y->index) return1; else return-1; return-1; } ★★★★★ 題組: ACMProgrammingContestWorldFinals,1998 題號: ProblemE: PetriNetSimulation 解題者: 張震達 解題日期: 1998年7月29日 題意: 一個Petrinet是用來解釋concurrentactivity,每個Petrinet的成員有Places,tokens,transitions,和路徑(連通places到transitions與連通transitions 到places),而每個place可有零個或多個tokens。 本題則是用來模擬Petrinet之運作情形。 題意範例: 如上圖,P1(place)有一個token,而P2則無任何token,此時,T1(transition) 的狀態為enabled而T2的狀態為disabled(因為T1之輸入P1有一token,而 T2之輸入P2則無)。 又當一transition為enabled,則它就可以fire(將input place的tokensremoved,而在outputplace則加入tokens)。 所以,在上圖,T1enabled且fire後,一個token由P1removed,而在P2 則加入一個token。 此時,我們可知T1就變成disable,而T2則變為enabled, 所以,若T2此時fire,一個token由P2removed,而在P1處則加入一個token 。 回復到一開始時的情況,因此很明顯地,這個Pertinet會一直重複在這個 cycle的動作。 解法: 以下為解法步驟: (1)若輸入的places個數為n,則宣告一個可放n個整數的陣列,用來表示 各個place所擁有的token之個數。 (2)若輸入的transitions的個數為m,則宣告一個可放m個字元的陣列,用 來表示transitions的狀態(T表enabled,F表disabled)。 (3)再宣告一個mxn的二維陣列(或動態陣列),用來表示每transition的輸 入與輸出的places。 (負的代表輸入的place,正的則代表輸出的place) (4)利用題意所給的各個place的輸入輸出的token數與路徑數(幾個輸入和 幾個輸出),來初始化transitions之陣列之值。 (5)依題意給之fire數,去做模擬Petrinet的動作。 (利用forloop或others 方法) 解法範例: input: 3(place數) 300(各個place的token數) 3(transition數) -12(T1的inputplace與outputplace) -2-23(T2的inputplace與outputplace) -31(T3的inputplace與outputplace) 100(fire數) 上面的輸入如下圖: 則依上解法之步驟,所得到結果為 deadafter9transitions Placeswithtokens: 2 (1)(表P2有一token) 討論: 因為題意並沒有說明清楚,若有數個transitions可以同時enabled且要 fire時,彼此fire的優先順序,故若是模擬後的結果為dead沒問題;但若是 結果為live則可能會有數種不同的tokens分佈於各個place的情況。 程式: 無 ★★★★★ 題組: ACMProgrammingContestWorldFinals,1998 題號: ProblemF 解題者: 李怡謀 解題日期: 1998年8月5日 題意: 解出平面上兩多邊形交集部份(凹凸多邊形皆可),每一多邊形以一頂點序列表示,方向為順時針.解出交集部份後亦以同樣方式表示結果.由於凹多邊形是被允許的,所以解可能有多個多邊形. 解法: 把交點視為一頂點,所以多邊形邊將增加,爾後判斷邊是否在另一多邊形中,若是的話,由邊的另一端點找鄰邊,再作判斷,直到所有的邊都找到後,再從中找共用的頂點就可以決定解了 解法範例: 無 討論: 無 程式: 無 ★★★☆☆ 題組: ACMProgrammingContestWorldFinals,1998 題號: ProblemG: SpatialStructures 等級: 解題者: 張震達 解題日期: 1998年7月29日 題意: 電腦繪圖,影像處理與GIS(geographicinformationsystems)所有資料結 構的使用被稱為一quadtree.Quadtree有效地表示regional或blockdata同時 對於影像的union和intersection的運算提供了有效率的演算法。 本題則是 用來了解影像表示的兩種方法(矩陣與一系列之有序數字)之間的轉換。 題意範例: 如上左圖的影像,其被表示一陣列如上面中間之圖。 因為陣列中的值 有0有1,所以將其切成四個子block,然後在各別看每個子block其內的值, 若只有0或只有1,則就不需再切割,否則就在將子block切分成更小的四 個block,因此就會得到上右圖。 然後依著NW (1),NE (2),SW(3),SE(4)順序,依序將每個block給予號, 就有上右圖中的號碼值。 而依照上右圖就可建構一quadtree了。 root表示 pixels的entirearray。 每個非leaf的node有4個children相對於4個子block (依照上面NW,NE,SW,SE的順序)。 而leafnode則表示block有相同的顏色 且不會再被切割。 因此,就可以得到下面這樣的quadtreetree: 然後,一個tree就可以被表示成一序列的數字,表示blocknodes的root-to- leafpath。 例如: 編號4有pathNE,SW所以是32(base5)或17(base10) ;編號15有pathNE,SW,NW所以是134(base5)或44(base10)。 故最後就 可以把這個影像表示成下列有序數字(base10): 9141722234463698894113 解法: 若輸入的影像資料為一陣列,則依下步驟去解: (1)check此陣列中的每一個值_與其他值是否相等,若任一有一值不相等, 則將此陣列分成4個相同大小的陣列。 否則將此陣列給予一個編號。 (2)將這4個陣列依照上左,上右,下左,下右順序重複步驟 (1), (2)直到每一 陣列(block)內的值都相同為止。 (3)依照編好號碼順序,給予建構一tree。 (4)travel由tree的root到每一個leafnode即可得到一序列的數字(base5) (由左到右4各branch編號為1,2,3,4即為NW,NE,SW,SE)同時將其 轉為base為10的數字。 (5)再sort這些數字即可得到表示此影像的數字資料(base10)。 _ 而若輸入影像資料為一序列的數字,則利用上步驟相反順序即可得到影像 的陣列表示方法。 (base5base10) 解法範例: 無 討論: 無 程式: 無 ★★★★☆ 題組: ACMProgrammingContestWorldFinals,1998 題號: ProblemH: TowersofPowers 解題者: 葉韋宏 解題日期: 1998年9月13日 題意: 給予一組數字n和b,以數字b為底數將n”完全”展開(completebase-bexpansionofn).就是將所有的指數都要以b為底數繼續展開,到無法展開為止,且係數(coefficient)與底數(base)之間要用”*”號分隔,係數(coefficient)為0不列出,以1取代b0,以b2取代1*b2,以b取代b1.每個數字(如2,3,…)或符號(如+,*)皆佔用一行(onecolumn).每一列(row)最多印出80行(column). 題意範例: 若n=16647,b=2,則”完全”展開的式子如下: 2+122+1 2+2+222 16647=2+2+2+1 SampleInput 200003 166472 100012 850262443 00------------>表示資料輸入完畢 OutputfortheSampleInput 20000incompletebase3: 2 33+232 20000=3+3+2*3+2*3+2 16647incompletebase2: 2+122+1 2+2+222 16647=2+2+2+1 1000incompletebase12: 2 1000=6*12+11*12+4 85026244incompletebase3: 222222 3+2*3+13+2*33+3+23+3+13+23+1 85026244=3+2*3+2*3+2*3+2*3+2*3 2 32*3+12*3+13 +2*3+2*3+3+2*3+1 解法: 無 解法範例: 無 討論: 無 程式: 無 史上最快最全的网络文档批量下载、上传、处理,尽在:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 解题 者黄锦辉