牛牛想起飞
牛牛想起飞
https://ac.nowcoder.com/acm/contest/9854/B
牛牛想起飞
用bitset来记录可以得到的数,然后求得值为1的最高位就是答案
#include <bits/stdc++.h> using namespace std; #define Happy return #define New_Year 0 const int N = 1e5+5; int a[N],b[N]; bitset<105> bt,z,x; int main() { int n,y; cin>>n>>y; int sum=0; for(int i=1;i<=n;i++) { cin>>a[i]; sum=(sum+a[i])%y; } bt[sum]=1; for(int i=1;i<=n;i++) { cin>>b[i]; b[i]%=y; } for(int i=1;i<=n;i++)//枚举序列b中的每一个数 { //加上b[i] { x = bt<<b[i]; z = bt>>(y-b[i]); x|=z; bt|=x; } //减去b[i] { x=bt>>b[i]; z = bt<<(y-b[i]); x|=z; bt|=x; } } for(int i=y-1;i>=0;i--)//因为是模y意义下的最大值,所以从y-1位开始枚举找值为1的最高位 { if(bt[i]){ cout<<i<<endl; Happy New_Year; } } }