hdu 5353 Average(贪心+构造)

HDU - 5353 多校 A题 Average 这题一开始就想麻烦了,实际上只需要按照下面的规则来考虑即可: 若糖果不能被平分,则直接输出“NO” 求出平均数,让每个人所拥有的糖果数减去这个平均数。 接下来从第一个人开始,枚举其对第二个人进行的操作,即给第二个人1颗糖,或从第二个人处取一颗糖,或者什么也不做。 这样一来第二个人只能对第三个人操作(因为前面的人已经进行操作了,所以不能再操作前面的人),而且操作是唯一的,操作完成之后必须保证第二个人糖 阅读详情

题意:

有n个人组成一个环,相邻的两个人能互相给糖果,对于相邻的两个人而言,只能进行一次操作,要么x给y一个糖果,要么y给x一个糖果,要么不动,问能否经过一定的操作使得每个人的糖果数一样,并输出步骤。

解析:

很显然,如果当前的和sum不能被n除尽,那么肯定不能均分所以这种情况是”NO”。
然后可以计算出每个人的糖果,如果某人糖果和平均值的差距的绝对值>=2,那么也不可能平均分配。因为每条边只能走一次,而且每次只能给一个糖果,如果不管怎么索要,怎么给予,至多给2个,所以差距的绝对值>=2这种情况也是非法的。
然后就是判断环的情况,找到第一个> 0的人让他分发糖果,这时可以朝着前后两个方向走,两个方向都判断一次,如果第一个是>=2的,那么就分配给后面一个人一个糖果。
枚举前一个人对后一个人的三种操作,
然后这样第i个人必然对第i+1个人按照
1.少一个糖果就从下一个人手中拿一个
2.多一个就给一个给下一个人
然后判断最后的差距是否都是=0的,如果不是这种情况是false的。

my code

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#define pb push_back
typedef long long ll;
using namespace std;
const int N = 1e5 + 10;
struct Node {
    int a, b;
    Node(int a, int b) : a(a), b(b) {}
};

vector<Node> ans;
int n;
ll sum;
int A[N], a[N];

bool run(int dir, int st) {
    ans.clear();
    memcpy(a, A, sizeof(A));

    int flag = 0;
    int u, v;
    if(a[st] == 2) {
        u = st; v = (st - dir + n) % n;
        a[u]--, a[v]++;
        ans.pb(Node(u, v));
        flag = 1;
    }

    for(int i = 0; i < n - flag; i++) {
        u = (st + i*dir + n) % n;
        v = (st + (i+1)*dir + n) % n;

        if(a[u] > 0) {
            a[u]--, a[v]++;
            ans.pb(Node(u, v));
        }else if(a[u] < 0) {
            a[u]++, a[v]--;
            ans.pb(Node(v, u));
        }
        if(abs(a[v]) >= 2) return false;
    }

    for(int i = 0; i < n; i++) {
        if(a[i]) return false;
    }

    return true;
}

bool solve() {
    sum /= n;
    for(int i = 0; i < n; i++) A[i] -= sum;
    for(int i = 0; i < n; i++)
        if(abs(A[i]) > 2)
            return false;
    if(n == 2 && abs(A[0]) >= 2) {
        return false;
    }
    for(int i = 0; i < n; i++) {
        if(A[i] > 0) {
            if(run(-1, i)) return true;
            if(run(1, i)) return true;
            return false;
        }
    }
    return true;
}

int main() {
    int T;
    scanf("%d", &T);
    while(T--) {
        ans.clear();
        sum = 0;
        scanf("%d", &n);
        for(int i = 0; i < n; i++) {
            scanf("%d", &A[i]);
            sum += A[i];
        }
        if(sum % n != 0) {
            puts("NO");
            continue;
        }
        if(!solve()) {
            puts("NO");
        }else {
            puts("YES");
            printf("%d\n", (int)ans.size());
            for(int i = 0; i < ans.size(); i++)
                printf("%d %d\n", ans[i].a+1, ans[i].b+1);
        }
    }
    return 0;
}
保姆级教程:用Perfetto Timeline揪出Android App卡顿的元凶(附SQL查询实战) 本文提供了一份详细的Perfetto Timeline教程,帮助开发者诊断Android应用卡顿问题。通过颜色标记、Jank类型分析和SQL查询实战,精准定位性能瓶颈,优化应用流畅度。特别适合处理Android Jank等性能问题,提升用户体验。 阅读详情

相关推荐

激光雷达与相机融合(四)----基于激光雷达与相机的碰撞检测

在这一部分,基于前面的各个部分内容,将利用激光雷达和相机实现目标的检测分类及单目标跟踪,并对车辆前方的车辆目标计算相应的碰撞时间TTC。计算方法分别利用相机和雷达实现。 1.系统的总体架构: 2.TTC计算 简单介绍一下通过激光雷达和相机计算碰撞时间的原理: 利用激光雷达点计算碰撞时间:首先根据检测框聚类出前车目标的点,并过滤掉这些点中的离群点,然后找出这些点中相对于本车最近的点,基于前后两帧以及数据采集频率就可以求解出相对速度,然后用当前帧的距离除以速度得出当前的TTC。但该方法对最近点的选取稳定性不是

张飞飞的博客 3986

HDU 5353 Average(贪心)

Description 有n个人组成一个环,相邻的两个人能互相给糖果,对于相邻的两个人而言,只能进行一次操作,要么x给y一个糖果,要么y给x一个糖果,要么不动,问能否经过一定的操作使得每个人的糖果数一样,并输出步骤 Input 第一行为用例组数T,每组用例第一行为人数n,第二行为n个整数表示这n个人手中的糖果数 Output 对于每组用例,如果存在一种方案可以使得所有人手中的糖果数相同则

ZSQ 792

MacTeX+TeXstudio:Macbook配置本地Latex看这一篇就够了

这个博客记录本人在MacBook上配置本地Latex的流程,其中选择的编译环境为MacTeX,编辑器为TeXstudio。采用的原因主要两点:一个是本人配置的原因主要是用来撰写毕业论文,希望能够尽可能简化设置流程,专注内容表达;第二是由于本人还有一个windows系统的笔记本,想要编辑器在专注写作体验的同时在两个系统上能够都适配,从而减少切换效率,故选择此组合。这篇文章介绍并详细记录了本人的安装流程,有相同需求的同志也可借鉴。

Katherine-XY的博客 6984

HDU - 5353 Average

HDU - 5353 为什么我在自己演自己啊, 加了个特判结果下一次正确的时候没有把图清空, 找了半天bug。 先枚举一条边的状态就能推出全部, 输出过程用拓扑排序。 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> ...

weixin_30266885的博客 181

OceanBase数据库LSM-Tree存储引擎深度解析:合并写入与压缩优化策略

OceanBase数据库采用创新的LSM-Tree架构设计,通过"基线-增量"分离存储实现高性能。内存中的MemTable处理写入,磁盘上的SSTable存储有序数据,利用多级缓存加速读取。写入时先写日志再更新内存,合并操作将增量数据整合为基线数据以优化查询性能。相比传统B+树引擎,OceanBase在写入吞吐、压缩效率和存储成本方面优势显著,特别适合写入密集型场景。合并操作作为核心机制,通过多种触发方式和执行策略平衡性能与资源消耗。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1342

RDKit | 基于Murcko骨架聚类化合物库

化合物多样性评估 一种方法是使用合适的指纹技术将化合物矢量化并评估他们之间的距离。这种方法经常被使用,但是对于人类很难直观地理解化合物之间的距离。 基于Murcko骨架,分子大致聚集在化合物骨架中,并且每个簇中的顶部化合物都作为候选化合物。此方法非常符合人类的直觉,因此可以预期人将通过查看候选化合物列表来自动缩小化合物的范围。 Murcko骨架 Mur...

DrugOne 3766

hdu 5353 Average(暴力)

题目链接:hdu 5353 Average 顺时针,枚举第一条边,后面的根据节点的值确定边。注意为0的时候是不能移动的。 #include #include #include #include using namespace std; typedef long long ll; typedef pair pii; const int maxn = 1e5 + 5;

不慌不忙、不急不躁 831

【27】软考软件设计师——数据流图(DFD)补全题满分精讲|下午15分大题深度拆解

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第27篇,深度精讲**下午案例题第1道必考大题:数据流图(DFD)补全**,该题单题分值高达**12 ~ 15分**,是整张试卷最稳的保底得分大题。我结合多年备考复盘与真题阅卷规则,超详细拆解DFD四大核心元素标准定义、机考绘图规范、三层分层逻辑、**父图子图平衡刚性扣分规则**,升级强化版「DFD满分补全三步法」;复刻历年高频真题完整流程,拆解缺失数据流定位、实体/存储辨析、平衡改错、文字需求对照全流程,配套**阅卷满分答题话术、机考避坑细则

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 590

HDU 5353 Average 贪心

就是贪心啊,不知道为啥总是不过,总是WA 方法不对吗? 将数组扩展一倍,从左到右扫描,大于平均数就给右边的,小于就从右边拿,等于就不变,记录下操作类型。 大于2直接NO,不知道哪错了,自己出了一些数据也都过了 路过的大神多瞄一眼   多校每周只有两场,还是尽量把题全过了吧 1 #pragma comment(linker, "/STACK:102400000,10240000

Macan - 生活点滴 327

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1314

SAP 联产品测试

最近领导一直要求研究一下SAP联产品的使用场景,之前只是自己摸索过一次,这个重新对联产品进行一个测试。 1、首先准备好物料主数据 注意主数据中需要勾选联产品标识。 设置好物料的分摊的百分比。 2、检查BOM 在BOM中也需要维护联产品的标识 只有当组件数量未负数时,才能勾选联产品的标识。如果组件数量正值,勾选联产品的标识时会报错。 3、我们创建生产订单 可以看到按正常的生产订单下达时,系统就报错了,问题点在于离散制造的生产订单基本是结算到物料的。但是联产品是按订单结算的, 所以需要对订单类型中的结算参

我小时候很黑的博客 2110

2015多校第6场 HDU 5353 Average 贪心,细节处理

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5353 题意:有n个人围城一个环,每一个人手里都有一些糖果,第i个人有ai块。现在有三种操作:第i个人给第i+1个人一块。第i+1个人给第i个人一块。什么都不做。第i个人和第i+1个人之间,可以选择一种操作并执行,问最终能不能让所有人手里的糖相等。 解法:贪心。 当n = 1 时,永远是...

aishangg437965的博客 141

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

修复Oracle MySQL Server 安全漏洞(CVE-2023-0464)

路~可以走过 3683

HDU 5353 Average

思路: 找到一个非零的点,然后从左贪心地走一遍,然后从右贪心走一遍 贪心就是如果现在的数是大于零的数,则给下一位; 如果现在的数是小于零的数,则下一位给我。比赛的时候就是想太多了….// whn6325689 // Mr.Phoebe // http://blog.youkuaiyun.com/u013007900 #include <algorith

Mr.Phoebe的专栏 1114

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

hdu5353Average

枚举第一个人对第二个人的三种操作, 然后这样第i个人必然对第i+1个人按照 1.少一个糖果就从下一个人手中拿一个 2.多一个就给一个给下一个人 3.刚好就是平均数跳过 4.无解 这四种操作贪心即可。 #include #include #include #include #include #include #include #include #include #include #in

Last Order 1206

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[枚举+贪心] hdu5353多校联合 第六场 Average

http://acm.hdu.edu.cn/showproblem.php?pid=5353枚举第一个人对第二个人的三种操作,然后这样第i个人必然对第i+1个人按照 1.少一个糖果就从下一个人手中拿一个 2.多一个就给一个给下一个人 3.刚好就是平均数跳过 4.无解 这四种操作贪心即可。#include<map> #include<string> #include<cstring> #in

童凌的技术博客 652

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

HDU5353:Average(贪心)

Problem Description There are n soda sitting around a round table. soda are numbered from 1 to n and i-th soda is adjacent to (i+1)-th soda, 1-st soda is adjacent to n-th soda. Each so

ACM!荣耀之路! 2763

HDU 5353 Average (2015年多校比赛第6场)

1.题目描述:点击打开链接 2.解题思路:本题属于一个简单的模拟题,然而在比赛时候考虑不周WA了。本题要求相邻的两个人可以交换一个糖果,且仅能交换一次。首先计算所有糖果的个数sum,如果sum不能整除n,那么肯定无解。否则,计算出平均值mean,然后让a[i]-=mean得到差值。此时可以利用贪心法来解决本题。令第i个人只和第i+1个人之间进行糖果交换: 如果差值为-1,则第i+1个人给第i个

Skyline 956

HDU 5353 Average(贪心)

Average 题解:首先如果总糖果数不能整除nnn就输出NONONO。其次考虑两个方向变为暂时只朝一个方向,每个人与平均值的差,如果比平均值少一就从后一个人那里拿一个,如果比平均值多一个就给后一个人一个,如果等于平均值就什么也不做。因此枚举左右方向两次,最后每次枚举模拟完判断一下是否最后平分了就可以了。 #include&lt;bits/stdc++.h&gt; typedef long lon...

Eternally831143的博客 333

HDU 5353(Average-贪心分果)

Average Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 2153    Accepted Submission(s): 532 Special Judge Problem Description There ar

nike0good |Oier&ACMer | 熟能生巧 956

HDU 5353—— Average——————【贪心+枚举】

Average Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2069Accepted Submission(s): 517Special Judge Problem Description There arenso...

weixin_30617797的博客 117

前缀和,枚举+递推(Average,HDU 5353)

有n个节点,1 瞬间就想起了 Money Transfers 这类问题一般都可以转化为环的切割,如何求出切割呢? 可以求一个前缀和,如果sum[j]==sum[i](i 我们会找到很多个sum的值,每一种值对应一个切割方法,值所对应的的多个节点就都是切割点。 在本题我们就通过前缀和找到所有切割,然后对于每一段,可以直接贪心模拟看看是否ok。 看了下官方题解

xl2015190026的博客 402

hdu5353(2015多校6)--Average(贪心)

题目链接:点击打开链接 题目大意:有n个人围城一个环,每一个人手里都有一些糖果,第i个人有ai块。 现在有三种操作: 第i个人给第i+1个人一块。如果i有 第i+1个人给第i个人一块。如果i+1有 什么都不做。 第i个人和第i+1个人之间,可以选择一种操作并执行,问最终能不能让所有人手里的糖相等。 当n = 1 时,永远是YES 当n = 2 时,注意1和2之间只能有一种操作,不存

随风的专栏 1367

hdu5353

Average Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 2992    Accepted Submission(s): 720 Special Judge Problem Description Ther

猿的进化 599
上一篇: hdu 5358 First One(想法题)
下一篇: CodeForces - 566A Matching Names(字典树)
HelloWorld10086
博客等级 码龄12年 88粉丝 614原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值