CodeForces 385E
来源:互联网 发布:js与java aes 编辑:程序博客网 时间:2024/05/16 00:37
题意:
有一个熊在n*n的森林里,初始位置在(sx,sy),每个位置都有growing raspberry
每个growing raspberry初始高度是x+y
然后每秒会先发生速度变化,假设当前位置是(x,y)
t=growing raspberry的高度
速度会从(vx,vy)->(vx+t,vy+t)
然后发生位置变化(x,y)->((x+vx-1)%MOD+1,(y+vy-1)%MOD+1)
然后growing raspberry高度++
问你t秒后熊的位置
思路:
先把x,y变成0~n-1便于取模
然后就是普通的矩阵快速幂
(x0,y0,t0,Vx0,Vy0,1)->
(X0+Vx0+X0+Y0+t0+2,y0+Vx0+X0+Y0+t0+2,t0+1,Vx0+X0+Y0+t0+2,Vy0+X0+Y0+t0+2,1)
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#include<vector>#include<map>#include<set>using namespace std;#define lowbit(x) (x&(-x))typedef long long LL;const int maxn = 100005;const int inf=(1<<28)-1;#define Matrix_Size 10LL MOD;int Size;struct Matrix{ LL mat[Matrix_Size][Matrix_Size]; void clear() { memset(mat,0,sizeof(mat)); } void output() { for(int i = 0;i < Size;i++) { for(int j = 0;j < Size;j++) printf("%d ",mat[i][j]); printf("\n"); } } Matrix operator *(const Matrix &b)const { Matrix ret; for(int i = 0;i < Size;i++) for(int j = 0;j < Size;j++) { ret.mat[i][j] = 0; for(int k = 0;k < Size;k++) { long long tmp = (long long)mat[i][k]*b.mat[k][j]%MOD; ret.mat[i][j] = (ret.mat[i][j]+tmp); if(ret.mat[i][j]>=MOD) ret.mat[i][j] -= MOD; if(ret.mat[i][j]<0)//注意是否需要MOD ret.mat[i][j] += MOD; } } return ret; }};Matrix pow_M(Matrix a,long long n){ Matrix ret; ret.clear(); for(int i = 0;i < Size;i++) ret.mat[i][i] = 1; Matrix tmp = a; while(n) { if(n&1)ret = ret*tmp; tmp = tmp*tmp; n>>=1; } return ret;}int Tmp[36]={2,1,1,1,0,2,1,2,1,0,1,2,0,0,1,0,0,1,1,1,1,1,0,2,1,1,1,0,1,2,0,0,0,0,0,1};int main(){ LL n,sx,sy,dx,dy,t; scanf("%lld%lld%lld%lld%lld%lld",&n,&sx,&sy,&dx,&dy,&t); MOD=n; if(t==0) { printf("%lld %lld\n",sx,sy); return 0; } sx--,sy--; Size=6; Matrix A,B; A.clear();B.clear(); for(int i=0;i<6;++i) for(int j=0;j<6;++j) A.mat[i][j]=Tmp[i*6+j]; //A.output();printf("\n"); B.mat[0][0]=sx;B.mat[1][0]=sy; B.mat[2][0]=0;B.mat[3][0]=dx; B.mat[4][0]=dy;B.mat[5][0]=1; A=pow_M(A,t); A=A*B; printf("%lld %lld\n",A.mat[0][0]+1,A.mat[1][0]+1); return 0;}
0 0
- CodeForces 385E
- CodeForces 385E Bear in the Field
- Codeforces Round #385 (Div. 2) E
- codeforces 385E Bear in the Field
- codeforces 163E e-Government
- 【Codeforces 163E】E-Government
- Codeforces 78E Evacuation
- 【dp】codeforces 83E
- Codeforces 124 E
- Codeforces 231E
- Codeforces 231E - Cactus
- Codeforces #163 Div2 E
- codeForces 35E
- Codeforces 35E
- Playlist codeforces 268E
- Codeforces 148E(Porcelain)
- codeforces round#177 E
- codeforces 203E Transportation
- CentOS7 安装mysql
- SQL中Group By的使用
- perl 自动发产品
- 矩阵基础1009 CodeForces 392C 好题,超级推荐
- 2002 计算球体积
- CodeForces 385E
- PAT 1086
- 嵌入式常用算法:时间触发下的嵌入式软件设计模式
- Android开发之Intent.Action
- 二叉搜索树
- CSU 1727: The Fake Coin
- C++学习笔记——Mat类详解及元素的遍历方法
- tjut 4612
- UVA 10518