——暨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 ...