Codeforces Beta Round #75 (Div. 2)---A. Chips
There are n walruses sitting in a circle. All of them are numbered in the clockwise order: the walrus number 2 sits to the left of the walrus number 1, the walrus number 3 sits to the left of the walrus number 2, ..., the walrus number 1 sits to the left of the walrus number n.
The presenter has m chips. The presenter stands in the middle of the circle and starts giving the chips to the walruses starting from walrus number 1 and moving clockwise. The walrus number i gets i chips. If the presenter can't give the current walrus the required number of chips, then the presenter takes the remaining chips and the process ends. Determine by the given n and m how many chips the presenter will get in the end.
The first line contains two integers n and m (1 ≤ n ≤ 50, 1 ≤ m ≤ 104) — the number of walruses and the number of chips correspondingly.
Print the number of chips the presenter ended up with.
4 11
0
17 107
2
3 8
1
In the first sample the presenter gives one chip to the walrus number 1, two chips to the walrus number 2, three chips to the walrus number 3, four chips to the walrus number 4, then again one chip to the walrus number 1. After that the presenter runs out of chips. He can't give anything to the walrus number 2 and the process finishes.
In the third sample the presenter gives one chip to the walrus number 1, two chips to the walrus number 2, three chips to the walrus number 3, then again one chip to the walrus number 1. The presenter has one chip left and he can't give two chips to the walrus number2, that's why the presenter takes the last chip.
解题思路:有1~n依次循环相连,即1 -> 2 -> ... -> n-1 -> n -> 1.现有数m,从依次从1的位置開始,假设m >= 1,则m -= 1.依次i循环移动。直到m < i时,输出m就可以。直接推断一下当i是n的倍数时。i = n;否则i = i%n就可以。
AC代码:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; #define INF 0x7fffffff int main() { #ifdef sxk freopen("in.txt","r",stdin); #endif int n, m; while(scanf("%d%d", &n, &m)!=EOF) { for(int i=1; ; i++){ if(i%n != 0) i %= n; else i = n; if(m < i){ printf("%d\n", m); break; } m -= i; } } return 0; }
相关文章
- 程序员之---C语言细节24(段错误、类型提升、sizeof 'A')
- STL---set和multiset
- 汽车学习---汽车知识大全【all】
- Celery学习--- Celery 最佳实践之与django结合实现异步任务
- Redis学习---Redis操作之其他操作
- Java学习---JDK的安装和配置
- Coursera在线学习---第五节.Logistic Regression
- SQLServerDBA十大必备工具---让生活轻松点
- [原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系---转载
- 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---41
- 标准C程序设计七---02
- 42数据结构与算法分析之---交换排序
- 51深入理解C指针之---指针与线程