记录编号 599399 评测结果 AAAAAAAA
题目名称 时钟 最终得分 100
用户昵称 GravatarChenBp 是否通过 通过
代码语言 C++ 运行时间 0.128 s
提交时间 2025-03-10 21:07:52 内存使用 3.34 MiB
显示代码纯文本
#include <iostream> 
using namespace std;
const int mov[9]={// 移动方案 
// A  B  C  D  E  F  G  H  I
0b001001000001001000000000000,// 1
0b001001001000000000000000000,// 2
0b000001001000001001000000000,// 3
0b001000000001000000001000000,// 4
0b000001000001001001000001000,// 5
0b000000001000000001000000001,// 6
0b000000000001001000001001000,// 7
0b000000000000000000001001001,// 8
0b000000000000001001000001001// 9
};
const int xxl=0b011011011011011011011011011;// 去除最高位的1

int st=0;// 初始状态 
int v[9];// 方案使用次数 
int ans=1e9,step=0;
int ansf[9];
bool ok(){// 判断方案是否成立 
    int cl=st;
    for(int i=0;i<9;i++){
        for(int j=1;j<=v[i];j++){
            cl+=mov[i];
            cl&=xxl;
        }
    }
//    if(v[1]==3)cout<<cl<<endl;
    return !cl;
}
void dfs(int x){
    // 第x种方案 
    if(x==9) {
        if(step<ans&&ok()){
            ans=step;
            for(int i=0;i<9;i++){
                ansf[i]=v[i];
            }
        }
        return;
    }
    for(int i=0;i<4;i++){
        v[x]=i;
        step+=i;
        dfs(x+1);
        step-=i;
    }
}
int main(){
    for(int i=1;i<=9;i++){
        int now;
        cin>>now;
        now/=3;
        if(now==4) now=0;
        st<<=3;
        st+=now;
    }
//    cout<<st;
    dfs(0);
    for(int i=0;i<9;i++){
        for(int j=1;j<=ansf[i];j++){
            cout<<i+1<<" ";
        }
    }
    return 0;
}