题目
题解
写在前面(牢骚&废话&一丢丢总结):
不好好打场比赛都不知道自己到底有多菜
第一次打
就掉
祭
一开始因为操作不熟和网站太慢,别人都快做完前两道题了才开始做,第一次提交的时候语言没调对还没反应过来愣是
了三次
估计刷新了
界低级错误的sb程度
题这种难度的题都想了一段时间
前面总是进不去比赛心态崩塌导致做第一题的时候是慌的
,遇到一点点问题就慌张这毛病啥时候才能改啊暴风哭泣
题倒是一眼看出结论在五分钟之内过了
题把
看成
,于是第一反应
树
贪心
我没救啦,位运算也掌握得超级不熟,于是开心没搞出来。
题都搞不出来我到底是什么超级傻瓜
至于
,这个得怪英语太差,赛后好好翻译了一下感觉比
题可做
综上,临场心态不够,英语水平太差,位运算基本操作不熟,多打几次比赛好好提升一下啦啦啦
定个小目标:蓝名
题 略过
题 略过
题
Anu Has a Function
这题对位运算考察不算难,都是些很基础的东西,对于萌新是道好题
通过观察不难发现该函数有这样的性质:
。那么题目式子就可以写成
,于是发现,影响结果的因素只有第一个元素
后面交换顺序得到的结果不变
,于是显然:只有当某一位上
的个数为
时,才能对答案产生正向贡献。
做法:枚举每一个数,看是否满足要求,满足就排在前面即可。
代码:注意最后输出
#include <bits/stdc++.h>
using namespace std;
const int N=(int)1e6+5;
int n,a[N],ans,now,sum,vis;
int v[N],b[N][32];
queue<int> q;
inline int read(){
int cnt=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}
while(isdigit(c)){cnt=(cnt<<3)+(cnt<<1)+(c^48);c=getchar();}
return cnt*f;
}
int main(){
n=read();
for(int i=1;i<=n;++i){
a[i]=read();
for(int j=0;j<=31;++j){
b[i][j]=(a[i]>>j)&1;
}
}
for(int i=31;i>=0;--i){
sum=0;
for(int j=1;j<=n;++j){
if(b[j][i]&1){
sum++;vis=j;
}
}
if(sum==1&&v[vis]==0){
q.push(a[vis]);v[vis]=1;
}
}
cerr<<q.size()<<endl;
for(int i=q.size()-1;i>=0;i--){//输出一定要注意循环变量的处理
printf("%d ",q.front());
q.pop();
}
for(int i=1;i<=n;i++){
if(v[i]==0){
printf("%d ",a[i]);
}
}
return 0;
}
/*
5
809571641 29322377 935888946 833709370 2457463
answer:935888946 833709370 29322377 809571641 2457463
*/
题
一句话题意:判断两个多边形是否相似
完整题目戳这里
题读了三遍依然不知道它要求什么,看来首先需要提升的是英语
我怎么连题解也看不懂
题
咕咕咕