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

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



    化繁为简 大巧不工
  • 相关阅读:
    JAVA Aes加密解密
    15个实用的jQuery代码片
    mybatis-generator-config工具的使用
    Oracle中Merge into用法总结
    Highcharts 在低版本 IE 上使用注意事项及个人总结
    梦想是什么
    博客美化基本后台设置与样式设置
    IntelliJ Idea 常用快捷键列表
    磁盘
    [半转]1px边框 移动端
  • 原文地址:https://www.cnblogs.com/mpeter/p/10295428.html
Copyright © 2011-2022 走看看