d knapsack cryptosystem
折半搜尋,晚上又去看了挑戰程式設計,對於時間複雜度高的情況,可以通過犧牲空間來降低時間複雜度。先把前半部分所有可以組合的情況列舉出來,然後對於後半部分依次列舉,那麼複雜度變化為o(2^36)->o(2^18+2^18log^18).顯然就可做了,折半的裸題。
但是用二分寫了一發,沒過,感覺時二分那裡的問題,或者時01字串那裡出了問題。換了map過了。
沒過的二分:
1 #include 2view codeusing
namespace
std;
3 typedef long
long
ll;4
5const
int maxn=530000;6
7int
n;ll m;
8struct
nodepre[maxn];
1213
bool
cmp(node x,node y)
1617 ll a[37
];18 ll b[37
];19
20int
binary_find(ll x)
29return -1;30
}31intmain()
39for(int i=0;i
46else pre[i].s[j]='0'
;47} 48}
49 sort(pre,pre+n2,cmp);
50/*
for(int i=0;i51
cout
52for(int i=0;i
<
5364
else s[j]='0'
;65}66
//cout <67
int ans=binary_find(m-tms);
68//
cout <69
//cout <70
if(ans!=-1
) 7177}
78return0;
79 }
map:
1 #include 2view codeusing
namespace
std;
3 typedef long
long
ll;4
56 ll a[37
];7 ll b[37
];8 map string>m;910
intmain()
22 m[tmp]=s;23}
24for(int i=0;i
<
2531
if(m.count(sum-tmp))
3236
} 37
return0;
38 }
2019牛客暑期多校訓練營(第九場)
給定 p 1000000007 有兩個數x,y,其中 x leqslant y leqslant p x y equiv b mod p x times y equiv c mod p 求 x,y的值 二次剩餘 1 二次剩餘參考資料1 2 二次剩餘參考資料2 知道 x y 和 x times y 那...
2020牛客暑期多校訓練營(第九場)
總結 這一場過了a題,之前用c 各種寫,但是沒想到用 三行 就解決了問題,還是需要學習很多很多。fi 一級目錄 土撥鼠在第1個宿舍,橙子在第n個宿舍。這n個宿舍間有n 1條路並且長度都為1,土撥鼠從第1個房間去第n個宿舍,速度為1m s 橙子從第n個宿舍追趕土撥鼠,速度為2m s。二分時間 t 然後...
牛客網暑期ACM多校訓練營(第九場)
做法 看到下標 xor 這種情況就想 fwt 可是半天沒思路,於是放棄了。其實這個 n 瘋狂暗示啊。設未知數向量為 x 列一下方程組就可以發現有 b k sum a i x j 做法就顯然了吧,把 a 和 b 分別 fwt 對應相除然後反變換即可。表示前天才學的 fwt 就不會使了。include ...