APIO2018練習賽偽題解

2022-03-27 07:33:07 字數 2845 閱讀 9624

傳送門:

主要就在於後面三道構造題,感覺開闊了眼界。

a:a + b problem,沒看到實數還wa了一發

1 #include2 #include3 #include4

#define rep(i,l,r) for (int i=l; i<=r; i++)

5 typedef long

long

ll;6

using

namespace

std;78

intmain()

b:翻轉陣列

1 #include2 #include3 #include4

#define rep(i,l,r) for (int i=l; i<=r; i++)

5 typedef long

long

ll;6

using

namespace

std;78

const

int n=20010;9

intn;

10ll a[n];

1112

intmain()

c:給定每個數的小數點後有效位數,確定每個小數,使和為1。

所有數都取0.0...1,最後選乙個位數最多的作為(1-其餘的和),如果為負數則無解。

有幾種特殊情況要討論一下,寫乙個假的高精度就好。

手調幾種情況都沒有錯,交上去爆零不懂為什麼。

1 #include2 #include3 #include4

#define rep(i,l,r) for (int i=l; i<=r; i++)

5 typedef long

long

ll;6

using

namespace

std;78

const

int n=200010;9

intn,mx,k,l,kk,a[n],d[n];

1011

bool add(int

x)15

if (d[1]>9) return

1; else

return0;

16}1718

void sub()

1920

intmain()

25 rep(i,1,n) scanf("

%d",&a[i]),mx=max(mx,a[i]);

26 rep(i,1,n) if (a[i]==mx)

27 rep(i,1,n) if (a[i]==mx) l++;

28if (l==1)

29if (l%10==1) add(mx);};

30 rep(i,1,n) if (i!=k)

31if (add(a[i]))

32 sub(); puts("

yes"

);33 rep(i,1,n) if (i!=k)else

39return0;

40 }

d:鋪地磚,每次可以把兩塊一起翻90度,構造初始狀態到最終狀態的方案。

s和t都全部變成橫的或豎的,然後把t的方案反過來輸出就好了。不存在無解。

1 #include2 #include3

#define rep(i,l,r) for (int i=l; i<=r; i++)

4using

namespace

std;56

const

int n=52,k=100010;7

char

s[n][n];

8int n,m,x[k],y[k],xn,cnt,t,k[260];9

10void

solve()

16while

(k[t])

23if (!k[t]) return

;24 rep(i,1,n) rep(j,1

,m)25

if (s[i][j]=='

l' && s[i+1][j]=='l'

)30}31

}3233int

main()

e:每次將字串任意分成兩段,後半段翻轉放前面,前半段直接放後面,構造s->t的方案,步數盡量少。

據說這種構造轉移類題目主要思想是在維護好已構造部分的同時擴大構造範圍。

3n做法:

5/2 n做法 和 2n做法 分別在官網tutorial和tutorial的討論區里,還沒看。

下面是3n做法:

1 #include2 #include3 #include4

#define rep(i,l,r) for (int i=l; i<=r; i++)

5using

namespace

std;67

const

int n=2010;8

intn;

9char

su[n], sv[n];

10 vectorvec;

1112

void shift(int

x)17

18int

main()

24 shift(n); shift(j-1); shift(1

);25

}26 printf("

%d\n

",(int

)vec.size());

27for (int i=0; i"

%d "

,vec[i]);

28 puts(""

);29

return0;

30 }

偽題解 Offer收割 程式設計練習賽58

a 最大的k 偏差排列 第一次在hiho卡一題,所以暴力了搜尋了一下,70分,後面回來打表找規律,規律是有和k有關的週期。當k n 2時,成週期交叉變化,最後尾部部分單獨考慮。當k n 2時,有三個序列,分別是 k 1.n k.n k 1 1.n k 自己的 includeusing namespa...

Wanafly 練習賽8 題解

a 給個n,求1到n的所有數的約數個數的和 解法 列舉每個可能的約數,然後答案就是對n i求和。這個直接列舉會t,然後發現這個可以分塊求。include using namespace std typedef long long ll ll n sinma n i int main return 0...

2018牛客練習賽34

c little w and segment coverage 官方題解 題意 給m個區間,把每個區間上的點都加1,然後問刪除哪乙個點後不會被覆蓋的點最少 我覺得這道題挺好的,就適合我們這些小白做,看題解能夠收穫很多 哇,線段樹原來還闊以統計區間內小於等於某個數x的個數有多少個呀,我太挫了,這個竟然...