Codeforces 996E Leaving the Bar (随机化)
题目连接:Leaving the Bar
题意:给你n个向量,你可以加这个向量或减这个向量,使得这些向量之和的长度小于1.5e6。
题解: 按照正常的贪心方法,最后的结果有可能大于1.5e6 。这里我们可以加一些随机性,多次贪心,直到结果满足题意。正解是每三个向量中都能找到两个向量合起来 <= 1e6,然后不断合并,最后只会剩下一个或者两个向量,如果一个向量肯定 <= 1e6, 如果是两个向量一定 <= 1.5 * 1e6。这是我第一遇到随机化的题~~~
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef long long LL;
typedef pair<int,int> P;
typedef pair<LL,LL> PL;
const int MAX_N =1e5+;
int N,M,T,S;
struct node{
int f,s,v;
};
node vec[MAX_N];
int res[MAX_N];
int main()
{
while(cin>>N){
for(int i=;i<N;i++){
scanf("%d%d",&vec[i].f,&vec[i].s);
vec[i].v = i;
}
LL ti = ;
while(){
LL x = ;
LL y = ;
for(int i=;i<N;i++){
if((x + vec[i].f)*(x+vec[i].f) + (y+vec[i].s)*(y+vec[i].s) <=
(x - vec[i].f)*(x-vec[i].f) + (y-vec[i].s)*(y-vec[i].s) ){
x += vec[i].f;
y += vec[i].s;
res[vec[i].v] = ;
}
else{
x -= vec[i].f;
y -= vec[i].s;
res[vec[i].v] = -;
}
}
if(x*x+y*y <= ti*ti){
for(int i=;i<N;i++){
printf("%d ",res[i]);
}
cout<<endl;
break;
}
random_shuffle(vec, vec+N);
}
}
return ;
}
Codeforces 996E Leaving the Bar (随机化)的更多相关文章
- Codeforces 749D. Leaving Auction set+二分
D. Leaving Auction time limit per test: 2 seconds memory limit per test:256 megabytes input:standard ...
- Codeforces Problem 598E - Chocolate Bar
Chocolate Bar 题意: 有一个n*m(1<= n,m<=30)的矩形巧克力,每次能横向或者是纵向切,且每次切的花费为所切边长的平方,问你最后得到k个单位巧克力( k <= ...
- CF995C Leaving the Bar
题目描述 For a vector v⃗=(x,y) \vec{v} = (x, y) v=(x,y) , define ∣v∣=x2+y2 |v| = \sqrt{x^2 + y^2} ∣v∣=x2 ...
- codeforces 598E E. Chocolate Bar(区间dp)
题目链接: E. Chocolate Bar time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- CodeForcesdiv1:995C - Leaving the Bar(随机算法+贪心)
For a vector →v=(x,y)v→=(x,y), define |v|=√x2+y2|v|=x2+y2. Allen had a bit too much to drink at the ...
- codeforces 749D Leaving Auction(二分)
题目链接:http://codeforces.com/problemset/problem/749/D 题意:就是类似竞拍,然后报价肯定要比上一个高,然后查询输入k个数表示那些人的竞拍无效, 输出最后 ...
- Codeforces 598E:Chocolate Bar
E. Chocolate Bar time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- CodeForces 749D Leaving Auction
二分查找,$set$. 对于某一次询问,如果把人删光了,那么输出$0$ $0$. 如果只剩下$1$个人,那么输出那个人喊的最低价格. 如果剩下的人数有大于等于两个, 这时最底下出现的情景必然是红色部分 ...
- [Codeforces995C]Leaving the Bar 瞎搞
大致题意: 给出平面上n个向量,对于每个向量可以选择正的V或负的-V,求按照选择的向量走完,最后距离原点<=1.5*1e6的一个选择方案 非正解!!!!!!!!!! 先按距离原点距离由远到近贪心 ...
随机推荐
- [iOS] WSHorizontalPickerView 图片水平滚动封装
之前这篇文章传送门本来是记录自己练手的demo的,后来很多人来问我要代码.今天就抽时间封装了一下,没有考虑太多情况,等我有空再去仔细考虑吧. 代码在:Github 用法很简单,创建对象,设置数据源,记 ...
- Scala并发编程【消息机制】
1.入门 package actor import scala.actors.Actor import scala.actors.migration.ActorDSL /** * Created by ...
- pymongo的用法
先看一下官方给出的简单例子,涵盖了大部分内容: >>> import pymongo >>> client = pymongo.MongoClient(" ...
- C++中cin.clear()的用法
我们谈谈cin.clear的作用,第一次看到这东西,很多人以为就是清空cin里面的数据流,而实际上却与此相差很远,首先我们看看以下代码: #include <iostream> usin ...
- [MapReduce_1] 运行 Word Count 示例程序
0. 说明 MapReduce 实现 Word Count 示意图 && Word Count 代码编写 1. MapReduce 实现 Word Count 示意图 1. Map:预 ...
- 【PAT】B1066 图像过滤(15 分)
注意输出是占三位,其他的挺水 #include<stdio.h> #include<algorithm> using namespace std; int main(){ in ...
- MySQL面试题之死锁
什么是死锁?锁等待?如何优化这类问题?通过数据库哪些表可以监控? 死锁是指两个或多个事务在同一资源上互相占用,并请求加锁时,而导致的恶性循环现象.当多个事务以不同顺序试图加锁同一资源时,就会产生死锁. ...
- Linux运维之如何查看目录被哪些进程所占用,lsof命令、fuser命令
之前将一块硬盘挂载到某个目录下,但是现在我想卸载掉这块硬盘,无论如何都umount不了,有些同学可能说需要加上 -f 参数强制卸载,理论上是可以的,但是在我这里依然不起作用,比如: [root@:vg ...
- C语言变量定义与数据溢出(初学者)
1.变量定义的一般形式为:类型说明符.变量名标识符等:例:int a,b,c;(abc为整型变量) 在书写变量定义时应注意以下几点: (1)允许在一个类型说明符后,定义多个相同类型的变量.各变量之间用 ...
- Spring 自动清除缓存的配置
- spring.resources.chain.strategy.content.enabled=true - spring.resources.chain.strategy.content.pat ...