HDU 6043(KazaQ's Socks) 规律题 Java

来源:互联网 发布:2016光棍节淘宝交易额 编辑:程序博客网 时间:2024/06/06 00:19

2017 Multi-University Training Contest - Team 1 1011题

找规律,分情况!!!

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.math.BigInteger;import java.util.Scanner;/** * 题意:有 numOfSocks 双袜子序号分别为 1~numOfSocks,每天早上穿序号最小的那双,每天晚上放到篮子里, *      当穿最后一双袜子的时候,会洗篮子里面的袜子(当天就干),问第 day 天穿的哪双袜子。 *  * 分析:找规律。 *      比如,输入的用例:3 7 *      每天穿的袜子编号:1 2 3 1 2 1 3 1 2 1 3 *      其中发现:1 2 3 之后的都是 1 2 、 1 3 , 也就是说在穿第 2/3 双袜子的那一天才洗袜子。 *      又比如: 4 9 *      每天穿的袜子编号: 1 2 3 4 1 2 3 1 2 4 1 2 3 *      其中又发现:1 2 3 4 之后的都是 1 2 3 、 1 2 4,也就是说在穿第 3/4 双袜子的那一天才洗袜子。 *  也就能说明了只有在穿第 numOfSocks/numOfSocks-1 双袜子的那一天,才洗袜子。 *  更进一步说明:numOfSocks 和 numOfSocks-1 是轮流来的。 *  * 解决: *  1、当 day <= numOfSocks 时,直接输出 day *  2、当 day > numOfSocks 时,分以下两种情况: *      ①、当 (day-numOfSocks) % (numOfSocks-1) == 0 时, *        i、(day-numOfSocks)/(numOfSocks-1) == 偶数时,输出 numOfSocks *        ii、(day-numOfSocks)/(numOfSocks-1) == 奇数时,输出 numOfSocks-1 *      ②、否则输出 (day-numOfSocks) % (numOfSocks-1). *  * @author TinyDolphin * */public class Main {    public static void main(String[] args) throws IOException {        Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));        BigInteger numOfSocks;        BigInteger day;        int count = 0;        while (in.hasNext()) {            numOfSocks = in.nextBigInteger();            day = in.nextBigInteger();            out.print("Case #" + (++count) + ": ");            if (day.compareTo(numOfSocks) <= 0) {                out.println(day);            } else {                if ((day.subtract(numOfSocks)).mod(numOfSocks.subtract(BigInteger.valueOf(1)))                        .compareTo(BigInteger.valueOf(0)) != 0) {                    out.println((day.subtract(numOfSocks)).mod(numOfSocks.subtract(BigInteger.valueOf(1))));                } else {                    if ((day.subtract(numOfSocks)).divide(numOfSocks.subtract(BigInteger.valueOf(1)))                            .mod(BigInteger.valueOf(2)).compareTo(BigInteger.valueOf(0)) == 0) {                        out.println(numOfSocks);                    } else {                        out.println(numOfSocks.subtract(BigInteger.valueOf(1)));                    }                }            }        }        out.flush();    }}
原创粉丝点击