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;
相关推荐
Zixhy1 分钟前
手撕Reactor模型实现同步高并发服务器及Muduo网络库深入解析
linux·服务器·网络·数据库·c++
Dola_Zou7 小时前
工厂智能排产软件算法保护与按产线计费实战
算法·自动化·软件工程·软件加密
码匠许师傅7 小时前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
啦啦啦啦啦zzzz8 小时前
Logger的组装(c++20)
c++·算法·c++20
尾善爱看海9 小时前
前端算法与手写题集
前端·算法
繁星蓝雨9 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
程序员阿鹏10 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
蒸蒸yyyyzwd10 小时前
机试学习笔记
c++·求职招聘
AI 思录10 小时前
Prompt 事故档案(八):日常表达被标为“待校准”,AI 的爹味语法从哪里来
大数据·人工智能·算法·prompt·用户体验·ai合规
月光船幽幽10 小时前
跨范式映射的稳定接口设计
人工智能·python·算法