2019 百度之星初賽第一場A B E 補C

2021-09-26 06:43:20 字數 4685 閱讀 5175

度度熊最近學習了多項式和極限的概念。

現在他有兩個多項式 f(x)和g(x),他想知道當 x趨近無限大的時候,f(x) /g(x) 收斂於多少。

#include

using

namespace std;

intmain()

}for

(int i =

0; i < t; i++)}

if(mfmi>mgmi)cout<<

"1/0"

<<

'\n'

;else

if(mfmi"0/1"

<<

'\n'

;else

cout<'/'<'\n';}

}return0;

}

度度熊在玩乙個好玩的遊戲。 遊戲的主人公站在一根數軸上,他可以在數軸上任意移動,對於每次移動,他可以選擇往左或往右走一格或兩格。

現在他要依次完成n個任務,對於任務i,只要他處於區間[ai,bi]上,就算完成了任務。 度度熊想知道,為了完成所有的任務,最少需要移動多少次? 度度熊可以任意選擇初始位置。

ps:總感覺這題好像做的麻煩了,應該有更簡單的做法

#include

using

namespace std;

typedef pair<

int,

int> pr;

intmain()

else it++;}

int res=0;

int loc=0;

int i=

0,dif;

if(v[0]

.second < v[1]

.first)loc = v[0]

.second;

if(v[0]

.first > v[1]

.second)loc = v[0]

.first;

for(i=

1;i1;i++

)else loc=v[i]

.second;

res+

=(dif+1)

/2;}

else}if

(v[i]

.first>v[i+1]

.second)

else loc=v[i]

.first;

res+

=(dif+1)

/2;}

else}}

if(n!=1)

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

cout << v[i].first << ' ' << v[i].second << endl;*/

cout<'\n';}

return0;

}

度度熊有乙個遞推式 an=(∑i=1

n−1ai∗i)%n. 其中 a1=1。現給出 n,需要求 an。

#include

using

namespace std;

#define ll long long

intmain()

else

if(n%6==

3||n%6==

5)else

if(n%6==

4)res=3+

6*(n/6);

else

if(n%6==

0)res=3*

(n/6);

cout<'\n';}

return0;

}

平面上有 n 個矩形,矩形的邊平行於座標軸,現在度度熊需要操控一名角色從 a 點走到 b 點。

該角色可以上下左右移動,在恰被 k 個矩形覆蓋的區域,該角色的速率為 k+1 個距離/秒(矩形覆蓋區域包括邊界)。

請求出 a 移動到 b 最快需要多少秒。

output

資料很大,沒辦法簡單建圖,故離散化處理資料,直接存點座標,將得到的座標資料分x、y方向排序,去重,得到乙個壓縮的網格圖(把某些特性一致的邊壓縮了),然後根據該圖處理資料,得到每個點被覆蓋的矩形個數(這裡需要注意),因為移動只能是豎直移動或者水平移動,故需要兩個不同的num二維陣列,垂直移動的情況下,矩形的上邊界上的點不應計入,水平移動時,矩形的右邊界上的點不應計入(畫個圖想一下怎麼根據 點上覆蓋的矩形數 計算時間 就明白了),這樣處理完資料後,就得到目標圖了,然後就是單源求最短路徑問題,我這裡用的是bfs+優先佇列,當然也可以用其他方法求得結果。

2019.8.19補,詳細注釋在**中

#include

using

namespace std;

const

int maxn=

405;

//離散化處理座標,200個矩形,400個點

const

int inf=

0x3f3f3f3f

;int dx[maxn]

,dy[maxn]

,nx,ny;

//座標點,有序,不重,index從1開始

int num_hor[maxn]

[maxn]

,num_ver[maxn]

[maxn]

;//豎直或水平方向上的點 被多少個矩形覆蓋

double time_[maxn]

[maxn]

;//bfs得到的最短時間陣列

int begin_x,end_x,begin_y,end_y;

//起點和終點

bool vis[maxn]

[maxn]

;//bfs用的vis標記陣列

int dir[4]

[2]=

;//方向陣列

struct rectangle

ret[maxn/2]

;//座標

struct node};

void

bfs();

intmain()

cin>>begin_x>>begin_y>>end_x>>end_y;

dx[++nx]

=begin_x,dx[

++nx]

=end_x;

dy[++ny]

=begin_y,dy[

++ny]

=end_y;

sort

(dx+

1,dx+

1+nx)

;sort

(dy+

1,dy+

1+ny)

; nx =

unique

(dx+

1,dx+nx+1)

-dx-1;

ny =

unique

(dy+

1,dy+ny+1)

-dy-1;

//"去重",更新nx,xy

//接下來求num_hor,num_vir

//初始化

for(

int i=

1;i<=nx;

++i)

for(

int j=

1;j<=ny;

++j)

num_ver[i]

[j]=num_hor[i]

[j]=1;

for(

int i=

0;i++i)

for(

int j = ret[i]

.x1; j < ret[i]

.x2;

++j)

} begin_x =

lower_bound

(dx +

1, dx +

1+ nx, begin_x)

- dx;

begin_y =

lower_bound

(dy +

1, dy +

1+ ny, begin_y)

- dy;

end_x =

lower_bound

(dx +

1, dx +

1+ nx, end_x)

- dx;

end_y =

lower_bound

(dy +

1, dy +

1+ ny, end_y)

- dy;

time_[begin_x]

[begin_y]=0

;bfs()

; cout

)<[end_y]

<<

'\n';}

return0;

}void

bfs(

) priority_queue

, less> que;

time_[begin_x]

[begin_y]=0

; node node;

node.x=begin_x;node.y=begin_y;

que.

push

(node)

;while

(!que.

empty()

)}}}

Game 2019百度之星初賽第一場

由於要依次完成任務,所以對於我們從前到後把可以取交集的取交集,不行就新開一段。這樣由於要從前到後完成任務,就是這些互不相交的交集區間要依次到達。於是我們先根據第二個區間的位置選擇第乙個區間開始的起點 然後就每次根據下乙個區間與這個區間的相對位置選擇到達的端點就行了。有個小細節,就是走到端點長度為奇數...

百度之星2019初賽第一場T2

problem description 度度熊在玩乙個好玩的遊戲。遊戲的主人公站在一根數軸上,他可以在數軸上任意移動,對於每次移動,他可以選擇往左或往右走一格或兩格。現在他要依次完成 nn 個任務,對於任務 ii,只要他處於區間 a i,b i a i b i 上,就算完成了任務。度度熊想知道,為了...

2012百度之星初賽第一場題B小小度刷禮品

初賽第一場完整題目見 這裡 第二題 小小度刷禮品以 x結尾的參賽選手將得到精美禮品乙份。小小度同學非常想得到這份禮品,於是他就連續狂交了很多次,提交id從a 連續到b 他想問問你他能得到多少份禮品,你能幫幫他嗎?輸入 第一行乙個正整數t 表示資料組數 接下去t 行,每行三個正整數x,a,b 0 x ...