题目链接 http://poj.org/problem?id=1608
写的不太好,不过还是过了,题解过两天写,先放代码
数据地址:http://neerc.ifmo.ru/archive/2003.html 选那个Subregions Northern
请无视注释部分,那是调试代码
<pre name="code" class="cpp">#include <cstdio>
#include <cstring>
const int N=19,M=10000;
long long f[3][55][37][20][20];
bool fl=false,fr=false;
int n,ln,rn,l2,l3,l5,l7,r2,r3,r5,r7;
int n2[10]={0,0,1,0,2,0,1,0,3,0};
int n3[10]={0,0,0,1,0,0,1,0,0,2};
int n5[10]={0,0,0,0,0,1,0,0,0,0};
int n7[10]={0,0,0,0,0,0,0,1,0,0};
struct big{
int f[20],l;
}ans,a1,b1;
void print(big a){
for(int i=a.l-1;i>=0;i--){
int j=M/10;
if(i!=a.l-1)
while(a.f[i]<j && j>1)
j/=10,printf("0");
printf("%d",a.f[i]);
}
if((a.l==1 && a.f[0]==0) || a.l<1) printf("0");
}
long long pow(int x,int y){
long long ans=1;
for(int i=1;i<=y;i++) ans*=x;
return ans;
}
big cmp(big a,big b){
if(a.l>b.l) return a;
else if(a.l<b.l) return b;
for(int i=a.l-1;i>=0;i--)
if(a.f[i]>b.f[i]) return a;
else if(a.f[i]<b.f[i]) return b;
return a;
}
void tran(big &a