Codeforces Round 1065 (Div. 3)A-C2

A. Shizuku Hoshikawa and Farm Legs

ideas:

思路1:

可以用递推公式去做,类似于斐波那契

思路2:

首先奇数肯定是不行的,一定是偶数

偶数就看是不是4的倍数,方案数就是n/4+1

复制代码
>为什么是4?
偶数一个可以划分为N个2相加,偶数个2才能合成四,换句话说就是看有多少个4
0也算一种方案数,所以要加1.

数学方法证明:

鸡的数量为X,牛的数量为Y
2X+4Y=N2X+4Y=N2X+4Y=N

化简得:
X=N/2−2YX=N/2-2YX=N/2−2Y

X,Y>=0
Y<=N/4Y<=N/4Y<=N/4

code:

cpp 复制代码
    f[2]=1;
    f[4]=2;
    for(int i=6;i<=100;i+=2){
        f[i]=max(f[i-2],f[i-4]+1);
    }
cpp 复制代码
cout << (n & 1 ? 0 : n/4+1) << '\n';

(n & 1) == 0 ⇔ n 是偶数

(n & 1) == 1 ⇔ n 是奇数

B. Yuu Koito and Minimum Absolute Sum

ideas:

我们根据题目的含义,递推发现公式最小值只与第一个数和最后一个数有关,我们可以贪心的处理,让他们俩相同,中间的数全为0。

code:

cpp 复制代码
	if(a[0] == -1)
        a[0] = a[n-1];
    if(a[n-1] == -1)
        a[n-1] = a[0];
    for(int i=0; i<n; i++)
        if(a[i] == -1)
            a[i] = 0;
    cout << abs(a[n-1] - a[0]) << '\n';
    for(int i=0; i<n; i++)
        cout << a[i] << " \n"[i == n-1];

C1. Renako Amaori and XOR Game (easy version)

ideas :

我们可以统计的1出现的次数,如果两个人一共出现偶数次1就是平局,

随后我们可以发现最后一次能交换且交换有效的一定赢。

code :

cpp 复制代码
	int res=0;
    for(int i=1;i<=n;i++)cin>>a[i],res^=a[i];
    for(int i=1;i<=n;i++)cin>>b[i],res^=b[i];

    if(!res){
        cout<<"Tie"<<endl;
        return ;
    }

    int pos=0;
    for(int i=1;i<=n;i++)
        if(a[i]^b[i])
            pos=i;
    
    if(pos&1)cout<<"Ajisai"<<endl;
    else cout<<"Mai"<<endl;

C2. Renako Amaori and XOR Game (hard version)

ideas:

同上面那个题一样,需要判断是否平局,原理也是一样,如果每一位都相同,注定是平局(这里每一位是二进制中的每一位)

不同的是,这里不是只有0和1了,那么我们需要去判断,是哪一位不同,谁控制的这一位,就是谁赢。

code:

cpp 复制代码
	int n;
    cin>>n;
    vector<int>a(n+1),b(n+1);
    int res=0;
    for(int i=1;i<=n;i++)cin>>a[i],res^=a[i];
    for(int i=1;i<=n;i++)cin>>b[i],res^=b[i];

    if(!res){
        cout<<"Tie"<<endl;
        return ;
    }

    int pos;//找到最高位
    for(int i=0;i<=20;i++)
        if(res&1<<i)
            pos=i;
    int ans;//这一位是谁在控制
    for(int i=1;i<=n;i++)
    //检查 a[i] 和 b[i] 在第pos位是否不同!
        if((a[i]^b[i])&1<<pos)
            ans=i;
    
    if(ans&1)cout<<"Ajisai"<<endl;
    else cout<<"Mai"<<endl;
相关推荐
ECT-OS-JiuHuaShan4 分钟前
朱梁万有递归元定理,重构《易经》
算法·重构
顶点多余18 分钟前
使用C/C++语言链接Mysql详解
数据库·c++·mysql
汉克老师22 分钟前
GESP2026年3月认证C++四级( 第二部分判断题(1-10))
c++·指针·函数重载·文件操作·数组·gesp4级·gesp四级
智者知已应修善业43 分钟前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
khddvbe1 小时前
C++并发编程中的死锁避免
开发语言·c++·算法
C羊驼1 小时前
C语言:两天打鱼,三天晒网
c语言·经验分享·笔记·算法·青少年编程
菜菜小狗的学习笔记1 小时前
剑指Offer算法题(四)链表
数据结构·算法·链表
myloveasuka1 小时前
[Java]查找算法&排序算法
java·算法·排序算法
清水白石0082 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
We་ct2 小时前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法