機房水題歡樂賽 2016 01 31

2021-07-09 19:22:31 字數 4495 閱讀 4748

——暨gdkoi校隊選拔賽

第1行為乙個正整數n(<=10000),表示有綠豆餅的卷數。

第2行為n個正整數,表示這n卷綠豆餅的高度,兩個正整數之間會有乙個空格,高度值不會大於10000

輸出一行,包括乙個整數,表示修改之後最長的一段連續且高度嚴格上公升的綠豆餅的長度。行末以回車鍵結束。

6 6 1 2 2 4 4

樣例中將第四個高度修改為3,這樣得出的高度序列是6 1 2 3 4 4,可以拿到最長的連續嚴格上公升序列就是1 2 3 4,長度為4

對於30%的資料,滿足1≤n≤10

對於80%的資料,滿足1≤n≤100

對於100%的資料,滿足1≤n≤10000

一開始看錯題,開開心心地寫了最長上公升子串行。。

好吧,令: fi

=, c[n], f[n], r[n];

int n, i, j, ans = 0, ans_c = 0, ans_e = 0;

scanf("%d", &n);

h[0] = -(h[n + 1] = 20000); f[0] = 0; r[n + 1] = 0;

for(i,1,n) scanf("%d", h + i);

for(i,1,n) if (h[i] > h[i - 1]) f[i] = f[i - 1] + 1; else f[i] = 1;

ford(i,n,1) if (h[i] < h[i + 1]) r[i] = r[i + 1] + 1; else r[i] = 1;

for(i,1,n) if (h[i + 1] - h[i - 1] > 1)

ans = max(ans, f[i - 1] + 1 + r[i + 1]);

for(i,2,n) if (h[i] > 1) ans = max(ans, r[i] + 1);

rep(i,1,n) if (h[i] < 10000) ans = max(ans, f[i] + 1);

printf("%d", ans);

return

0;}最近,某公司推出了一種新的 pc 作業系統 swodniw vista 。於是,小恒便高高興興地將它買了回來,並給自己的計算機撞上了。結果他發現許多軟體和程式的執行速度都慢了很多,和以前的作業系統相比,簡直就是天壤之別。後來小恒發現,原來是新系統的 uac 保護模式在作怪。

uac 保護模式其實就是乙個使用者許可權檢測系統。每當乙個使用者執行一條操作,uac 都會花上若干時間來檢測合法性。uac 將檢測分成了 n 個模組,每個模組的執行順序嚴格按照乙個有向樹拓撲有序,如下圖所示:

該有向樹的意義為:你需要完成某個檢測,必須在該檢測之前,完成其在樹上的父親檢測。

乙個模組包含兩個屬性,匹配串 s 和檢測時間 c 。現在,對乙個操作串 t ,當乙個模組的s包含了 t 中的某個字元,則必須執行該模組。要注意,可以同時執行的多個模組,但要保證完成了父親模組,才能開始兒子模組的檢測。

比如,對操作系列「be」,則執行了 a、b、c、d、e 五個模組,最少話費時間為 6(1+3+2)。

現在給出 m 個操作串,那麼 uac 完成每個串的檢測最少需要多少時間呢?

第1行為兩個整數 n 和 m(n≤2007,m≤100000),n 表示檢測個數,m 表示操作串個數。

接下來 n 行,每行包含非負整數 f 和 c(c≤1000)和乙個字串 s(s長度≤100),分別表示前繼模組的序號,檢測時間和匹配串。模組由 1 到 n 編號,根的前繼為 0 。

再下來 m 行,每行只有乙個字串(長度≤100),表示需要檢測的操作串。

字串中不包含空格、換行符和所有的控制字元。

輸出 m 行,每行包含乙個整數,分別表示每個操作串最少的檢測時間。

6 2

0 1 abcdef

1 3 abc

2 2 bc

1 1 def

4 1 d

1 4 aef

be aa6 5

3 2

0 0 0

1 1 1

2 2 0 0 1

3 1先預處理uac樹,處理出每個模組完成需要的時間。然後對於每個字元,處理出包含這個字元的模組的最長時間。最後對於每個操作串的每個字元,查詢預處理出來的結果即可。

#include 

#include

#include

#define for(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

const

int n = 2048, m = 8192, inf = 2147483647;

char s[n][n], op[n];

int f[n], c[n], t[n], n;

int h[n] = , p[m], v[m], cnt = 0;

void add(int x, int y)

void dfs(int x)

void solve()

dfs(rt);

memset(t, 0, sizeof t);

for(i,1,n) for(j=0;s[i][j];j++)

t[s[i][j]]=max(t[s[i][j]],c[i]);

for(i,1,m)

}

輸入有多組資料。每組資料僅有一行,當中有兩個正整數x和y,表示要將骰子滾到(x,y)處,且點數1向上。x=y=0時表示輸入結束。

1<=x,y<=100000000

對於每組資料輸出一行,僅包含乙個整數,即最少要滾動的次數。

1 1

1 2

1 5

0 00 3 4

為了方便表述,令x′

=x+1

,y′=

y+1 ,下文用x,

y 代替x′

,y′ ,並令x≤

y x=1

x>1

發現,同列之間各自互相等價,偶數列之間或奇數列之間分別等價(意為走曼哈頓距離步數就可以到達),(2,2)的步數是4,所以x>1,y>1的格仔全部都是x+

y 。

#include 

int main() else

printf("%d\n", x + y);

}return

0;}

這天張大牛遇到了大肥熊。

張大牛:「我是天才!」

大肥熊:「你為什麼是天才?」

張大牛:「你隨便告訴我乙個數字,我立即可以算出他所有約數的和,以及所有約數的倒數和!」

大肥熊:「換過來,我告訴你乙個數的所有約數(包括1和該數本身)的和,以及約數的倒數之和,你是天才你應該立即能推出這個數是什麼!」

張大牛被難倒了!

現在,這個難倒了天才的題目就交到你手上了。

輸入檔案包含多組輸入資料。

每組資料有三個正整數a,

b1,b

2(1≤

a,b1

,b2≤

109) ,其中a為c的約束和,而對於c的所有約束的倒數之和b,為避免精度誤差,以分數b1

/b2 的形式給出。

輸入檔案以一行「0 0 0」結束。

對於輸入的每一組資料輸出一行,該行的第乙個整數n是所有滿足條件的不同的c的個數。其後按照從小到大的順序輸出n個數,為所有滿足條件的c。相鄰兩個整數之間用空格隔開。

18 9 5

1 1 2

1 1 1

0 0 0

1 10

0 1 1

我們可以發現,如果

n 的所有約數分別為a1

,a2,

⋯,an

,那麼其等價於n/

an,n

/an−

1,⋯,

n/a1

。所以兩數列和相等,變換得: a1

+a2+

⋯+an

=n(1

/a1+

1/a2

+⋯+1

/an)

a=c(b1/

b2)

c=a∗

b2/b

1 如果b

1∤a∗

b2,那麼

c 就不存在,否則還需要驗證

c是否符合題意,即算一次約數和。

而約數和顯然不能暴力,對n質因數分解以後,有: c=

d×qk

令c 的約數和為f(

c)顯然有: f(

c)=f

(d)×

(q0+

q1+⋯

+qk)

#include 

typedef long long ll;

ll dfs(ll a, ll q)

}void work(ll a, ll b1, ll b2)

sum = dfs(c, 1);

if (sum == a)

}puts("0");

}int main()

return

0;}

機房水題歡樂賽 2016 04 24 下午

本次比賽為真 水題歡樂賽 給出乙個正整數n,把n分解成若干個不同的正整數相加,使得這若干個正整數的乘積最大.按公升序輸出這若干個正整數.3 420 的資料 n 20 40 的資料 n 200 60 的資料 n 1000 100 的資料 n 10000 盡量分到根號n處即可。這是乙個傳說中的猜數遊戲,...

水題歡樂賽 套路

套路是人類進步的階梯,我將不惜一切代價套路學習 費清澄 恩恩真是太對了 zqc是乙隻套路的犰 zqc有乙個套路題庫,當然,他為了讓這個套路題庫不被發現,給題庫加了密。這個題庫有很多密碼,你只有輸入套路密碼後,你才能看到題目,並且題目的質量和套路密碼的長度成正比.根據你獲取到的情報,套路密碼為兩個字串...

網路賽水題

題目 一開始看確實很簡單的,但是暈死的題意距離坑了很多人。view code 1 typedef long long ll 2 const int n 1010 3 inta n 4int main 516 intflag 17for i 0 i n i 1831 sum 32 33if flag ...