Skip to content

Instantly share code, notes, and snippets.

@koduki
Created December 19, 2010 21:56
Show Gist options
  • Save koduki/747728 to your computer and use it in GitHub Desktop.
Save koduki/747728 to your computer and use it in GitHub Desktop.
package problem1978;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main {
private static final int HEAD = 1;
/**
* 花札を1回切る.
*
* @param cards
* @param p
* @param c
* @return 切った後の花札を新規作成して返す.
*/
List<Integer> cut(List<Integer> cards, int p, int c) {
List<Integer> list = new LinkedList<Integer>();
list.addAll(cards);
int cHead = (p - 1) + c;
for (int i = 0; i < c; i++) {
list.add(HEAD, list.remove(cHead));
}
return list;
}
/**
* 入力された内容を元に、r回カットする.
* @param sc
* @param n
* @param r
* @return 切った後の花札.
*/
List<Integer> cuts(Scanner sc, int n, int r) {
List<Integer> cards = rangeList(n);
for (int i = 0; i < r; i++) {
int p = sc.nextInt();
int c = sc.nextInt();
cards = cut(cards, p, c);
}
return cards;
}
/**
* 問題を解く.
* @param in 問題.
* @return 回答.
*/
public List<Integer> solve(InputStream in) {
Scanner sc = new Scanner(in);
List<Integer> result = new ArrayList<Integer>();
while (true) {
int n = sc.nextInt();
int r = sc.nextInt();
if (n == 0 && r == 0) { break; }
List<Integer> cards = cuts(sc, n, r);
result.add(cards.get(HEAD));
}
return result;
}
/**
* 指定の長さのlistを作成.
* @param n 作成する要素数.
* @return 長さnのList.
*/
private List<Integer> rangeList(int n) {
List<Integer> list = new LinkedList<Integer>();
list.add(0);
for (int i = 1; i <= n; i++) {
list.add(HEAD, i);
}
return list;
}
public static void main(String[] args) {
Main main = new Main();
List<Integer> results = main.solve(System.in);
for(int result : results) System.out.println(result);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment