2024.8.10模拟赛17
1.2024.7.18模拟赛12.2024.7.19模拟赛23.2024.7.20模拟赛34.2024.7.21模拟赛45.2024.7.22模拟赛56.2024.7.23 模拟赛67.2024.7.25模拟赛78.2024.7.26模拟赛89.2024.7.27模拟赛910.2024.7.28 模拟赛1011.2024.7.29模拟赛1112.2024.7.31模拟赛1213.2024.8.1 模拟赛1314.2024.8.6 模拟赛 1415.2024.8.7 模拟赛 1516.2024.8.8模拟赛16
17.2024.8.10模拟赛17
18.2024.8.18 模拟赛 2219.2024.8.19 模拟赛 2420.小集训21.2024.9.23 模拟赛 CSP 322.2024.9.24 模拟赛 CSP423.2024.9.25 模拟赛 多校24.2024.9.27 模拟赛 CSP525.2024.9.28 模拟赛 CSP626.2024.9.30 模拟赛 CSP727.2024.10.7 模拟赛 多校328.2024.?.?? 模拟赛 ???模拟赛
今天是七夕耶!
哦,今天是七夕呀。。。
T1 Non-decreasing
题目背景
先拿部分分,当全正或全负时很显然,只需要
- 正:如果
。 - 负:如果
。
然后开始想有正有负的情况,因为上述的做法保证只会对单一方向产生影响,而双向的会有后效性。。。
其实总操作数给到了
code
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define fi first
#define se second
const int N = 2e5+5;
int n,ans;
long long a[N],b[N];
pair<int,int> op[N];
int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]),b[i]=a[i];
sort(b+1,b+1+n);
if(b[1]>=0)
{
for(int i=1;i<n;i++)
{
if(a[i]>a[i+1])
{
op[++ans]=make_pair(i,i+1);
a[i+1]=a[i]+a[i+1];
}
}
printf("%d\n",ans);
for(int i=1;i<=ans;i++) printf("%d %d\n",op[i].fi,op[i].se);
}
else if(b[n]<=0)
{
for(int i=n;i>1;i--)
{
if(a[i-1]>a[i])
{
op[++ans]=make_pair(i,i-1);
a[i-1]=a[i]+a[i-1];
}
}
printf("%d\n",ans);
for(int i=1;i<=ans;i++) printf("%d %d\n",op[i].fi,op[i].se);
}
else
{
if(b[n]>=abs(b[1]))
{
int tmp=0;
for(int i=1;i<=n;i++)
{
if(a[i]==b[n])
{
tmp=i; break;
}
}
for(int i=1;i<=n;i++)
{
if(a[i]<0)
{
op[++ans]=make_pair(tmp,i);
a[i]+=b[n];
}
}
for(int i=1;i<n;i++)
{
if(a[i]>a[i+1])
{
op[++ans]=make_pair(i,i+1);
a[i+1]=a[i]+a[i+1];
}
}
}
else
{
int tmp=0;
for(int i=1;i<=n;i++)
{
if(a[i]==b[1])
{
tmp=i; break;
}
}
for(int i=1;i<=n;i++)
{
if(a[i]>0)
{
op[++ans]=make_pair(tmp,i);
a[i]+=b[1];
}
}
for(int i=n;i>1;i--)
{
if(a[i-1]>a[i])
{
op[++ans]=make_pair(i,i-1);
a[i-1]=a[i]+a[i-1];
}
}
}
printf("%d\n",ans);
for(int i=1;i<=ans;i++) printf("%d %d\n",op[i].fi,op[i].se);
}
return 0;
}
T2 矩阵
题目背景
很巧妙的一道题,我们发现
因为三个矩阵都是
然后随便做了。(据说重复几次会防止冲突,其实不用)
(还有 Hash 做法)
code
#include<bits/stdc++.h>
using namespace std;
#define scan __builtin_scanf
const int N = 3005,mod = 998244353;
int t;
int n,a[N][N],b[N][N],c[N][N],d[N],tmp[N],tmp2[N],tmp3[N];
bool check()
{
for(int i=1;i<=n;i++) tmp[i]=tmp2[i]=tmp3[i]=0;
for(int i=1;i<=n;i++) d[i]=rand()%100000+998244;
for(int k=1;k<=n;k++)
for(int j=1;j<=n;j++) tmp[j]=(tmp[j]+1ll*d[k]*a[k][j]%mod)%mod;
for(int k=1;k<=n;k++)
for(int j=1;j<=n;j++) tmp2[j]=(tmp2[j]+1ll*tmp[k]*b[k][j]%mod)%mod;
for(int k=1;k<=n;k++)
for(int j=1;j<=n;j++) tmp3[j]=(tmp3[j]+1ll*d[k]*c[k][j]%mod)%mod;
for(int i=1;i<=n;i++) if(tmp2[i]!=tmp3[i]) return 0;
return 1;
}
int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
srand(time(0)); srand(rand());
scan("%d",&t);
while(t--)
{
scan("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scan("%d",&a[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scan("%d",&b[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scan("%d",&c[i][j]);
if(check()) printf("Yes\n");
else printf("No\n");
}
return 0;
}
T3 神奇纸牌
题目背景
看起来不太可做。。。
毒瘤出题人。。。
先咕着。。。
T4 Maximum Glutton
题目背景
小 trick,显然是背包,但是容积太大开不下。
经典做法是交换值域和其中一维,发现值域也只有
code
#include<bits/stdc++.h>
using namespace std;
#define mi(x,y) (x<y?x:y)
#define scan __builtin_scanf
#define print __builtin_printf
const int N = 81;
int n,A,B;
int f[N][10005];
int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
scan("%d%d%d",&n,&A,&B);
for(int i=0;i<=n;i++) for(int j=0;j<=A;j++) f[i][j]=1e9+7; f[0][0]=0;
for(int i=1;i<=n;i++)
{
int x,y;
scan("%d%d",&x,&y);
for(int j=n;j;j--)
for(int k=A;k>=x;k--)
f[j][k]=mi(f[j][k],f[j-1][k-x]+y);
}
for(int i=n;~i;i--)
for(int j=1;j<=A;j++)
{
if(f[i][j]<=B)
print("%d\n",mi(i+1,n)),exit(0);
}
putchar('1'); putchar('\n');
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端