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. thinkPHP 表单自动验证功能

    昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对 ...

  2. Windows+Python 3.6环境下安装PyQt4

    第一步:下载.whl,地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4,这里可以下载不同的python版本对应的包. 第二步:选择一个目录,将下 ...

  3. python之if测试

    (一)python的条件判断语句一般格式如下: if (条件1): (执行结果) elif(条件2): (执行结果) ..... else: (执行结果) 执行顺序为从上到下判断,若条件1不符合则进入 ...

  4. 5.0 Genymotion安装以及基础使用

    后续考虑到python+appium多设备并发执行,需要多台手机,所以这里就直接更新一个jenymotion,后续多设备执行直接用真机+模拟器操作!Genymotion第一步:百度搜索[Genymot ...

  5. 使用jquery validate结合zui作表单验证

    1.引入jquery validate和zui <!-- jQuery (ZUI中的Javascript组件依赖于jQuery) --> <script src="${_b ...

  6. Space Shooter 太空射击

    1.控制玩家移动 public float speed = 10f; public float xMin = -6.5f; public float xMax = 6.5f; public float ...

  7. CyclicBarrier和CountDownLatch的使用

    CyclicBarrier: api对CyclicBarrier的描述: 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).在涉及一组固定大 ...

  8. android 继承ListView实现滑动删除功能.

    在一些用户体验较好的应用上,可以经常遇见   在ListView中  向左或向右滑动便可删除那一项列表. 具体实现  则是继承ListView实现特定功能即可. (1). 新建 delete_butt ...

  9. DevExpress的GridControl控件设置自定义显示方法

    比如要显示性别为字符串,数据库中保存为数值(1:男,2:女,3:未知). 方法一: 点击控件上的"Run Designer"按钮,进入设计界面. 选择“Columns", ...

  10. 前端构建工具gulpjs的使用介绍及技巧 (转)

    gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速 ...