貪心例題集

2021-08-09 01:21:09 字數 2285 閱讀 5959

poj3617

給定長度為n的字串s,要構造乙個長度為n的字串t。期初,t是乙個空串。

然後以下操作:

目標是要使構造的字典序盡可能小。

#include 

#include

#include

using

namespace

std;

const

int maxn = 2010;

char s[maxn];

char s2[maxn];

char ans[maxn];

int n;

intstrcmp(const

char *src,const

char *dst,int i,int j)

return

0; }

int main()

//coutint i,j,index = 0;

for(i = 0,j = 0; i < n && j < n && index < n;index ++)

else

}j = 1;

for(int i = 0; i < n ;i ++)

else

#include 

#include

#include

using

namespace

std;

const

int maxn = 1010;

int a[maxn];

int main()

}//完全覆蓋了

if(z == n)

i = n;

break;}}

if(j == n)

}printf("%d\n",ans);

}return

0; }

#include 

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

int main()

it1 = s.begin();

it2 = ++it1;

it1--;

while(s.size() > 1)

printf("%lld",ans);

return

0; }

描述

有 n 堆紙牌,編號分別為 1,2,…, n。每堆上有若干張,但紙牌總數必為 n 的倍數。可以在任一堆上取若於張紙牌,然後移動。

移牌規則為:在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上;在編號為 n 的堆上取的紙牌,只能移到編號為 n-1 的堆上;其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。

現在要求找出一種移動方法,用最少的移動次數使每堆上紙牌數都一樣多。

例如 n=4,4 堆紙牌數分別為:

① 9 ② 8 ③ 17 ④ 6

移動3次可達到目的:

從 ③ 取 4 張牌放到 ④ (9 8 13 10) -> 從 ③ 取 3 張牌放到 ②(9 11 10 10)-> 從 ② 取 1 張牌放到①(10 10 10 10)。

格式 輸入格式

n(n 堆紙牌,1 <= n <= 100)

a1 a2 … an (n 堆紙牌,每堆紙牌初始數,l<= ai <=10000)

輸出格式

所有堆均達到相等時的最少移動次數。

樣例1

樣例輸入1

4

9 8 17 6

樣例輸出1

3
#include

#include

using

namespace

std;

int main()

//求平均值 因為是倍數 所以一定是整數

int junzhi = sum / n;

int ans = 0;

for(int i = 0;i < n ;i ++)

printf("%d\n",ans);

return

0; }

作用域例題集

題1 functiona var a 123 b var glob 100 a 預編譯狀態 a函式被定義時,發生如下過程 a defined a.scope 0 go程式執行狀態 a函式被執行時,發生如下過程 a handle a.scope 0 aao1 go的引用 b函式被定義時,發生如下過程 ...

並查集例題

題目描述 假如已知有n個人和m對好友關係 存於集合r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈。請寫程式求出這n個人裡一共有多少個朋友圈。輸入 輸入包含多個測試用例,每個測試用例的第一行包含兩個正整數 n m,1 n,m 100000。接下來有m行,每行分別輸入兩個...

並查集例題

找出根節點,如果只有乙個節點,根節點是自己 作迴圈,如果父節點不是自己,一直迴圈 public int find int x return x public void union int x,int y parent rootx rooty count 並查集自己的理解 剛開始每個節點都是看作單獨的...