没事我以为那个表达式没人写呢,老师上课提过一嘴
不知道555这种思路我都挺难想的
如果对g的遍历不理解我加了一下注释:
#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi 0
I AK IOI;
int n,w,h;
struct node{
int x,y;
};
struct per{
int id,op,p,t,cha;
node en;
}a[200005];
unordered_map<int,vector<int> >g;
int main(){
//freopen("","r",stdin);
//freopen("","w",stdout);
cin>>n>>w>>h;
vector<node>ans(n+1);
for(int i=1;i<=n;i++){
cin>>a[i].op>>a[i].p>>a[i].t;
a[i].id=i;
a[i].cha=a[i].t-a[i].p;
if(a[i].op==1)a[i].en={w,a[i].p};
else a[i].en={a[i].p,h};
g[a[i].cha].push_back(i);
}
for(auto it:g){
vector<int>op1,op2;
for(auto i:it.second){
if(a[i].op==1)op1.push_back(i);//如果方向是第一类则加入op1
else op2.push_back(i);//如果方向是第二类则加入op2
}
sort(op1.begin(),op1.end(),[&](int t1,int t2){
return a[t1].p<a[t2].p;
});//将op1按照p升序排序
sort(op2.begin(),op2.end(),[&](int t1,int t2){
return a[t1].p>a[t2].p;
});//将op2按照p降序排序
vector<int>s;
s.insert(s.end(),op1.begin(),op1.end());
s.insert(s.end(),op2.begin(),op2.end());
//将所有点加入s
vector<node>res;
for(auto f:s)res.push_back(a[f].en);//将s中的所有点的终点加入res
reverse(res.begin(),res.end());//将res反转
for(int j=0;j<s.size();j++)ans[a[s[j]].id]=res[j];//将res按照id顺序加入ans
}
for(int i=1;i<=n;i++)cout<<ans[i].x<<' '<<ans[i].y<<endl;
i_ak ioi;
}
今天有巨佬帮忙吗?
这里的en单独放一个数组
吃瓜看戏
关于s的全删掉
外面添加一个函数f,用于计算最终到达的点和碰撞检测
void f(int l, int r){
int cnt = 0, k = r+1;
while(a[k-1].op == 1 && l < k){
k--;
}
for(int i = k; i <= r; i++){
en[++cnt] = node(w, a[i].p);
}
for(int i = l; i < k; i++){
en[++cnt] = node(a[i].p, h);
}
for(int i = l; i <= r; i++){
ans[a[i].id] = en[i-l+1];
}
}
g
数组不要了
这里改成
int l = 1;
hs[n+1].p = -1e18;
hs[n+1].t = 1e18;
for(int i = 2; i <= n+1; i++){
if(a[i].cha != a[i-1].cha){
f(l, i-1);
l = i;
}
}
然后这里
node结构体里添加构造函数
struct node{
int x, y;
node() {}
node(int a, int b){
x = a;
y = b;
}
}
接着就是这里
标 ← 的删掉
输入完之后把a数组排序,
sort(a+1, a+1+n, cmp)
bool cmp(per a, per b){
if(a.cha == b.cha){
if(a.op == b.op){
if(a.op == 2){
return a.p > b.p;
}else{
return b.p > a.p;
}
}else{
return a.op > b.op;
}
}else{
return a.cha > b.cha;
}
}
刚上完课,咋样,现在代码给我发一下看看
别@了好吗