太久没写搜索因为递归边界问题卡了很久。。

题意:定义k-interesting:如果两个数的二进制形式有k位不相同,则称之为k-interesting。给出n和k,输入n个大小在[0,10000]之间的数,问有多少对ai,aj(i<j)是k-interesting数。

解题思路:注意到n个数的大小特地限制在10000以下,考虑暴力搜索,复杂度为10000*(2^14),复杂度太高,需要剪枝:当k小于7,计算k位不相同的数有哪些;k大于等于7,计算14-k位相同的数有哪些。使用vector存储搜索结果,遍历一遍即可(结果需用long long存储,极端情况下答案为n^2级别)

代码如下:(表现十分不佳——1699ms,大概还是姿势太挫了。。??)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
#define sqr(x) ((x)*(x))
const int N=1e4+;
int n,k,a[N*],tot[N*];
vector<int>all[N];
void dfs(int x,int num,int pos,int cnt,int rev){
if(cnt<) return;
if(pos==-){
if(!cnt){
all[x].push_back(num);
return;
}
return;
}
int tmp=<<pos;
if(num&tmp) tmp*=-;
num+=tmp;
dfs(x,num,pos-,rev?cnt:cnt-,rev);
num-=tmp;
dfs(x,num,pos-,rev?cnt-:cnt,rev);
}
void init(){
int rev=k>=?:;
if(rev) k=-k;
for(int i=;i<=;i++){
all[i].clear();
dfs(i,i,,k,rev);
}
memset(tot,,sizeof(tot));
}
int main(){
//freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&k)){
init();
for(int i=;i<n;i++)
scanf("%d",a+i);
ll res=;
for(int i=n-;i>=;i--){
for(int j=;j<all[a[i]].size();j++) if(tot[all[a[i]][j]]){
res+=tot[all[a[i]][j]];
}
tot[a[i]]++;
}
printf("%I64d\n",res);
}
return ;
}

Codeforces 769D的更多相关文章

  1. Codeforces 769D k-Интересные пары чисел

    题目链接:http://codeforces.com/contest/769/problem/D 搜索题 考虑这些数的值域较小,直接${O(2^{k})}$次方枚举每个数字二进制位上是否改变,剪枝一下 ...

  2. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  3. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  4. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  5. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  6. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  7. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  8. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  9. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

随机推荐

  1. saltstack(三) grains、pillar的使用

    一,grains grains: 这个跟puppet的facter功能一样.主要负责采集客户端一些基本信息, 这个也完全可以自定义,可以在客户端自定义,然后自动汇报上来:也可以从服务器端定义然后推下去 ...

  2. HDU 4903 (模拟+贪心)

    Fighting the Landlords Problem Description Fighting the Landlords is a card game which has been a he ...

  3. hdu 2844 多重背包二进制优化

    //http://www.cnblogs.com/devil-91/archive/2012/05/16/2502710.html #include<stdio.h> #define N ...

  4. codevs3411 洪水

    题目描述 Description 小浣熊松松和朋友到野外露营,没想到遇上了π年一次的大洪水,好在松松是一只爱观察的小浣熊,他发现露营地的地形和洪水有如下性质: ①露营地可以被看做是一个N*M的矩形方阵 ...

  5. CODEVS1022 覆盖 (二分图染色+匈牙利算法)

    先对整幅图进行二分图染色,再跑一遍匈牙利算法. /* CODEVS1022 */ #include <cstdio> #include <cstring> #include & ...

  6. VNC Viewer 设置屏幕分辨率-解决屏幕分辨率问题

    https://blog.csdn.net/runningtortoises/article/details/51425332

  7. HDU——4738 Caocao's Bridges

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. JavaScript设计模式 Item9 --适配器模式Adapter

    适配器模式(转换器面模式),通常是为要使用的接口,不符本应用或本系统使用,而需引入的中间适配层类或对象的情况. 适配器模式的作用是解决两个软件实体间的接口不兼容的问题. 一.定义 适配器模式(Adap ...

  9. 小胖说事22-----iOS开发技巧之取消键盘响应和截屏功能

    1.UILable内容模糊 在非Retina的iPad mini 的屏幕上,一个UILable的frame的origin值假设是有小数位(如0.5),就会造成显示模糊,所以不妨用整数值的origin. ...

  10. LeetCode 939. Minimum Area Rectangle (最小面积矩形)

    题目标签:HashMap 题目给了我们一组 xy 上的点坐标,让我们找出 能组成矩形里最小面积的那个. 首先遍历所有的点,把x 坐标当作key 存入map, 把重复的y坐标 组成set,当作value ...