CodeForces 385E Bear in the Field
来源:互联网 发布:淘宝漏洞买东西不花钱 编辑:程序博客网 时间:2024/04/27 21:32
题意:
一只熊从(sx,sy)开始走 速度为(dx,dy) 每一秒钟速度的两个维度同时加上所在坐标的和(即 +x+y)然后走一步
求 T秒钟后熊站在哪
思路:
T无比的大不可能是暴力的 于是想到两个可能
一是这个路径有循环有规律可以排除好多步
二是能构造出一个表示他行为的矩阵用快速幂做
由于规律很难找到 所以可以列一下他的状态变化 (x,y,dx,dy,i) 表示i时刻熊站在(x,y)处速度向量(dx,dy)
它的下一个状态是 ( 2x+y+dx+i , x+2y+dy+i , x+y+dx , x+y+dy , i+1 ) 根据此构造矩阵
为了方便可以把平面从(1,1)平移到(0,0) 这时速度需要+2 (因为速度每次+x+y x和y都-1则速度都+2)
所以我的矩阵对应常数的地方为2 之所以敢改动矩阵是因为F与fzc乘一次后除了第一列其余全是0
详见代码
其实我的思路不是很好 有队友master的帮助才搞定了这题…
http://kmjp.hatenablog.jp/entry/2014/01/25/1000 这份题解思路简单些 不过是日语的要用翻译软件
代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;typedef __int64 uint64;const int mat_n=6;uint64 n,sx,sy,dx,dy,t;uint64 fzc[6][6];uint64 F[6][6]={ {2,1,1,0,1,2}, {1,2,0,1,1,2}, {1,1,1,0,1,2}, {1,1,0,1,1,2}, {0,0,0,0,1,1}, {0,0,0,0,0,1}};void matrix_mul(uint64 a[][mat_n],uint64 b[][mat_n],uint64 mod){ uint64 c[mat_n][mat_n]; int i,j,k; for(i=0;i<mat_n;i++) { for(j=0;j<mat_n;j++) { c[i][j]=0; for(k=0;k<mat_n;k++) { c[i][j]=(c[i][j]+(a[i][k]*b[k][j])%mod)%mod; } } } for(i=0;i<mat_n;i++) for(j=0;j<mat_n;j++) a[i][j]=c[i][j];}void matrix_power(uint64 s[][mat_n],uint64 k,uint64 mod){ uint64 ans[mat_n][mat_n]; memset(ans,0,sizeof(ans)); int i,j; for(i=0;i<mat_n;i++) ans[i][i]=1; while(k>0) { if(k%2==1) matrix_mul(ans,s,mod); k=k/2; matrix_mul(s,s,mod); } for(i=0;i<mat_n;i++) for(j=0;j<mat_n;j++) s[i][j]=ans[i][j];}int main(){ scanf("%I64d %I64d %I64d %I64d %I64d %I64d",&n,&sx,&sy,&dx,&dy,&t); sx--; sy--; fzc[0][0]=sx; fzc[1][0]=sy; fzc[2][0]=dx; fzc[3][0]=dy; fzc[4][0]=0; fzc[5][0]=1; matrix_power(F,t,n); matrix_mul(F,fzc,n); printf("%I64d %I64d\n",(F[0][0]+n)%n+1,(F[1][0]+n)%n+1); return 0;}
0 0
- CodeForces 385E Bear in the Field
- codeforces 385E Bear in the Field
- Bear in the Field CodeForces
- Codeforces 385E Bear in the Field(矩阵快速幂)
- CodeForces 385 E.Bear in the Field(dp+矩阵快速幂)
- Codeforces Round #226 (Div. 2) E---Bear in the Field(矩阵)
- 解题报告:Codeforces Round #226 (Div. 2)E. Bear in the Field 矩阵加速幂
- Codeforeces Round #226 (Div. 2) E---Bear in the Field(矩阵快速幂)
- CodeForces 385EBear in the Field(矩阵快速幂)
- Codeforces 845E Fire in the City
- Codeforces E. Field of Wonders
- Codeforces E. Bear and Contribution(枚举维护)
- CodeForces 674E Bear and Destroying Subtrees
- CodeForces 639E Bear and Paradox
- Codeforces Round #326 (Div. 2) E. Duff in the Army
- Codeforces 888E(位运算+meet-in-the-middle)
- CodeForces 492E Vanya and Field
- CodeForces #280 E Vanya and Field
- 马上Go 1.1
- 黑马程序员__18java基础增强
- 好多考试
- CSS入门之背景样式实例,背景图滚动:background-attachment,background复合样式
- 华为笔试题
- CodeForces 385E Bear in the Field
- 图像处理之仿油画效果
- hdu 1850 (nim games)
- Chromium on Android: Chromium线程局部存储(TLS)系统
- Linux上实现双向进程间通信管道(socketpair)
- 如何改变Android应用的运行环境
- HDOJ 3308 LCIS
- Thinking in BigData(五)大数据之统计学与数据挖掘
- 酷!用Qt Quick实现Metro风格的进度条