当前位置: 首页 > news >正文

打卡信奥刷题(3091)用C++实现信奥题 P7133 小 P 的星空

P7133 小 P 的星空

题目背景

星依云渚溅溅,露零玉液涓涓,宝砌哀兰剪剪。碧天如练,光摇北斗阑干。

—— 【元】孟昉《天净沙 · 星依云渚溅溅》

小 P 漫步于星空之下。

“摘下星星送给你,你就是我的全世界”。

“今夜,我不关心人类,我只想你”。

题目描述

将星空看作一个平面直角坐标系,小 P 所在的位置为(0,0)(0,0)(0,0),即坐标原点。天上共有nnn颗星星,第iii颗星星的坐标为(xi,yi)(x_i,y_i)(xi,yi)

小 P 最初面向点(1,0)(1,0)(1,0),然后小 P 会进行mmm次原地转动,第iii次转动后会面向点(ui,vi)(u_i,v_i)(ui,vi)

他可以选择逆时针转动或顺时针转动,当面向此次旋转最终将要面向的方向时,此次转动立即停止。

他相信,在转动过程中,越多的星星出现在他正前方,他【数据删除】。

小 P 想知道,每一次转动过程中他最多可以让多少星星出现在他正前方(包括转动初始方向和结束方向正前方看到的星星)。

输入格式

总共包括n+m+1n+m+1n+m+1行。

第一行包含两个正整数n,mn,mn,m,分别表示星星颗数和转动次数。

接下来的nnn行,每行两个整数xi,yix_i,y_ixi,yi

接下来的mmm行,每行两个整数ui,viu_i,v_iui,vi,意义如【题目描述】中所述。

每行的两个数字间由单个空格隔开,数据为 Linux 格式,行末保证没有多余空格。

输出格式

mmm行,每行一个整数。第iii行的整数表示第iii次转动的答案。

输入输出样例 #1

输入 #1

5 2 1 0 1 1 2 2 -1 2 -2 -1 -1 1 -1 2

输出 #1

4 5

输入输出样例 #2

输入 #2

见下发文件 ex_star2.in

输出 #2

见下发文件 ex_star2.out

输入输出样例 #3

输入 #3

见下发文件 ex_star3.in

输出 #3

见下发文件 ex_star3.out

说明/提示

样例1示意图如下:

橙色点为星星,绿色点小 P 第一次的转动位置。第一次转动,从(1,0)(1,0)(1,0)转到(−1,1)(-1,1)(1,1)。若顺时针转动(蓝色区域,包括边界),(1,0)(1,0)(1,0),(−2,−1)(-2,-1)(2,1),共计222颗星星;而逆时针转动(绿色区域,包括边界),(1,0)(1,0)(1,0),(1,1)(1,1)(1,1),(2,2)(2,2)(2,2),(−1,2)(-1,2)(1,2),共计444颗星星。

第二次转动,从(−1,1)(-1,1)(1,1)转到(−1,2)(-1,2)(1,2),逆时针转动,555颗星星都会在转动过程中出现在小 P 正前方。

除测试点242424252525外,其他测试点保证所有坐标的绝对值≤1000\le 10001000

对于前121212个测试点,保证原点到任意星星形成的射线上没有其他星星。

23,2523,2523,25测试点外,对于所有编号为奇数的测试点,保证小 P 初始面向方向和每次转动目标方向上没有任何星星。

22,2422,2422,24测试点外,对于所有编号为偶数的测试点,保证小 P 初始面向方向和每次转动目标方向上至少有一颗星星。

对于100%100\%100%的数据,保证星星的坐标互不相同,保证坐标不会出现(0,0)(0,0)(0,0),保证不会出现转动初始方向等于结束方向。

样例333满足偶数测试点的限制。

C++实现

#include<bits/stdc++.h>usingnamespacestd;doublec1[100005],c2[100005],d1[100005],d2[100005];doublepi=acos(-1);intmain(){intn,m;cin>>n>>m;for(inti=1;i<=n;i++){intx,y;scanf("%d%d",&x,&y);c1[i]=acos(1.0*x/sqrt(1.0*x*x+1.0*y*y));if(y<0)c1[i]=2*pi-c1[i];longlongtt=c1[i]*10000000000ll;c1[i]=1.0*tt/10000000000ll;}for(inti=1;i<=m;i++){intu,v;scanf("%d%d",&u,&v);c2[i]=acos(1.0*u/sqrt(1.0*u*u+1.0*v*v));if(v<0)c2[i]=2*pi-c2[i];longlongtt=c2[i]*10000000000ll;c2[i]=1.0*tt/10000000000ll;}sort(c1+1,c1+n+1);doublecc=0;for(inti=1;i<=m;i++){doubletc1=min(cc,c2[i]),tc2=max(cc,c2[i]);intwz1=lower_bound(c1+1,c1+n+1,tc1)-c1;intwz2=upper_bound(c1+1,c1+n+1,tc2)-c1;intans=wz2-wz1;wz1=upper_bound(c1+1,c1+n+1,tc1)-c1;wz2=lower_bound(c1+1,c1+n+1,tc2)-c1;ans=max(ans,n-wz2+wz1);printf("%d\n",ans);cc=c2[i];}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.jsqmd.com/news/619139/

相关文章:

  • 【2026奇点大会权威解码】:AI原生开源生态的5大技术拐点与3类开发者必抢入场券
  • 基于plc材料分拣控制系统设计
  • TMS320F280049系列文章之第N章 Flash API实战:从零构建Bootloader核心流程
  • AI时代,出海工厂如何抢占“AI推荐流量”?一篇讲透GEO新红利
  • BepInEx插件框架:5分钟掌握Unity游戏模组开发与注入技术
  • 拆穿名词诈骗!用大白话理解晦涩难懂的AI概念坊
  • 智能配电网的双时间尺度随机优化调度
  • React Native Decompiler:三层插件架构下的JavaScript打包代码逆向工程深度解析
  • beeline报错JavaHotSpot64-BitServerVM warning:INFO:os:commit_memorfailed:error=‘Cannot allocate memory‘
  • 为什么你的AI项目总卡在“最后一公里”?——组织适配度低于阈值62%的致命真相
  • 千问3.5-9B算法学习伴侣:LeetCode解题思路分析与代码生成
  • SmolVLA惊艳案例:从图像输入到6维连续动作输出的端到端可视化流程
  • QTableWidget 表格组件刻
  • 太阳能电池缺陷检测数据集:2624张电致发光图像的高性能AI训练基准
  • C++依赖关系分析:5个工具理清模块关系
  • 一文详解AI圈爆火概念—Harness Engineering:决定智能体系统上限的关键因素
  • Multi-Agent 的通信协议:消息格式、上下文共享与信息污染治理
  • 如何用Obsidian Weread插件将微信读书笔记转化为个人知识库
  • 你的AI应用正在被数据库拖垮?2026奇点大会披露:78.6%的LLM服务延迟源于存储层语义断层——这份选型 checklist 正在内部紧急分发
  • 产品经理年度述职全攻略:从职责梳理到未来规划的完整指南
  • Power BI--如何在堆积条形图中动态显示总计值
  • 北贝实业:以密封固化剂材料为核心,打造高品质地坪解决方案 - 博客万
  • 高性能EPUB转KEPUB架构解析:Go语言实现40-80倍性能提升的技术实现
  • 【限时解密】工信部信通院《AI原生系统经济性评估白皮书》未公开附录B:ROI阈值动态警戒线算法(v2.3.1内核版)
  • 高低温试验箱选购指南:2026年如何找到专业可靠的生产厂家? - 品牌推荐大师
  • 3种金融数据工程方案:用AKShare突破数据获取瓶颈(2024实战指南)
  • APK-Installer:Windows上的安卓应用安装专家,告别模拟器时代的轻量级解决方案
  • UI-TARS-desktop保姆级教程:5分钟云端部署,让AI帮你操作电脑
  • 从代码提交到模型上线:SITS2026定义的8个AI原生CI/CD必检关卡(含GitOps集成模板下载)
  • ECAPA-TDNN终极指南:3步构建99%准确率的说话人验证系统