“卓见杯”第五届CCPC中国大学生程序设计竞赛河南省赛经历

“卓见杯”第五届CCPC中国大学生程序设计竞赛河南省赛 ——2019.4.13


2019年4月13日对我来说,是个特殊的日子。早早的起床,早早的吃了早饭,7点30整便和伙伴们踏上了前往郑州轻工业大学的路上。

第一次参加这么正式的比赛,我一点也不紧张,因为是学长学姐带着我打的(哈哈,运气比较好,被学长选中加入他们队了),带给我更多的是兴奋。和我要好的朋友也去了,我问他紧张不,他说作为唯一的一组新生队,最不用紧张的就是他们了,把水题做完,然后再做一道思维题或找规律题就赚了,他们就抱着摸鱼的心态去的。一点毛病没有,要我我也会这样想。

坐了将近一个小时的车,终于到了目的地,首先进行的是开幕式,就是下图。

再之后便和大家进入了比赛的机房,找到我们的座位,打开电脑,学姐看了看codeblocks调试有没有问题,键盘按键有没有问题,顺不顺手,鼠标灵不灵。万万没想到我带的鼠标垫竟然派上了用场。

由于一些原因,比赛开始时间延迟了20分钟,这段时间就和学长学姐闲聊了一会儿,我作为我们队最菜的,c位自然不是我喽,只能当辅助了,本来以为有英文题呢,我英语还行,可以帮他们分析分析题意,谁知道一道英文题都没有,拿的两本字典都没用上,就说嘛,中国举办的CCPC比赛,肯定和ICPC不一样了。

正式比赛开始,学长先做水题了,过一会儿发了题册,我看第一题有人出,我就先看了第一题,学姐看了后半部分题。我发现第一题好像就是一道dp题,不就求最长递减子序列吗,看数据范围也不大,学长做完水题后,我就和学长讲第一题,学长很快敲完了,我造了几组测试数据,然后学长找了下代码错误,于是提交,过了。之后,我就看了看其他题,发现好多数据结构的题啊,是关于树的,虽然大一寒假自学了数据结构,对树有一定了解,但是也只是会一些基础的。看那几道树题把我看自闭了,没思路。这时学长和学姐讨论的另一道找规律题,开始敲了,但是样例一直过不了,代码也不好debug,花了好长时间才找到错误,就一个数该加1的,敲成减1了,我晕。提交后,然后过了,这时看了看榜单,还不错,在银牌区靠前,再过一道就金牌区了,可惜时间不够了,最后的时间学长开始做没人过的B题(应该做后面的一道题的),但是最后没写完。

比赛结束,我们又回到开幕式的场地,进入颁奖环节,虽然我们才出四题,但排名还算靠前,但是无缘金牌区了。哇,郑大一队是真的强,出了8题。

总之,这次比赛对我来说,还是有一定影响的,体验了比赛的流程,感受了现场的氛围,相信以后的类似比赛我都会习以为常了吧。这场比赛呢,让我意识到了团队合作的重要性,怎样分工,怎样使效率最大化,谁负责干什么,都应该是清清楚楚的。当然,这是从团队层面上来说的,对于个人层面,就是自己进步的空间还很大,又该抽时间恶补了。

学长的题解链接:

https://www.cnblogs.com/zzqc/p/10704290.html


回来之后,补了几道题,其中一题比学长的代码优化的一丢丢,就是下面一题.

题目描述

咕咕最近在学习初等数论,并且对下取整函数产生了极大的兴趣。下取整函数是指一个函数,自变量为 一个实数,因变量为一个整数,这个整数恰好是小于或等于自变量的最大的整数,通常记做 ⌊x⌋。例如, ⌊2.5⌋ = 2,⌊2⌋ = 2,⌊−2.5⌋ = −3。

咕咕发现,给定一个 a,并不是所有的自然数 n 都存在一个正整数 i 使得 ⌊n/i⌋ = a。那么,如果给定 l,r,咕咕好奇在区间 [l,r] 中有多少个正整数能使这个等式有正整数解 i 呢?

那么,聪明的你,你能告诉咕咕吗?

输入

第一行有一个整数 T(1 ≤ T ≤ 10^6),表示数据组数。接下来有 T 行,每行有三个数 a,l,r(1 ≤ a ≤ 10^18,1 ≤ l ≤ r ≤ 10^18),表示一组询问。

输出

输出 T 行,对每组询问,输出一个整数表示答案。

样例输入

4
5 7 10
7 39 42
1000 1000 1000
27 100 1000

样例输出

1
2
1
617

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
int t;
ll solve(ll n,ll a)
{
    if(n<a)return 0;
    if(n==a)return 1;
    ll m=n/a,ans=0;
    if(m<=a){
        ans+=m*(m-1)/2;
        if(n-m*a+1>=m)ans+=m;
        else ans+=n-m*a+1;
    }
    else {
        ans+=(1+a)*a/2;
        ans+=(m-a-1)*a;
        /*if(n-m*a+1>=a)ans+=a;
        else ans+=n-m*a+1;*/
        ans+=n-m*a+1;//不用判断了,后面剩下的数肯定都满足。    
    }
    return ans;
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        ll a,l,r;
        scanf("%lld%lld%lld",&a,&l,&r);
        ll ans=solve(r,a)-solve(l-1,a);
        printf("%lld\n",ans);
    }
    return 0;
}
 
/**************************************************************
    Problem: 2523
    User: 201808064207
    Language: C++
    Result: 正确
    Time:715 ms
    Memory:1648 kb
****************************************************************/

− − 2019.4.17 --2019.4.17 2019.4.17

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值