当前位置: 首页 > news >正文

2025“钉耙编程”中国大学生算法设计暑期联赛(2)

树上的图

题目大意、

有正整数 n,给定起点 x 和终点 y(都在 1n 之间 ),要通过最少操作把 x 转成 y。操作有两种:

  • 找数 i1≤i≤n ),若 xi 二进制里 1 的个数(count)相同,x 可转成 i
  • 找数 i1≤i≤n ),若 xi 二进制里最低位 1 及后面 0 组成的数(lowbit)相同,x 可转成 i
    xy 最少操作次数 。

数据范围

有多组测试数据,第一行输入 TT 是 1 到 \(10^5\)) 的正整数 ),表示测试数据的组数 。每组测试数据占一行,包含三个正整数 nxy,满足 \(1 \leq x,y \leq n \leq 10^{15}\)n 是数值上界,x 是起点,y 是终点 。

思路

  1. x=y,则不需要操作
  2. count(x)=count(y) or lowbit(x)=lowbit(y), 仅需要一次操作
  3. 先count()转化,再lowbit转化,两次操作
点击查看代码
//2025“钉耙编程”中国大学生算法设计暑期联赛(2)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;ll lowbit(bitset<100> t) {return t._Find_first();//找到第一个1的位置
}void solve() {ll n, x, y;cin >> n >> x >> y;bitset<100>a(x),b(y);ll xx = a.count();ll yy = b.count();if (x == y) {cout << 0 << "\n";} else if (xx == yy || lowbit(x) == lowbit(y)) {cout << 1 << "\n";} else {cout << 2 << "\n";}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int _ = 1;cin >> _;while (_--) {solve();}return 0;
}

题目大意

有一个 ( n \times n ) 的网格,其中恰好有一行 一列全为 1,其余为 0。网格状态是从 2n 种可能(选一行或一列全置 1)中等概率随机选一种。

操作与目标
网格初始全部覆盖,你按策略依次翻格子。当所有 1 被翻出时结束,要找 最优策略,让翻开所有 1期望次数最小,并输出这个最小期望。

数据范围

  • 第一行输入 T ( $1 \leq T \leq 100 $),表示测试用例组数。
  • 每组用例输入一个 n ($ 2 \leq n \leq 10^9 $),即网格规模。

思路

最有策略,先翻对角线,再翻行或列,最少翻n次,最多翻2n次,取平均3n/2次

点击查看代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;void solve() {double n;cin >> n;cout << fixed << setprecision(4) << n * 3 / 2 << "\n";
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int _ = 1;cin >> _;while (_--) {solve();}return 0;
}

题目大意

  • 有两场比赛,都有 n 名选手(编号 1~n ),已知两场比赛各自的排名(a 数组、b 数组,均是 1~n 的排列,无并列)。
  • 你作为其中一名选手(假设是 i ),可以禁赛其他选手,禁赛后剩余选手相对排名不变。

对每个选手 i1 ≤ i ≤ n ),计算让自己在两场比赛中都拿第一名,最少需要禁赛多少人。

数据范围

  • 第一行输入 T(最多 20 组),表示测试用例数。
  • 每组用例:
    • 先输入 n(选手总数,最多 \(10^6\) )。
    • 再输入两场比赛的排名数组 ab(都是 1~n 的排列 )。

思路

思路是一目了然的,对于一个选手i找出,求出在a,b数组大于i排名的并集大小

先枚举a[i],记录小于a[i]的数,算出在b中小于a[i]的数,但不属于前i个a[],再加上i-1,

点击查看代码
//2025“钉耙编程”中国大学生算法设计暑期联赛(2)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n;
const int maxn=1e6+100;
int a[maxn],b[maxn];
int tr[maxn<<1];
int ans[maxn];
int lowbit(int x){return x&-x;
}
void add(int x){while(x<n){tr[x]++;x+=lowbit(x);}return ;
}
int sum(int x){int res=0;while(x){res+=tr[x];x-=lowbit(x); }return res;}void solve() {cin>>n;for(int i=0;i<=n;++i) tr[i]=0;for(int i=1;i<=n;++i)cin>>a[i];for(int i=1;i<=n;++i){int x;cin>>x;b[x]=i;}for(int i=1;i<=n;++i){int x=a[i];int w=b[x]-1-sum(b[x]-1)+i-1;ans[x]=w;add(b[x]);}for(int i=1;i<=n;++i) cout<<ans[i]<<" ";cout<<endl;return ;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int _ = 1;cin >> _;while (_--) {solve();}return 0;
}
http://www.sczhlp.com/news/40928/

相关文章:

  • 网站建设培训心得重庆网站seo费用
  • 网站做产品的审核工作互联网销售
  • 衡水企业网站设计东莞外贸推广公司
  • 做百度手机网站关键词网络营销
  • 做网站编辑需要学什么北京互联网营销公司
  • wordpress 标签图片信息流优化师简历模板
  • 广州商城网站建设公司个人网页制作教程
  • 越城网站建设公司广东短视频seo营销
  • AI伦理实践与责任框架解析
  • Linux的shell命令处理文件和路径的一些方法
  • AT_abc263_d [ABC263D] Left Right Operation 题解
  • 网站开发设计知乎温州seo网站建设
  • 网站速度测试最近一周的重大热点新闻
  • 如何做网站安全扫描seo网站页面优化包含
  • 武汉网站建设企业公司网络推广的作用
  • 免费设计网站地推团队如何收费
  • 做服装的一般去什么网站找图片商业公司的域名
  • 02020206 .NET Core重难点知识06 CancellationToken、WhenAll、异步其它问题
  • C# 中的类型转换和引用转换
  • 网站收录更新网络优化seo是什么工作
  • 东莞企业自助建站系统网站引流推广怎么做
  • 北京电商网站开发公司网络推广的平台
  • 苏州cms模板建站google推广专员招聘
  • 销售易app官网下载seo专业推广
  • 网站建设公司业务培训网络营销客服主要做什么
  • web前端项目案例深圳排名seo公司
  • 怎么做网站和注册域名杭州seo网站排名
  • 简述一个网站设计的主要步骤seo如何优化的
  • 大连制作网站报价怎样做竞价推广
  • 从数据安全到高效开发:推荐5款免费低代码平台