洛谷P3104 Counting Friends G 题解
题目
[USACO14MAR]Counting Friends G
题解
这道题我们可以将 \((n+1)\) 个边依次去掉,然后分别判断去掉后是否能满足。注意到一点, \(n\) 个奶牛的朋友之和必定为偶数,所以去掉的那个数值的奇偶性必定与 \((n+1)\) 个数值之和的奇偶性相同。
接下来很明显的,尽量将朋友多的和朋友多的匹配,所以先从大到小排序,将第一个奶牛和后面的奶牛依次匹配,如果匹配结束,第一个奶牛还有剩余,则此情况必然不可能成立;否则匹配完之后再按照 \(O(n)\) 复杂度的归并排序给数组重新排好序。依次循环 \(n\) 次(当然如果数组中最大值已经为 \(0\) ,则直接跳出循环)。
简单说一下为什么这样做是正确的,因为奶牛无法完成匹配只可能有一种情况,就是当某一个奶牛与其他所有还可以有朋友的奶牛都匹配结束后,此奶牛依然还有剩余的朋友要匹配。所以奶牛要尽量先与朋友多的奶牛相匹配,如果先与朋友较少的奶牛匹配,则会加大朋友较多的奶牛无法完成匹配的可能性。具体严格证明应该可以用数学归纳法来证,这里就不详述了。
代码
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n, a[502], b[500],c[500],sum=0;
scanf("%d", &n);
for (int i = 1; i <= n + 1; i++)
{
scanf("%d", &a[i]);
sum += a[i];
}
int num = 0, res[501];
for (int i = 1; i <= n + 1; i++)
{
if (sum % 2 != a[i] % 2)
continue;
int index = 0;
for (int j = 1; j <= n + 1; j++)
if (j != i)
b[index++] = a[j];
sort(b, b + n, [](const int x, const int y) {
return x > y;
});
bool flag = 1;
for (int j = 1; j <= n; j++)
{
if (b[0] == 0)
break;
int in = 1;
while (b[0] > 0 && b[in] > 0)
{
b[0]--;
b[in++]--;
}
if (b[0] > 0)
{
flag = 0;
break;
}
int p = 1, q = in, cnt = 0;
while (p < in && q < n)
if (b[p] > b[q])
c[cnt++] = b[p++];
else
c[cnt++] = b[q++];
while (p < in)
c[cnt++] = b[p++];
while (q < n)
c[cnt++] = b[q++];
for (int k = 0; k < n - 1; k++)
b[k] = c[k];
b[n - 1] = 0;
}
if (flag)
res[num++] = i;
}
printf("%d\n", num);
for (int i = 0; i < num; i++)
printf("%d\n", res[i]);
return 0;
}
洛谷P3104 Counting Friends G 题解的更多相关文章
- 【题解】洛谷P3119 Grass Cownoisseur G
题面:洛谷P3119 Grass Cownoisseur G 本人最近在熟悉Tarjan的题,刷了几道蓝题后,我飘了 趾高气扬地点开这道紫题,我一瞅: 哎呦!这不是分层图吗? 突然就更飘了~~~ 用时 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- BZOJ1563/洛谷P1912 诗人小G 【四边形不等式优化dp】
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
- 洛谷 p1516 青蛙的约会 题解
dalao们真是太强了,吊打我无名蒟蒻 我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先 ...
- 洛谷10月月赛II题解
[咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...
- 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)
题目 :Bovine Genomics G奶牛基因组 传送门: 洛谷P3667 题目描述 Farmer John owns NN cows with spots and NN cows without ...
随机推荐
- videojs踩过的坑
1.videojs-contrib-hls 在webpack中不能用,解决方法:window.videojs = videojs:出处 https://github.com/videojs/video ...
- python2 与 python3 依赖包冲突问题
原文链接 https://www.2cto.com/database/201805/749294.html 执行pip的时候取的是/usr/bin这里的pip,查看这里是否存在pip3,没有的话需 ...
- 《SEO实战密码》
一.搜索引擎 1.蜘蛛访问网站时都会先访问网站根目录下的 robots.txt 文件. 2.蜘蛛喜欢访问经常更新的页面. 3.离首页点击距离越近,页面权重越高. 4.使用"" + ...
- 零基础涂鸦智能面板SDK开发记录(一)
前言 本人基础背景:在学校学了点JS,在blbl上看过几节node.js视频,现在是一名Android开发工程师,因公司需要学习涂鸦面板SDK开发.说真的除了官方的一些文档外,我真的找不到其他的资料. ...
- 总结开发中基于DevExpress的Winform界面效果
DevExpress是一家全球知名的控件开发公司, DevExpress 也特指此公司出品的控件集合或某系列控件或其中某控件.我们应用最为广泛的是基于Winform的DevExpress控件组,本篇随 ...
- Spring源码解析之BeanFactoryPostProcessor(三)
在上一章中笔者介绍了refresh()的<1>处是如何获取beanFactory对象,下面我们要来学习refresh()方法的<2>处是如何调用invokeBeanFactor ...
- [源码解析]机器学习参数服务器ps-lite(4) ----- 应用节点实现
[源码解析]机器学习参数服务器ps-lite(4) ----- 应用节点实现 目录 [源码解析]机器学习参数服务器ps-lite(4) ----- 应用节点实现 0x00 摘要 0x01 基础类 1. ...
- Spring WebFlux 基础教程:参数校验
请求参数校验,在实际的应用中很常见,网上的文章大部分提供的使用注解的方式做参数校验.本文主要介绍 Spring Webflux Function Endpoint 使用 Spring Validati ...
- alpakka-kafka(6)-kafka应用案例,用户接口
了解了kafka原理之后,对kafka的的应用场景有了一些想法.在下面的一系列讨论中把最近一个项目中关于kafka的应用介绍一下. 先介绍一下使用kafka的起因:任何进销存系统,销售开单部分都应该算 ...
- Alibaba-技术专区-Dubbo3总体技术体系介绍及技术指南(序章)
Dubbo的背景介绍 Apache Dubbo 是一款微服务开发框架(是一款高性能.轻量级的开源 Java 服务框架),它提供了 RPC通信 与 微服务治理 两大关键能力.这意味着,使用 Dubbo ...