Codeforces Round #431 (Div. 2) D Rooter's Song
来源:互联网 发布:广州女人街网络批发 编辑:程序博客网 时间:2024/06/05 14:56
这个题和那个蚂蚁爬杆的题目很是相似,刘汝佳白皮书第9页。
从这个题目来说,x+y-t如果相等肯定会相遇。然后横着的和竖着的遇见会转向。先记录下来每个数的id,然后枚举横着的和竖着的x+y-t相同的数,改变方向,就是交换他们的id
我的超时了
#include<bits\stdc++.h>using namespace std;typedef long long ll;#define pb push_backconst int mod=1e9+7;const int maxn=100006;struct node{ int t,id,d,st;}row[maxn],col[maxn];//row代表坐标在x轴,col代表坐标在y轴bool cmp(node a,node b){ if(a.t==b.t)return a.st<b.st; return a.t<b.t;}bool cmp1(node a,node b){ return a.id<b.id;}int main(){ int n,w,h;scanf("%d%d%d",&n,&w,&h);int t,st,d;int n1=0,n2=0;for(int i=1;i<=n;i++){ scanf("%d%d%d",&d,&st,&t); t=st-t; if(d==1) { row[n1].st=st; row[n1].id=i; row[n1++].t=t; } else { col[n2].st=st; col[n2].id=i; col[n2++].t=t; }}sort(row,row+n1,cmp);sort(col,col+n2,cmp);//cout<<n1<<" "<<n2<<endl;int j=0;for(int i=0;i<n1;i++){ while(col[j].t<row[i].t&&j<n2)j++; if(j>=n2)break; if(col[j].t==row[i].t) {while(col[j].t==row[i].t&&j<n2) { // cout<<i<<" "<<j<<endl; t=col[j].id; col[j].id=row[i].id; row[i].id=t; j++; } j--; while(col[j].t==row[i].t&&j>0)j--;}}sort(row,row+n1,cmp1);sort(col,col+n2,cmp1);j=0;int i=0;while(1){ if(i==n1&&j==n2)break; if(i==n1) { printf("%d %d\n",w,col[j].st); j++; continue; } if(j==n2) { printf("%d %d\n",row[i].st,h); i++; continue; } if(row[i].id<col[j].id) { printf("%d %d\n",row[i].st,h); i++; } else { printf("%d %d\n",w,col[j].st); j++; }} return 0;}close
大神代码
#include<bits/stdc++.h>using namespace std;const int N=2e5+10;int n,h,w,tp[N],pos[N],t[N],x[N];//只需要考虑相撞后交换id的过程即可 vector<int> vx[N],vy[N];pair<int,int> ans[N];bool cmp(int x,int y){return pos[x]<pos[y];}int main(){scanf("%d%d%d",&n,&w,&h);for (int i=1;i<=n;i++){scanf("%d%d%d",&tp[i],&pos[i],&t[i]);x[i]=pos[i]-t[i]+1e5;if (tp[i]==1) vx[x[i]].push_back(i);else vy[x[i]].push_back(i);}for (int i=1;i<=2e5;i++){int cntx=vx[i].size();int cnty=vy[i].size();sort(vx[i].begin(),vx[i].end(),cmp);sort(vy[i].begin(),vy[i].end(),cmp);for (int j=0;j<cntx;j++){int id=vx[i][j];int right=cntx-j;if (right>cnty) ans[id]=make_pair(pos[vx[i][j+cnty]],h);else ans[id]=make_pair(w,pos[vy[i][right-1]]);}for (int j=0;j<cnty;j++){int id=vy[i][j];int up=cnty-j;if (up>cntx) ans[id]=make_pair(w,pos[vy[i][j+cntx]]);else ans[id]=make_pair(pos[vx[i][up-1]],h);}}for (int i=1;i<=n;i++) printf("%d %d\n",ans[i].first,ans[i].second);return 0;}
阅读全文
0 0
- Codeforces Round #431 (Div. 2) D Rooter's Song
- Codeforces Round #431 (Div. 2) D. Rooter's Song
- Codeforces Round #431 (Div. 2) (Codeforces 849D) D. Rooter's Song
- Codeforces Round #431 (Div. 1) B. Rooter's Song(模拟)
- CodeForces #431 849D Rooter's Song 技巧题
- Codeforces 849 D. Rooter's Song (技巧)
- Codeforces 848B Rooter's Song
- Codeforces849D Rooter's Song
- Codeforces Round #146 (Div. 2) D. Let's Play Osu!
- Codeforces Beta Round #89 (Div. 2)D. Caesar's Legions
- Codeforces Round #286 (Div. 2) D.Mr. Kitayuta's Technology
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (multiset)
- Codeforces Round #229 (Div. 2) B. Inna, Dima and Song
- Codeforces Round #229 (Div. 2) B. Inna, Dima and Song
- Codeforces Round #229 (Div. 2)B. Inna, Dima and Song
- Codeforces Round #229 (Div. 2) B. Inna, Dima and Song
- Codeforces Round #229 (Div. 2)B. Inna, Dima and Song
- Codeforces Round #383 (Div. 2)-D. Arpa's weak amphitheater and Mehrdad's valuable Hoses
- 主席树详解
- 小程序数字精确度问题
- spark2.2.0源码学习过程记录:Day5
- PsSetCreateProcessNotifyRoutine妙用
- 利用Data URL(data:image/jpg;base64,)将小图片生成数据流形式
- Codeforces Round #431 (Div. 2) D Rooter's Song
- hdu 4965 Fast Matrix Calculation 矩阵
- 一个例子学会CountDownLatch
- 设计师到底能不能自己进行可用性测试(上)
- Windows如何Share目录给docker容器
- spark2.2.0源码学习过程记录:Day6
- 为常用的工具和语言自定义Sublime Text的编译系统
- 【51NOD 1675】序列变换
- 距离度量之马氏距离