链接:https://www.nowcoder.com/acm/contest/114/A
来源:牛客网
走格子
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
在平面上有n*n大小的正方形,定义正方形左下角坐标是(1,1),右下角坐标是(n,1)
现在A君在左下角,他的初始方向是向右,他要在正方形内走m步
当A君碰到边界或者已经走过的格子时,他便会逆时针转90°继续走,直到走完m步。
现在给你两个整数n和m,请算出走完m步后A君的坐标。
输入描述:
输入一行两个整数n和m。
输出描述:
输出一行两个数表示A君的坐标。
备注:
n<=1000,m<n*n
直接模拟就行
走过的路径直接标记
然后遇到标记过的转弯就行
数据小直接暴力没毛病
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; const int INF = 0x3f3f3f3f; const int mod = 998244353; typedef long long ll; ll A[2*maxn]; ll B[maxn]; ll power_mod(ll a,ll n){ ll ans=1; while(n){ if(n&1) ans=ans*a%mod; a=a*a%mod; n>>=1; } return ans; } void init(){ A[0]=1; for(int i=1;i<=2e6;i++){ A[i]=A[i-1]*i%mod; } for(int i=1;i<=1e6;i++){ B[i]=power_mod(A[i],mod-2); } } int main(){ init(); int n; scanf("%d",&n); ll ans=0; for(int i =1 ;i<=n;i++){ ll sum=A[2*i]; sum=sum*B[i]%mod*B[i]%mod; ans=(ans+sum)%mod; } printf("%lld ",ans); return 0; }