ARC D求调
  • 板块学术版
  • 楼主code_hyx
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/17 22:04
  • 上次更新2024/3/18 13:13:31
查看原帖
ARC D求调
530797
code_hyx楼主2024/3/17 22:04

只对了两个点

#include<bits/stdc++.h>
#define int long long
using namespace std;
long long t,f[20]={0,1,12,123,1323,13323,133323,1333323,13333323,133333323,1333333323,13333333323,133333333323,1333333333323,13333333333323,133333333333323,1333333333333323,13333333333333323,133333333333333323,133333333333333323};
long long get_pow(int x)
{
	int cnt=0,s=1;
	while(s<=x)
	{
		cnt++;
		s*=10;
	}
	return cnt-1;
}
long long ten_pow(int x)
{
	int s=1;
	while(x--)
	{
		s*=10;
	}
	return s;
}
signed main()
{
	cin>>t;
	while(t--)
	{
		int n,ans=0,bt=0,k=0;
		cin>>n;
		if(n==1000000000000000000)
		{
			cout<<2333333333333323+1;
			continue;
		}
		bt=get_pow(n);
		//cout<<"ok\n";
		//cout<<"bt="<<bt<<"\n";
		ans+=f[bt];
		k=ten_pow(bt);
		//cout<<"k="<<k<<"\n";
		if(bt==0)
		{
			cout<<1<<"\n";
			continue;
		}
		ans+=min(n,k+ten_pow(bt-1)-1)-k+1;
		if(ans>=8*k)ans+=min(n,8*k+ten_pow(bt-1)-1)-8*k+1;
		if(ans>=9*k)ans+=min(n,9*k+ten_pow(bt)-1)-9*k+1;
		cout<<ans<<"\n";
	}
	return 0;
}
/*2333333333333323*/
2024/3/17 22:04
加载中...