Codeforces Round #815 (Div. 2)
#
每次可以对分子分母同时乘上 ,相当于对分数乘上 或除以 。令 ,因为 ,所以 ,可以发现答案为 分子分母不为 的个数
#
点击查看代码
#include<bits/stdc++.h>
#define MOD (1000000007)
#define ll long long
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define lowbit(x) (x&-x)
#define Swap(x,y) (x^=y,y^=x,x^=y)
using namespace std;
void read(ll &x)
{
register char ch=0;register bool f=0;x=0;
while(ch<'0'||ch>'9'){f|=!(ch^'-');ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
x=f?-x:x;
}
void write(ll x,bool bk)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(!x)
{
if(!bk) putchar('0');
return;
}
write(x/10,1);
putchar((x%10)^48);
}
void print(ll x,char ch)
{
write(x,0);
if(ch) putchar(ch);
}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
ll lcm(ll x,ll y){return x*y/gcd(x,y);}
ll t,a,b,c,d;
int main()
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
read(t);
while(t--)
{
read(a),read(b),read(c),read(d);
if(!((a*d)^(b*c)))
{
print(0,'\n');
continue;
}
if((!a)||(!c))
{
print(1,'\n');
continue;
}
if(a*d>=b*c) Swap(a,c),Swap(b,d);
if(!((b*c)%(a*d))) print(1,'\n');
else print(2,'\n');
}
}
#
对于 ,其答案为
发现如果能够使得最大值与次大值分隔开,最小值与次小值分隔开,就能达到最大。考虑将最大与次大分开可以在两者间选择一个间隔分开,最小与次小同理,可以得到两个不同的分隔线,两者间即为区间 。所以一定可以分隔。直接扫一遍即可。
#
点击查看代码
#include<bits/stdc++.h>
#define MOD (1000000007)
#define ll long long
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define lowbit(x) (x&-x)
#define Swap(x,y) (x^=y,y^=x,x^=y)
using namespace std;
void read(ll &x)
{
register char ch=0;register bool f=0;x=0;
while(ch<'0'||ch>'9'){f|=!(ch^'-');ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
x=f?-x:x;
}
void write(ll x,bool bk)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(!x)
{
if(!bk) putchar('0');
return;
}
write(x/10,1);
putchar((x%10)^48);
}
void print(ll x,char ch)
{
write(x,0);
if(ch) putchar(ch);
}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
ll lcm(ll x,ll y){return x*y/gcd(x,y);}
ll t,n,smn,mn,smx,mx;
int main()
{
// freopen("data.in","r",stdin);
// freopen("data.out","w",stdout);
read(t);
while(t--)
{
smn=LONG_LONG_MAX,
mn=LONG_LONG_MAX;
smx=LONG_LONG_MIN;
mx=LONG_LONG_MIN;
read(n);
for(ll i=1;i<=n;i++)
{
ll x;
read(x);
if(x>mx)
{
smx=mx;
mx=x;
}
else if(x>smx) smx=x;
if(x<mn)
{
smn=mn;
mn=x;
}
else if(x<smn) smn=x;
}
print(mx+smx-mn-smn,'\n');
}
}
#
考虑如果存在两个为 的相邻元素(相邻指与上下左右左上右上左下右下相邻),可以以此为第一步操作,之后这个条件一定满足,每次选择两个为 的相邻元素与 搭配每次可以使得 的数量减 ,此时答案为 的数量。
否则如果存在 元素,第一步可以选择 和其他元素消掉,规约到第一个问题,此时答案为 的数量减 。
如果不存在 元素,第一步可以选择任意 消掉,规约到第一个问题, 此时答案为 的数量减 。
#
点击查看代码
#include<bits/stdc++.h>
#define MOD (1000000007)
#define ll long long
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define lowbit(x) (x&-x)
#define Swap(x,y) (x^=y,y^=x,x^=y)
using namespace std;
void read(ll &x)
{
register char ch=0;register bool f=0;x=0;
while(ch<'0'||ch>'9'){f|=!(ch^'-');ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
x=f?-x:x;
}
void write(ll x,bool bk)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(!x)
{
if(!bk) putchar('0');
return;
}
write(x/10,1);
putchar((x%10)^48);
}
void print(ll x,char ch)
{
write(x,0);
if(ch) putchar(ch);
}
ll t,n,m;
ll cnt[2],a[505][505];
bool flg;
int main()
{
// freopen("data.in","r",stdin);
// freopen("data.out","w",stdout);
read(t);
while(t--)
{
flg=0;
memset(cnt,0,sizeof(cnt));
read(n),read(m);
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<=m;j++)
{
a[i][j]=getchar()^48;
++cnt[a[i][j]];
}
getchar();
}
for(ll i=1;i<n;i++)
{
for(ll j=1;j<m;j++)
{
if((!a[i][j])&&(!a[i+1][j+1]))
{
flg=1;
break;
}
}
}
for(ll i=1;i<n;i++)
{
for(ll j=2;j<=m;j++)
{
if((!a[i][j])&&(!a[i+1][j-1]))
{
flg=1;
break;
}
}
}
for(ll i=1;i<n;i++)
{
for(ll j=1;j<=m;j++)
{
if((!a[i][j])&&(!a[i+1][j]))
{
flg=1;
break;
}
}
}
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<m;j++)
{
if((!a[i][j])&&(!a[i][j+1]))
{
flg=1;
break;
}
}
}
if(flg) print(cnt[1],'\n');
else if(cnt[0]) print(cnt[1]-1,'\n');
else print(cnt[1]-2,'\n');
}
}
#
设 为以 结尾的最长子序列的长度,可以写出 的朴素状态转移方程式
考虑·优化,注意到 有 的限制,小于 的数可能为 的二进制位只有第 位。所以根据异或的性质 每次将 与至多改变后面八位,所以符合要求的 一定满足 。根据这个性质进行转移,复杂度优化至 ,其中 为 的值域。
#
点击查看代码
#include<bits/stdc++.h>
#define MOD (1000000007)
#define ll long long
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define lowbit(x) (x&-x)
#define Swap(x,y) (x^=y,y^=x,x^=y)
using namespace std;
void read(ll &x)
{
register char ch=0;register bool f=0;x=0;
while(ch<'0'||ch>'9'){f|=!(ch^'-');ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
x=f?-x:x;
}
void write(ll x,bool bk)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(!x)
{
if(!bk) putchar('0');
return;
}
write(x/10,1);
putchar((x%10)^48);
}
void print(ll x,char ch)
{
write(x,0);
if(ch) putchar(ch);
}
ll t,n,ans;
ll a[300005],dp[300005];
bool flg;
int main()
{
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
read(t);
while(t--)
{
ans=0;
read(n);
for(ll i=0;i<n;i++)
{
read(a[i]);
dp[i]=1;
for(ll j=i-1;j>=max(0ll,i-512);j--)
if((a[j]^i)<(a[i]^j))
dp[i]=max(dp[i],dp[j]+1);
ans=max(ans,dp[i]);
}
print(ans,'\n');
}
}
作者:littlepinkpig
出处:https://www.cnblogs.com/littlepinkpig/p/16603477.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
你可以在这里自定义其他内容
作者:littlepinkpig
出处:https://www.cnblogs.com/littlepinkpig/p/16603477.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现