记录编号 |
599399 |
评测结果 |
AAAAAAAA |
题目名称 |
时钟 |
最终得分 |
100 |
用户昵称 |
ChenBp |
是否通过 |
通过 |
代码语言 |
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;
}