第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(热身赛) A-2020


2020 is a special integer, it's formed of two same integers (20 and 20).

We call a number is a good number, if and only if it can be formed of two same integers(without leading zero).

For example: 2020 11, 19991999 are good numbers, but 303, 1122, 1221 are not.

Now you need to count the number of good numbers in \([1,N]\)
在这里插入图片描述

在这里插入图片描述

题意

给出一个 <=1e18 的n 求从1到n中有多少个数是由两个相同的数构成的。

思路

输入字符串写出打表程序,发现
奇数时答案为s.size()/2 个9
偶数时把字符串分成两半,如果后面的数大于等于前面的,就输出前面的数,否则把字符串转换为数减一后输出。

代码

打表代码

#include 
using namespace std;

bool ok(string s)
{
	int len = s.size();
	if(len & 1) return false;
	string now1 = "" , now2 = "";
	for(int i=0;i>s;
		if(ok(s)) ans++;
		cout<

AC代码

#include 
using namespace std;

bool ok(string s)
{
	int len = s.size();
	if(len & 1) return false;
	string now1 = "" , now2 = "";
	for(int i=0;i>s;
	int len = s.size();
	if(len & 1)
	{
		int l = len/2;
		for(int i=0;i=now1) cout<>n;
			n--;
			cout<