“卓见杯”第五届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