AT2321 题解
_acat_
·
·
题解
本题建议评红。
### 题目大意
有一个 $0$ 到 $n$ 的 $n+1$ 格的棋盘,起始位置 $0$,目标 $n$,对于每次的步数 $a_i$,规定如下:
1. 如果前进 $a_i$ 未到终点 则前进 $a_i$。
2. 如果前进 $a_i$ 恰到终点 则前进 $a_i$ 并结束。
3. 如果前进 $a_i$ 超过终点 假设超过了 $x$ 格 则前进到终点后后退 $a_i-x$ 格。
输出最终位置。
### 思路
本题分两种情况判断。
1. 当输入的 $a_i$ 的和加起来等于终点 $n$ 的话,那么就直接跳出循环,输出 $n$。
2. 当输入的 $a_i$ 的和加起来不等于等于终点 $n$ 的话:
- 如果 $sum<n$ 的话,则前进 $a_i$。
- 如果 $sum>n$ 的话,则 $sum=n-(sum+a_i-n)$,化简一下就是 $2n-(sum+a_i)$。
### 代码
```cpp
#include<iostream>
using namespace std;
int n,k,x;
int sum=0;
int main()
{
cin>>n>>k;
for(int i=0;i<k;i++)
{
cin>>x;
sum+=x;
if(sum==n)
break;
if(sum>n)
sum=2*n-sum;
}
cout<<sum;
}
```