二.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...