NC240155. 序列操作
描述
输入描述
第一行两个整数,保证
是质数。
第二行个正整数
,表示序列
。
第三行个正整数
,表示序列
。
输出描述
一个整数。
示例1
输入:
4 5 3 3 1 4 2 1 3 2
输出:
4
C++(clang++ 11.0.1) 解法, 执行用时: 788ms, 内存消耗: 22552K, 提交时间: 2022-09-21 20:33:07
#include <iostream> using namespace std; const int N = 1e6+10; int a[N],b[N],c[3510],inv[3510],n,p,x=0,s=N; int main(){ cin>>n>>p; inv[1] = 1; for(int i=2;i<p;i++) inv[i] = (p-p/i)*inv[p%i]%p; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i],c[((b[i]-a[i])%p+p)%p]++; for(int i=1;i<p;i++){ int t = 0; for(int j=1;j<p;j++) if(c[j]) t = max(t,j*inv[i]%p); if(t&&s>t) s=t,x=i; } cout<<x<<endl; return 0; }
C++(g++ 7.5.0) 解法, 执行用时: 903ms, 内存消耗: 4344K, 提交时间: 2022-09-26 10:47:29
#include<bits/stdc++.h> using namespace std; int n,i,j,y,x,p,o,r,t[3500],I[3500]; int main(){ cin>>n>>p;vector<int>a(n); for(int&v:a)cin>>v,v%=p; for(int&v:a)cin>>i,t[(i+p-v)%p]=1,o|=i^v; if(!o)cout<<0,exit(0); for(i=1;i<p;++i)for(t[i]*=I[i]=i, j=p-3;j--;I[i]=I[i]*i%p); for(r=p,i=1;i<p;y<r&&(r=y,x=i),++i) for(y=0,j=1;j<p;++j)y=max(y,I[i]*t[j]%p); cout<<x; }