Codeforces 769D
太久没写搜索因为递归边界问题卡了很久。。
题意:定义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的更多相关文章
- Codeforces 769D k-Интересные пары чисел
题目链接:http://codeforces.com/contest/769/problem/D 搜索题 考虑这些数的值域较小,直接${O(2^{k})}$次方枚举每个数字二进制位上是否改变,剪枝一下 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
随机推荐
- cmake 学习笔记(一) buildsystem
参见网址: http://www.cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html Introduction 基于CMake的构建 ...
- 洛谷 1328 生活大爆炸版石头剪刀布(NOIp2014提高组)
[题解] 简单粗暴的模拟题. #include<cstdio> #include<algorithm> #include<cstring> #define LL l ...
- 洛谷 2777 [AHOI2016初中组]自行车比赛
[题解] 为了让某个选手能够获得总分第一,就让他最后一天的得分是n,并且让别的选手的得分的最大值尽量小.于是我们先把目前积分排序,并且让他们最后一天的排名刚好与积分排名相反.即某个积分排名为X的人最后 ...
- 3.2.2.5 BRE运算符优先级
在数学表达式里,正则表达式的运算符具有某种已定义的优先级,指的是某个运算符(优先级较高)将比其他运算符先被处理. BRE运算符优先级,由高至低 运算符 表示含义 [..] [= ...
- AC自动机模板浅讲
Description 给你N个单词,然后给定一个字符串,问一共有多少单词在这个字符串中出现过(输入相同的字符串算不同的单词,同一个单词重复出现只计一次). Input 第一行一个整数N,表示给定单词 ...
- [转] angular2+highcharts+chart.js
这里是在ionic2下使用highchairs和chart.js的简单示例chartjs部分参考http://www.jianshu.com/p/bc18132da812 1.安装hightchart ...
- Django Rest FrameWork再练习
可能有重构目前应用的需求,rest framework是值得有必要深入去了解的. 所以,这应该是第三次看官方文档来练习, 希望能获取更深入的记忆. __author__ = 'CHENGANG882' ...
- kendo grid 点击新增没有反映
在datasource中缺少 editable: "inline",这一行
- 在IIS6,7中部署ASP.NET网站[转]
阅读目录 开始 查看web.config文件 在IIS中创建网站 IIS6 添加扩展名映射 IIS6 无扩展名的映射 目录的写入权限 SQL SERVER的配置 在IIS7中部署ASP.NET程序 8 ...
- gh-ost: triggerless online schema migrations:Blog by Shlomi Noach:
http://code.openark.org/blog/category/mysql https://rj03hou.github.io/mysql/gh-ost/