日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4.4 竞赛题目选讲

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.4 竞赛题目选讲 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

競賽題目選講

這里的題目可能和大家在做的實驗項目有些不太一樣,希望大家根據自己的需要閱讀本章節。


4-2 劊子手游戲 (UVA 489)

書上的題面少了一些很重要的東西,真正的題面請點開這里

分析:根據我還沒有過四級的英語來看,大致的意思是這樣的。就是給你兩個字符串,第一個字符串為計算機想出的字符串,第二個為玩家猜的。按照第二個字符串的字符順序每次猜第二個字符串的一個字符,如果第一個字符串里有這個字符,所有該字符會顯現出來,而你最多猜錯6次。如果猜錯超過六次,即算輸,如果所有的字符顯現出來,即算贏(根據給出的代碼來看,如果你猜了重復的字符,那么第二次猜即會被判做猜錯了)。如果猜的字符的數量不能夠保證你錯了超過6次,也不能猜完所有的字符,那么即被判做放棄了。

這個問題本質上還是非常簡單的,就是用計算機把流程模擬一遍即可,大致的框架如下:

#include<stdio.h> #include<string.h> void guess(char ch){} int main( ){char s1[200],s2[200];scanf("%s%s",s1,s2);for (int i=0;i<strlen(s2);i++){guess(s2[i]);}return 0; }

接下來我們只需要考慮怎么樣編譯guess函數,這里我考慮增加兩個變量,第一個為left(剩余需要猜的字符),第二個為chance(還能猜幾次)
于是完整代碼如下:

#include<stdio.h> #include<string.h> char s1[200],s2[200];//要在函數中使用所以定義為全局變量 int left,chance;//新增的兩個變量 void guess(char ch){int flag=0;//判斷是否猜對 for (int i=0;i<strlen(s1);i++){if (s1[i]==ch){left--;//減少剩余 s1[i]=' ';//無法重復猜 flag=1;}}if (!flag) chance--;//猜錯了則機會-1 } int main( ){scanf("%s%s",s1,s2);left=strlen(s1);chance=6;//這個始終是一定的 for (int i=0;i<strlen(s2);i++){ guess(s2[i]);if (chance==0){//沒有機會了 printf("You lose!");break;}if (left==0){//沒有剩余的字符要猜了 printf("You win!");break;} }if (chance&&left) printf("You chickened out."); return 0; }

這是按照書上的思路寫的(代碼是我自己寫的,所以有錯誤也不要覺得奇怪)。


4-3 救濟金發放 (UVA 133)

n個人站成一圈以逆時針的順序標記1-n (1–>2–>3···–>n–>1),兩個人同時開始發救濟金,在每一輪中,官員A從1開始逆時針數,數k個就停下來。官員B從從n開始順時針數,數m個停下來。接下來被官員選中的人(可為一個人或者兩個人)離開隊伍。輸入n,k,m,輸出每一輪離開隊伍的人。

樣例:

輸入:10 4 3
輸出:4 8 9 5 3 1 2 6 10 7

分析:我們先看一下這個這個樣例是怎么得到的:
第一輪A:1–>2–>3–>4 此時A在5,剩余1,2,3,5,6,7,8,9,10
第一輪B:10–>9–>8 此時B在7,剩余1,2,3,5,6,7,9,10
第二輪A:5–>6–>7–>9 此時A在10,剩余1,2,3,5,6,7,10
第二輪B:7–>6–>5 此時B在3,剩余1,2,3,6,7,10
第三輪A:10–>1–>2–>3 此時A在6,剩余1,2,6,7,10
第三輪B:3–>2–>1 此時B在10,剩余2,6,7,10
第四輪A:6–>7–>10–>2 此時A在7,剩余6,7,10
第四輪B:10–>7–>6 此時B在10,剩余7,10
第五輪A:10–>7–>10–>7 此時A在10,剩余7
第五輪B:10–>7–>10 剩余7
第六輪:7

但是我們可以發現了一個問題就是,在第三輪的時候,第三個人其實已經被選擇離開了,然而此時B點人的時候還是點到了第三個人,也就是說每一輪點人,我們都是先點人,再把人帶走。

事實上這道題也是一道非常簡單的模擬題,模擬每一輪即可,但是這里有一個問題,就是怎么處理已經離隊的人。
這里提供兩種處理方法:

第一種:將離隊的人進行標記

#include<stdio.h> int main(){int n,a[200],k,m,b[200]={0},tot=0,l=0,r=n-1,kk,mm,t,p1,p2;//tot表示離隊人數,l表示A的位置,r為B位置,kk為A數到第幾個,mm為B數到第幾個 scanf("%d%d%d",&n,&k,&m);for (int i=0;i<n;i++) a[i]=i+1;while (tot<n){kk=0,mm=0;//進行一輪操作 while (kk<k){if (b[l]!=1) kk++;if (kk==k){b[l]=2;p1=l;}//kk等于k的時候,a[l]即為正在離隊的人 l=(l+1+n)%n;//往下一個開始數 }while (mm<m){if (b[r]!=1) mm++; if (mm==m){b[r]=2;p2=r;} r=(r-1+n)%n;//往下一個開始數}//p1,p2分別為正在離隊的人位置 //確認數到的是否是一個人if (p1!=p2){printf("%d %d ",a[p1],a[p2]);b[p1]--;b[p2]--; tot+=2;}else{printf("%d ",a[p1]);b[p1]--;tot+=1;}} return 0; }

至于這里賦值2和賦值1有什么區別,請大家自行思考。

第二種:直接刪除離隊的人

這就涉及到編寫刪除數組元素的函數:

void del(int *a,int n,int p){for (int i=p;i<n-1;i++) a[i]=a[i+1]; }

事實上對于刪除數組的一個元素,我們將后面的元素依次賦值到前一個元素,補掉中間被刪除的空即可。

其余的代碼自行思考補全


4-4 信息解碼 (UVA 213)

這個題面相當之ex

分析:就是說給你多個字符串,第一個字符串的每一位字符,對應一個01串,即為每個字符對應的編碼。剩下的多個字符串拼接在一起為一個新的字符串,這個新的字符串即為我們的編碼文本,我們通過一定的方式(這個方式還蠻陰間的)對這個編碼文本進行解碼。

例如樣例中的:
TNM(空格)AEIOU
0010101100011
1010001001110110011
11000

T對應的編碼為0,N為00,M為01,空格為10,A為000,E為001,I為010,O為011,U為100。
(這個編碼怎么處理我會在后面進行介紹)

這里的編碼文本即為:
0010101100011101000100111011001111000

首先最后的三位表示編碼結束,所以是不記在里面的。剩下的編碼文本可以分為很多個小節,每個小節以三位數字代表這個小節中每個編碼的長度(010,即代表每個編碼長度為2),然后是各個字符的編碼,最后以編碼長度*1作為結尾。

我們把編碼文本分解一下就是:
001(編碼長度為1)0(T)1(小節結束)011(編碼長度為3)000(A)111(小節結束)010(編碼長度為2)00(N)10(空格)01(M)11(小節結束)011(編碼長度為3)001(E)111(小節結束)000(編碼結束)

整個編碼解碼的結果如下
TAN ME

流程過了一遍,感覺這個問題的難度還是比較一般的,首先我們把輸入和存儲編碼的準備工作做好:

#include<stdio.h> int main(){char s[100],ch;gets(s);int a[2000],tot=0;do{ch=getchar(); if (ch!='\n'){tot++;a[tot]=(int)ch-48;}}while (ch!=EOF);return 0; }

這個輸入無法理解的自己去參考3.5。接下來我們將編碼分段:

while (x<=tot-4){//由于最后三位一定為0所以不用考慮 len=a[x]*4+a[x+1]*2+a[x+2];//前三位為小節長度 x+=3;int flag;//用于判斷是否全部為1 do{flag=1;for (int i=1;i<=len;i++) flag*=a[x+i-1];x+=len;//如果不是全部為1 if (flag==0){} }while(flag==0);}

現在我們對每一段編碼進行解碼:

if (flag==0){int t=1,bm=0;//bm即為該段編碼對應第幾個字符 for (int i=1;i<=len;i++){t*=2;bm=bm+a[x+len-i]*t/2;}bm+=t-len-1;//這一整段即為數學公式 printf("%c=",s[bm]);for (int i=1;i<=len;i++) printf("%d",a[x+i-1]);printf("\n"); }

假如我們給一段01101的編碼,我們知道他的長度為5,然后我們可以通過歸納法總結到n個0的編碼代表的數值是2n-n-1,于是我們只需要將01101當作二進制轉化為10進制的數值加上5個0代表的數值,即可得到這段編碼的數值。
完整代碼如下:

#include<stdio.h> int main(){char s[100],ch;gets(s);int a[2000],tot=0;do{ch=getchar(); if (ch!='\n'){tot++;a[tot]=(int)ch-48;}}while (ch!=EOF);int x=1,len;//x為正在檢查第幾位編碼,len為小姐長度 while (x<=tot-4){//由于最后三位一定為0所以不用考慮 len=a[x]*4+a[x+1]*2+a[x+2];//前三位為小節長度 x+=3;int flag;//用于判斷是否全部為1 do{flag=1;for (int i=1;i<=len;i++) flag*=a[x+i-1];//如果不是全部為1 if (flag==0){int t=1,bm=0;//bm即為該段編碼對應第幾個字符 for (int i=1;i<=len;i++){t*=2;bm=bm+a[x+len-i]*t/2;}bm+=t-len-1;//這一整段即為數學公式 printf("%c",s[bm]);// for (int i=1;i<=len;i++) printf("%d",a[x+i-1]);printf("\n"); }x+=len; }while(flag==0);}return 0; }

4-5 追蹤電子表格的單元格 (UVA 512)

題面

分析:首先第一件事還是要將這道題給讀懂。這道題是什么意思呢,就是首先告訴你有一個r行c列的二維表,然后進行n次操作。操作的格式如下:

#mermaid-svg-cutsBLwZ77j7SHHa .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-cutsBLwZ77j7SHHa .label text{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .node rect,#mermaid-svg-cutsBLwZ77j7SHHa .node circle,#mermaid-svg-cutsBLwZ77j7SHHa .node ellipse,#mermaid-svg-cutsBLwZ77j7SHHa .node polygon,#mermaid-svg-cutsBLwZ77j7SHHa .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-cutsBLwZ77j7SHHa .node .label{text-align:center;fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .node.clickable{cursor:pointer}#mermaid-svg-cutsBLwZ77j7SHHa .arrowheadPath{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-cutsBLwZ77j7SHHa .flowchart-link{stroke:#333;fill:none}#mermaid-svg-cutsBLwZ77j7SHHa .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-cutsBLwZ77j7SHHa .edgeLabel rect{opacity:0.9}#mermaid-svg-cutsBLwZ77j7SHHa .edgeLabel span{color:#333}#mermaid-svg-cutsBLwZ77j7SHHa .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-cutsBLwZ77j7SHHa .cluster text{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-cutsBLwZ77j7SHHa .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-cutsBLwZ77j7SHHa text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-cutsBLwZ77j7SHHa .actor-line{stroke:grey}#mermaid-svg-cutsBLwZ77j7SHHa .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-cutsBLwZ77j7SHHa .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-cutsBLwZ77j7SHHa #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-cutsBLwZ77j7SHHa .sequenceNumber{fill:#fff}#mermaid-svg-cutsBLwZ77j7SHHa #sequencenumber{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa #crosshead path{fill:#333;stroke:#333}#mermaid-svg-cutsBLwZ77j7SHHa .messageText{fill:#333;stroke:#333}#mermaid-svg-cutsBLwZ77j7SHHa .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-cutsBLwZ77j7SHHa .labelText,#mermaid-svg-cutsBLwZ77j7SHHa .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-cutsBLwZ77j7SHHa .loopText,#mermaid-svg-cutsBLwZ77j7SHHa .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-cutsBLwZ77j7SHHa .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-cutsBLwZ77j7SHHa .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-cutsBLwZ77j7SHHa .noteText,#mermaid-svg-cutsBLwZ77j7SHHa .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-cutsBLwZ77j7SHHa .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-cutsBLwZ77j7SHHa .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-cutsBLwZ77j7SHHa .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-cutsBLwZ77j7SHHa .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa .section{stroke:none;opacity:0.2}#mermaid-svg-cutsBLwZ77j7SHHa .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-cutsBLwZ77j7SHHa .section2{fill:#fff400}#mermaid-svg-cutsBLwZ77j7SHHa .section1,#mermaid-svg-cutsBLwZ77j7SHHa .section3{fill:#fff;opacity:0.2}#mermaid-svg-cutsBLwZ77j7SHHa .sectionTitle0{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .sectionTitle1{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .sectionTitle2{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .sectionTitle3{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-cutsBLwZ77j7SHHa .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa .grid path{stroke-width:0}#mermaid-svg-cutsBLwZ77j7SHHa .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-cutsBLwZ77j7SHHa .task{stroke-width:2}#mermaid-svg-cutsBLwZ77j7SHHa .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa .taskText:not([font-size]){font-size:11px}#mermaid-svg-cutsBLwZ77j7SHHa .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-cutsBLwZ77j7SHHa .task.clickable{cursor:pointer}#mermaid-svg-cutsBLwZ77j7SHHa .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-cutsBLwZ77j7SHHa .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-cutsBLwZ77j7SHHa .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-cutsBLwZ77j7SHHa .taskText0,#mermaid-svg-cutsBLwZ77j7SHHa .taskText1,#mermaid-svg-cutsBLwZ77j7SHHa .taskText2,#mermaid-svg-cutsBLwZ77j7SHHa .taskText3{fill:#fff}#mermaid-svg-cutsBLwZ77j7SHHa .task0,#mermaid-svg-cutsBLwZ77j7SHHa .task1,#mermaid-svg-cutsBLwZ77j7SHHa .task2,#mermaid-svg-cutsBLwZ77j7SHHa .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-cutsBLwZ77j7SHHa .taskTextOutside0,#mermaid-svg-cutsBLwZ77j7SHHa .taskTextOutside2{fill:#000}#mermaid-svg-cutsBLwZ77j7SHHa .taskTextOutside1,#mermaid-svg-cutsBLwZ77j7SHHa .taskTextOutside3{fill:#000}#mermaid-svg-cutsBLwZ77j7SHHa .active0,#mermaid-svg-cutsBLwZ77j7SHHa .active1,#mermaid-svg-cutsBLwZ77j7SHHa .active2,#mermaid-svg-cutsBLwZ77j7SHHa .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-cutsBLwZ77j7SHHa .activeText0,#mermaid-svg-cutsBLwZ77j7SHHa .activeText1,#mermaid-svg-cutsBLwZ77j7SHHa .activeText2,#mermaid-svg-cutsBLwZ77j7SHHa .activeText3{fill:#000 !important}#mermaid-svg-cutsBLwZ77j7SHHa .done0,#mermaid-svg-cutsBLwZ77j7SHHa .done1,#mermaid-svg-cutsBLwZ77j7SHHa .done2,#mermaid-svg-cutsBLwZ77j7SHHa .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-cutsBLwZ77j7SHHa .doneText0,#mermaid-svg-cutsBLwZ77j7SHHa .doneText1,#mermaid-svg-cutsBLwZ77j7SHHa .doneText2,#mermaid-svg-cutsBLwZ77j7SHHa .doneText3{fill:#000 !important}#mermaid-svg-cutsBLwZ77j7SHHa .crit0,#mermaid-svg-cutsBLwZ77j7SHHa .crit1,#mermaid-svg-cutsBLwZ77j7SHHa .crit2,#mermaid-svg-cutsBLwZ77j7SHHa .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-cutsBLwZ77j7SHHa .activeCrit0,#mermaid-svg-cutsBLwZ77j7SHHa .activeCrit1,#mermaid-svg-cutsBLwZ77j7SHHa .activeCrit2,#mermaid-svg-cutsBLwZ77j7SHHa .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-cutsBLwZ77j7SHHa .doneCrit0,#mermaid-svg-cutsBLwZ77j7SHHa .doneCrit1,#mermaid-svg-cutsBLwZ77j7SHHa .doneCrit2,#mermaid-svg-cutsBLwZ77j7SHHa .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-cutsBLwZ77j7SHHa .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-cutsBLwZ77j7SHHa .milestoneText{font-style:italic}#mermaid-svg-cutsBLwZ77j7SHHa .doneCritText0,#mermaid-svg-cutsBLwZ77j7SHHa .doneCritText1,#mermaid-svg-cutsBLwZ77j7SHHa .doneCritText2,#mermaid-svg-cutsBLwZ77j7SHHa .doneCritText3{fill:#000 !important}#mermaid-svg-cutsBLwZ77j7SHHa .activeCritText0,#mermaid-svg-cutsBLwZ77j7SHHa .activeCritText1,#mermaid-svg-cutsBLwZ77j7SHHa .activeCritText2,#mermaid-svg-cutsBLwZ77j7SHHa .activeCritText3{fill:#000 !important}#mermaid-svg-cutsBLwZ77j7SHHa .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-cutsBLwZ77j7SHHa g.classGroup text .title{font-weight:bolder}#mermaid-svg-cutsBLwZ77j7SHHa g.clickable{cursor:pointer}#mermaid-svg-cutsBLwZ77j7SHHa g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-cutsBLwZ77j7SHHa g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-cutsBLwZ77j7SHHa .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-cutsBLwZ77j7SHHa .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-cutsBLwZ77j7SHHa .dashed-line{stroke-dasharray:3}#mermaid-svg-cutsBLwZ77j7SHHa #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa .commit-id,#mermaid-svg-cutsBLwZ77j7SHHa .commit-msg,#mermaid-svg-cutsBLwZ77j7SHHa .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-cutsBLwZ77j7SHHa g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-cutsBLwZ77j7SHHa g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-cutsBLwZ77j7SHHa g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-cutsBLwZ77j7SHHa .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-cutsBLwZ77j7SHHa .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-cutsBLwZ77j7SHHa .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-cutsBLwZ77j7SHHa .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-cutsBLwZ77j7SHHa .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-cutsBLwZ77j7SHHa .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-cutsBLwZ77j7SHHa .edgeLabel text{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-cutsBLwZ77j7SHHa .node circle.state-start{fill:black;stroke:black}#mermaid-svg-cutsBLwZ77j7SHHa .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-cutsBLwZ77j7SHHa #statediagram-barbEnd{fill:#9370db}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-state .divider{stroke:#9370db}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-cutsBLwZ77j7SHHa .note-edge{stroke-dasharray:5}#mermaid-svg-cutsBLwZ77j7SHHa .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-cutsBLwZ77j7SHHa .error-icon{fill:#522}#mermaid-svg-cutsBLwZ77j7SHHa .error-text{fill:#522;stroke:#522}#mermaid-svg-cutsBLwZ77j7SHHa .edge-thickness-normal{stroke-width:2px}#mermaid-svg-cutsBLwZ77j7SHHa .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-cutsBLwZ77j7SHHa .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-cutsBLwZ77j7SHHa .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-cutsBLwZ77j7SHHa .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-cutsBLwZ77j7SHHa .marker{fill:#333}#mermaid-svg-cutsBLwZ77j7SHHa .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-cutsBLwZ77j7SHHa {color: rgba(0, 0, 0, 0.75);font: ;}EXDCDRICIR命令輸入四個數字r1,c1,r2,c2交換r1行c1列的單元格和r2行c2列的單元格輸入A和A個數字刪除這A列輸入A和A個數字刪除這A行輸入A和A個數字添加這A列輸入A和A個數字添加這A行

接下來輸入q個查詢,對于每一個輸入的r,c輸入原本r行c列的格子在經過n次操作后變為了哪個位置的格子。

這道題,依舊是一個思想非常簡單,編寫起來比較復雜的模擬題。我們這里考慮用結構體去存儲n次操作。

#include<stdio.h> struct Command{//結構體的編譯我們一般首字母用大寫 char c[5];//用于放操作類型int r1,c1,r2,c2;//交換操作需要用到的變量int a,x[21];//其他操作用到的變量 }; int main(){int r,c,n;Command t[30]; scanf("%d%d%d",&r,&c,&n);for (int i=0;i<n;i++){scanf("%s",t[i].c);if (t[i].c[0]='E'){//交換操作 scanf("%d%d%d%d",&t[i].r1,&t[i].c1,&t[i].r2,&t[i].c2); }else{//其他操作 scanf("%d",&t[i].a)for (int j=0;j<t[i].a;j++) scanf("%d",&t[i].x[j]);}}return 0; }

結構體還不會用的好好看前兩章的講解吧。接下來分別編譯各個操作對某個單元格影響的函數(相當復雜):

int s(int *r0,int *c0){//注意這里用的是指針 for (int i=0;i<n;i++){if (t[i].c[0]=='E'){//交換函數 if (t[i].r1==*r0**t[i].c1==*c0){//如果參與了交換 *r0=t[i].r2;*c0=t[i].c2;//*+指針變量表示以這個指針變量對應存儲空間內的值 }else if (t[i].r2==*r0**t[i].c2==*c0){*r0=t[i].r1;*c0=t[i].c1;}}else{int dc=0,dr=0;//dc,dr分別表示行和列的變化量 for (int j=0;j<t[i].s;j++){int x=t[i].x[j];if (t[i].c[0]='I'){//插入 if (t[i].c[1]=='R'&&x<=*r0) dr++; //單元格所在的行數增加了 if (t[i].c[1]=='C'&&x<=*c0) dc++;//單元格所在的列數增加了 }else{//刪除if (t[i].c[i]=='R'&&x==*r0) return 0; if (t[i].c[i]=='C'&&x==*c0) return 0;//刪除的時候直接給你把這個單元格刪了 if (t[i].c[1]=='R'&&x<=*r0) dr--;//單元格所在的行數增加了 if (t[i].c[1]=='C'&&x<=*c0) dc--;//單元格所在的列數增加了 } }*r0+=dr;*c0+=dc; }}return 1; }

0即為這個單元格已經沒有了,1的話就輸出原本那個單位格的地址里現在放的值。(這個題的代碼我是直接解釋的書本上的代碼,因為如果自己寫確實容易發生很多意想不到的問題,如果大家寫出了更好的方法歡迎與我溝通交流)


4-6 師兄幫幫忙 (UVA 12412)

題面

分析:這道題與其說是研究算法的題目,不如說是一道大學編程教材的作業題(圖書管理系統)。由于本專欄主要介紹的是算法相關的知識(大概),所以不在一些繁瑣的模擬問題上花費太多的時間(我懶)。基于前面的題已經耗費了大量的精力編譯了很多的模擬問題,這道題便不再做編譯(我懶),留給大家自己思考。

事實上這一道題的操作和數據庫感覺有不小的關系,有興趣的可以嘗試一下


吐個槽:

接下來的第五章是一些關于c++和stl的知識 (我們在vs中也是可以c++的,而且好像zxy特別允許我們用c++的一些東西去處理問題),同時我也會和大家一起學習一些常用的stl算法和容器。那么就我個人的理解而言,算法是什么呢?算法是我們解決問題使用的數學方法。那對于一些問題,我們明明已經能夠解決了,為什么還要學習別的算法呢?

事實上很多算法雖然能夠解決問題,但會花費大量的時間,或者占用大量的內存。于是我們需要思考出更加優秀的算法去節省出我們的時間和空間。然而大多時候,時間和空間總有一個是要犧牲的。

例如排序算法:我們熟知的希爾排序(插入排序的優化)的時間復雜度為o(nlog2n)(插入排序為o(n2)),而計數排序僅為o(n+k)。那我們為什么所有的排序不都用計數排序呢?首先,計數排序對于數據差距非常大的值的排序,會占用大量的空間。第二,如果我們要得到排序后的數在原本數組中的位置,當然還是可以用計數排序,但無疑會占用更多的空間。

也就是說對于一個問題,我們首先要解決這個問題,然后綜合考慮不同算法的代碼的時間復雜度和空間復雜度。那么還有什么要考慮的呢?很多人認為是代碼的可讀性和更加貼近于你熟悉的方法,但我個人覺得是思想的適用性。比如一個問題,你明明可以直接dfs解決了,但你覺得dfs思考起來你覺得無法理解,于是你先廣度遍歷了第二層的結點,在繼續dfs。你覺得這樣好像使這個你原本陌生的算法和問題變得更加熟悉了。實際上是破壞了這個算法的適用性,因為這個算法原本可能是一個很直接的思考流程,可以套用任何其他的問題,但你這樣一改,反而使這個算法從一條直線饒了好幾個圈,影響了類似問題的處理。

所以在我看來:可以處理問題>時間復雜度和空間復雜度>思想的直接性和適用性>代碼的可讀性

以上觀點僅為個人看法

總結

以上是生活随笔為你收集整理的4.4 竞赛题目选讲的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。