• B. Modulo Equality


    当时想到的第一个想法是用拓展欧几里得解方程,求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
    ",ans);
    36     }
    37     return 0;
    38 }
    View Code
  • 相关阅读:
    odoo权限
    odoo开发bug记录
    odoo视图
    odoo13线上发布
    odoo开发环境搭建
    request
    urllib
    b站排行榜-爬虫
    DockerFile
    Docker基本操作
  • 原文地址:https://www.cnblogs.com/1024-xzx/p/12109163.html
Copyright © 2020-2023  润新知