【反思】2019年广东工业大学腾讯杯新生程序设计竞赛(同步赛)

昨天下午在牛客上签了三场比赛的到,然后晚上又发现还有一场广东工业大学的同步赛,本来打算签chougejiang就溜的,然后看到了几题都挺好的,就试着做了一下。
(然后就有了反思= .=)

这次比赛最大的收获就是明白了:
在稿纸上演算的重要性!

首先上题目

1.危险的台阶

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
在这里插入图片描述

圣杯,虽然表面上被称作万能愿望机,但已经失去了原本的光华。污秽不堪的黑泥已经染指了圣杯,还是说,这些黑泥出自圣杯本身呢。这些并不应该在面对一个暴乱的圣杯的时候去思考。
「格蕾」
「是,亚德!」格蕾从右手处拉出装着亚德的鸟笼
「直接进入解除封印阶段吧」
「欸」格蕾对我的指令似乎有所迟疑,但还是相信我的决定「我明白了,但是周围的魔力被不断的摄取固化了」
「用这个」我拿出之前获得的钥匙,那是王之键,是王之宝库的钥匙。虽然正常情况下没有办法使用,但是现在的情况已经足够不正常了。
要打开王之宝库除了英雄王本人,还有一种办法就是对王之键进行魔力供给。虽然实际情况很复杂,但是我还是想到了一个很简单的物理模型。就好像在悬崖上有n块长度均为L,重量均为m而且质量分布均匀的石板。要把石板用台阶式的堆叠方式,延伸出去。在任何一块石板都不会掉落悬崖的情况下,尽可能的使石板的最右端远离悬崖边缘。此时石板最右端和悬崖边缘的距离就是我需要进行魔力供给的量。

输入描述:

第一行输入三个正整数,包括石板个数n(1<=n<=1e5),石板长度L(1<=L<=1e9),石板质量m(1<=m<=1e9)

输出描述:

输出最右那一块石板的最右端距离悬崖边缘的最大距离(保留四位小数)

示例输入
1 1 1
示例输出
0.5000
解题关键词:重心。显然石板最大的伸出长度时的情况即 所有石板构成的形体 的重心落在悬崖边上时的情况。
解题思路:我首先想的是从最高(外)处那块石板开始考虑,假设每块石板的长度为1。当只有一块石阶时,显然,由于石板密度均匀,一块长度为1的石板的重心即为1/2,因此,最大伸出长度为1/2。然后,考虑两块石板时的情况,如下图。只需找到两块石板的重心即可,显然可得,最大长度为1/2+1/4=3/4。到这里的思考显然没问题,但是比赛时我看到这里,心里已经默认结果为(1/2)L+(1/4)L+(1/8)L+…+(1/2*n)L了,当然,WA了。然后后来由于打(签)了三场比赛还有白天没午睡太累了,就趴着睡觉了,后来经hg的提醒和演算,才发现结果应是 (1/2)L+(1/4)L+(1/6)L+…+(1/2n)L(可根据重心联立方程组解得第三块石板伸出长度为1/6),当然学长肯定应该也不是单纯靠脑袋想出来的,想必也是经过演算得到规律。

在这里插入图片描述
贴上AC代码

#include <cstdio>
#include <math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main ()
{
    double n,l,m,sum=0;
    scanf("%lf %lf %lf",&n,&l,&m);
    int j=2;
    for(int i=0; i<n; i++)
    {
        sum+=l/j;  j+=2;
    }
    printf("%.4lf",sum);
    return 0;
}

-------------------------------------分割线-----------------------------------------------

1.消亡的质数

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

「你来了啊,埃尔梅罗二世」这一切事件的元凶正站在那圣杯之下「这一切都要结束了」
「呜」我的想法被现实无情的敲碎了,从见到那位从者的那一刻我就该意识到圣杯也许是残缺的,但是依然是圣杯。从一开始就没有办法阻止这个仪式,这七骑从者中早已有六骑陨落。这场虚伪的战争早已写下了胜者的名字。之前的影从者也只是幌子罢了,只是希望的残影。和我缔结了契约的理查一世也如同燃烧后的灰烬一般消失了。
「那么,你就要到达根源了吗」
「那是不可能的」他的脸上没有任何表情,只是完全的冷漠「你还带着四骑士之信吧,最终的答案就写在信上」
「why dun it」
「到了如今这个地步,做这件事的原因你已然了解于心中,为何还要一介亡人来回答呢。我已经放弃了,而你还没有吧,太可悲了」
我还想更进一步的询问,但他已经消失了。我打开随身携带的那封信,上面写着许多数字,都是质数。其中有的质数可能等于某两个正整数的立方差。判断出所给的每个质数是否与某两个正整数的立方差相等,我终于发现了最终他要说的是什么了。

输入描述:

第一行输入一个整数T (1<=T<=100),代表有T个样例。
对于每组样例,输入一行,每行输入一个质数p (2<=p<=1e15)

输出描述:

对于每一组样例,若p与某两个正整数的立方差相等,输出"YES",否则输出"NO"(不包括双引号)

样例输入:
5 
2 
3 
5 
7 
11
样例输出:
NO 
NO 
NO 
YES 
NO
解题思路:这道题显然暴力会TLE,但是我思考了很久,确实想不到优化暴力的思路。后来查看题解时发现,原来这是一道高中or初中数学题。。(数学于算法的重要性毫无疑问)。先上题解:

在这里插入图片描述

根据质数的性质:只能被1和它本身整除,又有x³-y³=p化简得(x−y)*(x²+xy+y²)=p,可见p有因子x−y和x²+xy+y²显然后者在该题背景下不可能为1,因此,所有质数p只能被两个相邻的整数表示为x³-y³=p

贴上AC代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll p;
        bool flag = 0;
        cin>>p;
        for(ll i = 1; ; i++)
        {
            ll a = i*i*i;
            ll b = (i+1)*(i+1)*(i+1);
            if(b - a == p)
            {
                flag = 1;
                break;
            }
            if(b - a > p)
            {
                break;
            }
        }
        cout<<((flag)?"YES\n":"NO\n");
    }
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hesorchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值