poj1676(转换为二进制求解)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13175

题目关键:将0~9十个数转换为二进制数进行枚举比较

int num[10]={490,288,242,434,312,410,474,290,506,442};

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
#define Min(x,y) (x<y?x:y)
#define Max(x,y) (x>y?x:y)
using namespace std;
#define gamma 0.5772156649015328606065120 //欧拉常数
#define MOD 100000007
#define inf 0x3f3f3f3f
#define N 105
#define maxn 10001000
typedef long long LL;
typedef pair<int,int> PII;

int num[10]={490,288,242,434,312,410,474,290,506,442};
int temp;
char  ch[50];
int a[4],b[4];

int main()
{
    int i,j,x,y,figure,group,Case=0,_i;
    //freopen("in.txt","r",stdin);
    scanf("%d",&group);gets(ch);
    while(group--){
        mst(a,0);mst(b,0);
        for(i=0; i<3; ++i){
            _i=0;
            gets(ch);
            for(j=0; j<12; ++j){
                if(ch[_i++]!=‘ ‘){
                    a[j/3]|=1<<(i*3+j%3);
                }
            }
            ++_i;
            for(j=0; j<12; ++j){
                if(ch[_i++]!=‘ ‘){
                    b[j/3]|=1<<(i*3+j%3);
                }
            }
        }
        int index=0;
        int ansh,ansm;
        for(i=0; i<1440; ++i){
            int j=(i-15+1440)%1440;
            int h1=i/60;
            int m1=i%60;
            int h2=j/60;
            int m2=j%60;
            if((num[h1/10]&a[0])!=a[0])
                continue;
            if(int(num[h1%10]&a[1])!=a[1])
                continue;
            if(int(num[m1/10]&a[2])!=a[2])
                continue;
            //cout<<1<<endl;
            if((num[m1%10]&a[3])!=a[3])
                continue;
            if((num[h2/10]&b[0])!=b[0])
                continue;
            if((num[h2%10]&b[1])!=b[1])
                continue;
            if((num[m2/10]&b[2])!=b[2])
                continue;
            if((num[m2%10]&b[3])!=b[3])
                continue;
            if(++index>1) break;
            ansh=h1;ansm=m1;
        }
        if(index>1) printf("Not Sure\n");
        else printf("%d%d%d%d\n",ansh/10,ansh%10,ansm/10,ansm%10);
    }
    return 0;
}

参考:传送门

时间: 2024-10-12 16:43:38

poj1676(转换为二进制求解)的相关文章

java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果

1 package com.llh.demo; 2 3 import java.util.Scanner; 4 5 /** 6 * 7 * @author llh 8 * 9 */ 10 public class Test { 11 /* 12 * 将任意一个十进制数数字转换为二进制形式,并输出转换后的结果(使用数组存储) 13 */ 14 public static void main(String[] args) { 15 Scanner sc = new Scanner(System.in

C语言中字符串如何转换为二进制、八进制、十进制、十六进制

在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, strtod, strtoul表头文件: #include <stdlib.h>定义函数: long int strtol(const char *nptr, char **endptr, int base):函数的解释说明 这个函数会将参数nptr字符串根据参数base来转换成长整型数.参数base

十进制转换为二进制的方法

方法1 java.lang包里integer类下有一个方法 toBinaryString public static String toBinaryString(int i) 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式. 如果参数为负,该无符号整数值为参数加上 232:否则等于该参数.将该值转换为二进制(基数 2)形式的无前导 0 的 ASCII 数字字符串.如果无符号数的大小为零,则用一个零字符 '0' ('\u0030') 表示它:否则,无符号数大小的表示形式中的第一

十进制转换为二进制序列,并输出1的个数,和序列的奇偶序列

★十进制转换为二进制序列,并输出1的个数,和序列的奇偶序列 #include<stdio.h> int main() { int m,i,x,y; char a[32];//int为4个字节长,占32个bit位 int count=0; printf("请输入一个数:\n"); scanf("%d", &m); for (i = 0; i < 32; i++) { if (m%2 == 1)         //统计序列中1的个数 { co

十进制负数转换为二进制、八进制、十六进制的知识分享

这篇文章主要介绍了十进制负数转换为二进制.八进制.十六进制的知识分享,需要的朋友可以参考下 程序猿们或许对二进制都不陌生,二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合.而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数.如果想要弄懂这个,我们需要先了解什么是二进制原码. 原码是什么 原码(true form)是一种计算机中对数

将一个十进制转换为二进制,八进制,十六进制

package com.db2; /** * 将一个十进制转换为二进制,八进制,十六进制 * * @author denny * */ public class Demo2 { public static void main(String[] args) { toBin(6); toBin(-6); toOct(60); toOct(-60); toHex(60); toHex(-60); } // 转换2进制 public static void toBin(int num) { toTran

将数字转换为二进制

package com.db.eduk; import java.util.Scanner; public class changeTo2 {    public static void main(String args[])    {        int n;        Scanner scan = new Scanner(System.in);        System.out.println("请输入要转换为二进制的数字");        n = scan.nextIn

java中将十进制转换为二进制

public static void main(String[] args) { toBin(6); } /* 十进制转换为二进制 */ public static void toBin(int num) { while(num>0) { System.out.println(num%2); num=num/2; } } java中将十进制转换为二进制

C# 将object类型对象(注:必须是可序列话的对象)转换为二进制序列字符串

1 public string SerializeObject(object obj) 2 { 3 //将object类型对象(注:必须是可序列化的对象)转换为二进制序列字符串 4 IFormatter formatter=new BinaryFormatter(); 5 string result=string.Empty; 6 using(MemoryStream stream=new MenmoryStream()) 7 { 8 formatter.Serialize(sream.obj)