2 条题解

  • 0
    @ 2023-5-22 20:35:31
    #include <bits/stdc++.h>
    using namespace std;
    int l,r;
    int f[8][10];
    inline void init(){
    	for(int i=0;i<=9;i++) if(i!=4) f[1][i]=1;
    	for(int i=2;i<=7;i++)
    		for(int j=0;j<=9;j++){
    			if(j==4) continue;
    			for(int k=0;k<=9;k++){
    				if(k==4||(k==2&&j==6)) continue;
    				f[i][j]+=f[i-1][k];
    			}
    		}
    }
    inline int dp(int n){
    	if(!n) return 1;
    	vector <int> nums;
    	while(n){
    		nums.push_back(n%10);
    		n/=10;
    	}
    	int res=0,last=0,x;
    	for(int i=nums.size()-1;i>=0;i--){
    		x=nums[i];
    		for(int j=0;j<x;j++){
    			if((last==6&&j==2)||j==4) continue;
    			res+=f[i+1][j];
    		}
    		if(x==4||(last==6&&x==2)) break;
    		last=x;
    		if(!i) res++;
    	}
    	return res;
    }
    int main(){
    	init();
    	while(1){
    		cin>>l>>r;
    		if(l==0&&r==0) return 0;
    		cout<<dp(r)-dp(l-1)<<endl;
    	}
    	return 0;
    }
    
    • -1
      @ 2023-8-2 18:53:48

      还是那句话

      我爱C++

      😕

      #include<bits/stdc++.h>
      
      using namespace std;
      
      int a[1000];
      int b[1000];
      int pot(int i, int j);
      bool ppt(int i);
      
      int main()
      {
      
          int n,m;
          while(cin >>n >>m){
              if(n==0 && m==0){break;}
              int k=pot(n,m);
              cout <<k <<endl;
          }
      
      	return 0;
      }
      
      int pot(int i,int j)
      {
      
          int a=0;
          for(int k=i; k<=j; k++){
              if(ppt(k)){a++;}
          }
      
          return a;
      }
      
      bool ppt(int i)
      {
      
          bool flag=true;
          int a=0,b=0;
          int k=i;
          for(int j=1; j>0; j++){
              a=i%10;
              i=i/10;
              if(a==4){
                  flag=false;
                  break;
              }
              if(i<10 && i==4){
                  flag=false;
                  break;
              }
              if(i<10 && i!=4){
                  break;
              }
          }
          a=0;
          i=k;
          for(int j=1; j>0; j++){
              if(j%2==1){
                  a=i%10;
                  i=i/10;
                  if(a==6 && b==2){
                      flag=false;
                  }
              }
              if(j%2==0){
                  b=i%10;
                  i=i/10;
                  if(b==6 && a==2){
                      flag=false;
                  }
              }
              if(i==0){break;}
          }
      
          return flag;
      }
      
      • @ 2023-8-4 13:51:58

        什么奇怪码风

      • @ 2023-9-6 20:23:04

        推荐用Pycharm写一段XD

      • @ 2023-9-7 20:39:19

        试着去loj提交一下?

    • 1

    信息

    ID
    646
    时间
    1000ms
    内存
    512MiB
    难度
    9
    标签
    递交数
    11
    已通过
    6
    上传者