2020智算之道複賽

2021-10-09 01:31:19 字數 4758 閱讀 7518

共 5 個測試點

每個測試點 20 分

每個測試點限時 1 秒

執行記憶體上限 512mb

咕咕有兩個數字 a,b ,它忘記了 a 的前三位(記除去前三位的 a 為 aa ),但它記得 a 與 b 滿足 a≡0

(mod b),即 a 是 b 的倍數。

請你幫它求出有多少種滿足條件的 a。

注意: a 沒有前導 0 。

輸入格式

一行兩個整數,表示 a 和 b 。
輸出格式

一行乙個整數,表示有多少種滿足條件的 a 。

資料範圍與約定

對於前 20

% 的資料,保證 b=

1。對於前 40

% 的資料,保證 b≤2。

對於 100

% 的資料,保證 0≤a≤10^14

,0^180.

樣例輸入

0

1

樣例輸出

900
樣例解釋

任何整數都是 1 的倍數,故 a 的前三位是 100−999 中任何一種情況都可以滿足條件。
思路

簽到題,就這乙個ac了,計算出a的長度,用pow函式製造出100

-999的字首,乙個個的取模

#include

#include

#include

#include

using

namespace std;

#define io ios::sync_with_stdio(0); cin.tie(0);

//快讀

intmain()

for(

int i=

100;i<=

999;i++)

cout

}

共 5 個測試點

每個測試點 20 分

每個測試點限時 1 秒

執行記憶體上限 512mb

有乙個 n∗n 的網格,左下角是 (0,

0)右上角是 (n,n) 。

咕咕要從左下角移動到右上角,移動規則如下:

若咕咕位於 (a,b) ,它可以花費 w1 個金幣到達 (a,b+

1) 或 (a+

1,b) 。

若 (a,b) 是乙個魔法格點,咕咕既可以選擇 1 ,也可以選擇花費 w2 個金幣到達 (a+

1,b+

1) 。

咕咕想知道從左下角到達右上角最少需要花費多少個金幣,請你幫幫它。

輸入格式

第一行四個整數 n,k,w1,w2 。

接下來 k 行,第 i 行兩個整數 xi,yi ,表示第 i 個魔法格點的座標。

輸出格式

一行乙個整數,表示咕咕最少需要花費多少金幣。

資料範圍與約定

對於 20

% 的資料,保證 n≤3 。

對於另 20

% 的資料,保證魔法格點只出現在 (0,

0) 到 (n,n) 的對角線上,也就是對於任意的 i∈[

1,k] , xi=yi​ 。

對於 100

% 的資料,保證 1≤n,w1,w2≤109

,0≤k≤2000

,0≤xi,yi

3

2132

100011

2

樣例輸出

464
樣例解釋

能讓咕咕花費最少的路徑如下:(0

,0)→(0,1

)→(1,2

)→(2,3

)→(3,3

)在 (0,

1),(

1,2) 選擇 2 (花費 100 金幣) ,在其他格點選擇 1 (花費 132 金幣)。

思路:

據說是最長上公升子串行.

..菜雞不會,找了個題解看了看

選擇1走一步,花費為w1。選擇2走兩步,花費為w2。

先考慮只走選擇1,則到(x,y)的花費為(x+y)∗w1

(x+y)∗w1。

再考慮可以有選擇2,我們要用魔法個點來優化之前的選擇,則可以將魔法節點排序,那麼就可以保證後面的魔法節點無法走到前面,這就無後效性了。再找子問題:

定義f[i]

f[i]為到達第ii個魔法節點的距離,則有

num=a[i]

.x+a[i]

.y−a[j]

.x−a[j]

.y−2num=a[i]

.x+a[i]

.y−a[j]

.x−a[j]

.y−2

f[i]

=min

(f[i]

,f[j]

+num∗w1+w2)f[i]

=min

(f[i]

,f[j]

+num∗w1+w2)

**:

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

2005

;ll f[maxn]

;struct node //結構體

a[maxn]

;int

cmp(node a,node b)

intmain()

sort

(a +

1,a +

1+ k,cmp)

;//給魔法節點排個序

a[k +1]

.x = n;

a[k +1]

.y = n;

k++;for

(int i =

1;i <= k;i++

)for

(int i =

2;i <= k;i++)}

}printf

("%lld\n"

,f[k]);

return0;

}

共 5 個測試點

每個測試點 20 分

每個測試點限時 1 秒

執行記憶體上限 512mb

給定 k ,你需要生成乙個沒有重邊的有向無環圖(點編號 1

-n ),使得從 1 到 n 的路徑數恰好為 k 。

輸入格式

一行兩個正整數 k,n,表示要求的路徑數和該測試點允許的最大點數(即你生成的圖點數不得超過 n )。

輸出格式

第一行兩個正整數 n,m,表示你生成的圖的點數和邊數。

接下來 m 行,每行兩個正整數 u,v ,表示有一條從 u 到 v 的有向邊。

如有多個滿足條件的圖,輸出任意乙個。

資料範圍與約定

測試點編號	n	k1=

2=12

=4=3

3=10^

3 ≤500

4−5=

66<2^

64對於 100

% 的資料,滿足 0

64 。

除了前面的要求,你的輸出還要滿足 1≤m≤10

^5和 n>

1 。注意:輸出中多餘的空格和回車、邊的輸出順序不影響得分,但多餘的其他字元及不合法的輸入會導致不得分。

樣例輸入

2

1000

樣例輸出

331

2231

3

樣例解釋

兩條路徑分別為:

1→2→3

1→3

**:

#pragma gcc optimize(2)

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

unsigned

long

long ll;

vectorint,

int>

>vec;

intmain()

if(n ==

2&& k ==1)

else

if(n ==

4&& k ==3)

int n = cnt +2;

for(

int i =

2;i <= cnt +

1;i++))

;}}for

(int i =

0;i < cnt;i++))

;}}printf

("%d %d\n"

,n,(

int)vec.

size()

);for(

int i =

0;i < vec.

size()

;i++

)return0;

}

2020智算之道複賽E 樹數數

傳送門 題意就懶得複述了 直接對著尤拉序建線段樹,每個節點用乙個堆來維護標記。每次修改可能導致一部分區間被某個點覆蓋,而且這個覆蓋並不遵循後邊的修改會覆蓋前面的修改這樣的規則,而是深度小的黑點優先於深度大的黑點,因此需要用堆來維護標記。由於區間只會完全包含,不會出現交叉的情況,可以標記永久化,刪除也...

智算之道 2020智算之道初賽第三場題解

乙個模擬的水題.int main return 0 這個b.卡的直接醉了 按照題意模擬即可 模擬建議使用雙端佇列deque 最好還是陣列吧,deque必須全域性才可以 被deque全域性卡了乙個小時40分鐘 第乙個坑點是注意摸牌順序 可能會wa 第二個坑點是處理摸牌順序 可能會t 第三個坑點是刪牌標...

2020 智算之道 初賽 第三場

2020 中國軟體行業智慧型應用程式設計大賽 奇怪的比賽 似乎算是ioi賽制,最高分最短執行時間排名靠前,題目有部分分 維護當前溫度和當前體積,按要求修改或輸出資訊 在整個過程中,維護同一人手牌中同一點數的牌最多只有一張。維護雙向鍊錶表示兩人的手牌,簡單起見設定首尾為 哨兵節點 維護map 點數,指...