[IOI1994] 时钟 - 搜索
Posted mollnn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[IOI1994] 时钟 - 搜索相关的知识,希望对你有一定的参考价值。
考虑九个安排在 (3 imes 3) 矩阵中的时钟,每个时钟只会指向 (3,6,9,12) 点。有 (9) 种操作方式,每种操作方式规定了其固定的操作对象集合,将这几个时钟都往后拨 (3) 小时。每种操作方式有一个数字编号。求最小字典序的操作序列使得所有时钟都指向 (12) 点。
Solution
每个操作执行的次数不大于 (3)
操作序列由操作多重集得到
暴力枚举得到多重集
#include <bits/stdc++.h>
using namespace std;
int a[10];
signed main() {
for(int i=1;i<=9;i++) cin>>a[i], a[i]/=3;
for(int i1=0;i1<=3;i1++)
for(int i2=0;i2<=3;i2++)
for(int i3=0;i3<=3;i3++)
for(int i4=0;i4<=3;i4++)
for(int i5=0;i5<=3;i5++)
for(int i6=0;i6<=3;i6++)
for(int i7=0;i7<=3;i7++)
for(int i8=0;i8<=3;i8++)
for(int i9=0;i9<=3;i9++) {
if((a[1]+i1+i2+i4)%4) continue;
if((a[2]+i1+i2+i3+i5)%4) continue;
if((a[3]+i2+i3+i6)%4) continue;
if((a[4]+i1+i4+i5+i7)%4) continue;
if((a[5]+i1+i3+i5+i7+i9)%4) continue;
if((a[6]+i3+i5+i6+i9)%4) continue;
if((a[7]+i4+i7+i8)%4) continue;
if((a[8]+i5+i7+i8+i9)%4) continue;
if((a[9]+i6+i8+i9)%4) continue;
while(i1--) cout<<1<<" ";
while(i2--) cout<<2<<" ";
while(i3--) cout<<3<<" ";
while(i4--) cout<<4<<" ";
while(i5--) cout<<5<<" ";
while(i6--) cout<<6<<" ";
while(i7--) cout<<7<<" ";
while(i8--) cout<<8<<" ";
while(i9--) cout<<9<<" ";
return 0;
}
}
以上是关于[IOI1994] 时钟 - 搜索的主要内容,如果未能解决你的问题,请参考以下文章
P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles
P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles
P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles