https://www.nowcoder.com/acm/contest/35/A

题目描述

给出n个整数和x,请问这n个整数中是否存在三个数a,b,c使得ax2+bx+c=0,数字可以重复使用。

输入描述:

第一行两个整数n,x
第二行n个整数a[i]表示可以用的数
1 <= n <= 1000, -1000 <= a[i], x <= 1000

输出描述:

YES表示可以
NO表示不可以
示例1

输入

2 1
1 -2

输出

YES
【分析】:x是已知的。其实就是二分枚举答案。或者hash or set
【代码】:
#include<bits/stdc++.h>

using namespace std;
int a[];
int main() {
set<int> s;
int n, x, f=;
cin >> n >> x;
int *a = new int[n]; for (int i = ; i < n; ++i) {
cin >> a[i];
s.insert(a[i]);
}
//sort(a,a+n);
if(s.count()) f=;
for(int i=;i<n;i++){
for(int j=i;j<n;j++){
int ans= -(a[i]*x*x+a[j]*x);
if(s.count(ans)){
f=;
break;
}
}
}
if(f) printf("YES\n");
else printf("NO\n");
}

set解法

#include<bits/stdc++.h>

using namespace std;
map<int,int> mp;
int a[];
int main() {
int n, x, f=;
cin >> n >> x;
int *a = new int[n]; for (int i = ; i < n; ++i) {
cin >> a[i];
mp[a[i]]++;
}
//sort(a,a+n);
for(int i=;i<n;i++){
for(int j=i;j<n;j++){
int ans= -(a[i]*x*x+a[j]*x);
if(mp[ans])
return *puts("YES");
}
}
printf("NO\n");
}

map

#include<bits/stdc++.h>

using namespace std;
int vis[];
int a[];
int main() {
int n, x, f=;
cin >> n >> x;
int *a = new int[n]; for (int i = ; i < n; ++i) {
cin >> a[i];
vis[a[i]+]=;
}
//sort(a,a+n);
for(int i=;i<n;i++){
for(int j=i;j<n;j++){
int ans= -(a[i]*x*x+a[j]*x);
if(ans>=-&&ans<=&&vis[ans+]){
f=;
break;
}
}
}
if(f) printf("YES\n");
else printf("NO\n");
}

hash最少时间

#include<bits/stdc++.h>

using namespace std;
int vis[];
int a[];
int main() {
int n, x, f=;
cin >> n >> x;
int *a = new int[n]; for (int i = ; i < n; ++i) {
cin >> a[i];
}
sort(a,a+n);
for(int i=;i<n;i++){
for(int j=i;j<n;j++){
int ans= -(a[i]*x*x+a[j]*x);
int res = lower_bound(a,a+n,ans)-a;
if(res==n) continue;
if(a[res]==ans){
f=;
break;
}
}
}
if(f) printf("YES\n");
else printf("NO\n");
}

sort + lower_bound

#include<bits/stdc++.h>
using namespace std;
int a[];
int main()
{
int n,x;
cin>>n>>x;
for (int i=;i<n;i++){
scanf("%d",a+i);
}
sort(a,a+n);
for (int i=;i<n;i++){
for (int j=;j<n;j++){
long long tmp=1LL*a[i]*x*x+1LL*a[j]*x;
if(*lower_bound(a,a+n,-tmp)==-tmp)return *puts("YES");
}
}
puts("NO");
}

sort2

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[];
int main()
{
int n,x,l,r,mid;
scanf("%d%d",&n,&x);
for(int i=;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+,a++n); bool f=;
for(int i=;i<=n&&!f;i++){
for(int j=;j<=n&&!f;j++){
ll ans = -(a[i]*x*x+a[j]*x);
l = ,r = n,mid;
while(l<=r){
mid = l+r>>;
if(ans==a[mid]){f=;break;}
else if(a[mid]<ans)l = mid+;
else r = mid-;
}
}
}
// cout<<a[mid]<<endl;
if(f)puts("YES");
else puts("NO");
return ;
}

手写二分

Wannafly挑战赛4 A解方程【二分/set/hash求解方程】的更多相关文章

  1. 【Wannafly挑战赛29F】最后之作(Trie树,动态规划,斜率优化)

    [Wannafly挑战赛29F]最后之作(Trie树,动态规划,斜率优化) 题面 牛客 题解 首先考虑怎么计算\([l,r]\)这个子串的不同的串的个数. 如果\(l=1\),我们构建\(Trie\) ...

  2. Wannafly挑战赛13 zzf的好矩阵 题解 答案解释

    Wannafly挑战赛13 zzf的好矩阵 题解 文章目录 Wannafly挑战赛13 zzf的好矩阵 题解 分析 结论1 结论2 结论3 C数组对应带子说明 空白长度论述 后续黑色长度论述 能&qu ...

  3. C++ 二分法求解方程的解

    二分法是一种求解方程近似根的方法.对于一个函数 f(x)f(x),使用二分法求 f(x)f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我们之后给出了的两个初值决定的区间 [-20,20 ...

  4. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  5. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  6. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  7. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  8. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

  9. Wannafly挑战赛25C 期望操作数

    Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...

随机推荐

  1. 踩到Framework7 Photo Browser 的一个坑

    最近在做的项目用了Framework7前端框架,功能确实比较强大!但这两天遇到一个坑,希望我的这点收获能给遇到这个问题的朋友一点帮助. 在使用Photo Browser 的时候,图片下方想放一个“点赞 ...

  2. 《Cracking the Coding Interview》——第5章:位操作——题目5

    2014-03-19 06:22 题目:将整数A变成整数B,每次只能变一个二进制位,要变多少次呢. 解法:异或,然后求‘1’的个数. 代码: // 5.5 Determine the number o ...

  3. python学习笔记十三:Flask demo

    一.Flask简介 Flask 是一个 Python 实现的 Web 开发微框架.官网:http://flask.pocoo.org/ 二.Demo 1.代码结构 . ├── blog.py ├── ...

  4. 命名空间“System.Web.Http”中不存在类型或命名空间名称“Description”(是否缺少程序集引用?)

    solution: Set "Copy Local : True" in properties for References\System.Web.Http   在http://s ...

  5. ASP.NET Core 2.1 源码学习之 Options[3]:IOptionsMonitor 【转】

    原文链接:https://www.cnblogs.com/RainingNight/p/strongly-typed-options-ioptions-monitor-in-asp-net-core. ...

  6. Ubuntu16.04安装openCV的问题集合

    Q1 下列软件包有未满足的依赖关系:   libtiff4-dev : 依赖: libjpeg-dev  E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系. 上网查了 ...

  7. ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 P: 【数组】1234方阵(phalanx)

    http://acm.ocrosoft.com/problem.php?cid=1316&pid=15 题目描述 编程打印如下规律的n*n方阵.输入n,按规律输出方阵. 方阵规律如下图:使左对 ...

  8. 积累: .net里有个线程安全的int+1类

     Interlocked.Increment(ref id); 

  9. XJOI NOIP模拟题1

    第一题 分析: 开始想的是贪心,取每列均值最大一段. 应该是01分数规划,具体看代码 代码: program gold; var a:..]of int64; n,i,m,j,x:longint; f ...

  10. 进程管理利器Supervisor--入门简介

    目录 概述 Supervisor是什么 Supervisor意图 Supervisor特性 Supervisor组件 平台需求 概述 项目运行需要后台运行,一般都是使用 nohup,但是nohup不能 ...