1 条题解
-
0
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
- 上传者