[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

P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles简单的DP递推

POJ 1166 The Clocks 位运算与BFS

城堡问题