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;
相关推荐
强壮的CAT3 分钟前
VINS-Fusion 移植 ROS2 Jazzy 踩坑(一):环境与编译
人工智能·算法·机器人·自动驾驶
王维同学7 分钟前
ETW监控-KswordARK功能展示
c++·windows·安全
東隅已逝,桑榆非晚8 分钟前
c++模板进阶
开发语言·c++·笔记·学习
Omics Pro11 分钟前
计算虚拟扰动:网络毒理+虚拟敲除
数据库·人工智能·算法·机器学习·自然语言处理
yyy(十一月限定版)13 分钟前
CF2137D Replace with Occurrences
算法
谢亮_vipxieliang18 分钟前
GC 入门:G1 与 ZGC 怎么选
java·jvm·算法
兔小盈19 分钟前
有效三角形个数与和为s的两个数字
算法·双指针
左手の明天9 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
海上小飞龙9 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂10 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛