洛谷p1213时钟The clocks题解

题目描述

考虑将如此安排在一个 3×3 行列中的九个时钟:

|-------|   |-------|   |-------|
|       |   |       |   |   |   |
|---o   |   |---o   |   |   o   |
|       |   |       |   |       |
|-------|   |-------|   |-------|
    A           B           C

|-------|   |-------|   |-------|
|       |   |       |   |       |
|   o   |   |   o   |   |   o   |
|   |   |   |   |   |   |   |   |
|-------|   |-------|   |-------|
    D           E           F

|-------|   |-------|   |-------|
|       |   |       |   |       |
|   o   |   |   o---|   |   o   |
|   |   |   |       |   |   |   |
|-------|   |-------|   |-------|
    G           H           I

目标要找一个最小的移动顺序将所有的指针指向 12 点。下面原表格列出了 9 种不同的旋转指针的方法,每一种方法都叫一次移动。
选择 1∼9 号移动方法,将会使在表格中对应的时钟的指针顺时针旋转 90 度。

移动方法受影响的时钟
1ABDE
2ABC
3BCEF
4ADG
5BDEFH
6CFI
7DEGH
8GHI
9EFHI

例子:

9 9 12       9 12 12        9 12 12        12 12 12        12 12 12
6 6 6   5 -> 9  9  9   8 -> 9  9  9   4 -> 12  9  9   9 -> 12 12 12
6 3 6        6  6  6        9  9  9        12  9  9        12 12 12

但这可能不是正确的方法,请看下文。

输入格式

输入三行,每行三个正整数,表示一个时钟的初始时间,数字的含意和上面第一个例子一样。

输出格式

单独的一行包括一个用空格分开的将所有指针指向 12 点的最短移动顺序的列表。

如果有多种方案,输出那种使其连接起来的数字最小的方案。(举例来说 5 2 4 6<9 3 1 1)。

输入输出样例

输入 #1复制

9 9 12
6 6 6
6 3 6 

输出 #1复制

4 5 8 9

说明/提示

题目翻译来自NOCOW。

USACO Training Section 1.4

思路:

由于任何一个操作只要进行4次,就会重复,所以每个操作最多进行3次。

有些齿轮的旋转只会与几个操作有关,只需要知道哪一个操作的次数,就可以知道这个齿轮是不是12点。

同时,操作的编码越小,操作次数也要尽量小,所以,我们可以写9重循环暴力。

Code:

#include<bits/stdc++.h>
using namespace std;
long long b[10000],a[100];
int main(){
    for(int i=1;i<=9;i++){
        cin>>a[i];
        a[i]/=3;
    }
    for(int p1=0;p1<=3;p1++)
        for(int p2=0;p2<=3;p2++)
            for(int p3=0;p3<=3;p3++)
                for(int p4=0;p4<=3;p4++)
                    for(int p5=0;p5<=3;p5++)
                        for(int p6=0;p6<=3;p6++)
                           for(int p7=0;p7<=3;p7++)
                                for(int p8=0;p8<=3;p8++)
                                    for(int p9=0;p9<=3;p9++)
                                        if((p1+p2+p4)%4==(4-a[1])%4&&(p1+p2+p3+p5)%4==(4-a[2])%4&&(p2+p3+p6)%4==(4-a[3])%4&&(p1+p4+p5+p7)%4==(4-a[4])%4&&(p1+p3+p5+p7+p9)%4==(4-a[5])%4&&(p3+p5+p6+p9)%4==(4-a[6])%4&&(p4+p7+p8)%4==(4-a[7])%4&&(p5+p7+p8+p9)%4==(4-a[8])%4&&(p6+p8+p9)%4==(4-a[9])%4){
                                            b[1]=p1;
                                            b[2]=p2;
                                            b[3]=p3;
                                            b[4]=p4;
                                            b[5]=p5;
                                            b[6]=p6;
											b[7]=p7;
                                            b[8]=p8;
                                            b[9]=p9;
    										for(int i=1;i<=9;i++)
    	                                        if(b[i])
    		                                        for(int j=1;j<=b[i];j++)
    			                                         cout<<i<<" ";
    										return 0;
    									}
}

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在设备树中配置时钟信号需要使用以下属性: - `clocks`: 该属性指定了时钟控制器所连接的时钟信号的数量和 ID。每个时钟信号的 ID 需要与时钟控制器的寄存器地址相匹配。 - `clock-names`: 该属性指定了时钟信号的名称,它们与 `clocks` 属性中的 ID 一一对应。这些名称可以被设备树中的其他节点使用来引用这些时钟信号。 - `assigned-clocks`: 该属性指定了设备节点需要使用的时钟信号的 ID。这些 ID 必须与 `clocks` 属性中定义的值相匹配。 - `assigned-clock-rates`: 该属性指定了设备节点需要使用的时钟信号的频率。这些频率必须与 `assigned-clocks` 属性中定义的时钟信号相匹配。 - `assigned-clock-parents`: 该属性指定了时钟信号的父时钟信号。这些父时钟信号可以是其他时钟信号或时钟控制器。这些父时钟信号必须与 `assigned-clocks` 属性中定义的时钟信号相匹配。 举个例子,以下是一个设备树节点的时钟属性配置: ```dts clocks = <&clks 0>, <&clks 1>; clock-names = "clk1", "clk2"; assigned-clocks = <&clks 0>, <&clks 1>; assigned-clock-rates = <1000000>, <20000000>; assigned-clock-parents = <&clks 0>, <&clks 1>; ``` 这个节点连接了两个时钟信号,分别被命名为 `clk1` 和 `clk2`。这两个时钟信号的 ID 分别为 `0` 和 `1`。设备节点需要使用这两个时钟信号,并且需要分别设置它们的频率为 `1MHz` 和 `20MHz`。这两个时钟信号的父时钟信号为 `clks` 节点中的时钟信号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值