zoukankan      html  css  js  c++  java
  • 牛客网Wannafly挑战赛15 B车辆安排(模拟)AND C 出队(规律)

    传送门 :B题:点我

        C题: 点我

    题目描述

    有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数

    输入描述:

    第一行n
    第二行n个数,表示每个队伍的人数

    输出描述:

    输出最少车数

    示例1

    输入

    3
    3 4 5

    输出

    3

    备注:

    n≤1e5每个数小于等于5


    思路:大力模拟。5自己一车,4跟1一车,然后3跟2一车,2的时候分情况考虑,如果2是偶数,那么2+2+1或者2+2,如果2是奇数,那么分成偶数+1,最后一个2,可以2+1+1+1,或者2+1+1或者2+1或者2,最后处理1
    代码:(因为太长了就折叠了,然后最后附上了一些测试数据)
    #include <cstdio>  
    #include <cstring>  
    #include <cmath>  
    #include <cstdlib>  
    #include <ctime>  
    #include <iostream>  
    #include <algorithm>  
    #include <sstream>  
    #include <string>  
    #include <vector>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>  
    #include <utility>
    #include <bitset>
    
    using namespace std;  
    #define LL long long  
    #define pb push_back  
    #define mk make_pair  
    #define pill pair<int, int>  
    #define mst(a, b)    memset(a, b, sizeof a)  
    #define REP(i, x, n)    for(int i = x; i <= n; ++i)
    int main(){
        int n;
        scanf("%d",&n);
        int a[6] = {};
        for(int i = 0 ; i < n ; i++){
            int x;
            scanf("%d",&x);
            a[x]++;
        }
        int sum = a[5];
        if(a[1] >= a[4]){
            sum += a[4];
            a[1] -= a[4];
        }
        else{
            sum += a[4];
            a[1] = 0;
        }
        if(a[2] >= a[3]){
            sum += a[3];
            a[2] -= a[3];
        }//如果2 比 3多 
        else{
            sum += a[2];
            a[3] -= a[2];
            a[2] = 0;
            int t = 2 * a[3];//a[3]可以带走多少a[1]
            if(a[1] >= t){
                sum += a[3];
                a[1] -= t;
            }
            else{
                sum += a[3];
                a[1] = 0;
            }
        }
        if(a[2] >= 0){
            int d1,d2;
            if(a[2] % 2 == 0){
                d1 = a[2] / 2;
                if(a[1] >= d1){
                    sum += d1;
                    a[1] -= d1;
                }
                else{
                    sum += d1;
                    a[1] = 0;
                }
    
            }
            else{
                d1 = a[2] / 2;
                d2 = 1;
                sum += 1;//无论怎么样多出来这一个2肯定要一辆车
                if(a[1] >= d1){
                    sum += d1;
                    a[1] -= d1;
                }
                else{
                    sum += d1;
                    a[1] = 0;
                }
                if(a[1] >= 3){
                    a[1] -= 3;
                }
                else{
                    a[1] = 0;
                }
            }
        }
        if(a[1] != 0){
            sum += (a[1]%5 == 0 ? a[1]/5 : a[1]/5 + 1);
        }
        printf("%d
    ",sum);
    }
    /*
    9
    1 1 2 2 2 3 3 3 4
    5
    
    
    4
    1 1 1 1
    1
    
    
    6
    1 2 3 4 5 2
    4
    
    7
    2 2 2 2 1 1 1
    3
    
    6
    2 2 2 2 1 1
    2
    
    7
    1 2 2 2 2 2 3
    3
    
    5
    4 4 4 4 1
    4
    
    
    5
    4 4 4 2 1
    4
    
    6
    4 4 4 2 1 3
    4
    
    
    7
    1 2 2 2 3 4 5
    4
    
    6
    1 1 1 3 4 5
    3
    */
    View Code

    C题 出队

    是个CF原题额,就是换了个题面。http://codeforces.com/contest/950/problem/D

    题目描述

    约瑟夫问题(https://baike.baidu.com/item/约瑟夫问题),n个人,1 2报数 1出队( 就是体育课的时候1 2报数 1出队,2留下),q次询问,每次求第x个人是第几个出队的

    输入描述:

    第一行两个数n,q
    接下来q行,每行一个数x,表示询问

    输出描述:

    一行输出一个询问的答案
    示例1

    输入

    4 3
    2
    3
    4

    输出

    3
    2
    4

    说明

    1 2 3 4围成一圈,第一轮:1 2报数,1出队,2留下,3出队,4留下,第二轮,2出队,4留下

    备注:

    q≤500000
    n和x≤1e18

    代码:
    #include<stdio.h>
    typedef long long ll;
    int main()
    {
        ll n,m,x;
        scanf("%lld%lld",&n,&m);
        while(m--)
        {
            scanf("%lld",&x);
            while(x%2==0)
            x=n+x/2;
            printf("%lld
    ",(x+1)/2);
        }
        return 0;
    }
  • 相关阅读:
    CentOS-6.9搭建NFS服务器
    CentOS6.9-搭建vsftpd三种模式及参数详解
    CentOS-7.3 MySQL数据库入门简介及源码编译安装MySQL服务
    CentOS7.3系统vsftpd服务简介及vsftpd的三种模式的搭建
    安装CentOS7.4 Linux操作系统
    windows server2008R2 64位 配置 mysql-8.0.15-winx64
    怎么删除服务中的mysql服务
    mysql-8.0.15-winx64 解压版安装 图文详解
    命令行下创建MySQL数据库与创建用户以及授权
    windows 2008r2+php5.6.28环境搭建详细过程
  • 原文地址:https://www.cnblogs.com/Esquecer/p/9026710.html
Copyright © 2011-2022 走看看