hdu2578Dating with girls(1)(二分查找或者STL map)
2013-05-16 19:36
274 查看
一天不A题,赶不上YYD~
->题目请戳这里<-
题目大意:给n个正整数,从中任选一个有序对<x,y>使x + y = k;k给定。
题目分析:水题一枚~数据量给的100000,先排个序,再二分即可,复杂度nlogn;详情请见代码:
#include <iostream>
#include<cstdio>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int N = 100005;
int lcm
;
int n,k;
int find(int x)
{
int l,r,mid;
l = 0;
r = n - 1;
while(l <= r)
{
mid = (l + r)>>1;
if(lcm[mid] == x)
return 1;
else
{
if(lcm[mid] > x)
r = mid - 1;
else
l = mid + 1;
}
}
return 0;
}
int main()
{
int i,t;
scanf("%d",&t);
while(t --)
{
scanf("%d%d",&n,&k);
for(i = 0;i < n;i ++)
{
scanf("%d",&lcm[i]);
}
sort(lcm,lcm + n);
int ans = 0;
/*for(i = 1;i < 10;i ++)
if(find(i))
printf("%d\n",i);*/
//system("pause");
if(find(k - lcm[0]))
ans ++;
for(i = 1;i < n;i ++)
{
if(lcm[i] == lcm[i - 1])
continue;
if(find(k - lcm[i]))
ans ++;
}
printf("%d\n",ans);
}
return 0;
}
//656MS 456K
其实这题时限很宽,用STL的map也可以水过~详情请见代码:
#include <iostream>
#include<cstdio>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int N = 100005;
map<int,int> mp;
int lcm
;
int len;
int n;
int k;
int main()
{
int i,t,a;
scanf("%d",&t);
while(t --)
{
scanf("%d%d",&n,&k);
mp.clear();
len = 0;
for(i = 0;i < n;i ++)
{
scanf("%d",&a);
if(mp[a] != 1)
{
mp[a] = 1;
lcm[len ++] = a;
}
}
int ans = 0;
for(i = 0;i < len;i ++)
{
if(mp[k - lcm[i]] == 1)
ans ++;
}
printf("%d\n",ans);
}
return 0;
}
//1843MS 1696K
PS:STL果然方便啊,STL果然慢啊~
->题目请戳这里<-
题目大意:给n个正整数,从中任选一个有序对<x,y>使x + y = k;k给定。
题目分析:水题一枚~数据量给的100000,先排个序,再二分即可,复杂度nlogn;详情请见代码:
#include <iostream>
#include<cstdio>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int N = 100005;
int lcm
;
int n,k;
int find(int x)
{
int l,r,mid;
l = 0;
r = n - 1;
while(l <= r)
{
mid = (l + r)>>1;
if(lcm[mid] == x)
return 1;
else
{
if(lcm[mid] > x)
r = mid - 1;
else
l = mid + 1;
}
}
return 0;
}
int main()
{
int i,t;
scanf("%d",&t);
while(t --)
{
scanf("%d%d",&n,&k);
for(i = 0;i < n;i ++)
{
scanf("%d",&lcm[i]);
}
sort(lcm,lcm + n);
int ans = 0;
/*for(i = 1;i < 10;i ++)
if(find(i))
printf("%d\n",i);*/
//system("pause");
if(find(k - lcm[0]))
ans ++;
for(i = 1;i < n;i ++)
{
if(lcm[i] == lcm[i - 1])
continue;
if(find(k - lcm[i]))
ans ++;
}
printf("%d\n",ans);
}
return 0;
}
//656MS 456K
其实这题时限很宽,用STL的map也可以水过~详情请见代码:
#include <iostream>
#include<cstdio>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
const int N = 100005;
map<int,int> mp;
int lcm
;
int len;
int n;
int k;
int main()
{
int i,t,a;
scanf("%d",&t);
while(t --)
{
scanf("%d%d",&n,&k);
mp.clear();
len = 0;
for(i = 0;i < n;i ++)
{
scanf("%d",&a);
if(mp[a] != 1)
{
mp[a] = 1;
lcm[len ++] = a;
}
}
int ans = 0;
for(i = 0;i < len;i ++)
{
if(mp[k - lcm[i]] == 1)
ans ++;
}
printf("%d\n",ans);
}
return 0;
}
//1843MS 1696K
PS:STL果然方便啊,STL果然慢啊~
相关文章推荐
- nyoj 86 找球号(一)(二分查找或者STLset)
- 二分查找找下标或者值
- pku 2002 Squares 二分查找 或者 hash
- 二分查找的使用说明
- Java 二分查找
- 创建函数能够对整型数组进行二分查找。
- Spark查找某个IP的归属地,二分算法,try{}catch{}的使用,将结果存MySQL数据库
- 【c语言】二分查找
- PHP递归与非递归实现二分查找
- 用python 实现的二分查找:
- 数据结构实验之查找四:二分查找
- 二分查找注意点(转)
- 二分查找和插入
- 函数模板实现二分查找
- 二分查找新认识
- STL中的二分查找算法(binary_search lower_bound upper_bound equal_range)
- 排序列表转化为二分查找树
- [Algorithms] 分治算法(二分查找, 合并排序, 插入排序, 快速排序(coming))
- 二分查找
- 算法练习二:二分查找