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. RabbitMQ处理未被路由的消息

    我们经常使用消息队列进行系统之间的解耦,日志记录等等.但是有时候我们在使用 RabbitMQ时,由于exchange.bindKey.routingKey没有设置正确,导致我们发送给交换器(excha ...

  2. Noip模拟53 2021.9.14

    T1 ZYB和售货机 首先这道题有两种做法. 一种是发现每个点都可以先被取到只剩一个,只要收益大于$0$ 然后发现建一个$i->f[i]$的图时出现环,要把它去掉, 那么跑一个$tarjan$枚 ...

  3. InitSpatialMetaData()速度慢的问题

    解决方法:with sqlite3.connect(dbfile) as con: con.enable_load_extension(True) con.execute("SELECT l ...

  4. 常用JAVA API :HashSet 和 TreeSet

    set容器的特点是不包含重复元素,也就是说自动去重. HashSet HashSet基于哈希表实现,无序. add(E e)//如果容器中不包含此元素,则添加. clear()//清空 contain ...

  5. Spring:所有依赖项注入的类型

    一.前言 Spring文档严格只定义了两种类型的注入:构造函数注入和setter注入.但是,还有更多的方式来注入依赖项,例如字段注入,查找方法注入.下面主要是讲使用Spring框架时可能发生的类型. ...

  6. 字符串与模式匹配算法(四):BM算法

    一.BM算法介绍 BM算法(Boyer-Moore算法)是罗伯特·波义尔(Robert Boyer)和杰·摩尔(J·Moore)在1977年共同提出的.与KMP算法不同的是,BM算法是模式串P由左向右 ...

  7. 手写vue-router & 什么是Vue插件

    博文分享 这篇文章你可以学习到: 实现一个自己的vue-router 了解什么是Vue的插件 学习b站大佬后做的笔记整理和源码实现 1.1.3一步一步带你弄懂vue-router核心原理及实现哔哩哔哩 ...

  8. best-time-to-buy-and-sell-stock-ii leetcode C++

    Say you have an array for which the i th element is the price of a given stock on day i. Design an a ...

  9. JAVA笔记3__字符串String类/对象一对一关联

    import java.lang.String; import java.util.Scanner; public class Main { public static void main(Strin ...

  10. PWN环境搭建

    目录 PWN环境搭建 需要的工具或系统 安装PWN工具 pwntools (CTF库.漏洞利用库) pwngdb(GDB插件) checksec(查保护) ROPGadget(二进制文件查找工具) o ...