給定乙個二維平面,平面上有
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。...