首页 > 其他分享 >【牛客训练记录】牛客周赛 Round 77

【牛客训练记录】牛客周赛 Round 77

时间:2025-01-19 21:48:32浏览次数:1  
标签:周赛 return int long 77 牛客 solve exgcd define

训练情况

赛后反思

打一半吃饭去了,C题看到 ax+by=k 的问题,简单的扩欧exgcd没反应过来,简单数论还是不熟悉TAT,D题DSU计算联通块大小时 \(i\) 打成 \(a_i\) 疯狂 RE 被硬控了十几分钟

A题

输出题目所述的第几个字符串即可

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    string s[7] = {"","20250121","20250123","20250126","20250206","20250208","20250211"};
    int x; cin>>x;
    cout<<s[x]<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

B题

记录 \(1 \sim 9\) 的出现次数,如果出现次数最大值与最小值的差超过 \(2\) 就必定无法成为数独,因为会多两个相同的数字

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n; cin>>n;
    vector<int> a(n + 1);
    vector<int> cnt(10);
    for(int i = 1;i<=n;i++) cin>>a[i],cnt[a[i]]++;
    bool flag = true;
    int ma = 0,mi = INT_MAX;
    for(int i = 1;i<=9;i++){
        ma = max(ma,cnt[i]);
        mi = min(mi,cnt[i]);
    }
    if(ma-mi<=1) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

C题

我们将 x,y 轴分开考虑

向右d向左c可以等价看成两种操作 +d 和 +(d-c),这两种操作是否存在 \((x,y)\) 使得 ax + by = 终点横坐标

向上a向下b可以等价看成两种操作 +a 和 +(a-b),这两种操作是否存在 \((x,y)\) 使得 ax + by = 终点纵坐标

我们使用扩展欧几里得 exgcd 判断是否存在合法解即可

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

int x,y;

int exgcd(int a,int b){
	if(b==0){
		x=1;
		y=0;
		return a;
	}
	int d=exgcd(b,a%b);
	int t=x;
	x=y;
	y=t-a/b*y;
	return d;
}

void solve(){
    int x,y,a,b,c,d;
    cin>>x>>y>>a>>b>>c>>d;
    int e = exgcd(d-c,d);
    int f = exgcd(a-b,a);
    if(x%e||y%f) cout<<"NO"<<endl;
    else cout<<"YES"<<endl;
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

D题

二进制+并查集,我们只要维护每一位 \(1\) 上面的元素个数即可,所以我这边采用 n + 1 + j 表示二进制第 j 位为 1,对于每个 \(a_i\) 转为二进制使用并查集维护即可,最后统计最大的联通块即可

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

const int N = 2e5;

int a[N],cnt[N],fa[N];

int Find(int x){
    if(fa[x] == x) return x;
    return fa[x] = Find(fa[x]);
}

void Union(int x,int y){
    x = Find(x); y = Find(y);
    if(x == y) return;
    fa[y] = x;
}

void solve(){
    int n; cin>>n;
    for(int i = 1;i<=n+100;i++) fa[i] = i,cnt[i] = 0;
    for(int i = 1;i<=n;i++) cin>>a[i];
    for(int i = 1;i<=n;i++){
        for(int j = 63;~j;j--){
            if((1ll<<j)&a[i]) Union(i,n+j+1);
        }
    }
    for(int i = 1;i<=n;i++) cnt[Find(i)]++;
    int ans = 0;
    for(int i = 1;i<=n;i++) ans = max(ans,cnt[i]);
    cout<<ans<<endl;
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

标签:周赛,return,int,long,77,牛客,solve,exgcd,define
From: https://www.cnblogs.com/longxingx/p/18680180

相关文章

  • [BZOJ P2771] 天才ACM
    [BZOJP2771]天才ACM传送门朴素算法枚举终点\(r\),对区间\([l,r]\)排序求校验值\(sum\),比较\(sum\)和\(t\)$sum\let$ r++$sum>t$l=++r,ans++时间复杂度N2logN初步优化考虑校验值单调不下降,可枚举左端点l时二分右端点r,再对区间l~r求校验值,更新方法......
  • 877、基于51单片机的直流电机仿真设计(正反转,加减速,启停)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能51单片机实现直流电机正反转、加减速、启动和停止。用LCD显示电机工作状态二、proteus仿真三、原理图四、程序源码五、资料......
  • 牛客小白月赛109
    A.Onewan的疑惑题意:找有多少小于等于\(n\)的\(x\)满足\(x+(19260817)≥n−(114514)\)。移项可得\(x\)的下界,注意\(x\)最大得有\(1\)。点击查看代码voidsolve(){i64n;std::cin>>n;i64m=std::max(1ll,n-114514-19260817);std::cout<<n-m......
  • 《CPython Internals》阅读笔记:p177-p220
    《CPythonInternals》学习第11天,p177-p220总结,总计44页。一、技术总结1.memoryallocationinC(1)staticmemeoryallocationMemoryrequirementsarecalculatedatcompiletimeandallocatedbytheexecutablewhenitstarts.(2)automaticmemeoryallocation......
  • leetcode第390场周赛
    目录100245.每个字符最多出现两次的最长子字符串100228.执行操作使数据元素之和大于等于K100258.最高频率的ID100268.最长公共后缀查询leetcode第390场周赛100245.每个字符最多出现两次的最长子字符串题意给定一个长度小于等于100的仅由小写字母构成的字符串,请你......
  • LeetCode 1773. 统计匹配检索规则的物品数量
    在这个问题中,我们被要求统计一个物品数组中满足特定检索规则的物品数量。每个物品由其类型、颜色和名称定义,而检索规则由规则键和规则值指定。我们的任务是找出数组中满足这些规则的物品数量。问题描述解题思路定义索引映射:首先,我们需要定义一个映射,将规则键("type"、"color......
  • Linux权限详解(chmod、600、644、700、711、755、777、4755、6755、7755)
    Linux权限详解Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。这也是Linux有别于Windows的机制,也是基于这个权限机制,Linux可以有效防止病毒自我运行,因为运行的条件是必须要有运行的权限,而这个权限在Linux是用户所赋予的......
  • P4770 [NOI2018] 你的名字 题解
    \(\text{P4770[NOI2018]你的名字题解}\)注意到\(l=1,r=|S|\)有整整68分的高分,让我们先来考虑这样的特殊情况。这样的特殊情形实际上要我们求的是\(t\)有多少个本质不同的子串满足其不是\(s\)的子串。正着做看上去有些困难,于是维护\(s,t\)的本质不同公共子串个数,用......
  • 【西南石油大学电气信息学院主办,EI检索稳定 | SPIE (ISSN: 0277-786X)出版】2025年计
    2025年计算机视觉研究进展与应用国际学术会议(ACVRA2025)2025InternationalConferenceonAdvancesinComputerVisionResearchandApplications2025年2月28-3月2日广州会议官网:www.acvra.org【更多详情】EI检索稳定| 西南石油大学电气信息学院主讲嘉宾:孟......
  • AcWing算法周赛第6场 | 3735 构造完全图
    学习C++从娃娃抓起!记录下AcWing备赛学习过程中的题目,记录每一个瞬间。附上汇总贴:AcWing算法周赛|汇总【题目描述】给定一个由nnn个点和......