Pagodas UVALive 7241

博客围绕佛塔重建游戏展开,有n座佛塔,仅两座留存,可按规则重建其余佛塔。规则是新佛塔编号为现存两佛塔编号和或差。通过分析将问题转化为集合元素生成问题,测试表明已知n、a、b可确定集合所有元素。

n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain,
labelled from 1 to n. However, only two of them (labelled a and b, where 1 ≤ a ̸= b ≤ n) withstood the
test of time.
Two monks, Yuwgna and Iaka, decide to make glories great again. They take turns to build pagodas
and Yuwgna takes first. For each turn, one can rebuild a new pagodas labelled i (i ̸∈ {a, b} and 1 ≤ i ≤ n) if there exist two pagodas standing erect, labelled j and k respectively, such that i = j + k or i = j − k. Each pagoda can not be rebuilt twice.
This is a game for them. The monk who can not rebuild a new pagoda will lose the game.
Input
The first line contains an integer t (1 ≤ t ≤ 500) which is the number of test cases. For each test case,
the first line provides the positive integer n (2 ≤ n ≤ 20000) and two different integers a and b.
Output
For each test case, output the winner (‘Yuwgna’ or ‘Iaka’). Both of them will make the best possible
decision each time.
Sample Input
16
2 1 2
3 1 3
67 1 2
100 1 2
8 6 8
9 6 8
10 6 8
11 6 8
12 6 8
13 6 8
14 6 8
15 6 8
16 6 8
1314 6 8
1994 1 13
1994 7 12
Sample Output
Case #1: Iaka
Case #2: Yuwgna
Case #3: Yuwgna
Case #4: Iaka
Case #5: Iaka
Case #6: Iaka
Case #7: Yuwgna
Case #8: Yuwgna
Case #9: Iaka
Case #10: Iaka
Case #11: Yuwgna
Case #12: Yuwgna
Case #13: Iaka
Case #14: Yuwgna
Case #15: Iaka
Case #16: Iaka

题意

首先有n座佛塔,经过时间的冲刷,现在只剩下两座佛塔矗立(其余佛塔都塌了),现在你能重建这n-2座佛塔,使之矗立,但是要遵守一个规则:重建佛塔的编号是当前矗立佛塔中两个佛塔的编号差或和。

分析

首先,有a,b,以及建造规则,能不能推算出最终会建造的佛塔的所有编号。
若知道了这个,结果就出来了。
那我们将问题简转化为这个问题:

已知有集合s含有元素a,b, 即s{a,b}。每次能从集合s中选出两个元素x,y,可利用这两个元素生成c=|x-y| 或 d=x+y,如果元素编号在1~n内,就将其生成的元素加入到集合s中去;否则,运算停止。
问:由于每次运算有多种选择,可能导致最终集合里的元素会不同。那么是这样吗?

测试发现,已知n,a,b,那么是可以确定集合s中所有的元素的。

例如:
12 6 8
在这里插入图片描述

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;

int GCD(int a, int b){
    return b==0?a:GCD(b,a%b);
}

int main()
{
    ios::sync_with_stdio(0);

    int T,z=1;
    cin>>T;
    while(T--)
    {
        int ans,a,b,d,n,m;
        cin>>b>>n>>m;
        if(n > m)
            swap(n,m);
        d=GCD(n,m);
        if(n % d == 0)
            a = d;
        else
            a = n % d;
        ans = (b - a) / d + 1;
        cout<<"Case #"<<z++<<": ";
        if(ans % 2 == 0)
            cout<<"Iaka"<<endl;
        else
            cout<<"Yuwgna"<<endl;
    }
    return 0;
}
下载方式:https://renmaiwang.cn/s/t0445 在时序发生器设计实验中,如何达成T4至T1的生成? 时序发生器的构建可以通过运用一个4位循环移位寄存器来达成T4至T1的输出。 具体而言:- **CLR(清除)**: 作为全局清零信号,当CLR呈现低电平状态时,所有输出(涵盖T1至T4)皆会被清除。 - **STOP**: 在T4脉冲的下降沿时刻,若STOP信号处于低电平状态,则T1至T4会被重置。 - **启动流程**: 当启动信号START处于高电平,并且STOP为高电平时,移位寄存器将在每个时钟的上升沿向左移动一位。 移位寄存器的输出端对应了T4、T3、T2、T1。 #### 2. 时序发生器如何调控T1至T4的波形形态? 时序发生器通过以下几个信号调控T1至T4的波形形态:- **CLR**: 当CLR处于低电平状态时,所有输出均会被清零。 - **STOP**: 若STOP信号为低电平,且在T4脉冲的下降沿时刻,所有输出同样会被清零。 - **START**: 在START信号有效(通常为高电平),并且STOP为高电平时,移位寄存器启动,从而产生环形脉冲输出。 ### 微程序控制器实验#### 3. 微程序控制器实验中的四条机器指令及其对应的微程序段指定的机器指令及其关联的微程序段如下:- **NOP**: 00- **R0->B**: 04- **A+B->R0**: 05- **P<1>**: 30- **IN->R0**: 32- **R0->OUT**: 33- **HLT**: 35#### 4. 微程序段中的微操作/微命令序列针对每条微指令,其对应的微操作或微命令序列如下:- **IN->R0**: 输入(IN)单元的数据被...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值