AT2321 题解

· · 题解

本题建议评红。 ### 题目大意 有一个 $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; } ```