题目见:
USACO 2024年12月比赛铜级问题1. 循环舍入(USACO 2024 December Contest, Bronze Problem 1. Roundabount Rounding)
最简单的青铜级
亲测所有得分点通过哈!
下一篇会给解题分析哦!
#include <iostream>
using namespace std;
int main() {
int T;
cin >> T;
long long diff_count[9] = {
5,
55,
555,
5555,
55555,
555555,
5555555,
55555555,
555555555 };
long long range_start[9] = {
44,
444,
4444,
44444,
444444,
4444444,
44444444,
444444444,
4444444444 };
long long range_end[9] = {
49,
499,
4999,
49999,
499999,
4999999,
49999999,
499999999,
4999999999 };
for (int i = 1; i <= T; i++)
{
int diffcount = 0;
long long N = 0, temp = 0;
cin >> N;
temp = N / 10;
int pow = 0;
while (temp > 0) {
if (temp >= 5)
{
diffcount += diff_count[pow];
pow++;
}
temp /= 10;
}
if (N > range_start[pow] && N <= range_end[pow])
diffcount += (N - range_start[pow]);
cout << diffcount << endl;
}
}
USACO(United States of America Computing Olympiad,美国信息学奥林匹克竞赛)是一项全球性的青少年编程竞赛,各国中小学生都可以参赛,并且不收取任何参赛费用。USACO旨在通过编程挑战选拔出优秀的学生代表美国参加国际信息学奥林匹克竞赛(IOI)
题目摘要:
奶牛 Bessie 回到学校了!她开始做她的数学作业,在作业中她被要求将正整数四舍五入到 10 的幂要将一个正整数a四舍五入到最接近的 10’,其中6为正整数,Bessie 首先找到从右往左数第6个数位。令:为这个数位。
如果r>5,Bessie 将a增加 10’
然后,Bessie 将从右侧开始直至第6个数位的所有数位均设置为 0。
例如,如果 Bessie 想要将 456 四舍五入到最接近的 10(百位),Bessie 会首先找到从右往左数第2个数位5。这意味着æ=5。
然后由于业>5,Bessie 将a增加 100。最后,Bessie 将a中从右侧开始直至第2个数位的所有数位设置为 0,结果为 500.
但是,如果 Bessie 将 446 四舍五入到最接近的 10?,她将得到 400。
在看了 Bessie 的作业后,Elsie 认为她已经发明了一种新的舍入方式:链式舍入。要链式舍入到最接近的 10’,Elsie 将首先舍入到最接近的 10,然后舍入到最接近的 10”,以此类推,直至舍入到最接近的 10”
Bessie 认为 Elsie 是错误的,但她太忙于数学作业,无法确认她的怀疑。她请你计算出存在多少个不小于2且不超过 N 的整数æ(1<N<10’),使得将: 四舍五入到最接近的 10”与链式舍入到最接近的 10”的结果不同,其中 P是满足 10”>r的最小整数