2021寒假積分賽(一)補題(1)

2021-10-13 21:04:24 字數 3404 閱讀 8309

二.c-字數統計

三. e-迷宮城堡

tarjan演算法還不是很明白看了很多大佬的**,後續還有四道題要補

題目:乙個數從左往右讀和從右往左讀都是一樣,那麼這個數就叫做「回文數」。例如,1234321就是乙個回文數,而778就不是。當然,回文數的首和尾都應是非零的,因此0220就不是回文數。

事實上,有一些數(如21),在十進位制時不是回文數,但在其它進製(如二進位制時為10101)時就是回文數。

編乙個程式,從檔案讀入兩個十進位制數n (1 <= n <= 15)s (0 < s < 10000)然後找出前n個滿足大於s且在兩種或兩種以上進製(二進位制至十進位制)上是回文數的十進位制數,輸出到檔案上。

注:本問題的解決方案不需要使用大於32位的整型

暴力列舉

用乙個bool函式進行進製轉換並判斷是否為回文數

**如下:

#include

using namespace std;

bool judge

(int num,

int jz)

for(j=

0;j(j==i)

return true;

else

return false;

}int

main()

} t1++;}

}return0;

}

題目:

一天,淘氣的tom不小心將水潑到了他哥哥jerry剛完成的作文上。原本嶄新的作文紙頓時變得皺巴巴的,更糟糕的是由於水的關係,許多字都看不清了。可憐的tom知道他闖下大禍了,等jerry回來一定少不了一頓修理。現在tom只想知道jerry的作文被「破壞」了多少。

jerry用方格紙來寫作文,每行有l個格仔。(圖1顯示的是l = 10時的一篇作文,』x』表示該格有字,該文有三個段落)。

圖1

圖2

圖2顯示的是浸水後的作文 ,『o』表示這個位置上的文字已經被破壞。可是tom並不知道原先哪些格仔有文字,哪些沒有,他唯一知道的是原文章分為m個段落,並且每個段落另起一行,空兩格開頭,段落內部沒有空格(注意:任何一行只要開頭的兩個格仔沒有文字就可能是乙個新段落的開始,例如圖2中可能有4個段落)。

tom想知道至少有多少個字被破壞了,你能告訴他嗎?

貪心,模擬

先假定最壞情況所有為0的格仔都被汙染,再找出每個可能成為一段的末尾不被汙染格數,進行排序。

貪心:用最壞情況下的汙染格仔數減去(最大不被汙染格數情況下的)格數,得到最少的被破壞字數

( 寫題的時候沒想到卡了很久)

**如下:

#include

using namespace std;

int a[

10000][

100]

;//儲存作文

int tmp[

100]

;//臨時儲存某段末尾格數和下一段開頭2格

intcmp

(int a,

int b)

intmain()

if(i>

0&&a[i][0

]==0&&a[i][1

]==0)

t++;}

}for

(j=l-

1;j>=

0;j--

)sort

(tmp,tmp+t,cmp)

;//從大到小排序(因為可能存在的段落數可能大於實際段落數)

for(count=

0;count

1&&count<=t;count++

) cout<

2<

//(減去第一段開頭前兩格)

}return0;

}

題目:

為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間(n<=10000)和m條通道(m<=100000),每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩個房間都是相互連通的,即:對於任意的i和j,至少存在一條路徑可以從房間i到房間j,也存在一條路徑可以從房間j到房間i。

tarjan演算法 (求圖的強連通分量)

通過dfs和棧來實現

此題主要是判斷所給出的圖是否為強連通圖

**如下:

#include

#include

#include

#include

#include

#define n 10000

using namespace std;

int n,m;

vector<

int> g[n]

;//建立乙個鄰接表存圖

stack<

int> s;

int dfn[n]

,low[n]

;//dfn為dfs(深度優先搜尋)訪問次序,low為通過其子樹所能訪問到的最小的dfn

bool vis[n]

;//判斷當前節點是否訪問過

int sccno[n]

;//每個點對應的強連通分量標號

int cou;

//訪問序號

int sig;

void

tarjan

(int x)

elseif(

!sccno[y]

) low[x]

=min

(low[x]

,dfn[y]);

}if(dfn[x]

==low[x])}

}int

main()

sig=0;

cou=0;

memset

(vis,0,

sizeof

(vis));

memset

(dfn,0,

sizeof

(dfn));

memset

(low,0,

sizeof

(low));

memset

(sccno,0,

sizeof

(sccno));

//初始化所有值設為0

for(

int i=

1;i<=n;i++)if

(sig==1)

printf

("yes\n");

else

printf

("no\n");

}}

2021寒假積分賽(三)

非常抱歉,本來興沖沖地搞一場練習賽,由於我準備不足,出現很多資料的錯誤,現在這裡換乙個簡單的題目 前幾天在網上查詢acm資料的時候,看到乙個中學的奧數題目,就是不相交的曲線段分割平面的問題,我已經發到論壇,並且lxj 已經得到乙個結論,這裡就不 多講了,下面有乙個類似的並且更簡單的問題 如果平面上有...

第一次寒假積分賽補題記錄

題目 這題是貪心演算法,活動安排問題,可以使用結構體。活動安排問題的貪心演算法要先將各個活動結束的時間公升序排序,然後再將第乙個活動的結束時間與第二個活動的開始時間作比較 依此類推。ac 如下 include include using namespace std struct show bool ...

1 28寒假集訓 1(補題)

學不會今天的內容 種樹,只能補補昨天的題了otz 先補了個昨天的g題 竟因沒反應過來priority queue是優先佇列沒有寫qaq太菜了 kattis guessthedatastructure 題意 給n行資料,如果是1就塞進去,2就拿出來,判斷是佇列還是優先佇列還是棧,都不是就輸出impos...