一辆车,有n个车厢,每个车厢刚好有4个人

车上有n个学生,第i个车厢有a[i]个学生

如果一个车厢里面的学生数 <= 2,这个车厢里的学生会不开心

如果一个车厢里面的学生数 > 2,这个车厢里面的学生会开心

现在学生想和其他人换座位,使得每一位学生都开心

求最小的交换次数

思路:

num[i]表示有num[i]个车厢里面刚好有i个学生

现在,主要的就是处理num[1] 和 num[2]

分情况进行处理就可以了,很简单

代码:

  //File Name: cf356C.cpp
//Author: long
//Mail: 736726758@qq.com
//Created Time: 2016年07月11日 星期一 20时37分01秒 #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream> #define LL long long using namespace std; const int MAXN = + ; int num[];
int a[MAXN]; int solve(int n){
//for(int i=1;i<=4;i++)
// printf("i = %d num[%d] = %d\n",i,i,num[i]);
int ans = ;
if(num[] >= num[]){
num[] += num[];
num[] -= num[];
ans += num[];
num[] = ;
num[] += num[] / ;
ans += num[] / * ;
num[] %= ;
if(num[] <= num[])
ans += num[];
else if(num[] && num[] == )
ans += ;
else if(num[] >= && num[] == )
ans += ;
else
ans = -;
}
else{
num[] += num[];
num[] -= num[];
ans += num[];
num[] = ;
num[] += num[] / * ;
ans += num[] / * ;
num[] %= ;
if(num[] == ){
if(num[])
ans++;
else if(num[] >= )
ans += ;
else
ans = -;
}
else if(num[] == )
ans += ;
}
return ans;
} int main(){
int n;
while(~scanf("%d",&n)){
memset(num,,sizeof num);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
num[a[i]]++;
}
printf("%d\n",solve(n));
}
return ;
}

codeforces 356 C. Compartments 构造 贪心的更多相关文章

  1. Codeforces.911F.Tree Destruction(构造 贪心)

    题目链接 \(Description\) 一棵n个点的树,每次可以选择树上两个叶子节点并删去一个,得到的价值为两点间的距离 删n-1次,问如何能使最后得到的价值最大,并输出方案 \(Solution\ ...

  2. CodeForces - 1255D (模拟+构造+贪心)

    题意 https://vjudge.net/problem/CodeForces-1255D rxc的农场里'R'表示有米,现在有K只鸡,给这k只鸡选一些格子,每个鸡可以有多个格子(每个鸡至少吃一个米 ...

  3. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  4. [Codeforces 1214A]Optimal Currency Exchange(贪心)

    [Codeforces 1214A]Optimal Currency Exchange(贪心) 题面 题面较长,略 分析 这个A题稍微有点思维难度,比赛的时候被孙了一下 贪心的思路是,我们换面值越小的 ...

  5. Codeforces 1082D Maximum Diameter Graph (贪心构造)

    <题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽 ...

  6. Codeforces Round #301 (Div. 2) B. School Marks 构造/贪心

    B. School Marks Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/probl ...

  7. Codeforces 985 最短水桶分配 沙堆构造 贪心单调对列

    A B /* Huyyt */ #include <bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define mkp(a, ...

  8. Codeforces Round #650 (Div. 3) D. Task On The Board (构造,贪心)

    题意:有一个字符串和一组数,可以对字符串删去任意字符后为数组的长度,且可以随意排序,要求修改后的字符串的每个位置上的字符满足:其余大于它的字符的位置减去当前位置绝对值之和等于对应序列位置上的数. 题解 ...

  9. Tea Party CodeForces - 808C (构造+贪心)

    Polycarp invited all his friends to the tea party to celebrate the holiday. He has ncups, one for ea ...

随机推荐

  1. Struts2 报 Result 错误

    写的时候犯了个低级错误  struts.xml中 配置result 的时候 没有配置type

  2. Sprint.Net 笔记

    有生以来写的第一份博客, 还真不会写, 请高手们指导指导. 1.引入 Spring.Core.dll 和 Common.Logging.dll 两个文 2. 在UI层的Web.conf 的 <C ...

  3. 移动端rem处理字体的js代码

    (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...

  4. input标签实现让光标不出现!

    实现不让光标出现的效果,很好用,例子如下: <input class="red" readonly unselectable="on" value=&qu ...

  5. GFT_News Auto

    using AnfleCrawler.Common; using Newtonsoft.Json.Linq; using System; using System.Collections.Generi ...

  6. 《C++primer》v5 第1章 开始 读书笔记 习题答案

    从今天开始在博客里写C++primer的文字.主要以后面的习题作业为主,会有必要的知识点补充. 本人也是菜鸟,可能有不对之处,还望指出. 前期内容可能会比较水. 1.1略 1.2略 1.3 cin和c ...

  7. 一些sql语句的常用总结(重要)

    select primary_flag from tc_contact where primary_flag !=0 select dept_id,dept_name,tree_level,tree_ ...

  8. webdriver如何定位多层iframe中元素

    在 web 应用中经常会出现 iframe 嵌套的应用,假设页面上有 A.B 两个 iframe,其中 B 在 A 内,那么定位 B 中的内容则需要先到 A,然后再到 B. iframe 中实际上是嵌 ...

  9. svn Q&A

    Q1:在svn commit的时候,会出现某某文件 is missing.这是因为此次提交时:远程repository中并没有该文件,而且本地repository也没有该文件. 具体原因: 1.可能因 ...

  10. maven遇到的问题

    1.Missing artifact net.sf.json-lib:json-lib:jar:2.4:compile pom.xml原内容: <dependency> <group ...