码迷,mamicode.com
首页 > 其他好文 > 详细

B. Modulo Equality

时间:2019-12-27 19:28:42      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:bad   div   closed   pre   数组   通过   hide   clu   ali   

当时想到的第一个想法是用拓展欧几里得解方程,求x的最小正解。一发交了之后发现爆long long,因为m是1e9。

因此本题的正解是暴力,保证有解的情况下,那么a数组中的一个数必然对应着b数组中的一个数,因此,可以遍历数组a,求出b[1]和a[i]对应的x的值,然后再判断是否符合其他元素即可。

要求满足(a+x)%m=b的x的值,可以通过x=((b-a)%m+m)%m,当时就是没有想到这个。

因为求最小值,所有要遍历所有可能。

技术图片
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=2010;
 4 int a[N],b[N];
 5 bool check(int x,int m,int n)
 6 {
 7     int c[N]={0};
 8     for(int i=1;i<=n;i++)
 9         c[i]=(a[i]+x)%m;
10     sort(c+1,c+1+n);
11     for(int i=1;i<=n;i++)
12     {
13         if(b[i]!=c[i])
14             return false;
15     }
16     return true;
17 }
18 int main()
19 {
20     int n,m;
21     while(scanf("%d%d",&n,&m)!=EOF)
22     {
23         for(int i=1;i<=n;i++)
24             scanf("%d",&a[i]);
25         for(int j=1;j<=n;j++)
26             scanf("%d",&b[j]);
27         sort(b+1,b+1+n);
28         int ans=0x3f3f3f3f;
29         for(int i=1;i<=n;i++)
30         {
31             int x=((b[1]-a[i])%m+m)%m;
32             if(check(x,m,n))
33                ans=min(x,ans);
34         }
35         printf("%d\n",ans);
36     }
37     return 0;
38 }
View Code

B. Modulo Equality

标签:bad   div   closed   pre   数组   通过   hide   clu   ali   

原文地址:https://www.cnblogs.com/1024-xzx/p/12109163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!