C. Good Array
链接
[https://codeforces.com/contest/1077/problem/C]
题意
给你一个数组,问你能去掉某个数使得剩下的数中某个数是其他数的和
输出个数以及他们的下标
分析
用一个结构体保存值和下标,按值从小到大排序,并统计总和
然后一个数一个数地去掉,看剩下的数是否满足,对1到i-1和i+1到n二分就出结果了
复杂度nlogn
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+10;
struct str{
	ll va,id;
}a[N];
ll b[N];
bool cmp(str a,str b){
	return a.va<b.va;
}
int main(){
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	//freopen("in.txt","r",stdin);
	int n;
	while(cin>>n){
		ll sum=0;
		for(int i=1;i<=n;i++) {
			cin>>a[i].va; a[i].id=i;
			sum+=a[i].va;
		}
		 sort(a+1,a+n+1,cmp);
		 //for(int i=1;i<=n;i++) cout<<a[i].va<<' '<<a[i].id<<endl;
		 int cnt=0;
		 for(int i=1;i<=n;i++){
		 	ll x=sum-a[i].va;
		 	bool flag=0;
		 	int l=1,r=i-1;
		 	while(l<=r){
		 		int mid=(l+r)>>1;
		 		if(x==2*a[mid].va){
		 			b[cnt++]=a[i].id; flag=1;break;
				 }
				 else if(x>2*a[mid].va){
				 	l=mid+1;
				 }
				 else{
				 	r=mid-1;
				 }
			 }
			 if(!flag){
			 	l=i+1,r=n;
			 while(l<=r){
		 		int mid=(l+r)>>1;
		 		if(x==2*a[mid].va){
		 			b[cnt++]=a[i].id; break;
				 }
				 else if(x>2*a[mid].va){
				 	l=mid+1;
				 }
				 else{
				 	r=mid-1;
				 }
			 }
			 }
		 }
		 cout<<cnt<<endl;
		 for(int i=0;i<cnt;i++)
		 cout<<b[i]<<' ';
		 cout<<endl;
	}
	return 0;
}
												
											C. Good Array的更多相关文章
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
		
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
 - ES5对Array增强的9个API
		
为了更方便的对Array进行操作,ES5规范在Array的原型上新增了9个方法,分别是forEach.filter.map.reduce.reduceRight.some.every.indexOf ...
 - JavaScript Array对象
		
介绍Js的Array 数组对象. 目录 1. 介绍:介绍 Array 数组对象的说明.定义方式以及属性. 2. 实例方法:介绍 Array 对象的实例方法:concat.every.filter.fo ...
 - 了解PHP中的Array数组和foreach
		
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
 - 关于面试题 Array.indexof() 方法的实现及思考
		
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
 - javascript之活灵活现的Array
		
前言 就如同标题一样,这篇文章将会灵活的运行Array对象的一些方法来实现看上去较复杂的应用. 大家都知道Array实例有这四个方法:push.pop.shift.unshift.大家也都知道 pus ...
 - 5.2 Array类型的方法汇总
		
所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...
 - OpenGL ES: Array Texture初体验
		
[TOC] Array Texture这个东西的意思是,一个纹理对象,可以存储不止一张图片信息,就是说是是一个数组,每个元素都是一张图片.这样免了频繁地去切换当前需要bind的纹理,而且可以节省系统资 ...
 - Merge Sorted Array
		
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
 - C++ std::array
		
std::array template < class T, size_t N > class array; Code Example #include <iostream> ...
 
随机推荐
- git命令设置简写(别名)
			
### git命令设置简写(别名) 前言:有时候在执行git命令比较多的情况下,每次敲git命令比较费时,同时有些命令比如cherry-pick这种比较长时更是费时,所以可以通过设置命令行简写来设置. ...
 - 4.8 Sublime Text3 中配置 Python环境 --之下Sublime配置Python环境
			
返回总目录 目录: 1.没有配置之前 2.安装Package Control插件 3.安装其他库: 4.配置其他操作: (一)没有配置之前: 我们试着运行以下,会效果怎么样? 1.首先选择Python ...
 - nginx配置静态资源访问
			
本篇配置使用场景:本地通过浏览器访问linux上某个文件夹下的文件: 1.安装jdk及nginx步骤省略 2.进入正题 (1) 查看nginx安装路径:[root@localhost conf]# w ...
 - 反转链表的golang实现
			
问题:反转一个单链表. 输入: ->->->->->NULL 输出: ->->->->->NULL 首先先认识一下链表这个数据结构: 链表节 ...
 - 【C++学习笔记】变量初始化规则
			
全局变量和静态变量会自动初始化为0,堆和栈中的局部变量不会初始化而拥有不可预测的值. C++保证了所有对象与对象成员都会初始化,但其中基本数据类型的初始化还得依赖于构造函数(或初始化列表). 成员变量 ...
 - 简单规划dp sumsets
			
Farmer John commanded his cows to search for different sets of numbers that sum to a given number. T ...
 - EBS-新增和更新价目表行
			
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/gh320/article/details/36666133  新增和更新价目表行 --目的:在已 ...
 - 数据挖掘十大算法--K-均值聚类算法
			
一.相异度计算 在正式讨论聚类前,我们要先弄清楚一个问题:怎样定量计算两个可比較元素间的相异度.用通俗的话说.相异度就是两个东西区别有多大.比如人类与章鱼的相异度明显大于人类与黑猩猩的相异度,这是能 ...
 - springboot 传值到页面
			
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code <!DOCTYPE html> 2 <html> 3 &l ...
 - js中typeof与instanceof用法小记
			
今天写JS代码,遇到动态生成多个名称相同的input复选按钮 需要判断其是否是数组,用到了if (typeof(document.MapCheckMgr.checkid)!="undefin ...