noj [1475] Bachelor (找1的个数)】的更多相关文章

http://ac.nbutoj.com/Problem/view.xhtml?id=1475 [1475] Bachelor 时间限制: 1000 ms 内存限制: 65535 K 问题描述 炎热的暑期集训就要结束了,在这短短的20天,大家都很努力,因为很多都是光棍嘛.balabala 所以 Marknoon 先森一直耿耿于怀,毕竟他也是单身嘛. 有一天,Marknoon 先森看着一串数字,发现了那个跟他同命相连的数字1,所以他就开始无聊起来,想知道从数字1到数字N,一共出现了几个1. 例如N…
[1475] Bachelor http://acm.nbut.cn:8081/Problem/view.xhtml?id=1475 时间限制: 1000 ms 内存限制: 65535 K 问题描述 炎热的暑期集训就要结束了,在这短短的20天,大家都很努力,因为很多都是光棍嘛.balabala所以 Marknoon 先森一直耿耿于怀,毕竟他也是单身嘛.有一天,Marknoon 先森看着一串数字,发现了那个跟他同命相连的数字1,所以他就开始无聊起来,想知道从数字1到数字N,一共出现了几个1.例如N…
找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace std;int findMore(int a[],int n){ int A=a[0],B=0; for(int i=0;i<n;i++) {  if(A==a[i])   B++;  else   B--;  if(B==0)  {   A=a[i];   B=1;  }  } return A;} 电…
Given an array of integers sorted in ascending order, find the starting and ending position of a given target value. Your algorithm's runtime complexity must be in the order of O(log n). If the target is not found in the array, return [-1, -1]. For e…
如果是找只出现了奇数次的一个数, 那么我们从头异或一遍就可以. 那么如何找出现了奇数次的两个数呢? 首先我们还是从头异或一遍, 然后结果肯定不为0, 对于异或出来的结果, 如果这个数的某一位是1, 说明出现了奇数次的那两个数在这一位上一个为0, 一个为1. 所以我们可以根据这个条件将原数组分为两个数组分别异或. #include<bits/stdc++.h> using namespace std; #define pb(x) push_back(x) #define ll long long…
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain duplicate triplets. For example, given array S = [-1,…
这是一个经典的算法题,下面给出的算法都在给定的数组基础上进行,好处时不用分配新的空间,坏处是会破坏原有的数组,可以自己分配新的空间以避免对原有数组的破坏. 思路一 先直接排序,再取排序后数据的前k个数. 排序算法用最快的堆排序,复杂度也会达到O(N*logN). void filterDown(int* disorder, int pos, int size){ ; ){ *temppos+<size){ *temppos+]>disorder[*temppos+]){ *temppos+])…
亲和数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. 比如220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284. 284的所有真约数和为: 1+2+4+71+142=220. 你的任务就编写一个程序,判断给定的两个数是否是亲和数. 输入 输入数据第一行包含一个数M,接下有M行,每行一个实例,…
「Meissel-Lehmer 算法」是一种能在亚线性时间复杂度内求出 \(1\sim n\) 内质数个数的一种算法. 在看素数相关论文时发现了这个算法,论文链接:Here. 算法的细节来自 OI wiki,转载仅作为学习使用. 目前先 mark 一下这个算法,等有空的时候再来研究一下,算法的时间复杂度为 \(\mathcal{O}(n^{\frac23})\) ,所以 \(n\) 的范围可以扩大至 \(10^{12}\) 的级别: 代码实现 #include <bits/stdc++.h>…
最近看hashmap源码时,发现给定初始capacity计算threshold的过程很巧妙. 1 static final int tableSizeFor(int cap) { 2 int n = cap - 1; 3 n |= n >>> 1; 4 n |= n >>> 2; 5 n |= n >>> 4; 6 n |= n >>> 8; 7 n |= n >>> 16; 8 return (n < 0)…
9.2 找出12和8的最大公约数和最小公倍数.     public class Test {     public static void main(String[] args) {         getcommon_mu(12,8);         getcommon_div(12,8);     } //计算 最大公约数  和  最小公倍数     static void getcommon_mu(int n, int m) {         int i, b, d;        …
Find all possible combinations of k positive numbers that add up to a number n,each combination should be a unique set of numbers. /** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *columnSizes array. * No…
int getSum(int* arr, int len) { int sum = 0; for (int i = 0; i < len; ++i) { sum += arr[i]; } return sum; } void difPrint(int* arr, int len, vector<int> vct) { cout << vct.size() << " =m 数组: "; for (int i = 0; i < vct.siz…
有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M. 需要选出若干个x,使这几个x的和与 M 最接近. 请描述实现算法,并指出算法复杂度. #define M 8 #define N 20 int minDif = INT_MAX; vector<int> minvct; void findCloestNums(int* arr, int step, int len, vector<int> vct, int goalSum, int curSu…
题目很清晰,直接上python代码 import pandas as pd import copy class BenchMark: def __init__(self): self.MIN = 10000 self.data = 0 def Reset(self): self.MIN = 10000 self.data = 0 dictCounts = {} dictTop10_D2C = {} BENCH_MARK = BenchMark() LAST_BENCH_MARK = BenchM…
Sample test(s) input 50 1 0 1 1 output 4 input 71 0 1 0 0 1 0 output 4 input 10 output 0 # include <iostream> # include <cstdio> # include <cstring> # include <algorithm> # include <string> # include <cmath> # include &…
#include<iostream> using namespace std; //#define maxn 2000010 #include<stdio.h> //int a[maxn]; //int val[maxn]; int main(){ int t; scanf("%d",&t); int i; // memset(val,0,sizeof(val)); int k=2*t; int v,temp,count; scanf("%d&…
转载请注明转自blog.csdn.net/souldak , 微博@evagle 首先,考虑没有去掉那些数,如果n是奇数,n+1个最低位肯定是0101...01,count(0)=count(1),如果n是偶数,0101...010那么0要比1多一个,count(0)=count(1)+1 例子n=4 0=00 1=01 2=10 3=11 4=100,最低位有3个02个1, 所以规律是,如果没有去掉一个数时,count(0)=count(1)+[0,1], 如果去掉的数最低位是0,即count…
问题: 长度为n的数组,有一个数重复出现了n/2+1次,找出这个数:   解决: 比较直接的思路是遍历每个元素,让其与剩下其他元素比较,相等一次计数器sum++,直到sum=n/2+1为止: #include <stdio.h> #include <stdlib.h> #include <assert.h> int fun(int inp[],int size) { assert(inp!=NULL && size>); ,j=; ;i++){ ;…
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -----------------------------------------------------------------------------------------   转载自http://www.cnblogs.com/luxiaoxun/archive/2012/08/06/26247…
问题: Given an array of integers, every element appears three times except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?   Single Number I 升级版,一个数组中其它数出现了…
D - Little Victor and Set Codeforces Round #262 (Div. 2) D D. Little Victor and Set time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Little Victor adores the sets theory. Let us remind you t…
题目: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c) The s…
n位不含前导零不含连续1的数共有fib(n)个,fib(n)为斐波那契数列. 所以可以预处理一下fib的前缀和,查找一下第n个数是k位数,然后再递归计算它是第k位数里的多少位. 举个例子,比如说要找第11个数,发现它是个5位数,所以最高位是个1,然后它还是5位数里的第4个数. 这时要找第三个数了,因为后面的数允许有前导零,第三个数是100,所以第5位是1,第4位是0,后面三位是100, 答案就是10100 说的有点啰嗦,在纸上模拟一下还是很容易理解的. #include <cstdio> #i…
/* 编程之美题,给定N个数的数组,只能使用乘法,不使用除法,找出N-1个数的乘积最大的一组,有两种方法,方法一:采用两个数组分别保存从左向右 和从又向左的两个乘积值,然后在扫描一次,求出最大乘积,空间换时间的方法. 方法二:通过分析这些数的性质,看有多少正数,多少负数,多少0 (1)如果有2个或2个以上的0,则返回0 (2)如果有一个0,则看去除0后的乘积为正数还是负数,如果是负数,最大值为0,返回0(即当有一个0时,看负数奇偶情况,如果负数个数是奇数,则返回0) ,如果是正数,则返回这个正数…
最近看到一个网站, 欧拉计划.挺好玩,都是一些算法题.这是本站:http://projecteuler.net/problems 这个是中文站:http://pe.spiritzhang.com/ 下面贴两个小脚本,低端玩具 1.找出一个数的所有因子: #encoding:utf-8 import math def yinzi(n): list_yinzi = [] if n <= 2: return list_yinzi for i in range(2, int(math.sqrt(n))…
intput n 1<=n<=24 n串只有大写字母的字符串 output 选出最多个字符串且每个大写字母出现的次数为偶数 第一行输出个数x 第二行输出x个字符串的下标 做法:将每个字符串转化为一个26bit数,1为奇数个大写字母,0为偶数个,则转化为找出最多个数异或和为0,直接枚举为O((2^n)*n),但只有a^a=0,所以将n个数分为两半(中途相遇法),复杂度降为O((2^(n/2))logn) 注意:异或和左半为0和右半为0的要特判,且右半要全部判完,因为可能出现2+3<5+1…
题目描述    给定一个整型数组,在数组中找出两个数使这两个数的和为给定数,从小到大输出这两个数在数组中的位置(我们可以假定输出结果只有一个).例如,输入:N={1,4,8,20}, target=12,输出:index_1=2, index_2=3 方案一 描述   利用C++中的vector和unordered_map尽可能提升程序的运行效率,节约空间,并找出最后的结果.首先回顾一下vector和unordered_map的用法. vector vector是C++中的一种数据结构,更确切的…
1: 找小于最大的最大的 select max(Salary) from Employee where Salary<(select MAX(Salary) from Employee); 2. 排序 select Salary from Employee where Salary not in (select MAX(Salary)from Employee) order by Salary desc limit 1; select ( select distinct Salary from…
1. 10亿个数中找出最大的1000个数 这种题目就是分治+堆排序. 为啥分治?因为数太多了,全部加载进内存不够用,所以分配到多台机器中,或者多个文件中,但具体分成多少份,视情况而定,只要保证满足内存限制即可.什么,如何分?Hash(num)% numOfFiles. 为啥堆排序?首先堆排序是一种选择排序,比一般的选择排序时间复杂度要低,额外的空间复杂度都是O(1).因为我只要在每一份中拿出最大的1000个即可,这里用大顶堆还是小顶堆呢? 开始我觉得是大顶堆,我们不妨举个例子:假设10亿个数,分…