1.如果没有时限的话就一个一个枚举过来计算统计;有时限的话首先可以考虑打表。(不过10^9比较痛苦)
现场做的话这样考虑,动规。a〔i〕[j]表示从10^(i-1)到10^i-1页数中数码j有几个(就是i位数页数中数码j有几个)。用a[i][j]可以推a[i+1][j],最后还要稍稍处理一下。
2.经典的排序丫,数据很小,n^2排序都可以。编程方便就用冒泡吧,用插入排序也可以。快排对于小数据就失去意义了。
3.直接构造。先找第一位。比如10,找离他最近的三的幂次,就是9,于是r进制第三位(表示3^2)就是1;接下来原数减去这个幂次,就是1,再找离它最近的三的幂次,是9,于是r进制第一位(表示3^0)就是1,1减去1,变成0了,就可以了。
没有构造到的r进制位数就是0。
负数也一样,只不过取的是"-",比如-3,离它绝对值最近三的幂次是3,于是r进制第2位(表示3^1)就是“-”,接下来-3-(-3)=0,就结束了。
鄙视你我说了解题思路你都不能打程序还参加什么竞赛。另外,你们考试没有标程还叫什么考试?要标程当然自己去竞赛组委会要,我写一个程序给你又有什么意义?
第一题用贪心法做,第二题你的思路是正确的,要用二维数组然后判断,只是读入的时候要这样写:for i:=1 to n do
begin
for j:=1 to m do
read(a[i,j])
readln
end
这样就不存在什么有空格的问题了。还有第三条,数据量太大,可能会超时。
另外解释一下什么是数据范围,就是题目告诉你它会给你的数据的大小,让你有准备,定义好变量,以免到时候测评时运行超时(运行必须一秒钟内出结果,否则算错)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)