# 非官方题解 | CXXP#1题解
2026-02-23 12:55:36
发布于:浙江
前言:
这期还是采用我的CuSn马蜂,很方便哈
难度:
- 红 橙 黄 绿
蓝 紫 黑
T1:一个格的价
思路解析
这题其实很简单:给定皮皮虾等级 ( S ) 和质量 ( x )(克),求应付金额。
-
等级与每千克单价对应关系:
- ( A ) 级:( 60 ) 元/kg
- ( B ) 级:( 45 ) 元/kg
- ( C ) 级:( 30 ) 元/kg
-
质量单位是克,要换算成千克。
-
应付金额:
-
输出保留两位小数。
代码实现
namespace CuSn{
void solve(){
char s;
int x;
cin>>s>>x;
double p;
if(s=='A')p=60.0;
if(s=='B')p=45.0;
if(s=='C')p=30.0;
double ans=x/1000.0*p;
printf("%.2f",ans);
}
}
T2:一个戏的游
思路解析
我们有 个技能,每个技能有冷却 和伤害 。
系统按顺序给出 个强化点,每个强化点指定给某个技能 :
- 类型 :伤害增加
- 类型 :伤害增加 (向下取整)
最后计算平均伤害和:
结果对 取模。
(这个不确定要不要,先挂这)
代码实现
namespace CuSn{
void solve(){
long long n,m;
cin>>n>>m;
long long co[150],da[150];
for(int i=1;i<=n;i++)cin>>co[i]>>da[i];
for(int i=1;i<=m;i++){
long long op,val,id;
cin>>op>>val>>id;
if(op==1)da[id]+=val;
else da[id]=da[id]*(100+val)/100;
}
double sum=0;
for(int i=1;i<=n;i++)sum+=da[i]*1.0/co[i];
cout<<(long long)sum%917809201<<'\n';
}
}
T3:一个宫的迷
思路解析
这是一个三维迷宫最短路问题。
- 迷宫尺寸为 ,每个格子是墙
#、路.、起点 或终点 。 - 移动方向:上下前后左右共 个方向。
- 求从起点到终点的最短步数,若不可达输出 。
由于 ,三维网格最多 个格子,直接用 BFS 求解即可。
代码实现
namespace CuSn{
int n,sx,sy,sz,ex,ey,ez;
char a[25][25][25];
int vis[25][25][25];
int dx[6]={1,-1,0,0,0,0};
int dy[6]={0,0,1,-1,0,0};
int dz[6]={0,0,0,0,1,-1};
struct node{int x,y,z,step;};
void solve(){
cin>>n;
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j][k];
if(a[i][j][k]=='S')sx=i,sy=j,sz=k;
if(a[i][j][k]=='E')ex=i,ey=j,ez=k;
}
}
}
for(int i=1;i<=10000;i++);
memset(vis,0,sizeof vis);
queue<node> q;
q.push({sx,sy,sz,0});
vis[sx][sy][sz]=1;
while(!q.empty()){
node u=q.front();q.pop();
if(u.x==ex&&u.y==ey&&u.z==ez){
cout<<u.step<<'\n';
return;
}
for(int i=0;i<6;i++){
int nx=u.x+dx[i];
int ny=u.y+dy[i];
int nz=u.z+dz[i];
if(nx<0||nx>=n||ny<0||ny>=n||nz<0||nz>=n)continue;
if(vis[nx][ny][nz])continue;
if(a[nx][ny][nz]=='#')continue;
vis[nx][ny][nz]=1;
q.push({nx,ny,nz,u.step+1});
}
}
cout<<-1<<'\n';
}
}
T4:一个法的书
思路解析
题目问的是:经过若干次乘方操作后,能否用恰好 次相邻交换使数组变为非递减顺序。
关键点:
- 相邻交换排序的最小次数 = 逆序对数量(冒泡排序交换次数)
- 乘方操作会改变数值,但排序可行性只取决于能否用 次交换完成
判断方法:
- 若当前数组的逆序对数量 且 是偶数,则可以(因为可以多余交换来回抵消)
- 否则不行
代码实现
namespace CuSn{
long long n,k,m,v;
long long a[100005],b[100005],tmp[100005];
long long merge(int l,int r){
if(l>=r)return 0;
int mid=(l+r)/2;
long long res=merge(l,mid)+merge(mid+1,r);
int i=l,j=mid+1,p=l;
while(i<=mid&&j<=r){
if(b[i]<=b[j])tmp[p++]=b[i++];
else{
tmp[p++]=b[j++];
res+=mid-i+1;
}
}
while(i<=mid)tmp[p++]=b[i++];
while(j<=r)tmp[p++]=b[j++];
for(int i=l;i<=r;i++)b[i]=tmp[i];
return res;
}
long long get(){
for(int i=1;i<=n;i++)b[i]=a[i];
return merge(1,n);
}
void solve(){
cin>>n>>k>>m;
for(int i=1;i<=n;i++)cin>>a[i];
long long cnt=get();
if(cnt<=k&&(k-cnt)%2==0)cout<<"Yes\n";
else cout<<"No\n";
for(int t=1;t<=m;t++){
cin>>v;
for(int i=1;i<=n;i++){
long long res=1;
for(int j=1;j<=v;j++)res*=a[i];
a[i]=res;
}
cnt=get();
if(cnt<=k&&(k-cnt)%2==0)cout<<"Yes\n";
else cout<<"No\n";
}
}
}
成功TLE&WA
正确代码:
Code:
namespace CuSn{
const int MX=100015;
int n,nn,p,ww,kk,fg;
bool rp[2];
long long K;
int va[MX],vb[MX],bit[MX];
long long res[2];
void rd(int &x){
x=0;
bool f=0;
char c=getchar();
while((c<'0'||c>'9')&&c!='-')c=getchar();
if(c=='-'){f=1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
if(f)x=-x;
}
void rd(long long &x){
x=0;
bool f=0;
char c=getchar();
while((c<'0'||c>'9')&&c!='-')c=getchar();
if(c=='-'){f=1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
if(f)x=-x;
}
int lb(int x){return x&-x;}
void add(int x,int v){for(;x<=nn;x+=lb(x))bit[x]+=v;}
int qry(int x){int r=0;for(;x;x-=lb(x))r+=bit[x];return r;}
int uniq(){
sort(vb+1,vb+n+1);
return unique(vb+1,vb+n+1)-vb-1;
}
bool ok(long long x){
return x<=K&&((K-x)%2==0||rp[fg]);
}
void solve(){
rd(n);rd(K);rd(kk);
fg=0;
for(int i=1;i<=n;i++){
rd(va[i]);
vb[i]=va[i];
}
nn=uniq();
rp[0]=nn<n;
for(int i=1;i<=n;i++){
p=lower_bound(vb+1,vb+nn+1,va[i])-vb;
res[0]+=qry(nn)-qry(p);
add(p,1);
}
memset(bit,0,sizeof bit);
for(int i=1;i<=n;i++)vb[i]=va[i]<0?-va[i]:va[i];
nn=uniq();
rp[1]=nn<n;
for(int i=1;i<=n;i++){
int now=va[i]<0?-va[i]:va[i];
p=lower_bound(vb+1,vb+nn+1,now)-vb;
res[1]+=qry(nn)-qry(p);
add(p,1);
}
if(ok(res[fg]))puts("Yes");
else puts("No");
while(kk--){
rd(ww);
if(ww%2==0)fg=1;
else fg=0;
if(ok(res[fg]))puts("Yes");
else puts("No");
}
}
}
总结:
- 代码有部分不太好
- 格式难看
- 难评
- ...
全部评论 27
- 你的代码中出现了多种防 AI 字样,例如 T4 code 中的 votion 变量,T2 code 中的取模。
- 你的 渲染很烂,很多需要渲染的地方没有渲染
- 你的代码极有可能是 AI 生成的,给你发奖已经不错了,加上你赛时 T2 调戏反作弊机制,能拿到罐头已经是我们很大的仁慈了
5天前 来自 湖北
15刑叭
5天前 来自 浙江
6T4 code 中的 votion 变量,T2 code 中的取模。
5天前 来自 湖北
5。
5天前 来自 浙江
4
d
昨天 来自 浙江
2d
昨天 来自 浙江
2ddd
2天前 来自 上海
1d了
8小时前 来自 浙江
0
666
3天前 来自 广东
1D
3天前 来自 上海
16
3天前 来自 上海
0
votion
1周前 来自 广东
1对
1周前 来自 浙江
0错
1周前 来自 广东
0?
1周前 来自 浙江
0
d
3小时前 来自 黑龙江
0666
昨天 来自 辽宁
03
昨天 来自 广东
02
昨天 来自 广东
01
昨天 来自 广东
0全网征集AC之神的赚法
昨天 来自 上海
01
2天前 来自 广东
01
2天前 来自 浙江
0
4
2天前 来自 广东
04
2天前 来自 浙江
0
2
2天前 来自 广东
04
2天前 来自 浙江
0
1
2天前 来自 广东
04
1
2天前 来自 浙江
0
1
2天前 来自 广东
0666
2天前 来自 江西
0666
2天前 来自 江西
0





















































有帮助,赞一个