[CSUST] 新生第二次月赛解题报告

题目传送门: http://www.acmore.net/JudgeOnline/contest.php?cid=1027

A::难度值4

考点:指针的运用

CodeForce 251A 官方题解:

Let's select the rightmost point of ourtriplet. In order to do this we can iterate over all points in ascending orderof their X-coordinate. At the same time we'll maintain a pointer to theleftmost point which lays on the distance not greater than d from the currentrightmost point. We can easily find out the number of points in the segmentbetween two pointers, excluding the rightmost point. Let's call this number k.Then there exist exactly k * (k - 1) / 2 triplets of points with the fixedrightmost point. The only thing left is to sum up these values for allrightmost points.

思路: 从右向左遍历数组,设置两个指针I,j分别控制3点中的首尾两点,只要a[j]-a[i]<=d ,则在固定尾指针的情况下,从首指针之后的数中任意挑选两个都能成为3 points,那就是用C(x,2)组合数就能解决,由于只有两个指针的遍历移动,所以复杂度为O(2*n)

注意:涉及到组合数, k * (k - 1) / 2会超出int范围,所以要使用long long (VC下是__int64)

 

B:难度值0

考点:字符串比较函数

先比较两个字符串的长度,长度相同时strcmp两个字符串就行,不过要注意审题数的范围是10^100所以不能用int或long long,不要盲目提交。

 

C:难度值 1

考点:递归

每一个蜂窝步数 = 左边邻近两个蜂窝步数之和

因此递归解决,周练原题

 

D:难度值2

考点:字符串应用

数据很弱,用暴力就能够做出

比如abbab,我们插入无关字符构造成新的字符串 #a#b#b#a#b#b#

这样做的好处是不用判断它是轴对称还是中心对称

对于每一个字符向两边拓展遍历,找出他的最大回文数后,遍历一遍取最大值即可

不用manacher算法就可以解,如果这题数据是100000以上那么就必须用manacher来做了

以下是manacher的一个解析,大家可以学习一下这个做法

http://blog.sina.com.cn/s/blog_70811e1a01014esn.html

 

E:难度2

考点:sort排序

结构体排序。

姓名查找如果用哈希表更快,但这题数据不强,直接依次匹配即可。

F:难度3

考点:模拟

直接按他的规则模拟走法,走过的点标记为已经访问过,如果走到访问过的点,就说明成环了。

 

 

G:难度3

考点:位运算

分别取异或,最后剩下的数就是要求的数

a,b 看为二进制数 比如 1和15的二进制分别是:

         0001

^       1111

________

         1110

这时候假设再来一个15 取异或

         1110

^       1111

________

         0001

我们又得到了1,这时候我们发现,出现偶数次的数字被自己抵消了,即a^a=0

我们运用这个结论可以很快得出答案,复杂度O(n)

 

 

H:难度2

考点:点与直线

判断最多有多少点在同一直线上

任意两点确定直线后每个点依次带入直线方程。求出最大值即可。

 

 

I:难度2

考点:数据结构——栈

题意明确是栈的思想,这题明显用数组模拟栈更方便

back就把当前指针向前指,forward就把当前指针向后指

visit就把尾指针+1。

注意有首页和尾页,指针要注意处理不然容易越界

 

J:难度1

考点:简单循环

直接循环找每个窗户第一个”….”所在的行数就行


转载于:https://www.cnblogs.com/Felix-F/archive/2013/01/08/3223643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值