Wannafly挑战赛4 A解方程【二分/set/hash求解方程】
https://www.nowcoder.com/acm/contest/35/A
题目描述
输入描述:
第一行两个整数n,x
第二行n个整数a[i]表示可以用的数
1 <= n <= 1000, -1000 <= a[i], x <= 1000
输出描述:
YES表示可以
NO表示不可以
输入
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求解方程】的更多相关文章
- 【Wannafly挑战赛29F】最后之作(Trie树,动态规划,斜率优化)
[Wannafly挑战赛29F]最后之作(Trie树,动态规划,斜率优化) 题面 牛客 题解 首先考虑怎么计算\([l,r]\)这个子串的不同的串的个数. 如果\(l=1\),我们构建\(Trie\) ...
- Wannafly挑战赛13 zzf的好矩阵 题解 答案解释
Wannafly挑战赛13 zzf的好矩阵 题解 文章目录 Wannafly挑战赛13 zzf的好矩阵 题解 分析 结论1 结论2 结论3 C数组对应带子说明 空白长度论述 后续黑色长度论述 能&qu ...
- C++ 二分法求解方程的解
二分法是一种求解方程近似根的方法.对于一个函数 f(x)f(x),使用二分法求 f(x)f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我们之后给出了的两个初值决定的区间 [-20,20 ...
- Wannafly挑战赛25游记
Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- Wannafly 挑战赛 19 参考题解
这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...
- Wannafly挑战赛21A
题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...
- Wannafly挑战赛24游记
Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...
- Wannafly挑战赛25C 期望操作数
Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...
随机推荐
- 剑指Offer - 九度1386 - 旋转数组的最小数字
剑指Offer - 九度1386 - 旋转数组的最小数字2013-11-24 01:57 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转 ...
- android压力测试monkey简单使用
monkey是android sdk自带的压力测试工具,简单使用如下: 用adb shell进入adb shell环境后,用下面命令进行测试 monkey -p com.xxx.yyy -v num ...
- C++文件操作(转)
C++文件操作(转) 第一个:简单,容易理解,常用:http://www.cnblogs.com/uniqueliu/archive/2011/08/03/2126545.html 第二个:详细的,如 ...
- 详解zabbix2.2.2安装部署(Server端篇)
今天开始安装zabbix.zabbix需要LNMP或者LAMP环境.环境的搭建不在本章范围内. LNMP环境配置 Linux安装:http://www.osyunwei.com/archives/10 ...
- Android 环境变量设置
需要设置以下全局的环境变量 ANDROID_HOME: C:\Users\bellesun\AppData\Local\Android\sdk JAVA_HOME: C:\Program Files ...
- win10 ubuntu16双系统安装教程
一. 知识准备 1.材料 前提: 本文档是在win10 64位下进行安装的!32位的安装注意其中的一些细节即可 硬件: X86_64 位电脑 硬盘有 40G 空闲 软件:[百度搜索即可] (1) Ul ...
- Android动态添加和移除布局
package com.hyang.administrator.studentproject; import android.os.Bundle; import android.support.v7. ...
- java窗口程序初学组件小总结
容器(可以放组件)JPanel默认的布局管理器是FlowLayout:JPanel panel=new JPanel(); 按钮JButton(可以为汉字 也可以是图片):JButton button ...
- hdu 2492 树状数组 Ping pong
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Ping pong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...
- linux服务进程管理
1.查看linux占用内存/CPU最多的进程 查使用内存最多的10个进程 ps -aux | sort -k4nr | head -n 10 或者top (然后按下M,注意大写) 查使用CPU最多的1 ...