『模拟赛』暑假集训CSP提高模拟24
Rank
G
A. 与和
签。不过因为忘了 and 是啥被控 40min 还是太蒻了
对
点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int Ratio=0;
ll a,b,x,y,sum;
int num[105],nm;
namespace Wisadel
{
ll Wqp(ll x,int y)
{
ll res=1;
while(y){if(y&1) res=res*x;x=x*x;y>>=1;}
return res;
}
short main()
{
freopen("and.in","r",stdin),freopen("and.out","w",stdout);
int T;scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&a,&b);memset(num,0,sizeof num);sum=0,nm=0;
while(a) num[nm++]=a&1,a>>=1;
for(int i=0;i<nm;i++)
if(num[i]) sum+=2*Wqp(2,i);
for(int i=60;i>=0;i--)
{
if(num[i]) continue;
if(Wqp(2,i)+sum<=b) sum+=Wqp(2,i);
}
if(sum==b) printf("Yes\n");
else printf("No\n");
}
return Ratio;
}
}
int main(){return Wisadel::main();}
B. 函数
原[ABC366F] Maximum Composition
签不过没签上
一个显然的选择策略,设
以此类推,可以得到一个结论:越大的
正解是 dp,我们按照上面的原则排序,定义
同时,记得赋初始值
时间复杂度
点击查看代码
#include<bits/stdc++.h>
#define fo(x,y,z) for(register int (x)=(y);(x)<=(z);(x)++)
using namespace std;
typedef long long ll;
inline int qr()
{
char ch=getchar();int x=0,f=1;
for(;ch<'0'||ch>'9';ch=getchar()) if(ch=='-') f=-1;
for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
return x*f;
}
#define qr qr()
const int Ratio=0;
const int N=2e5+5;
int n,k;
struct rmm
{
int a,b;
bool operator<(const rmm &A)const{return a*A.b+b<A.a*b+A.b;}
}a[N];
ll f[N][15];
namespace Wisadel
{
short main()
{
freopen("func.in","r",stdin),freopen("func.out","w",stdout);
n=qr,k=qr;f[0][0]=1;
fo(i,1,n) a[i].a=qr,a[i].b=qr;
sort(a+1,a+1+n);
fo(i,1,n) fo(j,0,k)
{
f[i][j]=f[i-1][j];
if(j) f[i][j]=max(f[i][j],f[i-1][j-1]*a[i].a+a[i].b);
}
printf("%lld\n",f[n][k]);
return Ratio;
}
}
int main(){return Wisadel::main();}
C. 袋鼠
一眼简单,再一眼没思路。
赛时打了暴搜,
正解是很神的插入法 dp,首先将我们跳转的顺序转化成序列,那么就成为了求序列以
- 新开一个连续段,此时
大于前面任何数,所以可以随便插,方案数为 ;但开头结尾已经确定,所以 或 时 分别要减一;状态转移方程为:
- 新加入的
将两个连续段连接起来,同理可以随便插,方案数为 ,状态转移方程为:
- 新加入的
为 或 ,此时只有一种情况即将其置于头或尾,可以单独成段或连上相邻的一段,转移方程为:
时间复杂度
点击查看代码
#include<bits/stdc++.h>
#define fo(x,y,z) for(register int (x)=(y);(x)<=(z);(x)++)
typedef long long ll;
const int Ratio=0;
const int N=2e3+5;
const int mod=1e9+7;
int n,st,ed,ans;
ll f[N][N];
namespace Wisadel
{
short main()
{
freopen("kang.in","r",stdin),freopen("kang.out","w",stdout);
scanf("%d%d%d",&n,&st,&ed);f[1][1]=1;
fo(i,2,n) fo(j,1,i)
{
if(i!=st&&i!=ed) f[i][j]=(j*f[i-1][j+1]%mod+(j-(i>st)-(i>ed))*f[i-1][j-1]%mod)%mod;
else f[i][j]=f[i-1][j-1]+f[i-1][j];
}
printf("%lld\n",f[n][1]);
return Ratio;
}
}
int main(){return Wisadel::main();}
D. 最短路
赫拉格老爷子你说你游戏里公招控我就算了到题面上还这么难
还有,
为什么没有棘刺的题?为什么没有棘刺的题?为什么没有棘刺的题?为什么没有棘刺的题?为什么没有棘刺的题?为什么没有棘刺的题?为什么没有棘刺的题?为什么没有棘刺的题?为什么没有棘刺的题?为什么没有棘刺的题?
快出道棘刺的题啊啊!快出道棘刺的题啊啊!快出道棘刺的题啊啊!快出道棘刺的题啊啊!快出道棘刺的题啊啊!快出道棘刺的题啊啊!快出道棘刺的题啊啊!快出道棘刺的题啊啊!快出道棘刺的题啊啊!快出道棘刺的题啊啊!
咳
赛时想了有正确性的错解,由于边权都是
正解需要高精度,哈希,主席树,感觉这实现起来比黑题还黑题。
末
也许锣鼓的运势影响心情?今天大凶,前几天都大吉。
前三道都不难,感觉如果出到三场模拟赛的 T1 就都能切吧?
还有就是没思路了就考虑 dp,大概率是这样的,如果状态设计差不多就能拿不少分。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探