CF976B Lara Croft and the New Game 题解
wwwidk1234 · · 题解
洛谷题目传送门
CodeForces 题目传送门
更好的阅读体验?
题目简介
这是一道很考验思维的数学题。
题意
一个
分析
通过数据量
分析一下,可以得知小人走的路径分为两部分:从左上角走到左下角和从左下角走到终点两部分。
第一部分
走一步时,小人在
所以我们可以得到第一部分的代码:
if(k<n) cout<<k+1<<" "<<1<<endl;
第二部分
第二部分的路径可以分为两种情况:从左往右走和从右往左走。设
通过分析
-
当
\left \lfloor \dfrac{k_1}{m-1} \right \rfloor 为偶数时,即为从左往右走,此时小人的坐标为(n-\dfrac{k_1}{m-1},k_1 \bmod (m-1)+2) -
当
\left \lfloor \dfrac{k_1}{m-1} \right \rfloor 为奇数时,即为从右往左走,此时小人的坐标为(n-\dfrac{k_1}{m-1},m-k_1 \bmod (m-1))
于是我们可以得到第二部分的代码:
long long k1=k-n;
if((k1/(m-1))%2==1) cout<<n-k1/(m-1)<<" "<<m-k1%(m-1)<<endl;
else cout<<n-k1/(m-1)<<" "<<k1%(m-1)+2<<endl;
完整代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
long long n,m,k;
cin>>n>>m>>k;
if(k<n) cout<<k+1<<" "<<1<<endl;
else
{
long long k1=k-n;
if((k1/(m-1))%2==1) cout<<n-k1/(m-1)<<" "<<m-k1%(m-1)<<endl;
else cout<<n-k1/(m-1)<<" "<<k1%(m-1)+2<<endl;
}
return 0;
}
最后提醒:注意数据范围,此题需要开 long long!