题解 CF1077A 【Frog Jumping】
个人感觉的规律,CF不开long long绝对炸
CF1077A题解
题目描述翻译
一只青蛙现在位于坐标轴 x 的0点上。它通过以下算法跳跃: 第一次跳跃是右边的 a 单位,第二次跳跃是左边的 b 单位,第三次跳跃是右边的 a 单位,第四次跳跃是左边的 b 单位,依此类推。
形式上:
如果青蛙跳跃了偶数次(在当前跳跃之前) ,它将从当前位置 x 跳跃到位置 x + ax + a; 否则它将从当前位置 x 跳跃到位置 x-bx-b。你们的任务是计算跳 k 次后青蛙的位置,但是... 还有一件事。你看到的是不同的青蛙,所以你必须回答独立的问题。
分析
这个题其实是一个数学问题,模拟的话会出大问题。(效率太低了)
别问为什么我知道,问就是我自己试了
由翻译我们可以看出来,这个题的主要地方就是判断跳跃次数是奇数还是偶数,这个代码还是很好打的
k%2==0;
或者
k%2==1;
以上废话
当跳了偶数次时,答案就是x(0)加上(a-b)*(k/2),
当跳了奇数次时,但就是x(0)加上(a-b)*((i+1)/2)-b.(先多操作一次,再把多操作的部分减去)
so
AC CODE
#include<bits/stdc++.h>//无解万能头
using namespace std;
int main()
{
long long n,x,k,a,b;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a>>b>>k;
if(k%2==0) x=(a-b)*(k/2);
if(k%2==1) x=(a-b)*((k+1)/2)+b;//与分析一致
cout<<x<<endl;
}
return 0;//华丽结束
}
好啦,本片题解就结束了
温馨提示:不要抄题解。小心灰名