博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 336C
阅读量:6209 次
发布时间:2019-06-21

本文共 1992 字,大约阅读时间需要 6 分钟。

这题是大一暑假时候做的,当时没有出,直到今天突然觉得应该把没过的题目再做一边,不然真的是越积越多。

现在能够独立做出来真的是难以表达的兴奋,刚开始的时候就觉得 O(30 * 30 * n)的复杂度有点不安全,不过还是敲了,事实说明实际的负责度没这么高。和去年一样,没有思路,后来仔细一想,真的是数学题。现在感觉爱上了Math...

附上代码:

1 #include 
2 #include
3 4 // 保存原始数组 5 int b[100005]; 6 // a[i][j]表示b[i]的二进制表示法中的各个位上的数值, 而able数组保存的是每一轮中可以选的标记 7 bool a[100005][32], able[100005]; 8 int n; 9 10 int main(void) {11 while (~scanf("%d", &n) && n) {12 memset(a, false, sizeof(a));13 for (int i = 0; i < n; i++) {14 int x;15 scanf("%d", &x);16 b[i] = x;17 for (int j = 30; j >= 0; j--) {18 if ((1 << j) & x)19 a[i][30-j] = true;20 }21 }22 23 int cnt;24 for (int i = 0; i <= 30; i++) {25 cnt = 0;26 memset(able, false, sizeof(able));27 for (int j = 0; j < n; j++) {28 if ( a[j][i] ) {29 able[j] = true;30 cnt++;31 }32 }33 if (cnt == 0) continue;34 35 int j;36 for (j = i + 1; j <= 30; j++) {37 int f = 0;38 for (int k = 0; k < n; k++) {39 if ( able[k] ) {40 if ( !a[k][j] ) {41 f = 1;42 break;43 }44 }45 }46 if (f == 0)47 break;48 }49 if (j > 30)50 break;51 }52 printf("%d\n", cnt);53 int flag = 0;54 for (int i = 0; i < n; i++) {55 if ( able[i] ) {56 if (flag) 57 printf(" ");58 flag = 1;59 printf("%d", b[i]);60 }61 }62 puts("");63 }64 65 return 0;66 }

 

 

转载于:https://www.cnblogs.com/Stomach-ache/p/3703245.html

你可能感兴趣的文章
【一针见血】 JavaScript this
查看>>
文件的相关操作
查看>>
Portal-Basic Java Web 应用开发框架:应用篇(八) —— 整合 Freemarker
查看>>
Sqli-labs less 64
查看>>
遍历当前窗口名字
查看>>
安装 groovy eclipse 插件
查看>>
int、long、long long取值范围
查看>>
文件系统管理 之 文件和目录访问权限设置
查看>>
mac上nginx静态页面访问403
查看>>
SQL联合更新
查看>>
C# new关键字和对象类型转换(双括号、is操作符、as操作符)
查看>>
android 带图片的文本框
查看>>
浅谈https(创建、传输、断开)
查看>>
可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK...
查看>>
svn搭建本地服务端
查看>>
MyBatis_ibatis和mybatis的区别【转】
查看>>
Windows10电脑系统时间校准
查看>>
keepalive的作用
查看>>
Eclipse相关快捷键
查看>>
32位CentOS系统安装kernel-PAE支持4g以上内存
查看>>