【题解】关于新生赛部分题目的

问题 L: 寄蒜几盒?题目传送门此题很难吗?貌似是,反正当时没人A掉,或许是因为大佬们不主动带路,我们没怎么敢看这道题,赛后看题,发现emm…这题还可以(逃)题目描述见传送门我们可以提炼出几个要点:题目是个圆,弱弱的问一句有存圆的数据结构或类型嘛?呃,看成一条直线不就行。题目数据量感人,我能不能O(N^3)解决?emm....步入正题:我的思路:1.首先既然能构成等边三角形,那...
摘要由CSDN通过智能技术生成

问题 L: 寄蒜几盒?

题目传送门

此题很难吗?貌似是,反正当时没人A掉,或许是因为大佬们不主动带路,我们没怎么敢看这道题,赛后看题,发现emm…这题还可以(逃)

题目描述见传送门

我们可以提炼出几个要点:

题目是个圆,弱弱的问一句有存圆的数据结构或类型嘛?呃,看成一条直线不就行。
题目数据量感人,我能不能O(N^3)解决?emm....

步入正题:

我的思路:
1.首先既然能构成等边三角形,那么必然,三个点是要平分整个圆的。也就是说只要存在一组三个点他们之间的距离都是三分之一圆弧就行,也就是周长的三分之一。
2.把一个圆找个位置切开,然后拉成一条直线,然后把题目给我们的每一个圆上的点都在这条虚拟的直线上标记一下顺便记录每个点的坐标,那么如果我们能找到三个点坐标之差都为三分之一圆弧就好了。
3.问题在于怎么把虚拟的直线给存下来(用map)

在这里插入图片描述

在这里插入图片描述

为什么用map,一般标记东西不是直接用数组嘛?因为这里直线可能过于长,数组会直接爆炸,(现场的时候我就没想到用map,赛完康哥给我提示一下,我恍然大雾,你说你真是的,为啥不在现场赛的时候给我个眼神提示我一下呢?差评!哈哈emm…)我们这里开一个map记录一下直线上的哪个坐标被标记了 这样操作map< long long bool> m;
这里贴上AC代码,速度一般,还有很大的优化潜力。没朋哥快,但是比林姐快多了(逃…)
#include<iostream>
#include<map>
using namespace std;
map<long long,int>m;
int n;
long long ll;  
long long p;
long long a;
long long x[1000006];
int main()
{
   
 cin>>n;
 for(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值