注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东月之神

在单纯的观念里面,生命就容易变得比较深刻!

 
 
 

日志

 
 
关于我

别驻足,梦想要不停追逐,别认输,熬过黑暗才有日出,要记住,成功就在下一步,路很苦,汗水是最美的书!

网易考拉推荐

xmu 1120.战力组合  

2010-04-29 23:18:39|  分类: ACM |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Description

  第五代火影想从N个忍者中挑选两个忍者组成一个小队去召回在外面执行任务的忍者回来保卫村子,并且她希望这两个忍者的战斗力加起来为K。

Input

  输入N和K(2<=N<=100,000,0<K<=2,000,000,000),分别表示忍者的总数和所需要的战斗力和。
  第二行有N个数ai(0<ai<=1,000,000,000),表示第i个忍者的战斗力。

Output

  如果村中子有满足条件的两位忍者,则输出Yes,否则输出No。

Sample Input

5 10
4 5 6 2 1

Sample Output

Yes

Source
“网宿科技杯”厦门大学第六届程序设计竞赛 网络预赛(2)@ church & wlnwyyfc
 
一开始觉得暴力要超时,但是还是试了一下。果然超时了。O(n^2)的算法肯定超了的。不过这个题目有一个想法,也许有更加好的方法。只是两个数相加。另外开一个数组b[i] = k- a[i],然后比较a,b中的元素是否有相同的就好了。
代码如下:
 
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{
 int n, i, flag = 1, j;
 double k, a[100001], b[100001];
 scanf("%d%lf", &n, &k);
 for(i = 0; i < n; i++)
 {
  scanf("%lf", &a[i]);
  b[i] = k - a[i];
 }
 sort(a, a + n);
 sort(b, b + n);
 for(i = 0, j = 0; flag;)
 {
  if(a[i] == b[j]) flag = 0;
  else if(a[i] > b[j]){ ++j; if(j == n) break;}
  else if(a[i] < b[j]){ ++i;  if(i == n) break;}
 }
 if(!flag) printf("Yes\n");
 else printf("No\n");
return 0;
}
 
还有一种方法是小天做的hash:
代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
struct data
{
 int d[40];
 int it;
};
data hash[9973];
int a[1000000];
int main()
{
 int n,k,i;
 while(scanf("%d%d",&n,&k)!=EOF)
 {
  for(i=0;i<9973;i++)hash[i].it=-1;
  for(i=0;i<n;i++)
  {
   scanf("%d",&a[i]);
   hash[a[i]%9973].d[++hash[a[i]%9973].it]=a[i];
  }
  sort(a,a+n);
  int flag=0;
  for(i=0;i,n;i++)
  {
   if(k/2<a[i])break;
   if(1.0*k/2==a[i])
   {
    int tt=hash[a[i]%9973].it;
    if(tt!=-1)
    {
     int t=0;
     for(int j=0;j<=tt;j++)
     {
      if(hash[a[i]%9973].d[j]==a[i])t++;
     }
     if(t>=2){printf("Yes\n"); flag=1;break;}
    }
   }
   else
   {
    int temp=k-a[i];
    int tt=hash[temp%9973].it;
    if(tt!=-1)
    {
     int t=0;
     for(int j=0;j<=tt;j++)
     {
      if(hash[temp%9973].d[j]==temp)t++;
     }
     if(t>=1){printf("Yes\n"); flag=1;break;}
    }
   }
  }
  if(!flag)printf("No\n");
 }
 return 0;
}
  评论这张
 
阅读(201)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017