Codeforces Round #609 (Div. 2)
16251 ワード
B. Modulo Equality
C - Long Beautiful Integer
問題:
ここでのmは必ずnに等しく、nは最大でn個の9であり、このn個の9は一定の条件を満たしている.だから前のk個に1を足すだけでいいので、問題の意味に合わせて構築します.
map<int ,int >mp1;
map<int ,int >mp2;
main(void)
{
int n,m,a[3000],b[3000],c[3000];
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
c[i]=a[i];
mp1[a[i]]++;
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&b[i]);
mp2[b[i]]++;
}
sort(b+1,b+1+n);
int x=0;
int ans=1000000005;
for(int i=1;i<=n;i++)
{
if(mp2[b[i]]==mp1[a[1]])
{
x=(b[i]+m-a[1])%m;
for(int j=1;j<=n;j++)
{
c[j]=(a[j]+x)%m;
}
int flag=1;
for(int j=1;j<=n;j++)
{
if(mp1[a[j]]!=mp2[c[j]])
{
flag=0;
break;
}
}
if(flag==1)
{
ans=min(ans,x);
}
}
}
cout<<ans;
}
C - Long Beautiful Integer
問題:
ここでのmは必ずnに等しく、nは最大でn個の9であり、このn個の9は一定の条件を満たしている.だから前のk個に1を足すだけでいいので、問題の意味に合わせて構築します.
int x[200005];
int a[200005];
main(void)
{
int n,k;
cin>>n>>k;//k
for(int i=1;i<=n;i++)
{
scanf("%1d",&a[i]);
}
for(int i=1;i<=n;i++)
{
int x=i%k;
if(x==0)x=k;
if(a[x]>a[i])
break;
if(a[x]<a[i])
{
a[k]++;
break;
}
}
for(int i=k;i>=1;i--)
{
if(a[i]==10)
{
a[i]=0;
a[i-1]++;
}
}
printf("%d
",n);
for(int i=1;i<=n;i++)
{
int x=i%k;
if(x==0)x=k;
printf("%d",a[x]);
}
}