zoukankan      html  css  js  c++  java
  • CodeForces

    题目链接:
    Example
    input
    Copy
    3
    2
    0 1 0 0 0 0 0
    100000000
    1 0 0 0 1 0 1
    1
    1 0 0 0 0 0 0
    
    output
    Copy
    8
    233333332
    1

    本题的题意其实很简单,就是用一个长度为7的数组a[]表示,如果a[i]=1则说明星期i的时候,xx大学这一天为学生上课,否则如果为0,则学生这一天不上课(不上课也要待在学校!).
    现在给你数组a,以及这个学生想要上课的天数k.
    请问这个学生最少要在学校呆多少天(他可以在任意一天来),才能满足他上满k天的课的要求?

    解法可以将其看作两部分
    1, 学生需要完整上完一个星期的天数
    2, 学生可以选择上的天数

    这里完整上的天数可以用 k/cnt表示,其中,k是学生期望的上课数, cnt是一周的课数。
    于是,需要完整上的天数就是 : 7*x!
    但是要考虑一个特殊情况,若k%cnt = 0。也就是刚刚好整除,这个时候需要我们 7*x-7因为有一个星期他不用完整上完。
    具体步骤看我的AC代码解释吧
    AC代码如下:
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    const int MX = 10;
    int mp[10];
    
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            int k;
            int ans = 0;
            int cnt = 0;
            scanf("%d", &k);
            for(int i = 1; i <= 7; ++i) scanf("%d", &mp[i]);
            for(int i = 1; i <= 7; ++i)
                if(mp[i] == 1) cnt++;
            int x = k/cnt; // 期望的课数除以每个星期有课数,可以得到需要上多少天(整的星期)
            int n = k%cnt; // 余数可知除了整的个数外还期望上多少课
            ans = 7*x; // 先求整的天数
            if(n == 0) // 若可以整除,则说明第一个星期不需要上完,这个时候需要判断
            {
                ans -= 7; // 先把第一个星期减掉
                n = cnt; // 还需要一个星期的课也就是cnt
            }
            int mn = 7;
            for(int i = 1; i <= 7; ++i)
            {
                int day = 0;
                cnt = 0;
                for(int j = i; ;j++) //从第i天开始计算可以上课的的值
                {
                    day++; //循环一次多一天
                    if(mp[(j-1)%7+1] == 1) cnt++; // 这里(j-1)%7+1的意思是j大于7的时候相当于返回来从1开始
                    if(cnt == n)
                    {
                        mn = min(mn, day);
                        break;
                    }
                }
            }
            ans += mn;
            printf("%d
    ", ans);
        }
    }
    View Code

    如有疑问,欢迎评论指出!



    化繁为简 大巧不工
  • 相关阅读:
    UVA 1386 Cellular Automaton
    ZOJ 3331 Process the Tasks
    CodeForces 650B Image Preview
    CodeForces 650A Watchmen
    CodeForces 651B Beautiful Paintings
    CodeForces 651A Joysticks
    HUST 1601 Shepherd
    HUST 1602 Substring
    HUST 1600 Lucky Numbers
    POJ 3991 Seinfeld
  • 原文地址:https://www.cnblogs.com/mpeter/p/10295428.html
Copyright © 2011-2022 走看看