JZOJ4823 小W學物理

2021-07-24 04:41:11 字數 1374 閱讀 1486

給定乙個二維平面,平面上有

n 個鏡子,每個鏡子都成45°角擺放。 現從(

0,0)

沿x軸正方向射出一道光線,求經過

t 路程後,終點的座標。

data constraint n≤

100000,t

≤1018

先排個序,然後預處理出每個鏡子四個方向上的第乙個鏡子是哪個點。

然後在模擬地做一遍即可。

需要注意,有可能會有環,這需要特別處理一下。

時間複雜度:o(

nlog

n)

#include

#include

#include

#include

#include

using

namespace

std ;

#define n 100000 + 10

typedef

long

long ll ;

struct note

} t[n] ;

struct mirror p[n] ;

ll f[4][2] = , , , } ;

int prex[n] , nextx[n] , prey[n] , nexty[n] ;

int n , m ;

ll t , fx , fy ;

ll operator - ( mirror a , mirror b )

bool cmp1( note a , note b )

bool cmp2( note a , note b )

void prepx()

i = tail - 1 ;

}}void prepy()

i = tail - 1 ;

}}int find( int h , int dir )

int calc( int type , int dir ) else

}int main()

t[n+1] = note( 0 , 0 , 0 ) ;

prepx() ;

prepy() ;

int dir = 0 , now = 0 ;

ll s = 0 ;

while ( s < t )

s += p[next] - p[now] ;

if ( next != 0 ) dir = calc( p[next].z , dir ) ;

now = next ;

if ( next == 0 && dir == 0 ) }}

printf( "%lld %lld\n" , fx , fy ) ;

return

0 ;}

以上.

JZOJ4823 小W學物理

為了測試小w的物理水平,mr.x在二維座標系中放了n面鏡子 鏡子座標絕對值不超過m 鏡子均與座標軸成45 角,所以一共有兩種型別 和 原點不會有鏡子,任意一點最多只有一面鏡子。鏡子兩個面都能反光,而中間不透光,例如,對於乙個 型鏡子,下方向射入的光線會被反射到右方向,左方向射入的光線會被反射到上方向...

JZOJ 4823 小W學物理

為了測試小w的物理水平,mr.x在二維座標系中放了n面鏡子 鏡子座標絕對值不超過m 鏡子均與座標軸成45 角,所以一共有兩種型別 和 原點不會有鏡子,任意一點最多只有一面鏡子。鏡子兩個面都能反光,而中間不透光,例如,對於乙個 型鏡子,下方向射入的光線會被反射到右方向,左方向射入的光線會被反射到上方向...

小W的數字

如果設step n 表示n減到0的最小操作次數,顯然step有單調性。我們設f mx,n 表示把n減到0的最小操作次數,mx表示的是比n最高位還高的那些位的最大值。現在我們可以固定最高位,把剩餘位減到0,也就是遞迴計算,返回二元組 cost,dp 表示操作次數為cost,最終還可以額外減掉乙個dp。...