Codeforces Round #701 (Div. 2)
A
Add and Divide
题意:给你两个正整数a和b,每次操作可以将a改为a/b向下取整,或让b=b+1,求让a=0时的最小操作数。
思路:显然b=1时,必须先进行b=b+1。先求一直进行a=a/b的操作数记为ans,然后遍历b~b+ans,计算操作数,不断取最小。
#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;using namespace std;
ll a,b;
void solve()
{cin>>a>>b;int cnt=0;int ans=0;if(a==b) cout<<2<<'\n';else if(a<b) cout<<1<<'\n';else{ll aa=a,bb=b;if(b==1) bb++,ans++;while(aa!=0){aa/=bb;ans++;}for(int i=max(b,(ll)2);i<=b+ans;i++){cnt=i-b;aa=a;while(aa!=0){aa/=i;cnt++;}ans=min(ans,cnt);}cout<<ans<<'\n';}
}
int main()
{//ios;int _t=1;cin>>_t;while(_t--){solve();}system("pause");return 0;
}
B
Replace and Keep Sorted
题意:给你正整数k,若两个数组满足以下条件,则称两数组为k相似。
(1)它们是严格递增的
(2)它们具有相同的长度
(3)它们的元素在1~k的范围内
(4)它们只有一位不同
给你数组a[n],求在区间a[l]~a[r]的k相似数组的数量
思路:因为只有一位不同,可以在[l,r]枚举不同的位i,第一位不同时,第一位可以改为[1,a[l])(a[l],a[l+1]),共a[l+1]-2种选择,对于最后一位不同,可以改为(a[r-1],a[r])(a[r],k],共a[r]-2种选择.对于中间的位,可以改为(a[i-1],a[i])(a[i],a[i+1]),共a[i+1]-a[i-1]-2种选择。将l~r每位上的选择累加即为答案,得k+a[r]-a[l]-2*(r-l)-1
#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;using namespace std;
ll a[N];
ll n,q,k;
void solve()
{cin>>n>>q>>k;for(int i=1;i<=n;i++) cin>>a[i];while(q--){ll l,r;cin>>l>>r;ll ans=0;cout<<(ll)(k+a[r]-a[l]-2*(r-l)-1)<<'\n';}
}
int main()
{ios;int _t=1;//cin>>_t;while(_t--){solve();}system("pause");return 0;
}
C
Floor and Mod
题意:若a/b向下取整=a%b,则称(a,b)对儿是特殊的。给你两个正整数x和y,求1<=a<=x,1<=b<=y的(a,b)对儿的数量。
思路:首先⌊a / b⌋ == a % b 可以转化为,(设余数为k) a=kb+k (b > k)
由于b>k,所以a∈(,x],然后,将b看作自变量,a为因变量,所以当余数k确定后, a与b是唯一对应的.令a=x,b=x/k-1;所以b∈(k,x/k-1]
最终确定b的范围为b ∈ [1, y] ∩ (k, x / k - 1] = (k, min(y, x / k - 1)].
因为a与b是唯一对应的,所以对于每一个k, 就有 min(y, x / k - 1) - k 个 (a, b).
注意当从小到大枚举k时,b的范围是不断缩小的,注意判断无解的情况
参考博客
#include <bits/stdc++.h>using namespace std;
typedef long long ll;
int main()
{int t; cin >> t;while (t--) {int x, y; scanf("%d %d", &x, &y);ll res = 0;for(int i=1;i<=x/i;i++) {res += max(min(y, x / i - 1) - i, 0); //与0取max, 是过滤无解的情况.}printf("%lld\n", res);}return 0;
}
D
Multiples and Power Differences
题意:给你一个n行m列的矩阵,让你构造出满足以下条件的矩阵b
(1)bij∈[1,1e6]
(2)bij是aij的倍数
(3)bij与相邻元素之差为 (k>=1)
思路:首先注意到输入的aij<=16,因此可以构造出一个数是所有aij的倍数(lcm)
用lcm处理1~16得这个数是720720,满足条件1.2,先用lcm填满矩阵b
考虑如何满足第三个条件,既要满足倍数关系,又要与相邻元素构造出差值,只能让lcm加上aij的四次方。注意相邻元素不能相等,要把这些值隔开,因此使用行列的奇偶性来判断
#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;using namespace std;
int n,m;
int a[510][510];
void solve()
{int ans=1;for(int i=1;i<=16;i++){ans=ans*i/__gcd(i,ans);}cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];if((i+j)&1) cout<<ans<<' ';else cout<<ans+a[i][j]*a[i][j]*a[i][j]*a[i][j]<<' ';}cout<<'\n';}
}
int main()
{ios;int _t=1;//cin>>_t;while(_t--){solve();}system("pause");return 0;
}
Codeforces Round #701 (Div. 2)相关推荐
- Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...
- Codeforces Round #701 (Div. 2)赛后补题报告(A~D)
Codeforces Round #701 (Div. 2)赛后补题报告(A~D) A. Add and Divide 原题信息 http://codeforces.com/contest/1485/ ...
- Codeforces Round #701 (Div. 2) E. Move and Swap 思维 + dp
传送门 文章目录 题意: 思路: 题意: 思路: 由于是按层来的,所以我们肯定先按照层来分组. 定义dp[i]dp[i]dp[i]为红棋在位置iii的时候的最大得分和. 先考虑不换的情况,我们对于每个 ...
- Codeforces Round #701 (Div. 2) D. Multiples and Power Differences 思维构造
传送门 题意: 给定一个矩阵aaa,让你构造一个矩阵bbb,要求矩阵bbb的每个元素是aaa对应位置元素的倍数,且矩阵bbb的每两个相邻元素相差为k4(k>=1)k^4(k>=1)k4(k ...
- Codeforces Round #701 (Div. 2) C. Floor and Mod 数学分块
传送门 题意: 给两个数x,yx,yx,y.现在你计算有多少对a(a<=x)a(a<=x)a(a<=x)和b(b<=y)b(b<=y)b(b<=y)使得⌊ab⌋=a ...
- Codeforces Round #701 (Div. 2) 总结
其实Round699也有打的,但是总结变成鸽子飞走了. 赛前30min:睡觉真舒服. 开场一个A题,看了个题感觉这玩意好像不能直接算. 目测答案肯定小于100,log1e18才64不到. 那就枚举给b ...
- Codeforces Round #701 (Div. 2)小结
2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
最新文章
- ant Table td 溢出隐藏(省略号)
- 《研磨设计模式》chap20 享元模式 Flyweight (2)模式介绍
- AngularJs 1.5 $location获取url参数
- 大龄开发者正在消失?NO,听听这3位50岁程序员怎么说
- linux232转usb接口驱动程序,USB转RS232串口驱动程序下载
- 华为开发者学堂 | 囤课畅学 码住未来
- 图解通信原理与案例分析-34:车联网中的系统架构与主要的通信技术
- Rust高并发编程总结
- 服务器虚拟主机,非根目录jsp文件的引包报错
- 汽车研发企业试验数据管理系统建设研究
- 王逸凡的十万个为什么
- Oracle数据库update语句用法,多表批量更新对应的字段值
- 苹果电脑修改用户名方法
- 一个完整的Windows驱动程序示例(应用与内核通信)
- php 格式化银行卡,PHP 格式化数字返回银行卡号码
- 云计算演义(11)为什么阿里云不及格?
- Xunsearch迅搜项目实战经验
- 欢迎访问互联网进化论官方网站
- 【信息量判别块:语义监督:GAN:IVIF】
- 中国软考2006年各地报名方式和咨询地址