Car race game

题意:

输入一个n以EOF作为结束,之后n行每行输入一个x,一个v,x代表当前车的坐标,v代表车的速度,问最后总共的超车数。

解题思路:

思路其实很简单,用将车排序,按照x1<x2排序如果x1==x2按照y1>y2排序。然后比较就好了,当x1<x2,y1>y2时超车数就增加。

不过这题数据量比较大,暴力搜索的话肯定超时。在网上看到别人的思路才明白,也了解了什么是树状数组。其实也不难理解,就是把需要

求和的东西提前做预处理,以后再加的时候就会快很多,空间换时间。

具体代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

#define MAXX 1000001

struct node{ int x,y; } p[100005];

long long c[1000005];

bool ccmp(node a,node b)//这样排序的意义......
{
if( a.x==b.x )
return a.y>b.y;
return a.x<b.x;
}

int lowbit(int x)
{
return x&(-x);
}

void adding(int x)
{
while( x<MAXX )
{
c[x]++;
x += lowbit(x);
}
}

long long getsum( int x )
{
long long sum = 0;
while( x>0 )
{
sum += c[x];
x -= lowbit(x);
}
return sum;
}

int main()
{
int n,i,j,k;
long long ans;

while(scanf("%d",&n)!=EOF)
{
for(i=0; i<n; i++ )
scanf("%d%d",&p[i].x,&p[i].y);

sort(p,p+n,ccmp);

for(i=0; i<=MAXX; i++ )
c[i] = 0;
ans=0;

for(i=0; i<n; i++ )//i表示当前左边点的总数,
{
ans += ( i - getsum(p[i].y));//减去左下方的就可以了
adding( p[i].y );
}
for(int i=0;i<n;i++)
cout<<c[i]<<" *";
cout<<ans<<endl;
}
system("pause");
return 0;
}

Car race game

时间: 2024-10-05 15:13:31

Car race game的相关文章

[RxJS] Filtering operator: single, race

Single, race both get only one emit value from the stream. Single(fn): const source = Rx.Observable.from([1,2,3,4,5]); var single = source.single( x => x === 3); /* (12345)| (source) single( x => x === 3) 3| (single) */ var sub = single.subscribe( x

BZOJ 2599: [IOI2011]Race( 点分治 )

数据范围是N:20w, K100w. 点分治, 我们只需考虑经过当前树根的方案. K最大只有100w, 直接开个数组CNT[x]表示与当前树根距离为x的最少边数, 然后就可以对根的子树依次dfs并更新CNT数组和答案. ------------------------------------------------------------------------------------------ #include<bits/stdc++.h> using namespace std; typ

[C++11 并发编程] 06 Mutex race condition

上一节中介绍了mutex的基本使用方法,使用mutex来保护共享数据并不能解决race condition带来的问题,假如我们有一个堆栈数据结构类似于std::stack它提供了5个基本操作push(),pop(),top(),empty(),和size().这里的top()操作返回栈顶元素的拷贝,这样我们就可以使用一个mutex来保护栈内部的数据.但是race codition情况下,虽然使用mutex在stack的每个接口内都对共享数据进行了保护,仍然有问题存在. #include <deq

对 Data Race Free 的理解

Data Race Free 的动机 Data Race Free 是对多线程程序 同步程度 的一种描述,假如你的多线程程序的同步程度满足 DRF 的要求,那么,你的程序会有这样一个好处: 程序在弱一致性模型下执行,执行的结果与在SC模型下执行一样 这意味着,程序员在写程序时,可以按SC模型来推断程序的执行.而程序在底层运行时,可以享受弱一致性模型带来的种种优化措施. Data Race Free 具体内容 DRF 要求多线程程序中不能有冲突的操作. 什么是冲突的操作呢? 冲突的操作是指:两个操

Data Race Free 的前世今生

Data Race Free 是多线程程序是非常重要的概念,因为Java 和 C++的内存模型都是基于 Data Race Free 的,这篇文章将介绍这个概念的由来,另一篇文章<对Data Race Free的理解>介绍它的主要思想. 事情要追溯到遥远的1979年, Lamport 在他的著名论文 How to make a multiprocessor computer that correctly executes multiprocess programs 中提出了今后在内存模型领域被

【BZOJ-2599】Race 点分治

2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MBSubmit: 2590  Solved: 769[Submit][Status][Discuss] Description 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000 Input 第一行 两个整数 n, k第二..n行 每行三个整数 表示一条无向边的两端和权值 (注意点的编号从0开始) Output

.NET:race conditions

race conditions (when an anomalous result occurs due to an unexpected critical dependence on the timing of two events). A race condition occurs when two or more threads can access shared data and they try to change it at the same time. Because the th

Codeforces 48C The Race 模拟题

题目链接:点击打开链接 题意: 给定n个加油站,一辆车由A点跑到B点,每个100m有一个加油站,每开100m需要10升油. 在每个车站会检查一下油量,若车子若开不到下一个加油站则加x升油. 开始有x升油 下面给出加油的记录. 问下一次加油在哪一站.若答案唯一输出具体哪站. 油箱容量无限 思路: 水模拟.. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h>

hdu 4123 Bob’s Race 树的直径+rmq+尺取

Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Bob wants to hold a race to encourage people to do sports. He has got trouble in choosing the route. There are N houses and N - 1 roads

[2016-04-01][codeforces][659D][Bicycle Race]

时间:2016-04-01 19:10:24 星期五 题目编号:[2016-04-01][codeforces][659D][Bicycle Race] 题目大意:绕着海岸线行走,每次行走方式为上下左右,最后回到终点,在转弯的地方如果不及时转弯就会掉到水里,问有多少个地方可能掉到水里 分析: 可以发现,在内角为270°的地方才有可能掉到水里,设这样的地方有x个,则内角和 180 * (n - 2) = 270 * x + (n - x) * 90,得到 x = n?42n?42 #include