2015 俄罗斯网络赛 D. Boulevard

题意:所有人都在一条街上,抽象成坐标轴,有三组输入数据ti,si,fi,表示第i个人在ti秒出现在街上,从si往fi走,单位时间位移为1当两个人走到一个位置时,都互相打招呼,如果两个人相遇多次,只打一次招呼,到了目的地之后就不能打招呼了

分析:开始没头绪,后来队友说,可以抽象成线段的交点个数问题,每个人的行走过程可以描述成一个二维坐标轴上的线段,这样记录斜率和开始结束的时间就可以搞定了,

然后分两类,一类是斜率不同,一种是斜率相同,斜率不同只要比较开始结束时间就行了,斜率相同有两种情况(在一条直线上和平行),平行不用管,只要考虑在一条直线上就行了(很简单,自己在纸上分析一下)

详情见代码

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<cmath>
 8 #include<vector>
 9 #include<deque>
10 #include<stack>
11 using namespace std;
12 const int maxn=0x3f3f3f;
13
14 struct point{
15     int t,s,f,k;
16     int L,R;
17     void cal(){
18         if(s<f)k=1;
19         else k=-1;
20         L=t;
21         R=t+abs(f-s);
22         if(L>R){
23             int tem=L;
24             L=R;
25             R=tem;
26         }
27     }
28 }p[1005];
29
30 bool vis[1005][1005];
31 int ans[1005];
32
33 int main(){
34     int n;
35     while(cin>>n){
36         for(int i=0;i<n;i++){
37             cin>>p[i].t>>p[i].s>>p[i].f;
38             p[i].cal();
39         }
40         memset(ans,0,sizeof(ans));
41         memset(vis,false,sizeof(vis));
42         for(int i=0;i<n;i++)
43             for(int j=i+1;j<n;j++){
44                 if(i==j)
45                     continue;
46                 if(p[i].k!=p[j].k){
47                     double x=p[j].s-p[i].s+p[i].k*p[i].t-p[j].k*p[j].t;
48                     x/=p[i].k-p[j].k;
49                     if(!vis[i][j]&&!vis[j][i]&&x>=p[i].L&&x<=p[i].R&&x>=p[j].L&&x<=p[j].R){
50                         ans[i]++;ans[j]++;
51                         vis[i][j]=vis[j][i]=1;
52                     }
53                 }
54                 else if((p[j].s-p[i].s+p[i].k*(p[i].t-p[j].t))==0){
55                     if(p[i].L<=p[j].L&&p[j].L<=p[i].R||p[j].L<=p[i].L&&p[i].L<=p[j].R){
56                         ans[i]++;ans[j]++;vis[i][j]=vis[j][i]=1;
57                     }
58                 }
59
60         }
61         cout<<ans[0];
62         for(int i=1;i<n;i++)
63             cout<<" "<<ans[i];
64             cout<<endl;
65     }
66     return 0;
67 }

时间: 2024-10-03 13:20:21

2015 俄罗斯网络赛 D. Boulevard的相关文章

2015北京网络赛A题The Cats&#39; Feeding Spots

题意:给你一百个点,找个以这些点为中心的最小的圆,使得这个圆恰好包含了n个点,而且这个圆的边界上并没有点 解题思路:暴力枚举每个点,求出每个点到其他点的距离,取第n大的点,判断一下. 1 #include<cstdio> 2 #include<cmath> 3 #include<algorithm> 4 #include<iostream> 5 #include<memory.h> 6 using namespace std; 7 const i

2015北京网络赛 Couple Trees 倍增算法

2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道.  解法来自 qscqesze ,这个其实之前如果了解过倍增的话还是不是很难,不过这题的数据也不是很给力,极限数据理论上是过不了的.  其他解法有树链剖分?并不是很清楚.就这样水过了吧... 1 #include <iostream> 2 #include <cstdio> 3 #include &l

2015沈阳网络赛1003 Minimum Cut 树链剖分 数组维护前缀和进行区间增减

2015沈阳网络赛1003  Minimum Cut   树链剖分 数组维护前缀和进行区间增减 Minimum Cut Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description Given a simple unweighted graph G 

2015北京网络赛 D-The Celebration of Rabbits 动归+FWT

2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x)为满足x≤ai≤m+x且ai的异或和为0 的序列a的个数. 求 ∑Rx=Lf(x)mod1000000007 思路:因为对于每一个第一次分配后的a序列对应唯一的x,所以我们就枚举x然后在求序列的个数.

2015长春网络赛总结

早上七点多就(冻)醒来了,训练了一个暑假,acm生涯的第一场网络赛,很激动. 九点开打,我拔不出网线,用的机房电脑,装的cb有问题,不能编译,只好用dev.男神电脑插上网线没有网,习惯了linux可能不习惯吧.这提醒我们以后一定要早点去把环境调好. 第三分钟,G题有人A了.我跟560开始看题,男神还在弄电脑.题意是给你n个数(n<1000),然后q(q<1000)次询问,要求你输出[l,r]区间的最大值.数据很小,我说暴力,然后560说线段树,然后模板13分钟1Y.然后560开始搞J,一个貌似

2015长春网络赛1001 求连通快数量的问题dfs

Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1288    Accepted Submission(s): 429 Problem Description Betty owns a lot of ponds, some of them are connected with other ponds by pipes, a

hdu 5441 (2015长春网络赛E题 带权并查集 )

n个结点,m条边,权值是 从u到v所花的时间 ,每次询问会给一个时间,权值比 询问值小的边就可以走 从u到v 和从v到u算不同的两次 输出有多少种不同的走法(大概是这个意思吧)先把边的权值 从小到大排序 询问值也按从小到大排序num记录集合里元素的个数每合并两个集合 ans增加 2*num[u]*num[v] Sample Input15 5 3 //n w q2 3 63341 5 157243 5 57054 3 123821 3 2172660001000013000 Sample Out

2015 北京网络赛 E Border Length hihoCoder 1231 树状数组 (2015-11-05 09:30)

#1231 : Border Length 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Garlic-Counting Chicken is a special species living around the Lake of Peking University. A Garlic-Counting Chicken always flies out from home in the morning, goes to some fixed points looki

Hiho coder 1236 2015 北京网络赛 Score

五维偏序..一开始被吓到了,后来知道了一种BITSET分块的方法,感觉非常不错. 呆马: 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <cmath> 6 #include <vector> 7 #include <bitset> 8 #define inf 100000000