2 条题解

  • 2
    @ 2024-9-9 14:20:28
    #include<bits/stdc++.h>
    using namespace std;
    int a[10],b[10];
    void hh(int fw)
    {
    	while(fw)
    	{
    		a[fw%10]++;
    		fw/=10;
    	}
    }
    void hh1(int fw)
    {
    	int j=0;
    	while(fw)
    	{
    		j++;
    		b[fw%10]++;
    		fw/=10;
    	}
    	if(j<4)
    	b[0]=b[0]+4-j;
    }
    void hh2(int fw)
    {
    	int j=0;
    	while(fw)
    	{
    //		j++;
    		a[fw%10]+=10000;
    		fw/=10;
    	}
    //	if(j<4)
    //	a[0]=a[0]+4-j;
    }
    int main()
    {
    	int n,m;
    	cin>>n;
    //	cout<<n;
    	if(n<=10000)
    	{
    		for(int i=1;i<=n;i++)
    		hh(i);
    	}
    	else
    	{
    		for(int i=0;i<=9999;i++)
    		{
    			hh1(i);
    		}
    		for(int i=1;i<=9999;i++)
    		{
    			hh(i);
    		}
    		m=n/10000-1;
    		for(int i=0;i<=9;i++)
    		{
    			a[i]+=b[i]*m;
    		}
    		for(int i=1;i<=m;i++)
    		{
    			hh2(i);
    		}
    		for(int i=(n/10000)*10000;i<=n;i++)
    		{
    			hh(i);
    		}
    	}
    	
    	for(int i=0;i<=9;i++)
    	{
    		cout<<a[i]<<endl;
    	}
    }
    
    • 0
      @ 2024-1-6 19:38:22

      暴力解决这道题,它真的不是我用了整整一个半小时硬熬出来的<哭>

      #include<bits/stdc++.h>
      using namespace std;
      int a[10],nb[11];
      long long int n;
      void cs(int b,int ws,int syw)
      {
      	if(ws==1)
      	{
      		for(int i=1;i<=b;i++)
      		{
      			a[i]++;
      		}
      	}
      	if(ws==2)
      	{
      		a[nb[2]]+=nb[1];
      		for(int i=1;i<=b;i++)
      		{
      			for(int j=0;j<=9;j++)
      			{
      				if(i==j+1&&j!=0)a[j]+=10;
      				else
      				{
      				if(i==j)a[j]+=2;
      				else a[j]++;
      			}
      			}
      		}
      	}
      	if(ws==3)
      	{
      		a[nb[3]]+=nb[2]*10+nb[1];
      		if(nb[2]!=0)a[0]+=9;
      		for(int i=1;i<=b;i++)
      		{
      			for(int j=0;j<=9;j++)
      			{
      				if(i==j+1&&j!=0)a[j]+=119;
      				else
      				{
      				if(i==j&&i!=0)a[j]+=21;
      				else
      				{
      					if(j==0&&i==1)a[j]+=11;
      					else a[j]+=20;
      				}
      				
      			}
      		}
      	}
      }
      	if(ws==4)
      	{
      		a[nb[4]]+=nb[3]*100+nb[2]*10+nb[1];
      		if(nb[3]!=0)a[0]+=99+9;
      		for(int i=1;i<=b;i++)
      		{
      			for(int j=0;j<=9;j++)
      			{
      				if(i==j+1&&j!=0)a[j]+=1299;
      				else
      				{
      				if(i==j&&i!=0)a[j]+=301;
      				else
      				{
      					if(j==0&&i==1)a[j]+=192;
      					else a[j]+=300;
      				}
      				
      			}
      		}
      	}
      }
      	if(ws==5)
      	{
      		a[nb[5]]+=nb[4]*1000+nb[3]*100+nb[2]*10+nb[1];
      		if(nb[4]!=0)a[0]+=999+99+9;
      		for(int i=1;i<=b;i++)
      		{
      			for(int j=0;j<=9;j++)
      			{
      				if(i==j+1&&j!=0)a[j]+=13999;
      				else
      				{
      				if(i==j&&i!=0)a[j]+=4001;
      				else
      				{
      					if(j==0&&i==1)a[j]+=2893;
      					else a[j]+=4000;
      				}
      				
      			}
      		}
      	}
      }
      	if(ws==6)
      	{
      		a[nb[6]]+=nb[5]*10000+nb[4]*1000+nb[3]*100+nb[2]*10+nb[1];
      		if(nb[5]!=0)a[0]+=9999+999+99+9;
      		for(int i=1;i<=b;i++)
      		{
      			for(int j=0;j<=9;j++)
      			{
      				if(i==j+1&&j!=0)a[j]+=149999;
      				else
      				{
      				if(i==j&&i!=0)a[j]+=50001;
      				else
      				{
      					if(j==0&&i==1)a[j]+=38894;
      					else a[j]+=50000;
      				}
      				
      			}
      		}
      	}
      	}
      	if(ws==7)
      	{
      		a[nb[7]]+=nb[6]*100000+nb[5]*10000+nb[4]*1000+nb[3]*100+nb[2]*10+nb[1];
      		if(nb[6]!=0)a[0]+=99999+9999+999+99+9;
      		for(int i=1;i<=b;i++)
      		{
      			for(int j=0;j<=9;j++)
      			{
      				if(i==j+1&&j!=0)a[j]+=1599999;
      				else
      				{
      				if(i==j&&i!=0)a[j]+=600001;
      				else
      				{
      					if(j==0&&i==1)a[j]+=488895;
      					else a[j]+=600000;
      				}
      				
      			}
      		}
      	}
      		}
      	if(ws==8)
      	{
      		a[nb[8]]+=nb[7]*1000000+nb[6]*100000+nb[5]*10000+nb[4]*1000+nb[3]*100+nb[2]*10+nb[1];
      		if(nb[7]!=0)a[0]+=999999+99999+9999+999+99+9;
      		for(int i=1;i<=b;i++)
      		{
      			for(int j=0;j<=9;j++)
      			{
      				if(i==j+1&&j!=0)a[j]+=16999999;
      				else
      				{
      				if(i==j&&i!=0)a[j]+=7000001;
      				else
      				{
      					if(j==0&&i==1)a[j]+=5888896;
      					else a[j]+=7000000;
      				}
      				
      			}
      		}
      	}
      	}
      
      	if(ws==9)
      	{
      	a[nb[9]]+=nb[8]*10000000+nb[7]*1000000+nb[6]*100000+nb[5]*10000+nb[4]*1000+nb[3]*100+nb[2]*10+nb[1];
      		if(nb[7]!=0)a[0]+=9999999+999999+99999+9999+999+99+9;
      		for(int i=1;i<=b;i++)
      		{
      			for(int j=0;j<=9;j++)
      			{
      				if(i==j+1&&j!=0)a[j]+=179999999;
      				else
      				{
      				if(i==j&&i!=0)a[j]+=80000001;
      				else
      				{
      					if(j==0&&i==1)a[j]+=68888897;
      					else a[j]+=8000000;
      				}
      				
      			}
      		}
      	}
      }
      }
      int main()
      {
      	int k=0,ds,ds1=1;
      	int ws=1;
      	cin>>n;
      	ds=n;
      	while(ds!=0)
      	{
      		nb[ds1]=ds%10;
      		ds1++;
      		ds=ds/10;
      	}
      	while(n!=0)
      	{
      		
      		cs(n%10,ws,k);
      		ws++;
      		k=n%10;
      		n=n/10;
      	}
      	for(int i=0;i<=9;i++)
      	{
      		cout<<a[i]<<endl;
      	}
      }
      
      • 1

      信息

      ID
      410
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      递交数
      92
      已通过
      20
      上传者