首页 > 其他分享 >CCPC Online 2024China, September, 8, 2024三道签到题

CCPC Online 2024China, September, 8, 2024三道签到题

时间:2024-09-10 10:22:34浏览次数:12  
标签:cin September lowbit 2024China CCPC Alice int 沙子 Bob

网络赛复现地址:

https://codeforces.com/gym/105336 

L网络预选赛:

做法:

直接枚举两行两列即可

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 510;
char a[N][N];
int main() {
    int n,m; cin >> n >> m;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++) cin >> a[i][j];
    int ans  = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(a[i][j] == 'c' && a[i + 1][j] == 'p' &&
               a[i][j + 1] == 'c' && a[i + 1][j + 1] == 'c') ans ++;
        }
    }
    cout << ans <<'\n';
    return 0;
}

Problem K. 取沙子游戏 

做法一:

特殊情况判断:k >= n,Alice取完,Alice必赢

首先如果n是奇数的话,Alice取1,此时Bob只能取一,Alice必赢

如果n是偶数的话,根据规律,我们需要找到2的整数倍,使得n / base(base初始化为2)的商为奇数,此时Alice赢否则Bob赢。

代码一:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int t; cin >> t;
    while(t--){
        int n,k; cin >> n >> k;
        if(k >= n){
            cout <<"Alice\n";
            continue;
        }
        if(n & 1){
            cout <<"Alice\n";
            continue;
        }

        int base = 2;
        bool flag = false;
        while(base <= k){
            if((n / base) & 1) {
                flag = true;
                break;
            }
            base *= 2;

        }
        if(flag) cout <<"Alice\n";
        else cout << "Bob\n";
    }
    return 0;
}

做法二:

  • 如果 lowbit(n) 小于等于 k,那么 Alice 通过拿走 lowbit(n) 粒沙子,就能保证她可以重复 Bob 的取法,从而最终获胜。
  • 如果 lowbit(n) 大于 k,则无论 Alice 如何取,Bob 总是可以进入一个 Alice 无法获胜的局面。

证明

  1. lowbit(n) 小于等于 k时,Alice 可以取走 lowbit(n)粒沙子,之后无论 Bob 取走多少粒沙子,Alice 只需要重复他的策略即可取胜。
  2. lowbit(n) 大于 k,Alice 无法取到一个有效的 lowbit(n),这时无论 Alice 如何取沙子,Bob 都能够通过合理的策略取胜。

假设:

  • n=12(一共有 12 粒沙子)
  • k=4(每次最多可以取 4 粒沙子)
Alice 的第一步:
  1. n=12,二进制表示为 1100,因此 lowbit(12)=4,Alice 可以取走 4粒沙子。
  2. 此时剩下的沙子数量 n′=12−4=8,二进制为 1000,接下来轮到 Bob。
Bob 的第一步:
  1. n′=8,二进制表示为 1000,因此 lowbit(8)=8,但是 k=4,Bob 无法一次性取走 8 粒沙子。
  2. 因此,Bob 最大只能取走 k=4 粒沙子,他取走 4 粒后,剩下 n′′=8−4=4′
Alice 的第二步:
  1. n′′=4n'' = 4n′′=4,二进制表示为 100,lowbit(4)=4lowbit(4) = 4lowbit(4)=4,Alice 取走剩下的 4 粒沙子,游戏结束,Alice 获胜。

代码二: 

#include <bits/stdc++.h>
using namespace std;

// Function to compute lowbit
int lowbit(int n) {
    return n & (-n);
}

int main() {
    int t; cin >> t;
    while(t--) {
        int n, k; cin >> n >> k;

        // 如果k大于等于n,Alice可以直接拿完,获胜
        if(k >= n) {
            cout << "Alice\n";
            continue;
        }

        // 如果n是奇数,Alice获胜
        if(n & 1) {
            cout << "Alice\n";
            continue;
        }

        // 否则通过 lowbit 判断
        if(lowbit(n) <= k) {
            cout << "Alice\n";
        } else {
            cout << "Bob\n";
        }
    }
    return 0;
}

做法一和做法二的关联:

做法一基于奇偶性分析

这实际上和 lowbit 的分析思路是一样的——每次把最小有效的位(最低的 1)取掉,直到把偶数变成奇数。

  • 当 n是奇数时,Alice 直接获胜
  • 当n 是偶数时,通过除以 2 逐步缩小 n,相当于在剥离掉最右侧的 0(即 lowbit 所表示的部分)。当 Alice 使 n变为奇数时,局面重新对 Alice 有利。

两种方法的本质一致性

  • lowbit 方法 是直接观察二进制的最低位 1 的位置,通过每次取走 lowbit(n) 来减少沙子,并构造有利局面。
  • 奇偶分析法 是通过逐次除以 2 的方式,慢慢缩减问题规模,直到剩下奇数或更小的偶数,这和 lowbit 的核心思想也是一致的。

 Problem B. 军训 II:

做法:

只要按照大小顺序排,那么不整齐度就会最小。因此,将数组顺序或者倒序排序即可,答案可以直接暴力或 O(n) 计算。对于方案数,统计一下每个数 的出现次数 cnti,那么方案数就是 2 * cnti !。特别地,当所有数都一样的时候,答案为 n!。

fac和Min一定要开long long不然过不了

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e3 + 10,mod = 998244353;
int a[N];
ll fac[N];
map<int, int> mp;
int main() {
    int n; cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        mp[a[i]] ++;
    }
    sort(a + 1, a + 1 + n);
    fac[0] = 1;
    for(int i = 1; i <= n; i++){
        fac[i] = fac[i - 1] * i % mod;
    }
    int ans = 1;
   for(auto i : mp){
      if(i.second >= 2) ans = ans * fac[i.second] % mod;
   }
    if(mp.size() != 1)  ans = 2 * ans % mod;
    ll Min = 0;
    for(int i = 1; i <= n; i++){
        for(int j = i + 1; j <= n; j++){
            Min += a[j] - a[i];
        }
    }
    cout << Min << " " << ans <<'\n';
    return 0;
}

标签:cin,September,lowbit,2024China,CCPC,Alice,int,沙子,Bob
From: https://blog.csdn.net/gege_0606/article/details/142078368

相关文章

  • CCPC 中国大学生程序设计竞赛 信息全收集
    前言本页面为子页面,更多信息请参阅主页面,GitHub仓库。最后更新:2024.09.092020-2024疫情及疫情后2024.9-2025赛季10th简称官方名称举办时间承办评价补题链接网络预选赛The2024CCPCOnlineContest2024-09-08在线-PTA知乎GYM哈尔滨2024-10-20东......
  • The 2024 CCPC Online Contest
    B-军训II题意n个人,第i个人身高为\(a_i\),定义不整齐度为所有区间的身高极差之和。求不整齐度的最小值以及现在的排列方案数。不整齐度:\(\sum_{l=0}^n\sum_{r=l}^nmax(a_{pl}+a_{pl+1},···,+a_{pr})-min(a_{pl}+a_{pl+1},···,+a_{pr})\)思路按身高排......
  • The 2024 CCPC Online Contest
    目录写在前面LKBDEJIGC写在最后写在前面补题地址:https://codeforces.com/gym/105336以下按个人向难度排序。唉唉唐吧真是我去居然还能打出名额哈哈真牛逼L签到。K签到。dztlb大神直接秒了。显然奇数先手取1必胜,则偶数时为了让自己不输,先手和后手均会保证在取到2之......
  • 2024ccpc网络赛补题
    L.网络预选赛题意:查询多少个2*2的子矩阵满足[c,c][p,c]输出个数Code:#include<bits/stdc++.h>usingnamespacestd;strings="ccpc";intdirs[4][2]={{0,0},{0,1},{1,0},{1,1}};chara[505][505];voidsolve(){intn,m;......
  • CCPC2024 网络预选赛游记
    没啥可写的啊。考前一天晚上和考试上午做了几套cf。就上来50分钟三个人一直刷新,刷到40分钟刷出来两道签到题题面,然后签了。后来分头开题,J按位确定15分钟,他俩写了3题我都没确定出来,给车昱辉做他说线性基两下就行了。然后做了一个I,读了半天题没读明白。然后题干改写成了每个人......
  • 2024CCPC网络赛题解
    前言开局掉线30min比较搞心态,不过比赛延迟了1个小时,但是后面也一直没过题,如果时间再少点可能排名还更好看。最后是8题前面,这里简单讲一下我有写的题,队友写的题就放一下队友的赛时代码,大家自己看看吧。B队友写的,签到,但是数据范围\(n\)给\(10^3\)给队友整不自信了,因为答案的......
  • The 2024 CCPC National Invitational Contest (Northeast), The 18th Northeast Coll
    目录写在前面JDAEMFLIH写在最后写在前面比赛地址:https://codeforces.com/gym/105173以下按个人难度向排序。就俩人刚开学处于唐氏状态于是开把省赛,呃呃然而还是唐多亏dztlb大神爆切两道计数还不算烂。J签到。唉感觉读研究生好可怕感觉还不如直接去打工不想打了就跑路。C......
  • Linguistics-English-Happy Labor Day September 2, 2024
    CelebratingthemanycontributionsworkershavemadetoAmerica'sstrength,prosperityandwell-being.Aswellastheirsocialandeconomicachievements.ThefirstLaborDayholidaywascelebratedonTuesday,September5,1882,inNewYorkCity,ina......
  • job recording September ton
    日期:Septemberton记录人:jack.maspecailtak:NoneDreamFire:LearningRuby&OperaterSystem&Pythondevredorgreen:grey一:附件链接放在iframe里面:进行嵌套需要进行链接的提取jack/shananxi_spider分支点击查看代码`r_api_url=item.......
  • September Nine recording
    日期:SeptemberNine记录人:jack.maspecailtak:1DreamFire:LearningRuby&OperaterSystem&Pythondev redorgreen: red questions:1.滑块验证+同步问题。obei_spider4一个同步的问题大致问题是:代码里用的浏览器模拟点击的操作,因为有......