UESTC 491 Tricks in Bits
2016-05-04 16:14
471 查看
Tricks in Bits
Submit Status
Description
Given N unsigned 64-bit
integers, you can
make the result as small as possible.
Input
The first line of the input is T (no
more than 1000),
which stands for the number of test cases you need to solve.
Then T blocks
follow. The first line of each block contains a single number N (1≤N≤100)
indicating the number of unsigned 64-bit
integers. Then n integers
follow in the next line.
Output
For every test case, you should output
the case number and counts from 1.
Then output the answer.
Sample Input
2
3
1 2 3
2
3 6
Sample Output
Case #1: 0
Case #2: 1
Time Limit: 1000MS | Memory Limit: 65535KB | 64bit IO Format: %lld & %llu |
Description
Given N unsigned 64-bit
integers, you can
bitwise NOTeach or not. Then you need to add operations selected from
bitwise XOR,
bitwise ORand
bitwise AND, between any two successive integers and calculate the result. Your job is to
make the result as small as possible.
Input
The first line of the input is T (no
more than 1000),
which stands for the number of test cases you need to solve.
Then T blocks
follow. The first line of each block contains a single number N (1≤N≤100)
indicating the number of unsigned 64-bit
integers. Then n integers
follow in the next line.
Output
For every test case, you should output
Case #k:first, where k indicates
the case number and counts from 1.
Then output the answer.
Sample Input
2
3
1 2 3
2
3 6
Sample Output
Case #1: 0
Case #2: 1
#include <iostream> #include <string.h> #include <stdlib.h> #include <algorithm> #include <stdio.h> #include <math.h> using namespace std; typedef unsigned long long int LL; int n; LL ans; LL MAX; LL a[105]; LL min(LL a,LL b){return (a<b?a:b);} void dfs(LL num,int cnt) { if(ans==0) return; if(num==0) { ans=0; return; } if(cnt==n+1) { ans=min(ans,num); return; } dfs(num|(~a[cnt]),cnt+1); dfs(num&(~a[cnt]),cnt+1); dfs(num^(~a[cnt]),cnt+1); dfs(num|a[cnt],cnt+1); dfs(num&a[cnt],cnt+1); dfs(num^a[cnt],cnt+1); } int main() { int t; scanf("%d",&t); int cas=0; while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%llu",&a[i]); MAX=1; MAX<<=63; ans=MAX; dfs(a[1],2); dfs(~a[1],2); printf("Case #%d: %llu\n",++cas,ans); } return 0; }
相关文章推荐
- UESTC 485 Game(康托,BFS)
- UESTC 485 Game(康托,BFS)
- Unreal Engine 4 —— 冷却UI的制作
- Unreal Engine 4 —— 冷却UI的制作
- UITableView - beginUpdates和endUpdates
- UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
- datagrid 内嵌 combotree 显示 valueField 而不是 valueText 的解决办法
- UEDITOR FTP上传
- hdu_2227_Find the nondecreasing subsequences_树状数组,离散化
- hdu_2227_Find the nondecreasing subsequences_树状数组,离散化
- servlet 的request 属性常用方法
- UIAlertContronller的使用
- 1584 - Circular Sequence
- POJ 1776 Task Sequences(竞赛图构造哈密顿通路)
- UINavigationController 导航控制器
- 使用Git GUI同步本地和远程源代码
- JAVA UUID 生成策略研究之为什么
- 第三届山东省ACM Fruit Ninja II
- UIButton
- 第三届山东ACM省赛 Fruit Ninja I