Codeforces Round #609 (Div. 2)

16251 ワード

B. Modulo Equality

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]); } }