洛谷八連測2017R5-whzzt-Confidence
阿新 • • 發佈:2017-10-28
blank splay cst 方法 sed name lose 空間限制 -m
輸出樣例#1: 復制
傳送門
題目描述
題目難度不一定按照題目順序遞增
請註意本題的空間限制為2333-2500KB!(前三個測試點的空間限制為2500KB)
給定兩個長度相同的序列,這兩個序列至多有 1 處不同。你的任務是找出這處不同。
輸入輸出格式
輸入格式:
第一行包含一個數據組數 TT。每組數據的格式如下:
第一行一個整數 nn 表示序列的長度。
接下來兩行表示兩個長度均為 nn 的序列 AA 和 BB,保證所有數字均為小於 2^32 的非負整數,這些數字可以看做是隨機的。
輸出格式:
輸出共 TT 行,每行第一個數 m≤1 表示不同的數目。接下來 mm 個數表示兩個序列中不同的位置。
輸入輸出樣例
輸入樣例#1: 復制2 4 2 3 3 3 2 3 6 3 8 9 1 6 2 8 0 7 1 9 1 6 2 0 0 7 1
1 3 1 5
數據量較大,建議不要使用 cin / cout 輸入輸出。
為了防止不必要的MLE等情況出現,經過測試,下面的代碼使用的空間在2300KB左右浮動。註意頭文件所占用的空間也計入程序實際運行所占用的空間內。如在下面的代碼中自行使用占用空間更大的數組,不能保證程序能夠正常運行。
#include <stdio.h>
using namespace std;
unsigned int a[150005];
int main(){
return 0;
}
這題可以用異或做
思路是把數字看成一個個的二進制1,然後打上相應的位置的標記,
對於相同的數字異或之後什麽的都沒有了,而不同的會有位置的標記找到即可
空間復雜度是32int,很不錯的方法
1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<map> 7 #include<set> 8 #include<queue> 9 #include<vector> 10 #define INF 0x7f7f7f7f 11 #define pii pair<int,int> 12Code1#define ll long long 13 #define MAXN 100005 14 using namespace std; 15 int n; 16 ll f[33]; 17 ll read(){ 18 ll x=0;char ch=getchar(); 19 while(ch<‘0‘||ch>‘9‘){ch=getchar();} 20 while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} 21 return x; 22 } 23 int main() 24 { 25 int T; 26 scanf("%d",&T); 27 while(T--){ 28 memset(f,0,sizeof(f)); 29 ll a=0; 30 scanf("%d",&n); 31 for(int i=1;i<=n;i++){ 32 ll t=read(); 33 a^=t; 34 int cnt=0; 35 while(t){ 36 if(t&1)f[cnt]^=i; 37 cnt++; 38 t>>=1; 39 } 40 } 41 for(int i=1;i<=n;i++){ 42 ll t=read(); 43 a^=t; 44 int cnt=0; 45 while(t){ 46 if(t&1)f[cnt]^=i; 47 cnt++; 48 t>>=1; 49 } 50 } 51 if(a){ 52 int cnt=0; 53 while(a){ 54 if(a&1){ 55 printf("1 %d\n",f[cnt]); 56 break; 57 } 58 cnt++; 59 a>>=1; 60 } 61 } 62 else{ 63 printf("0\n"); 64 } 65 } 66 67 return 0; 68 }
還可以分別求出∑i*(ai-bi)以及∑i*i*(ai-bi),減掉之後如果等於0,那麽肯定是相同的
否則的話肯定是只剩下j*(aj-bj)和j*j*(aj-bj),除掉即可求得j
但是考慮溢出,我們模一下P,然後求出P意義下的逆元即可
1 #include<cstdio> 2 #include<cstdlib> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<map> 7 #include<set> 8 #include<queue> 9 #include<vector> 10 #define INF 0x7f7f7f7f 11 #define pii pair<int,int> 12 #define ll long long 13 #define uint unsigned int 14 #define P 1000003 15 using namespace std; 16 int ni(ll a){ 17 int b=P-2; 18 int ret=1; 19 while(b){ 20 if(b&1){ 21 ret=1LL*ret*a%P; 22 } 23 a=a*a%P; 24 b>>=1; 25 } 26 return ret; 27 } 28 int n; 29 ll a,b; 30 int main() 31 { 32 // freopen("data.in","r",stdin); 33 int T;scanf("%d",&T); 34 while(T--){ 35 a=0,b=0; 36 int n;scanf("%d",&n); 37 for(int i=1;i<=n;i++){ 38 ll t;scanf("%lld",&t); 39 a+=1LL*i*t%P; 40 b+=1LL*i*i%P*t%P; 41 } 42 for(int i=1;i<=n;i++){ 43 ll t;scanf("%lld",&t); 44 a-=1LL*i*t%P;if(a<0)a+=P; 45 b-=1LL*i*i%P*t%P;if(b<0)b+=P; 46 } 47 if(!a){ 48 printf("0\n"); 49 } 50 else{ 51 printf("1 %d\n",b*ni(a)%P); 52 } 53 } 54 return 0; 55 }Code2
洛谷八連測2017R5-whzzt-Confidence