[EOJ Monthly2019.11][T4]安全带
以下是题干
D. 安全带
单点时限: 1.0 sec 内存限制: 256 MB
(前面题干是一堆废话,我把它删了)
简单来说:初始给出一个 n 个点顺次连接而成的环,点有点权,边权是两个端点的点权乘积。现在给出一些特殊点,这些特殊点是向其他所有点都有连边,如果连边时发现两点之间已经有边,不会再次连接(即图中不会有重边)。求图中边权和。
输入格式
输入第一行包含一个整数 n(3≤n≤105) ,表示按钮数量。
第二行包含 n 个用空格隔开的整数 a1,a2,⋯,an(1≤ai≤104) ,分别表示按钮的权值。
第三行包含 n 个用空格隔开的整数 b1,b2,⋯,bn(bi∈{0,1}) ,分别表示按钮的开关状态。其中 bi=1 表示第 i 个按钮按下了,bi=0 表示第 i 个按钮没有被按下。
输出格式
输出一个整数,表示安全带的松紧程度。
样例输入1
3
2 3 3
1 0 1
样例输出1
21
样例输入2
3
2 3 3
0 0 0
样例输出2
21
提示
第一个样例解释:
初始的时候图中有三条边 (1,2),(2,3),(3,1) ,边权分别是 6,9,6 。
点 1 和点 3 向其他所有点有边,而这些边均已存在在图中,故不重复连接,所以边权和为 6+9+6=21 。
Solution
正难则反。如果按顺序,先把编号相邻的点连接起来,再处理按钮的连接,肯定是不好处理的。观察发现这两个步骤其实不是冲突的。我们考虑先把按了的按钮处理出来,然后看看哪些相邻点还没有,再加上来就行了。这道题比较有技巧性的地方就是要维护一个特殊的变量。刚开始按第一个按钮的时候,所有点都不是连接的,那么我们可以用所有其他点的权值和✖️该点权值求出我们的边权和。当按过多个按钮后,因为这些按钮和所有的其他点都连接了,按过的按钮的权值日后不会再有任何贡献,因此我们把的权值他们用一个变量累计起来,在之后算没有连接过的点权和的时候,没有连接过的点权和=点权和-该点的权-按过的按钮的权的累计。这样就可以用O(N)的复杂度完成这道题
/*
* Created by AronQi
* For personal training
* 2019/09/28
*/
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define RG register
using namespace std;
template<class Type> inline void R(Type &x)
{
RG int c=getchar();for(;c<48||c>57;c=getchar());
for(x=0;c>47&&c<58;x=x*(Type)10+c-48,c=getchar());
}
int N,a[100001];
bool f[100001];
long long ans=0,sum[100001],tot=0;
int main()
{
R(N);
for(RG int i=1;i<=N;++i)
{
R(a[i]);
tot+=a[i];
}
for(RG int i=1;i<=N;++i)
sum[i]+=tot-a[i];
tot=0;
for(RG int i=1;i<=N;++i)
{
R(f[i]);
if(f[i]==1)
{
ans+=(long long)a[i]*(sum[i]-tot);
tot+=a[i];
}
}
for(RG int i=1;i<=N;++i)
{
if(f[i]==1)continue;
if(f[(i%N)+1]==0)
ans+=a[i]*a[(i%N)+1];
}
printf("%lld\n",ans);
return 0;
}
[EOJ Monthly2019.11][T4]安全带的更多相关文章
- [EOJ Monthly2019.11][T1]纸条
https://acm.ecnu.edu.cn/ 华东师范大学在线评测网站 今天这个题目来自华东师范大学的校赛,比icpc稍难一些,在2019年11月29日周五19:30开始,持续2.5个小时 以下是 ...
- [调试笔记] 10.8模拟赛11 T4 甜圈
这题正解线段树维护哈希,同机房神犇已经讲的很明白了.这里只说sbwzx在调试的时候犯的sb错误. 1.关于pushdown和update 众所周知,sbwzx一写带lazy的线段树,就必在pushdo ...
- Python全栈开发之11、进程和线程
一.线程 多任务可以由多进程完成,也可以由一个进程内的多线程完成,一个进程内的所有线程,共享同一块内存python中创建线程比较简单,导入threading模块,下面来看一下代码中如何创建多线程. d ...
- 每天进步一点达——MySQL——myisampack
一. 简单介绍 myisampack是一个压缩使用MyISAM引擎表的工具,通常会压缩40%~70%,当须要訪问数据.server会将所须要的信息读入到内存中.所以当訪问详细记录时,性能 ...
- 推荐几个对Asp.Net开发者比较实用的工具
推荐几个对Asp.Net开发者比较实用的工具.大家有相关工具也可以在评论区留言,一起努力学习. 工具 1.Visual stdio Productivity Power tool:visual std ...
- java 并发(五)---AbstractQueuedSynchronizer(3)
文章代码分析和部分图片来自参考文章 问题 : CountDownLatch 和 CyclicBarrier 的区别 认识 CountDownLatch 分析这个类,首先了解一下它所可以 ...
- Python数据分析之Pandas操作大全
从头到尾都是手码的,文中的所有示例也都是在Pycharm中运行过的,自己整理笔记的最大好处在于可以按照自己的思路来构建矿建,等到将来在需要的时候能够以最快的速度看懂并应用=_= 注:为方便表述,本章设 ...
- python学习之常用数据结构
前言:数据结构不管在哪门编程语言之中都是非常重要的,因为学校的课程学习到了python,所以今天来聊聊关于python的数据结构使用. 一.列表 list 1.列表基本介绍 列表中的每个元素都可变的, ...
- 汽车最强大脑ECU和单片机是什么关系
先上图一张,据说这是某个F1赛车的动力总成ECU. 定睛一看,这不就是两个英飞凌的单片机的合体嘛. ECU的定义 ECU原来指的是engine control unit,即发动机控制单元,特指电喷发动 ...
随机推荐
- 解决Sublime Text3中文符号以及中文显示乱码问题
今天安装了sublime Text3,发现中文符号显示是乱码,刚开始以为是编码问题,经过各种尝试,终于找到了解决办法.解决方法如下: 一.安装包管理器 使用Ctrl+~快捷键或者通过View-> ...
- 使用Keras基于RCNN类模型的卫星/遥感地图图像语义分割
遥感数据集 1. UC Merced Land-Use Data Set 图像像素大小为256*256,总包含21类场景图像,每一类有100张,共2100张. http://weegee.vision ...
- 使用Jsoup爬取网站图片
package com.test.pic.crawler; import java.io.File; import java.io.FileOutputStream; import java.io.I ...
- CSS---解决文本溢出,换行
当我们设置我的的div,或者其它文本框固定宽度之后,文本内容过多就会出文本溢出(显示在区域外面,不换行的情况). 这时我们可以使用Css中的几个属于来解.有以下的三个属于可以解决问题: 1,word- ...
- 关于redis的几件小事(二)redis线程模型
1.memcached和redis有什么区别? (1)Redis支持服务器端的数据操作 redis和memcached相比,redis拥有更多的 数据结构并且支持更丰富的数据操作 ,通常在memcac ...
- GitFlow入门
1-概述 2-GitFLow分支介绍 2.1-master 分支 2.2-develop 分支 2.3-feature 分支 2.4-release 分支 2.5-hotfix 分支 3-GitFlo ...
- 帝国cms 描述和关键词动态获取
之前列表页首页和内容页调用的关键词和描述的字段不一样,所以说需要写好几套模板. 下边这个判断就不用像之前做几套模板了,通过判断获取不一样的字段. $GLOBALS[navinfor] 这个判断的是此页 ...
- vue中监听数据变化 watch
今天做项目的时候,子组件中数据(原本固定的数据)需要父组件动态传入,如果一开始初始化用到的数据.但当时还没有获取到,初始化结束就不会更新数据了.只有监听这两个属性,再重新执行初始化. 1.watch是 ...
- 多线程编程-- part5.1 互斥锁ReentrantLock
ReentrantLock简介 Reentrantlock是一个可重入的互斥锁,又被称为独占锁. Reentrantlock:分为公平锁和非公平锁,它们的区别体现在获取锁的机制上是否公平.“锁”是为了 ...
- 使用pt-table-checksum检查主从一致性
使用 percona 工具检查主从不一致 可以使用 pt-table-checksum 工具检查主从数据的一致性,检查完之后默认会生成一个 percona 库以及一个 checksums 表,记录了 ...