1 条题解

  • 0
    @ 2024-12-24 9:49:41

    C++ :

    #include <string>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    
    using namespace std;
    
    class TheLuckyGameDivTwo {
        public:
            static const int MAX = 5000;
    
            int t[MAX];
    
            bool check(int n) {
                while (n) {
                    int d = n%10;
                    n /= 10;
    
                    if (d != 4 && d != 7) {
                        return false;
                    }
                }
                return true;
            }
    
    
            int find(int a, int b, int jLen, int bLen) {
                int ret;
    
                memset(t, 0, sizeof(t));
    
                t[a] = check(a);
                for (int i = a+1; i <= b; ++i) {
                    t[i] = t[i-1]+check(i);
                }
    
                ret = -1;
                for (int i = a-1; i <= b-jLen; ++i) {
                    int aa = i;
                    int bb = i+jLen;
    
                    int cur = 1000005;
                    for (int j = aa; j <= bb-bLen; ++j) {
                        int tmp = t[j+bLen]-t[j];
                        cur = min(cur, tmp);
                    }
                    ret = max(ret, cur);
                }
    
                return ret;
            }
    };
    int main(){
      int a,b,jLen,bLen;
      class TheLuckyGameDivTwo solution;
      while(cin>>a>>b>>jLen>>bLen){
        cout<<solution.find(a,b,jLen,bLen)<<endl;
      }
      return 0;
    }
    
    

    Java :

    import java.util.*;
    
    public class Main{
        public static void main(String[] args){
            Scanner in=new Scanner(System.in);
            int[] ok=new int[5000];
            for(int i=1;i<=4747;i++){
                int p=i;
                while(p>0){
                    if(p%10==4||p%10==7)
                        p/=10;
                    else {
                        p=-1;
                        break;
                    }
                }
                if(p==0) 
                    ok[i]=1;
                else
                    ok[i]=0;
            }
            int[] sum=new int[5000];
            sum[0]=0;
            for(int i=1;i<=4747;i++){
                if(ok[i]==1){
                    sum[i]=sum[i-1]+1;            
                }
                else{
                    sum[i]=sum[i-1];
                }
            }
            while(in.hasNext()){
                int a=in.nextInt();
                int b=in.nextInt();
                int jlen=in.nextInt();
                int blen=in.nextInt();
                int Max=sum[a+jlen-1]-sum[a-1];
                for(int i=a+1;i+jlen-1<=b;i++){
                    if(sum[i+jlen-1]-sum[i-1]>Max){
                        Max=sum[i+jlen-1]-sum[i-1];
                    }
                }
                int ans=0;
                for(int i=a;i+jlen-1<=b;i++){
                    if(sum[i+jlen-1]-sum[i-1]==Max){
                        int ans1=sum[i+blen-1]-sum[i-1];
                        for(int j=i+1;j+blen-1<=i+jlen-1;j++){
                            ans1=Math.min(ans1,sum[j+blen-1]-sum[j-1]);
                        }
                        ans=Math.max(ans,ans1);
                    }
                }
                System.out.println(ans);
            }
        }
    }
    
    
    • 1

    信息

    ID
    985
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者