比赛 |
20120806 |
评测结果 |
AAAAAWAWAA |
题目名称 |
符文之语 |
最终得分 |
80 |
用户昵称 |
TBK |
运行时间 |
0.117 s |
代码语言 |
C++ |
内存使用 |
0.32 MiB |
提交时间 |
2012-08-06 11:41:04 |
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
string str;
int a,b,c,d,l,m,n,r[1001],k[4]={51,0,-1,0},t,x,y,z;
void meiju0(void)
{
for (d=0;d<b;d++)
{
t+=((str[d]-'0')*r[b-d-1])%a;
t%=a;
}
if (t<k[0]) k[0]=t;
if (t>k[2]) k[2]=t;
}
void meiju1(void)
{
for (l=1;l<b;l++)
{
t=0;
x=0;
for (d=0;d<l;d++)
{
t+=((str[d]-'0')*r[l-d-1])%a;
t%=a;
}
for (d=l;d<b;d++)
{
x+=((str[d]-'0')*r[b-d-1])%a;
x%=a;
}
t*=x;
t%=a;
if (t<k[0])
{
k[0]=t;
k[1]=1;
}
if (t>k[2])
{
k[2]=t;
k[3]=1;
}
}
}
void meiju2(void)
{
for (l=1;l<b;l++)
for (m=l+1;m<b;m++)
{
t=0;
x=0;
y=0;
for (d=0;d<l;d++)
{
t+=((str[d]-'0')*r[l-d-1])%a;
t%=a;
}
for (d=l;d<m;d++)
{
x+=((str[d]-'0')*r[m-d-1])%a;
x%=a;
}
for (d=m;d<b;d++)
{
y+=((str[d]-'0')*r[b-d-1])%a;
y%=a;
}
t*=x;
t%=a;
t*=y;
t%=a;
if (t<k[0])
{
k[0]=t;
k[1]=2;
}
if (t>k[2])
{
k[2]=t;
k[3]=2;
}
}
}
void meiju3(void)
{
for (l=1;l<b;l++)
for (m=l+1;m<b;m++)
for (n=m+1;n<b;n++)
{
t=0;
x=0;
y=0;
z=0;
for (d=0;d<l;d++)
{
t+=((str[d]-'0')*r[l-d-1])%a;
t%=a;
}
for (d=l;d<m;d++)
{
x+=((str[d]-'0')*r[m-d-1])%a;
x%=a;
}
for (d=m;d<n;d++)
{
y+=((str[d]-'0')*r[n-d-1])%a;
y%=a;
}
for (d=n;d<b;d++)
{
z+=((str[d]-'0')*r[b-n-1])%a;
z%=a;
}
t*=x;
t%=a;
t*=y;
t%=a;
t*=z;
t%=a;
if (t<k[0])
{
k[0]=t;
k[1]=3;
}
if (t>k[2])
{
k[2]=t;
k[3]=3;
}
}
}
int main(void)
{
freopen("chars.in","r",stdin);
freopen("chars.out","w",stdout);
cin>>str;
cin>>a;
b=str.length();
r[0]=1;
r[1]=10%a;
for (c=2;c<b;c++) r[c]=(r[c-1]*r[1])%a;
if (b<=50)
{
meiju0();
meiju1();
if ((k[0]==0)&&(k[2]==a-1))
{
printf("%d %d %d %d",k[0],k[1],k[2],k[3]);
return 0;
}
meiju2();
if ((k[0]==0)&&(k[2]==a-1))
{
printf("%d %d %d %d",k[0],k[1],k[2],k[3]);
return 0;
}
meiju3();
printf("%d %d %d %d",k[0],k[1],k[2],k[3]);
}
else
{
meiju0();
meiju1();
if ((k[0]==0)&&(k[2]==a-1)) printf("%d %d %d %d",k[0],k[1],k[2],k[3]);
else
{
if (k[0]!=0) printf("%d %d ",0,2);
else printf("%d %d ",0,k[1]);
if (k[2]!=a-1) printf("%d %d",a-1,2);
else printf("%d %d",a-1,k[3]);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}