Codeforces1300(618Round Div2)

题目
题解
写在前面(牢骚&废话&一丢丢总结):
不好好打场比赛都不知道自己到底有多菜 . j p g .jpg
第一次打 C o d e f o r c e s Codeforces 就掉 R a t i n g Rating
一开始因为操作不熟和网站太慢,别人都快做完前两道题了才开始做,第一次提交的时候语言没调对还没反应过来愣是 C E CE 了三次
估计刷新了 O I OI 界低级错误的sb程度
A A 题这种难度的题都想了一段时间 前面总是进不去比赛心态崩塌导致做第一题的时候是慌的 ,遇到一点点问题就慌张这毛病啥时候才能改啊暴风哭泣
B B 题倒是一眼看出结论在五分钟之内过了 \dots
C C 题把 O R OR 看成 X O R XOR ,于是第一反应 T r i e Trie + + 贪心 \dots 我没救啦,位运算也掌握得超级不熟,于是开心没搞出来。 C C 题都搞不出来我到底是什么超级傻瓜
至于 D D E E ,这个得怪英语太差,赛后好好翻译了一下感觉比 C C 题可做
综上,临场心态不够,英语水平太差,位运算基本操作不熟,多打几次比赛好好提升一下啦啦啦
定个小目标:蓝名


A A 题 略过


B B 题 略过


C C

Anu Has a Function

这题对位运算考察不算难,都是些很基础的东西,对于萌新是道好题
在这里插入图片描述
通过观察不难发现该函数有这样的性质: ( a b ) b = a & ( b ) (a|b)-b = a\&(-b) 。那么题目式子就可以写成 a 1 & ( a 2 ) & ( a 3 ) & & ( a n 1 ) & ( a n ) a_1\&(\thicksim a_2)\&(\thicksim a_3)\&\dots\&(\thicksim a_{n-1})\&(\thicksim a_n) ,于是发现,影响结果的因素只有第一个元素 ( ( 后面交换顺序得到的结果不变 ) ) ,于是显然:只有当某一位上 1 1 的个数为 1 1 时,才能对答案产生正向贡献。
做法:枚举每一个数,看是否满足要求,满足就排在前面即可。
代码:注意最后输出

#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 
*/

D D
一句话题意:判断两个多边形是否相似
完整题目戳这里
题读了三遍依然不知道它要求什么,看来首先需要提升的是英语
我怎么连题解也看不懂
在这里插入图片描述


E E
咕咕咕

发布了38 篇原创文章 · 获赞 11 · 访问量 1906

猜你喜欢

转载自blog.csdn.net/weixin_42750325/article/details/104251610