zoukankan      html  css  js  c++  java
  • [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;
        }
    }
    
    
  • 相关阅读:
    第十三周编程总结
    第十二周总结
    第十一周课程总结
    第十周编程总结
    第七次实验报告及编程总结
    第六次实验报告及学习总结
    课程总结
    第十四周课程总结&实验报告
    第十三周课程总结
    第十二周总结
  • 原文地址:https://www.cnblogs.com/mollnn/p/12470780.html
Copyright © 2011-2022 走看看