Educational Codeforces Round 80 (Rated for Div. 2)部分题解
A. Deadline
题目大意
给你\(n,d\)两个数,问是否存在\(x\)使得\(x+\frac{d}{x+1}\leq n\),其中\(\frac{d}{x+1}\)向上取整。
解题思路
方案一:利用均值不等式公式推导
\(x+\frac{d}{x+1}=x+1+\frac{d}{x+1}-1\geq2\sqrt{d}-1\)
所以 \(\min(x+\frac{x}{d+1})=2\sqrt{d}-1\)
因此去判断\(2\sqrt{d}-1\leq n\)是否成,即\(4\times n^2\leq (n+1)^2\)是否成立即可。
方案二:暴力判断
很明显的一点就是\(x\)的值不会超过\(\sqrt{d}\),所以遍历判断一下即可。
AC代码1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--){
long long n,d;
cin>>n>>d;
if(4*d<=(n+1)*(n+1)){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
return 0;
}
AC代码2
#include<bits/stdc++.h>
const int maxn=1e3+100;
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main()
{
// freopen("data.txt","r",stdin);
int t;
cin>>t;
while(t--){
int n,d;
cin>>n>>d;
bool flag=false;
for(int i=0;i*i<=d;i++){
if((i+d/(i+1)+(d%(i+1)==0?0:1))<=n){
flag=true;
}
}
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
总结
最开始拿到这道题的时候居然有点懵,其实应该理所应当的想到\(x\)的值不会超过\(\sqrt{d}\)
B. Yet Another Meme Problem
题目大意
给你两个数\(A,B\),求满足\(1\leq a \leq A\),\(1\leq b \leq B\)并且 \(a\times b+ a+b = a\times 10^{b的位数}+b\)的个数。
解题思路
在做这道题的时候其实出题人已经给了提示,所以很轻松的想到了结论,即找到满足\(\leq b\)并且每一位都是\(9\)的数字个数\(\times a\)即为答案。
结论推导:
\(a\times b+a+b=a\times 10^{b的位数}+b\)
\(a\times b+a = a\times 10^{b的位数}\)
\(a\times (b+1) = a\times 10^{b的位数}\)
\(b+1 = 10^{b的位数}\)
所以只有所有位都是\(9\)的数字才能满足,即\(9,99,999,\cdots\)
AC代码
#include<bits/stdc++.h>
const int maxn=1e3+100;
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main()
{
// freopen("data.txt","r",stdin);
int t;
cin>>t;
while(t--){
ll a,b;
cin>>a>>b;
string str = to_string(b);
int len = str.size()-1;
bool flag = true;
for(int i=0;i<str.size();i++){
if(str[i]!='9'){
flag=false;
break;
}
}
if(flag)len++;
cout<<a*len<<endl;
}
return 0;
}
总结
这道题自己在求数字个数的时候用的是字符串求法,其实如果不是大数的话,个人认为用整数运算即可,还方便点。丢个代码出来。
int cnt=0;
int number=9;
while(number<=b){
number = number*10+9;
cnt++;
}
C. Two Arrays
题目大意
给你两个数字\(n,m\),求用\(1\cdots n\)这\(n\)个数(数字可以重复)构造出两个长度为\(m\)的数组\(a,b\)满足一下要求的数组数量。
- 对于数组\(a,b\)中所有元素都满足\(a_i\leq b_i\)
- 数组\(a\)是非递减的
- 数组\(b\)是非递增的
解题思路
啊啊啊,这道题自己在做的时候没有想到把两个数组给合起来,思维太线性了,没有转过弯。数组\(a\)是非递减的,数组\(b\)是非递增的,如果将数组\(b\)反转连接在数组\(a\)的后面就是一个非递减数组,那么题目要求就转化为求用\(1\cdots n\)这\(n\)个数构造一个长度为\(2\times m\)的非递减数组的个数。
复杂度为\(O(n^2m)\)的转移方程
\(dp[i][j]\)表示第\(i\)个位置放数字\(j\)的方案数,那么\(dp[i][j]=\sum_{k=1} ^j dp[i-1][k]\)
复杂度为\(O(nm)的转移方程\)
\(dp[i][j]\)表示第\(i\)个位置放数字\(j\)的方案数,那么\(dp[i][j]=dp[i-1][j]+dp[i][j-1]\),这里利用了前缀和的思想。
推导如下:
\(dp[i][j]=\sum_{k=1} ^j dp[i-1][k]=\sum_{k=1}^{j-1}dp[i-1][k]+dp[i-1][j]\)
因为\(dp[i][j-1]=\sum_{k=1} ^{j-1} dp[i-1][k]\)
所以 \(dp[i][j]=dp[i-1][j]+dp[i][j-1]\)
又或者在不知道如何推导的情况下可以从思维上这样想
在第\(i\)个位置上可以放\(j-1\),那么在第\(i\)个位置上肯定也可以放\(j\),所以放\(j\)的个数肯定会包含放\(j-1\)的个数,但这样得到的所有方案在\(i-1\)这个位置上最大的是\(j-1\),其实在\(i-1\)这个位置可以放\(j\),所以再加上第\(i-1\)位置上放\(j\)的方案数。
AC代码
#include<bits/stdc++.h>
const int mod=1e9+7;
const int maxn=2e1+10;
const int maxm=1e3+20;
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int dp[maxn][maxm];
int main()
{
// freopen("data.txt","r",stdin);
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)dp[1][i]=1;
for(int i=2;i<=2*m;i++){
for(int j=1;j<=n;j++){
dp[i][j]=(dp[i][j-1]+dp[i-1][j])%mod;
}
}
ll ans=0;
for(int i=1;i<=n;i++){
ans+=dp[2*m][i];
ans%=mod;
}
cout<<ans<<endl;
return 0;
}
总结
后悔拿到这道题没思考,再仔细思考一下,在理解题目的意思之后应当建立对应的模型,思维不能太线性了。
Educational Codeforces Round 80 (Rated for Div. 2)部分题解的更多相关文章
- Educational Codeforces Round 48 (Rated for Div. 2) CD题解
Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...
- Educational Codeforces Round 59 (Rated for Div. 2) DE题解
Educational Codeforces Round 59 (Rated for Div. 2) D. Compression 题目链接:https://codeforces.com/contes ...
- Educational Codeforces Round 80 (Rated for Div. 2)
A. Deadline 题目链接:https://codeforces.com/contest/1288/problem/A 题意: 给你一个 N 和 D,问是否存在一个 X , 使得 $x+\lce ...
- Educational Codeforces Round 80 (Rated for Div. 2)D E
D枚举子集 题:https://codeforces.com/contest/1288/problem/D题意:给定n个序列,每个序列m个数,求第i个和第j个序列组成b序列,b序列=max(a[i][ ...
- Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator
可以推出 min[i]要么是i要么是1,当a序列中存在这个数是1 max[i]的话就比较麻烦了 首先对于i来说,如果还没有被提到第一位的话,他的max可由他后面的这部分序列中 j>=i 的不同数 ...
- Educational Codeforces Round 80 (Rated for Div. 2)(A-E)
C D E 这三道题感觉挺好 决定程序是否能通过优化在要求的时间内完成,程序运行时间为t,你可以选择花X天来优化,优化后程序的运行时间为t/(x+1)取上整,花费的时间为程序运行时间加上优 ...
- Educational Codeforces Round 80 (Rated for Div. 2)E(树状数组,模拟,思维)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ],mx[],a[],pos[],sum ...
- Educational Codeforces Round 80 (Rated for Div. 2)D(二分答案,状压检验)
这题1<<M为255,可以logN二分答案后,N*M扫一遍表把N行数据转化为一个小于等于255的数字,再255^2检验答案(比扫一遍表复杂度低),复杂度约为N*M*logN #define ...
- Educational Codeforces Round 80 (Rated for Div. 2)C(DP)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ][],temp[][]; int ...
随机推荐
- 用WPF实现大数据分析,超炫的效果,还带地图
开头语 经过一段时间研究,终于实现CS和BS相同效果的大数据展示平台了.首先来看看实现的效果,超炫的效果,客户特别喜欢,个人也非常满意,分享给各位,同大家一起交流学习. 大数据展示平台 从上图可以看出 ...
- 记一次线上 OOM 和性能优化
大家好,我是鸭血粉丝(大家会亲切的喊我 「阿粉」),是一位喜欢吃鸭血粉丝的程序员,回想起之前线上出现 OOM 的场景,毕竟当时是第一次遇到这么 紧脏 的大事,要好好记录下来. 1 事情回顾 在某次周五 ...
- 为什么在做微服务设计的时候需要DDD?
记得之前在规划和设计微服务架构的时候,张队长给了我一个至今依然记忆深刻的提示:『你的设计蓝图里为什么没有看到DDD的影子呢?』 随着对充血模型的领域认知的加深,我越加感觉到DDD的重要性.但是DDD内 ...
- Python 类的常用内置方法
类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,类的内置方法,会在满足某种条件下自动触发. 1.1__new__ __new__:在___init__触发前, ...
- 源码分析 Kafka 消息发送流程(文末附流程图)
温馨提示:本文基于 Kafka 2.2.1 版本.本文主要是以源码的手段一步一步探究消息发送流程,如果对源码不感兴趣,可以直接跳到文末查看消息发送流程图与消息发送本地缓存存储结构. 从上文 初识 Ka ...
- 那天晚上和@FeignClient注解的深度交流
废话篇 那晚,我和@FeignClient注解的深度交流了一次,爽! 主要还是在技术群里看到有同学在问相关问题,比如: contextId是干嘛的?name相同的多个Client会报错? 然后觉得有必 ...
- JVM系列五(javac 编译器).
一.概述 我们都知道 *.java 文件要首先被编译成 *.class 文件才能被 JVM 认识,这部分的工作主要由 Javac 来完成,类似于 Javac 这样的我们称之为前端编译器: 但是 *.c ...
- MySQL快速回顾:高级查询操作
8.1 排序数据 检索出的数据并不是以纯粹的随机顺序显示的.如果不排序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺序将会受到M ...
- 0x80070035找不到网络路径
如果这个报错发生:自己的网络正常,其他人可以正常访问服务器,而自己无法访问服务器.原因就是TCP/IP NetBIOS Helper服务被停止. 打开services.msc,启动此服务即可. 该服务 ...
- Java标签学习
今天早上看Java编程思想第四章控制执行流程,本来很简单的一些东西,但是突然看到了goto发现自己以前还真的没怎么用过,不过Java中对goto作为保留关键字,而是提供了一个叫标签的东西,我们一起来看 ...