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)部分题解的更多相关文章

  1. Educational Codeforces Round 48 (Rated for Div. 2) CD题解

    Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...

  2. Educational Codeforces Round 59 (Rated for Div. 2) DE题解

    Educational Codeforces Round 59 (Rated for Div. 2) D. Compression 题目链接:https://codeforces.com/contes ...

  3. Educational Codeforces Round 80 (Rated for Div. 2)

    A. Deadline 题目链接:https://codeforces.com/contest/1288/problem/A 题意: 给你一个 N 和 D,问是否存在一个 X , 使得 $x+\lce ...

  4. 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][ ...

  5. Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator

    可以推出 min[i]要么是i要么是1,当a序列中存在这个数是1 max[i]的话就比较麻烦了 首先对于i来说,如果还没有被提到第一位的话,他的max可由他后面的这部分序列中 j>=i 的不同数 ...

  6. Educational Codeforces Round 80 (Rated for Div. 2)(A-E)

    C D E 这三道题感觉挺好       决定程序是否能通过优化在要求的时间内完成,程序运行时间为t,你可以选择花X天来优化,优化后程序的运行时间为t/(x+1)取上整,花费的时间为程序运行时间加上优 ...

  7. Educational Codeforces Round 80 (Rated for Div. 2)E(树状数组,模拟,思维)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ],mx[],a[],pos[],sum ...

  8. Educational Codeforces Round 80 (Rated for Div. 2)D(二分答案,状压检验)

    这题1<<M为255,可以logN二分答案后,N*M扫一遍表把N行数据转化为一个小于等于255的数字,再255^2检验答案(比扫一遍表复杂度低),复杂度约为N*M*logN #define ...

  9. Educational Codeforces Round 80 (Rated for Div. 2)C(DP)

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ][],temp[][]; int ...

随机推荐

  1. springboot前后端分离项目redis做验证码及用户信息存储验证长时间不操作失效问题解决

    1.错误回显:Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCO ...

  2. 从头学pytorch(七):dropout防止过拟合

    上一篇讲了防止过拟合的一种方式,权重衰减,也即在loss上加上一部分\(\frac{\lambda}{2n} \|\boldsymbol{w}\|^2\),从而使得w不至于过大,即不过分偏向某个特征. ...

  3. 【题解】[HNOI2015]菜肴制作(贪心+topo序)

    [题解][HNOI2015]菜肴制作(贪心+topo序) 题意:请你构造一个排列\(p[i]\)使得对于数组\(arc[i]=p[i]\)的字典序最小,并且对于给定的有序数对\((u,v)\)保证你给 ...

  4. 【题解】BZOJ5093图的价值(二项式+NTT)

    [题解]BZOJ5093图的价值(二项式+NTT) 今天才做这道题,是我太弱了 强烈吐槽c++这种垃圾语言tmd数组越界不re反倒去别的数组里搞事情我只想说QAQ 推了一张A4纸的式子 考虑每个点的度 ...

  5. $Poj2083/AcWing118\ Fractal$ 模拟

    $AcWing$ $Sol$ 一年前做过差不多的南蛮图腾,当时做出来还是很有成就感的$OvO$ $N<=7$,就是模拟模拟,预处理一下,$over$ $Code$ #include<bit ...

  6. 编译GLib C程序

    编译GLib C程序 GLib是GTK +所需的实用程序库,但也可以在非GUI应用程序中独立使用.本文介绍如何在Linux中编译使用GLib的C程序.它还显示了如何为系统上安装的GLib版本安装正确的 ...

  7. 分支结构,for循环,while循环,跳出循环

    #流程控制 概念:通过规定的语句让程序代码有条件的按照一定的方 式执行 顺序结构 按照书写顺序来执行,是程序中最基本的流程结构 选择结构(分支结构.条件结构) 分支结构 单路分支:if(执行的条件){ ...

  8. Activity启动过程源码分析(Android 8.0)

    Activity启动过程源码分析 本文来Activity的启动流程,一般我们都是通过startActivity或startActivityForResult来启动目标activity,那么我们就由此出 ...

  9. iFit—Smart Cardio Equipment 简介与下载

    iFit—Smart Cardio Equipment 无法在谷歌商店中下载,经过技术提取app只可以直接通过下载app安装简单方便 实测机型:华为荣耀畅玩2平板, 小米6X,360N5S均测试无BU ...

  10. 良心推荐,我珍藏的一些Chrome插件

    上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件. 我下面就把我日常工作和学习中经常用到的一些 Chr ...