A

考虑\(x + 1 = \sqrt{d}\)时在有理域上有最优界。

那我在整数域上附近取三个点取min就行了。

// code by fhq_treap
#include<bits/stdc++.h>
#define ll long long
#define N 300005 inline ll read(){
char C=getchar();
ll A=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') A=(A << 1)+(A << 3)+(C - 48) , C=getchar();
return A*F;
} template <typename T>
void write(T x)
{
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9)
write(x/10);
putchar(x % 10 + '0');
return;
} int n,d,t; int main(){
scanf("%d",&t);
while(t -- ){
scanf("%d%d",&n,&d);
int ans = d;
int k = sqrt(d);
ans = std::min(ans,(d + k - 1) / k + k - 1);
k ++ ;
ans = std::min(ans,(d + k - 1) / k + k - 1);
k -= 2;
if(k != 0)
ans = std::min(ans,(d + k - 1)/ k + k - 1);
puts((ans <= n) ? "Yes" : "No");
}
}

B

考虑枚举\(b\)的位数,然后发现\(b\)一定是 \(9999\) 这类的形式,而\(a\)可以随意取。

// code by fhq_treap
#include<bits/stdc++.h>
#define ll long long
#define N 300005 inline ll read(){
char C=getchar();
ll A=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') A=(A << 1)+(A << 3)+(C - 48) , C=getchar();
return A*F;
} template <typename T>
void write(T x)
{
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9)
write(x/10);
putchar(x % 10 + '0');
return;
} int t; int main(){
scanf("%d",&t);
while(t -- ){
int a,b;
scanf("%d%d",&a,&b);
int k = 0,now = 9;
while(b >= now){
k++;
now = now * 10 + 9;
}
std::cout<<1ll * k * a<<std::endl;
}
}

C

直接暴力\(dp\),再利用前缀和优化到\(O(n^2)\)

// code by fhq_treap
#include<bits/stdc++.h>
#define ll long long
#define N 300005
#define mod ((ll)1e9 + 7) inline ll read(){
char C=getchar();
ll A=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') A=(A << 1)+(A << 3)+(C - 48) , C=getchar();
return A*F;
} template <typename T>
void write(T x)
{
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9)
write(x/10);
putchar(x % 10 + '0');
return;
}
//f[i][j][k] = \sum(f[i - 1][p][q](q <= k,p >= j,j <= k))
int f[1005][1005];
int g[1005][1005];
int n,m;
inline void got(){
int tmp = 0;
for(int i = 1;i <= n;++i)
for(int j = 1;j <= n;++j)
g[i][j] = 0;
for(int i = 1;i <= n;++i){
tmp = 0;
for(int j = n;j >= 1;--j){
tmp = (tmp + f[i][j]) % mod;
g[i][j] = g[i - 1][j];
g[i][j] = (g[i][j] + tmp) % mod;
}
}
}
int main(){
scanf("%d%d",&n,&m);
f[1][n] = 1;
got();
for(int i = 1;i <= m;++i){
for(int j = 1;j <= n;++j){
for(int k = j;k <= n;++k){
f[j][k] = g[j][k];
}
}
got();
}
std::cout<<g[n][1] % mod<<std::endl;
}

D

二分答案,将一个长度为 \(m\) 的数字序列转换为 \(01\) 序列。

可以获得这个答案则有两个\(01\)串或起来为全1串。

可以\(O({2^m}^2)\)做。

// code by fhq_treap
#include<bits/stdc++.h>
#define ll long long
#define N 300005 inline ll read(){
char C=getchar();
ll A=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') A=(A << 1)+(A << 3)+(C - 48) , C=getchar();
return A*F;
} template <typename T>
void write(T x)
{
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9)
write(x/10);
putchar(x % 10 + '0');
return;
} int n,m;
int a[300005][8]; int ansx = 1,ansy = 1;
int t[(1 << 9)]; inline bool check(int lim){
for(int i = 0;i < (1ll << m);++i)
t[i] = 0;
for(int i = 1;i <= n;++i){
int tmp = 0;
for(int j = 1;j <= m;++j){
if(a[i][j] >= lim)
tmp = tmp | (1ll << (j - 1));
}
t[tmp] = i;
}
for(int i = 0;i < (1ll << m);++i)
for(int j = 0;j < (1ll << m);++j){
if(((i | j) == ((1ll << m) - 1)) && (t[i]) && t[j]){
ansx = t[i];
ansy = t[j];
return 1;
}
}
return 0;
} int main(){
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;++i)
for(int j = 1;j <= m;++j){
scanf("%d",&a[i][j]);
}
int l = -1,r = 1e9;
#define mid ((l + r) >> 1)
while(l <= r){
if(check(mid))
l = mid + 1;
else
r = mid - 1;
}
l --;
while(check(l + 1))
l ++ ;
std::cout<<ansx<<" "<<ansy<<std::endl;
}

E

经典套路,前面留\(m\)个位置,用树状数组维护排名。

// code by fhq_treap
#include<bits/stdc++.h>
#define ll long long
#define N 300005 inline ll read(){
char C=getchar();
ll A=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') A=(A << 1)+(A << 3)+(C - 48) , C=getchar();
return A*F;
} template <typename T>
void write(T x)
{
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9)
write(x/10);
putchar(x % 10 + '0');
return;
} int n;
int a[N];
int minn[N],maxx[N];
int T[N << 2];
#define lowbit(x) (x & -x) inline void add(int x,int p){
for(int i = x;i <= N << 2;i += lowbit(i))
T[i] += p;
} inline int find(int x){
int ans = 0;
for(int i = x;i;i -= lowbit(i))
ans += T[i];
return ans;
}
int m,pos[N];
int main(){
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;++i)
minn[i] = maxx[i] = i,pos[i] = m + i,add(pos[i],1);
int now = m;
for(int i = 1;i <= m;++i){
int k;
scanf("%d",&k);
minn[k] = 1;
maxx[k] = std::max(maxx[k],find(pos[k]));
add(pos[k],-1);
pos[k] = now -- ;
add(pos[k],1);
}
for(int i = 1;i <= n;++i){
maxx[i] = std::max(maxx[i],find(pos[i]));
std::cout<<minn[i]<<" "<<maxx[i]<<std::endl;
}
}

CF1288的更多相关文章

随机推荐

  1. Mybatis、maven项目中整合log4j (17)

    Mybatis.maven项目总整合log4j java 中Mybatis.maven项目总整合log4j 1.pom增加log4j包引用 2.添加 log4j.properties文件 # java ...

  2. Python小工具:据说这是搜索文件最快的工具!没有之一!一起感受下......

    电脑自带的搜索文件功能相信大家都体验过,那是真的慢,等它找到文件,我都打完一把游戏了! 那必须不能忍,于是我自己做了一个文件搜索工具,犄角旮旯的文件都能一秒钟搜索出来的那种! 保证能把你们男(女)朋友 ...

  3. 【Java虚拟机9】类加载器之命名空间详解

    前言 前面介绍类加载器的时候,介绍了一下命名空间这个概念.今天就通过一个例子,来详细了解一下[类加载器的命名空间].然后通过这个例子,我们可以总结一下双亲委托模型的好处与优点. 例1(不删除class ...

  4. F1英国大奖赛-银石赛道地图及弯道

    背景 今天晚上(2020-08-02)是今年英国大奖赛的正赛.刚好了解了一下赛道地图.记录一下,明年就不用到处找了. 简介 银石赛道(Silverstone Circuit)由一个废弃的空军基地改建, ...

  5. 周末愉快--css画大熊猫

    周末找了点轻松的话题,css画大熊猫. 先上效果图 欢迎竞猜大熊猫到底说了什么?? 再上源码 <!DOCTYPE html> <html lang="en"> ...

  6. 正则表达式: NFA引擎匹配原理

    NFA引擎匹配原理 1       为什么要了解引擎匹配原理 一个个音符杂乱无章的组合在一起,弹奏出的或许就是噪音,同样的音符经过作曲家的手,就可以谱出非常动听的乐曲,一个演奏者同样可以照着乐谱奏出动 ...

  7. [对对子队]发布声明Beta

    Beta版本的新功能 新增的游戏内容 循环部分关卡 Beta阶段我们制作了游戏的第4-6关,为循环部分关卡.这一部分的关卡设计以编程的循环思想为基础,在流水线中加入了新的命令--循环语句,并以此为核心 ...

  8. [Beta]the Agiles Scrum Meeting 10

    会议时间:2020.5.25 21:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 issue yjy 暂无 tq 暂无 wjx 实现创建.显示博客作业功能 增加博客作业功能 dzx 实 ...

  9. 空格替换 牛客网 程序员面试金典 C++ Python

    空格替换 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个方法,将字符串中的空格全部替换为"%20".假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实 ...

  10. linux 内核源代码情景分析——几个重要的数据结构和函数

    页面目录PGD.中间目录PMD和页面表PT分别是由表项pgd_t.pmd_t和pte_t构成的数组,而这些表项都是数据结构 1 /* 2 * These are used to make use of ...