CF1288
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的更多相关文章
随机推荐
- docker内服务访问宿主机服务
目录 1. 场景 2. 解决 4. 参考 1. 场景 使用windows, wsl2 进行日常开发测试工作. 但是wsl2经常会遇到网络问题.比如今天在测试一个项目,核心功能是将postgres 的数 ...
- shopping cart
#Author:Kevin_hou #定义产品列表 product_list =[ ('HUAWEI',5999), ('Watch',500), ('Nike',800), ('Toyota',20 ...
- vue3双向数据绑定原理_demo
<!DOCTYPE html> <head> <meta charset="UTF-8" /> <meta name="view ...
- 什么是Sprint计划?
Sprint 计划是Scrum框架中的一个事件,团队将确定他们将在冲刺期间处理的产品积压项目,并讨论他们完成这些产品积压项目的初始计划. 团队可能会发现建立冲刺目标很有帮助,并以此为基础确定他们在冲刺 ...
- 微服务(三) Eureka注册中心和Ribbon负载均衡
1. Eureka注册中心 1.1 Eureka的结构和作用 在上一篇文章中 微服务(二)服务拆分及远程调用 order-service在发起远程调用的时候,该如何得知user-service实例的i ...
- Noip模拟76 2021.10.14
T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...
- UVA-1498 Activation
UVA-1498 DP应该是肯定的,设 f [ i ] [ j ] 表示现在对中共有 i 人,Tomato在第 j 个,出现所求情况的概率,我们可以很(简单的)艰难的列出下列方程: f[i][1] = ...
- 大牛针对零基础入门c语言详解指针(超详细)
C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...
- 你们不要再吵了! Java只有值传递..
写在前边 上次聊到Java8新特性 lambda时,有小伙伴在评论区提及到了lambda对于局部变量的引用,补充着博客的时候,知识点一发散就有了这篇对于值传递还是引用传递的思考.关于这个问题为何会有如 ...
- Linux内核 fork 源码分析
内核版本:linux-4.4.18 源码位置:这里 fork相关的代码最终执行的函数为_do_fork(),下面按照顺序分析下_do_fork(): 首先判断是否需要trace(跟踪)这个进程,这一步 ...