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_{ ...
随机推荐
- Android通过用代码画虚线椭圆边框背景来学习一下shape的用法
在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的形状,shape可以绘制矩形环形以及椭圆,所以只需要用椭圆即可,在使用的时候将控件比如imageview或textview ...
- 《Cracking the Coding Interview》——第9章:递归和动态规划——题目11
2014-03-21 20:20 题目:给定一个只包含‘0’.‘1’.‘|’.‘&’.‘^’的布尔表达式,和一个期望的结果(0或者1).如果允许你用自由地给这个表达式加括号来控制运算的顺序,问 ...
- vim基本配置备份
我的vim基本配置如下,在这里作个备份: set background=light syntax on set number set smartindent set expandtab set tab ...
- 玩转Openstack之Nova中的协同并发(二)
玩转Openstack之Nova中的协同并发(二) 昨天介绍了Python中的并发处理,主要介绍了Eventlet,今天就接着谈谈Openstack中Nova对其的应用. eventlet 在nova ...
- C:\Windows\System32目录可执行文件列表(Win7 64)
C:\Windows\System32>where /? C:\Windows\System32>where "c:\windows\system32:*.exe" & ...
- oschina添加ssh公钥一记
生成SSH公钥 --------------------------------------------------------- 打开Windows Shell 或 GIT Bash ssh-key ...
- mongodb导入json文件(WINDOWS)
mongodb导入json格式的文件的命令是mongoimport: 在下面的这个例子中,使用mongoimport命令将文件pi.json中的内容导入loacal数据库的pi集合中. 打开CMD,进 ...
- CentOS 7.5 部署蓝鲸运维平台
环境准备 官方建议 准备至少3台 CentOS 7 以上操作系统的机器 最低配置:2核4G 建议配置: 4核12G 以上 部署前关闭待安装主机之间防火墙,保证蓝鲸主机之间通信无碍 部署前关闭SELin ...
- hnust 分蛋糕
问题 B: 分蛋糕 时间限制: 1 Sec 内存限制: 128 MB提交: 2430 解决: 966[提交][状态][讨论版] 题目描述 今天是DK生日,由于DK的朋友很多,所以DK在蛋糕店定制了 ...
- vim使用的一些积累
vi visual interfacevim vi improved vim模式:编辑模式(命令模式)输入模式末行模式 编辑模式下,zz保存并退出移动光标:(编辑模式)1.逐字符移动 h 左 l 右 ...