太困了于是没做...第二天看题蘑菇题居多就只切了简单的两个...
A:直接输出...
int main() { //FIN; //FOUT; int x,y; cin>>x>>y; int q = abs(abs(x) + abs(y)); if(x > 0 && y > 0) cout<<"0 "<<q<<" "<<q<<" 0"<<endl; if(x < 0 && y > 0) cout<<-q<<" 0"<<" 0 "<<q<<endl; if(x < 0 && y < 0) cout<<-q<<" 0 "<<"0 "<<-q<<endl; if(x > 0 && y < 0) cout<<"0 "<<-q<<" "<<q<<" 0"<<endl; return 0; }
C:求做&以后 mod2k=0 且k最大的子序列
枚举右移位数 , 出现能整除2k的就输出...
vector<int> v; int main() { //FIN; //FOUT; int n,a; cin>>n; for(int i = 0 ; i < n ; i++) { cin>>a; v.push_back(a); } int p = 30,m = -INF; for(int i = 30 ; i >= 0; i--){ vector<int> s; for(int j = 0 ; j < v.size() ; j++){ if((v[j]>>i) & 1){ s.push_back(v[j]); } } if(s.size() == 0) continue; int sum = s[0]; for(int j = 1 ; j < s.size() ; j++){ sum = sum & s[j]; } if(sum % (1<<i) == 0){ cout<<s.size()<<endl; for(int j = 0 ; j < s.size() ; j++){ cout<<s[j]<<" "; } break; } } return 0; }