@[Diary_51](/user/925688) 官方答案很显然罢(
考虑每个`,`的贡献,那么对于一个有`,`的,那么比他大的也一定有`,`,所以找到包含当前`,`最小的数。
比如第一个 `,` 最小就是 `1,000`,两个 `,` 最小就是 `1,000,000` 所以每次乘 `1000`,然后看比这个数 $>$ 的有多少个即可
by QWQ_123 @ 2024-03-21 20:58:47
速度慢
```cpp
#include<algorithm> //含sort函数等
#include<cmath> //关于数学函数的头文件
#include<cstring> //string字符串头文件
#include<cstdio> //C语言的头文件
#include<iomanip> //用于cout<<fixed<<setprecision()
#include<iostream> //含cin,cout
#include<queue> //普通队列(只能一边进一边出)(先进先出)
#include<deque> //双向队列(两边都可以进出)(先进先出)
#include<stack> //栈(先进后出,后进先出)
#include<list> //列表
#include<vector> //动态数组
#include<map> //关联式容器
#include<set> //集合
#include<climits> //INT_MAX与INT_MIN
using namespace std;
#define ull unsigned long long
ull n;
ull ans;
ull wei(ull x){ //x的位数
int y=0;
while(x){
y++;
x/=10;
}
return y;
}
int main()
{
cin>>n;
for(ull i=1000;/*1000开始有逗号*/i<=n;i++){
int p=wei(i)/3; //i有i的位数/3个逗号,因为都是int,所以没有小数
ans+=p;
}
cout<<ans<<endl;
return 0; //每日一个好习惯,老师远离我
}
```
by yc123bc @ 2024-03-21 21:08:27