NOI Online 3 入門組題解

2021-10-06 12:46:42 字數 2078 閱讀 6606

洛谷傳送門

第一題還是一如既往的水233

沒什麼好說的。

統計每一條訊號。對於乙個訊號,統計sos的數量,方法就是列舉每乙個長度為3的區間,如果這個區間是「sos」那麼就統計進去。取最大數量。

有乙個小坑,就是最大可能有多個,要用vector儲存。

#include

using

namespace std;

#define maxn 105

#define maxm 205

int n,maxx;

vector max_name;

intmain()

}//統計sos數量

if(cnt>maxx)

else

if(cnt==maxx)

}for

(int i=

0;isize()

;i++

) cout

}

洛谷傳送門

這道題…也比較水

可以搜尋出每個星座。對於每個星座,要分配給合適的星系,再取最大的星系輸出

注意:星系的大小=星座數*星座大小

#include

using

namespace std;

#define maxn 1505

#define maxs 100005

int n,m,a[maxn]

[maxn]

,cnt/*當前星座大小*/

,s[maxs]

/*星座大小為i的星系*/

,ans1/*有多少星系*/

,ans2/*最大星系多大*/

;int next[8]

[2]=

,,,,

,,,}

;bool vis[maxn]

[maxn]

;void

dfs(

int x,

int y)}}

intmain()

else}}

for(

int i=

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

}for

(int i=

1;i//統計,沒什麼好說的

printf

("%d %d\n"

,ans1,ans2)

;return0;

}

洛谷傳送門

ccf我去年買了個表

首先,一堆一樣的鈔票可以通過二進位制壓縮這個東西壓縮成一堆面額不一樣但數量少得多的鈔票。

二進位制壓縮,就是把鈔票1個一組、2個一組、4個一組地分組,因為都是2^n張,每一組選或不選可以對應到二進位制數里的每一位0和1,所以二進位制壓縮後的一堆鈔票可以表示1~總數的任意張原來的鈔票。

如果分組後剩下一些,直接把剩下的分成一組就可以啦。

hmm…然後就轉換成了湊數問題,湊數用0-1揹包就可以了。

01揹包傳送門

湊數怎麼轉化成揹包?

把湊數目標看成揹包問題裡的揹包容量,

再把每張鈔票的面額看做物品的重量和價值,

求一遍01揹包,如果dp[i]=i,那麼可以湊出價值為i的**,因為dp[i]是上限為i的最大**,如果最大**不等於上限,就湊不出來。

#include

using

namespace std;

#define maxn 2000

#define maxm 100005

#define maxt 500005

int _n,n,m,note[

200000

],dp[maxt]

;int

main()

if(a-cnt2>0)

}//二進位制壓縮

for(

int i=

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

//01揹包

for(

int i=

1;i<=m;i++

)else

}return0;

}

最後,祝點贊的人都能akioi!23333333

NOI Online 3 提高組 水壺

在乙個長度為 n 的序列中求出長度為 k 1 的最大子段。本題唯一的需要注意的一點是當 k n 時要輸出所有數的和,像我的考場 scanf d d n,k k if k n k n for int i 1 i n i scanf d a i for int i 1 i k i op a i for ...

NOI Online 3 入門組 第二題 觀星

題目傳送門 bfs和dfs的簡單題目,在這我只講bfs。我們先找到乙個 然後對其進行 bfs,並將所有訪問過的 標記為 在進行 bfs 的同時記錄下目前的 數量。當一次 bfs 結束後,我們將統計的數量放入之前開好的桶中,即將 hre s 1h 1 hres 1。如果此時 hre sh hres 為...

NOI Online 3 提高組 T1水壺 題解

有 n 個容量無窮大的水壺,它們從 1 sim n 編號,初始時 i 號水壺中裝有 a i 單位的水。你可以進行不超過 k 次操作,每次操作需要選擇乙個滿足 1 x n 1 的編號 x 然後把 x 號水壺中的水全部倒入 x 1 號水壺中。最後你可以任意選擇恰好乙個水壺,並喝掉水壺中所有的水。現在請你...