2 条题解
-
4
#include <iostream> using namespace std; int main() { long long n, m, s, i, x, r; cin >> n >> m; s = 0; //m次移动 for (i = 1; i <= m; i++) { cin >> x; s = s + x; } //去掉完整的若干来回,实际还需要走几个格子 s = s % ((n - 1) * 2); //如果是向右能走完 if (s <= n - 1) { r = 1 + s; } else { r = n - s % (n - 1); } cout << r;//输出 return 0; } //代码已AC
-
0
这题重点是不必边算边模拟,而是结束时算一次即可
//调用啥不用教吧? inline int reader(){ int it = 0 , chr = getchar() ; while('0' > chr || chr > '9') chr = getchar() ; while('0' <= chr && chr <= '9') it = (it << 1) + (it << 3) + chr - '0' , chr = getchar(); return it ; }//快读 //定义变量不用教吧? int main(){ n = reader() ; m = reader() ; while(m --){ mx += reader() ;//一共走了几步 mx %= (n << 1) - 2;//原理往下 } if(mx < n) printf("%d" , mx + 1) ; else printf("%d" , (n << 1) - 1 - mx) ; return 0; }
这题只用输出最后在的位置,以3为例子
| - - || | - - - (1) - | - || - | - - (2) - - | || - - | - (3) - | - || - - - | (2) =========一组结束========= | - - - | - - - | ...........
可以发现,每4个一组 ,往后就又是一个循环 , 算一下即 (n * 2) - 2个为一组,所以多余的可以直接mod掉,防止爆,而最后只要分类讨论是在左还是右就行了
- 1
信息
- ID
- 540
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 73
- 已通过
- 29
- 上传者