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;
相关推荐
王老师青少年编程13 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮13 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说13 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove14 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung15 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了15 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL15 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
谭欣辰15 小时前
C++ 排列组合完整指南
开发语言·c++·算法
代码中介商15 小时前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法
橙子也要努力变强16 小时前
信号捕捉底层机制-机理篇2
linux·服务器·c++