2013長春regional題目詳解

2021-08-10 10:24:09 字數 3438 閱讀 7106

和隊友打模擬賽遺憾的打鐵了,在這裡總結一下題,還是太菜了。。

題目難度由易到難的順序講解。

c題隊友wa了4發後a了,一開始題意都不太理解,但實際上就是求n個數組成的所有數中的就行了。仔細想想其實題目不是很難理解。

**如下:

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

int num[45];

ll dp[45][40005];

int n;

double p;

void solve()

}}int main()

choose-=dp[n][i];}}

}

i題思路:一開始博主有乙個思路,上去寫了後發現事情並不簡單,在判斷以哪個點結束的串是否可行的時候出現了問題。看了題解之後瞬間懂了。當時也寫了hash,但沒想到可以這樣遍歷串:首先列舉起點i,算這個串之後並不是列舉i+1,而是把該串的開頭的l串刪掉,再從末尾加上乙個l串,然後在判斷。

所以列舉一開始的起點就是從0到l-1即可,後面跳的過程判斷是否可行用map的大小即可。

**如下:

#include

using

namespace

std;

typedef

unsigned

long

long ull;

const

int maxn=100005;

const ull hashsize=19560817;

ull p[maxn+10];

ull s[maxn+10];

int l,m;

string a;

void init()

ull hs(int l,int r)

mapint>themap;

void solve()

if(themap.size()==m)

ans++;

while(i+now*l+l-1

1); themap[temp]++;

temp=hs(i+l*(now-m),i+l*(now-m)+l-1);

themap[temp]--;

if(themap[temp]==0)

themap.erase(temp);

if(themap.size()==m)

ans++;

now++;}}

cout

}

g題思路:g題做不出來的就是菜啊。。。一道模板題,這題沒有解題思路,就是套模板即可,2維線段樹區間查詢單點修改求最值。

#include

#include

using

namespace

std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define maxn 805 ///大小

struct seg /// 單點修改,區間查詢極值模板

void pushup(int xrt, int rt)

void buildy(int xrt, int x, int l, int r, int rt)

return;

}m = l + r >> 1;

buildy(xrt, x, lson);

buildy(xrt, x, rson);

pushup(xrt, rt);

}void buildx(int l, int r, int rt)

m = l + r >> 1;

buildx(lson);

buildx(rson);

buildy(rt, -1, 1, n, 1);

}void updatey(int xrt, int x, int l, int r, int rt)

return;

}m = (l + r) >> 1;

if (yl <= m)updatey(xrt, x, lson);

else updatey(xrt, x, rson);

pushup(xrt, rt);

}void updatex(int l, int r, int rt)

m = (l + r) >> 1;

if (xl <= m)updatex(lson);

else updatex(rson);

updatey(rt, -1, 1, n, 1);

}void queryy(int xrt, int l, int r, int rt)

m = (l + r) >> 1;

if (yl <= m)queryy(xrt, lson);

if (yr>m)queryy(xrt, rson);

}void queryx(int l, int r, int rt)

m = (l + r) >> 1;

if (xl <= m)queryx(lson);

if (xr>m)queryx(rson);

}}seg;

int main()

}}

b題思路:比賽的時候知道了乙個公式θn

=θn−

1+θn

−2然後發現所有的冪都可以寫成θ^2的表達方式,然後發現係數成斐波那契數列,結果越想越遠,寫了乙個遞迴的方法,過後突然發現係數的問題還是不是特別好解決。

看了題解後突然發現還有乙個公式: 2∗

θn=θ

n+1+

θn−2

,然後可以把乙個數」稀釋」到它的兩邊,不斷的將係數變小,再不斷的用第乙個公式將連續的兩個1合併到乙個1就行了。

#include

#include

#include

using

namespace

std;

int num[105];

int main()

}for(int i=0; i<100; i++)

}if(flag)

break;

}int begin,end=50;

for(int i=100; i>=50; i--)

if(num[i]==1)

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

if(num[i]==1)

for(int i=begin; i>=50; i--)

if(end!=50)

}printf("\n");

}return

0;}

總結:題目都是好題,可惜不會做,做完之後感覺豐滿了很多。繼續努力吧。

2013 ACM ICPC 長春網路賽F題

題意 兩個人輪流說數字,第乙個人可以說區間 1 k 中的乙個,之後每次每人都可以說乙個比前乙個人所說數字大一點的數字,相鄰兩次數字只差在區間 1 k 誰先 n,誰輸。問最後是第乙個人贏還是第二個人贏。第乙個人搶到n 1的方法,就是先說乙個數字與n 1的差是k 1的整數倍。因為在這之後另乙個人無論說幾...

2015 ICPC長春賽區銅牌題

題意 給出n m的空地,每個空地上給出的數字是用方塊疊起來的高度,在三維空間求出這些用立方體堆起來的表面積,底面積不算。掃三個方向就行,正檢視和側檢視算出來的值都要乘以2。如下 include include include include includeusing namespace std de...

2023年的408演算法題

思路一 使用hash對映打表,每出現一次次數加1,如果次數有超過n 2,則存在主元素,反之,則不存在。缺點 需要輔助陣列 思路二 兩兩相互抵消。如果陣列中存在大於一般的相同元素,首先假設第乙個元素為主元素的候選元素 統計個數為1 如果目前元素統計的個數大於0,遇到相同的數字 個數加1,不同的數字 個...