2023年10月31日普級組

2021-08-30 15:14:12 字數 3263 閱讀 6700

vijos 1390 玩詐欺的小杉

vijos 1391 想越獄的小杉

vijos 1392 拼拼圖的小杉

後續賽後ak

總計n封的信件,每個信件都有自己的特徵碼和序號。

請按照序號遞增的順序輸出信件的特徵碼

每行乙個特徵碼,且特徵碼的格式應與輸入完全一致

#include

#include

#define rr register

using

namespace std;

struct reca[

1001];

int n;

signed

cmp(rec x,rec y)

signed

main()

for(rr int i=

1;i<=n;

++i)

scanf

("%s"

,a[i]

.s+1);

//完全相同就用字串

sort

(a+1

,a+1

+n,cmp)

;//雖然時間多了,但是沒關係

for(rr int i=

1;i<=n;

++i)

printf

("%s\n"

,a[i]

.s+1);

return0;

}

在小杉的面前有乙個n

nn行m

mm列的棋盤,棋盤上有n×m

n\times m

n×m個有黑白棋的棋子(一面為黑,一面為白),一開始都是白面朝上。可以對任意乙個格仔進行至多一次的操作(最多進行n×m

n\times m

n×m個操作),該操作使得與該格同列的上下各2個格仔以及與該格同行的左右各1個格仔以及該格仔本身翻面。問有多少種方法使初始狀態到目標狀態(不同當且僅當操作集合不同)

然而可以列舉第一列,通過第一列來判斷是否能回到初始狀態

#include

#define rr register

using

namespace std;

int n,m,t,tota,f[21]

;signed

main()

rr int ans=0;

for(rr int i=

0;i<

1<++i)if(

!now)

++ans;

//恢復0

}printf

("%d\n"

,ans);}

return0;

}

然而這道題就是單源最短路徑的最短邊最長問題,很容易得到鬆弛操作dis

[to]

=min

(dis

[now

],w)

dis[to]=min(dis[now],w)

dis[to

]=mi

n(di

s[no

w],w

)

#include

#include

#define rr register

using

namespace std;

struct nodee[

400001];

int n,k,ls[

2001

],dis[

2001

],v[

2001];

inline

signed

iut(

)void

print

(int ans)

signed

main()

; ls[x]

=k;}

v[1]=

1; rr queue<

int>q; q.

push(1

); dis[1]

=2147483647

;while

(q.size()

) v[x]=0

;}for(rr int i=

2;i<=n;

++i)

return0;

}

歹徒告訴小杉,他正在尋找的拼圖塊其實可以拼成n

nn個有順序的完整的拼圖。

每個完整的拼圖由若干個拼圖塊組成。

歹徒要求小杉把拼圖按拼出的順序劃分成m

mm個集合,乙個拼圖集合由若干個完整的拼圖組成,並且總的拼圖塊的數目不超過t

tt。並且,構成集合的拼圖是不能交叉的。

小杉要找出劃分成m

mm個集合後,m

mm個集合中最多能有多少個完整的拼圖。

那麼可以發現這道題是乙個動態規劃的題目

對於每種拼圖,那麼要記錄它所處的集合是哪乙個及該集合的拼圖數,那麼可以得到f[i

]=mi

n(f[

j−1]

+a[i

])(1

≤j≤i

,並且符

合條件)

f[i]=min(f[j-1]+a[i])(1\leq j\leq i,並且符合條件)

f[i]=m

in(f

[j−1

]+a[

i])(

1≤j≤

i,並且

符合條件

),詳見**

#include

#define rr register

using

namespace std;

int n,m,summ,a[

1001];

struct rec

rec operator+(

const

int t)

const

;//沒有超過單個集合的限制

else

return

(rec)

;//否則要新增乙個集合

}}f[

1001];

inline

signed

iut(

)signed

main()

}for

(rr int i=n;i;

--i)

if(f[i]

.now<=m)

return

!printf

("%d"

,i);

//從後往前推

}

其實紀中也有後三道題目

2023年10月31日提高組 T1 A

求n nn的排列了交換為公升序的最小交換次數的期望 兩種思路 暴力打表找規律 動態規劃 第一種只需要打乙個bfs bfsbf s hash hash hash include include define p 10000007 using namespace std int n,ans struct...

2023年10月30日提高組

jzoj 5194 盟主的憂慮 jzoj 5907 輕功 問乙個樹中有多少個連通塊最大最小點權之差等於kkk 也就是 k 的個數 k 1 的 個數 k 的個數 k 1 的個數 k 的個數 k 1 的 個數,那麼就可以列舉點,對於這個點求的是以它為最大點權符合要求的個數,那麼容易得到合法條件a m a...

2023年09月23日普級組 環

description 有乙個圓,共個數在圓環上順時針排列著。現在給你三個數,問的順序是順時針還是逆時針。input 第一行包括四個正整數。output 一行乙個整數,0或1,0表示逆時針,1表示順時針。sample input 5 1 4 2sample output hint 樣例如右圖,的順序...