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

国庆训练题题解10.5

1328C - Ternary XOR

https://codeforces.com/problemset/problem/1328/c

题意:

给定一个C,使C=A⊕B且Ci=(Ai+Bi)%3C=A\oplus B 且C_i=(A_i+B_i)\%3C=ABCi=(Ai+Bi)%3
满足max(a,b)max(a,b)max(a,b)尽可能小
找出这个A和B

解题思路:

AB每一个字符就只有三个数0,1, 2。
当x=0:
a:0 1 2
b:0 2 1
max(a,b)最小:0
x=1:
a:1 0
b:0 1
max(a,b)最小:1
x=2
a:1 2 0
b:1 0 2
max(a,b)最小 :1
由于题目说第一个字符一定是2,我们要让max(a,b)尽可能小,说明ab的差距尽可能大,对于第一个字符不能取0,就同时取1
后面的需要判断ab谁跟大,确定一个数大后另一个就尽可能小。
这题就分为两种情况:
判断谁大之前:
尽可能ab相同
判断之后:
固定取数
我们可以在第一次遇到1的时候,固定ab的大小关系,比如让a变大,b变小。方便我们后序取数。
这里看起来好像没有用到异或关系
其实有一个公式:
ci=ai⊕bi=(ai+bi)%3c_i=a_i\oplus b_i=(a_i+b_i)\%3ci=aibi=(ai+bi)%3
这是三元运算(三进制),在二进制中同样适用(mod2mod 2mod2)。

完整代码:

#include <iostream>
#include <string>using namespace std;void solve() {int n;cin >> n;string x;cin >> x;string a, b;bool flag = false;for (int i = 0; i < n; i++) {if (x[i] == '2') {if (flag) {a += '0';b += '2';} else {a += '1';b += '1';}} else if (x[i] == '1') {if (flag) {a += '0';b += '1';} else {a += '1';b += '0';flag = true;}} else {a += '0';b += '0';}}cout << a << "\n" << b << "\n";
}int main() {ios_base::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}

D. Buying Shovels

https://codeforces.com/problemset/problem/1360/D

题意:

n个物体,k种包装方式(可以包iii个物体,1<=i<=k1<=i<=k1<=i<=k),包装大小是固定的,比如前面选择了装2个,每包就只能装2个。
求最少的包装数

解题思路:

我们一共要有n个物体,每个包里面装小于等于x个(x<=k,不一定要装满),一共有m个包
等价于:n=m∗xn=m*xn=mx
于是就分为两种情况:
k>=n:随便装,最坏就是装每包一个,结果就是111.
k<n:我们要最小化mmmm=n/xm=n/xm=n/x,一定是整除(x就是n的因数)
我们就需要去找n的因数,就类似于找质数,如果iii是因数,那么n/in/in/i也是因数,选择一个最小值即可。
每当找到一个因数,就看是否在k这个范围之内,同时也需要检查是否包的个数是否在k这个范围之内。

完整代码:

#include <iostream>
#include <algorithm>
#include <vector>using namespace std;typedef long long ll;const int N=1e5+10;void solve()
{int n,k;cin>>n>>k;if(n<=k){cout<<1<<endl;return ;}else {if(k==1){cout<<n<<endl;return ;}int res=n;for(int i=1;i*i<=n;i++){if(n%i==0){if(i<=k){res=min(res,n/i);}if(n/i<=k){res=min(res,i);}}}cout<<res<<endl;}
}int main ()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int t=1;cin>>t;while(t--)solve();return 0;
} 

A. Filling Diamonds

https://codeforces.com/problemset/problem/1339/A

题意:

用一个菱形去覆盖4n-2个三角形

解题思路:

水题,只要读懂放的这个菱形固定放的行,答案就是n。

C. K-th Not Divisible by n

https://codeforces.com/problemset/problem/1352/C

题意:

找到第K个不能被N整除的数

解题思路:

暴力法:
一个一个找,找到第k个就输出

#include <iostream>
#include <algorithm>
#include <vector>using namespace std;typedef long long ll;const int N=1e9+7;bool st[N];
void solve()
{int n,k;cin>>n>>k;vector<int>a;int num=1;while(a.size()<k){if(num%n!=0)a.push_back(num);num++;}// for(auto i:a)//     cout<<i<<" ";// cout<<endl;auto it=a.end()-1;cout<<*it<<endl;
}int main ()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int t=1;cin>>t;while(t--)solve();return 0;
} 

数学公式:
我们可以发现,N个数可以按照n来分组,在n前面的都是不能被整除的,刚好第n个可以整除,比如,n=3;
第一组:1 2 3
第二组:4 5 6
第三组:7 8 9
每一组前面两位都是不能被整除的,只有第三位才能。
在结合上k,公式:

ans=k+(k−1)/(n−1)ans=k+(k-1)/(n-1)ans=k+(k1)/(n1)

推导:
前 k 个不能被 n 整除的数,分布在若干完整的组中,可能还有部分组。
每组提供 n-1 个有效数,所以:
完整组数 = (k - 1) / (n - 1) (向下取整)
每个完整组我们要跳过 1 个 n 的倍数
所以总共要跳过的 n 的倍数数量 = (k - 1) / (n - 1)
第 k 个不能被 n 整除的数在自然数序列中的位置是:
结果=k+跳过的倍数数量

为什么是K-1?
因为我们需要求第k个数,所以我们需要求出前k-1个数,再计算第k个数
数学证明:
设第 k 个不能被 n 整除的数为 x。
在 1 到 x 之间:
有 k 个不能被 n 整除的数
有 floor(x/n) 个能被 n 整除的数
总数关系:k + floor(x/n) = x
所以 x - floor(x/n) = k
因为 floor(x/n) = (x - (x mod n)) / n ≈ x/n
解近似:x - x/n = k ⇒ x(1 - 1/n) = k ⇒ x = k * n / (n-1)
更精确解考虑取整后就是:x = k + floor((k-1)/(n-1))

void solve()
{int n,k;cin>>n>>k;cout<<k+(k-1)/(n-1)<<endl;
}
http://www.dtcms.com/a/445838.html

相关文章:

  • CLion实现ini 解析器设计与实现
  • python全栈(基础篇)——day04:后端内容(字符编码+list与tuple+条件判断+实战演示+每日一题)
  • 广州网站建设功能洛阳霞光企业网站建设公司
  • list 与 forward_list:一场 STL 中的“链表哲学”之争
  • Vue 学习与实践大纲(后端视角)
  • 2025时序数据库选型,从架构基因到AI赋能来解析
  • 三合一网站平台做网站 如何注册公司
  • 中山今科网站建设德州百度推广公司
  • Rust 与 传统语言:现代系统编程的深度对比
  • STM32--智能小车
  • Rust 登堂 之 Cell 和 RefCell(十二)
  • 分布式追踪系统实战:OpenTelemetry集成Istio实现全链路故障定位
  • 不同光谱的工业相机有哪些?能做什么?
  • 计算机网络——数据链路层笔记整理
  • CSS高效开发三大方向
  • 网站开发中的开版什么意思宁波汽车网站建设
  • dot1q termination vid vlan-id 概念及题目
  • 在越南做一个网站怎么做百度ai开放平台
  • IEEE Transactions 风格补充材料(Word)快速排版教程
  • php 8.4.11 更新日志
  • 二分查找_优选算法(C++)二分查找算法
  • 安卓设备分区作用详解-测试机红米K40
  • 网站开发进度计划是什么长沙游戏推广
  • AI与敏捷开发管理系列4:双向赋能——AI技术如何优化敏捷实践
  • opencv cv2.MorphologyEx
  • 【多线程】读写锁(Read-Write Lock)是什么?
  • 电子商务网站建设步骤百度文库网站ip地址 a记录
  • 常规可见光相机在工业视觉检测中的应用
  • 佛山企业网站建设平台如何把官网
  • Vue3双向数据绑定v-model