第十三届蓝桥杯研究生组C++省赛

有一根围绕原点 O 顺时针旋转的棒 OA,初始时指向正上方(Y 轴正向)。

在平面中有若干物件,第 i个物件的坐标为 (xi,yi),价值为 zi。

当棒扫到某个物件时,棒的长度会瞬间增长 zi,且物件瞬间消失(棒的顶端恰好碰到物件也视为扫到),如果此时增长完的棒又额外碰到了其他物件,也按上述方式消去(它和上述那个点视为同时消失)。

如果将物件按照消失的时间排序,则每个物件有一个排名,同时消失的物件排名相同,请输出每个物件的排名,如果物件永远不会消失则输出 −1。

所有物品坐标两两不同。

输入格式

输入第一行包含两个整数 n、L,用一个空格分隔,分别表示物件数量和棒的初始长度。

接下来 n 行每行包含第三个整数 xi,yi,zi。

输出格式

输出一行包含 n 整数,相邻两个整数间用一个空格分隔,依次表示每个物件的排名。

4649. 扫描游戏 - AcWing题库

本质上属于模拟

#include
#include
#include
#include
#include
using namespace std;
const int N=200010;
typedef long long ll;

struct e//结构体存储物件的所有信息
{
    ll x,y,z;
    ll q,id;//象限 索引
    double len;//长度
}p[N];

ll x,y,z,l,n,ans[N];
bool vis[N];//记录每个物件是否遍历

ll get_q(ll x,ll y)//判断在第几象限
{
    if(x>=0 && y>0) return 1;
    if(x>0 && y<=0) return 2;
    if(x<=0 && y<0) return 3;
    return 4;
}

bool cmp(e a,e b)//自定义排序规则
{
    if(a.q!=b.q) return a.q0;//如果象限同 按照极角大小拍 和y轴夹角大小
    return a.len

你可能感兴趣的:(算法,c语言,c++,蓝桥杯)