cf1579

article/2025/8/19 3:11:36

A. Casimir’s String Solitaire
给定一个只存在ABC的字符串,一次操作可以同时删除任意位置的‘A’和‘B’或‘B’和‘C’,问能否删完。
只需判断B的数量是否等于A+C的数量。

#include<bits/stdc++.h>
using namespace std;#define read(a) scanf("%d",&a)
#define maxn 50int main() {int T;read(T);while(T--) {string a;cin>>a;int b[4]={0};for(int i=0;i<a.size();i++) {if(a[i]=='A') b[1]++;else if (a[i]=='B') b[2]++;else b[3]++;}if(b[2]==b[1]+b[3]) printf("YES\n");else printf("NO\n");}return 0;
}

B. Shifting Sort
给定一个长度为n的数列,一次操作可以选择一个子串,将子串进行任意长度的滚动。
要求输出一个方案,在n次操作内使该数列递增。
由于不需要找出最小操作数,所以只需要每次操作把当前最小的数移动到合理的位置即可。

#include<bits/stdc++.h>
using namespace std;#define read(a) scanf("%d",&a)
#define maxn 50struct ans{int l,r,d;ans(){}ans(int ll,int rr,int dd) {l=ll,r=rr,d=dd;}
};int a[maxn+5],b[maxn+5],c[maxn+5];
vector<ans> s;int main() {int T;read(T);while(T--) {int n;read(n);for(int i=1;i<=n;i++) read(a[i]),b[i]=a[i];sort(b+1,b+n+1);s.clear();		for(int i=1;i<n;i++) {int t;if(a[i]==b[i]) continue;for(int j=i;j<=n;j++) {if(a[j]==b[i]) {t=j;break;}}memset(c,0,sizeof(c));memcpy(c+1,a+1,(i-1)*sizeof(int));memcpy(c+i,a+t,(n-t+1)*sizeof(int));memcpy(c+i+n-t+1,a+i,(t-i)*sizeof(int));memcpy(a+1,c+1,n*sizeof(int));s.push_back(ans(i,n,t-i));}printf("%d\n",s.size());for(int i=0;i<s.size();i++) {printf("%d %d %d\n",s[i].l,s[i].r,s[i].d);}}return 0;
}

C. Ticks
在这里插入图片描述
给一个只有黑白n*m的棋盘,问能不能完全由大于k的勾组成。
遍历枚举勾勾的最下端,暴力统计。

#include<bits/stdc++.h>
using namespace std;#define read(a) scanf("%d",&a)
#define maxn 20
#define readc(a) do{scanf("%c",&a);}while(a!='.'&&a!='*')int n,m,K;
bool a[maxn+5][maxn+5],b[maxn+5][maxn+5];int main() {int T;read(T);while(T--) {read(n),read(m),read(K);memset(a,0,sizeof(a));for(int i=1; i<=n; i++)for(int j=1; j<=m; j++) {char t;readc(t);if(t=='.') a[i][j]=0;else a[i][j]=1;}memcpy(b,a,sizeof(a));for(int i=1; i<=n; i++) {for(int j=1; j<=m; j++) {int k=0;for( ; ; ) {if(!a[i-k][j-k]||!a[i-k][j+k]) break;k++;}if(k>K) {while(k--) b[i-k][j-k]=b[i-k][j+k]=0;}}}bool ans=1;for(int i=1; i<=n; i++) {for(int j=1; j<=m; j++) {if(b[i][j]) {ans=0;break;}}}if(ans) printf("YES\n");else printf("NO\n");}return 0;
}

D. Productive Meeting
有n个数,一次操作可以让任意两个数大于0的数-1,问最后无法操作时剩下数的最小值。
每次选出当前最大的两个数进行操作,可以用优先队列(大根堆)维护。

#include<bits/stdc++.h>
using namespace std;#define read(a) scanf("%d",&a)
#define maxn (int)2e5struct Pair {int x,y;Pair() {}Pair(int xx,int yy) {x=xx,y=yy;}
};struct ele {int x,pos;ele() {}ele(int xx,int pp) {x=xx,pos=pp;}bool operator < (const ele& e) const {return x<e.x;}
};int n;
priority_queue<ele> a;
vector<Pair> b;int main() {int T;read(T);while(T--) {b.clear();while(a.size()) a.pop();read(n);for(int i=1; i<=n; i++) {int x;read(x);if(x!=0) a.push(ele(x,i));}while(a.size()>1) {ele x1=a.top();a.pop();ele x2=a.top();a.pop();b.push_back(Pair(x1.pos,x2.pos));x1.x--,x2.x--;if(x1.x!=0) a.push(x1); if(x2.x!=0) a.push(x2); }printf("%d\n",b.size());for(int i=0;i<b.size();i++) {printf("%d %d\n",b[i].x,b[i].y);}}return 0;
}

E1. Permutation Minimization by Deque
给一个数列,需要按顺序把数列中的数插入双端队列中(可以是头部和尾部),使最后队列中的数字典序最小。
贪心,比当前头大的往尾部插,小或等于的往队首插。

#include<bits/stdc++.h>
using namespace std;#define read(a) scanf("%d",&a)
#define maxn (int)2e5int a[maxn+5];
deque<int> q;int main() {int T;read(T);while(T--) {int n;read(n);for(int i=1;i<=n;i++) read(a[i]);q.clear();for(int i=1;i<=n;i++) {if(a[i]<q.front()) q.push_front(a[i]);else q.push_back(a[i]);}for(int i=1;i<=n;i++) {printf("%d ",q.front());q.pop_front();}printf("\n");}return 0;
}

E2. Array Optimization by Deque
给一个数列,需要按顺序把数列中的数插入双端队列中(可以是头部和尾部),使最后队列中的逆序对最少。
贪心,插入一个数的时候分别查询插在头部和尾部新增的逆序对数,选新增少的地方插。
查询操作用树状数组维护。

#include<bits/stdc++.h>
using namespace std;#define read(a) scanf("%d",&a)
#define maxn (int)4e5
#define ll long longstruct Pair{int x,num;Pair() {}Pair(int xx,int nn) {x=xx,num=nn;}bool operator < (const Pair& e) const {return x<e.x;}
};int n;
Pair a[maxn+5];
int b[maxn+5],c[maxn+5];int lowbit(int x) {return x&-x;
} void add(int x) {while(x<=n) {c[x]++;x+=lowbit(x);}
}int query(int x) {int ans=0;while(x>0) {ans+=c[x];x-=lowbit(x);}return ans;
}int main() {int T;read(T);while(T--) {read(n);for(int i=1;i<=n;i++) read(a[i].x),a[i].num=i; sort(a+1,a+1+n);int cnt=0;a[0].x=(1e9)+1,memset(c,0,sizeof(c));for(int i=1;i<=n;i++) {if(a[i].x!=a[i-1].x) ++cnt;b[a[i].num]=cnt;}ll ans=0;for(int i=1;i<=n;i++) {int s=query(b[i]-1),r=i-1-query(b[i]);if(r>s) ans+=s;else ans+=r;add(b[i]);}printf("%lld\n",ans);}return 0;
}

F. Array Stabilization (AND version)
给一个01数列,常数d,一次操作可以将数列滚动d个单位,并与原数列进行与操作。
问滚动多少次可以将数列变为全0。
一次操作即把每个位和后面d位(滚动意义上)与一遍,所以把每位和后d位建边,跑最短路,退出条件是走到一个为0的点。

#include<bits/stdc++.h>
using namespace std;#define read(a) scanf("%d",&a)
#define maxn (int)1e6 
#define ll long longstruct Pair{int x,y;Pair() {}Pair(int xx,int yy) {x=xx,y=yy;}bool operator < (const Pair& e) const {return x<e.x;}
};int n,d;
bool a[maxn+5],use[maxn+5];
int cnt;queue<Pair> que;int spfa() {int ans=0;while(!que.empty()) {int x=que.front().x,y=que.front().y;que.pop();int z=(x+d)%n;if(use[z]) continue;use[z]=1,++cnt;que.push(Pair(z,y+1));ans=max(ans,y+1);}if(cnt<n) return -1;else return ans;
}int main() {int T;read(T);while(T--) {memset(use,0,sizeof(use));cnt=0;read(n),read(d);for(int i=0;i<n;i++) {read(a[i]);if(!a[i]) que.push(Pair(i,0)),use[i]=1,++cnt;}int ans=spfa();printf("%d\n",ans);}return 0;
}

G. Minimal Coverage
有n根长度为a[n]的棍,现需将他们排成一根直线,使每根棍的两端分别与前一根和后一根的端点重合,求这样铺的最小长度。
看了题解。
dp[i][j]表示第i根棍,铺完后末端离最左端为j时,铺过的长度。
这里始终保持最左边为0,所以左端超过0时需要整体右移。

#include<bits/stdc++.h>
using namespace std;#define read(a) scanf("%d",&a)
#define maxn (int)1e4
#define maxm (int)2e3 
#define ll long longstruct Pair{int x,y;Pair() {}Pair(int xx,int yy) {x=xx,y=yy;}bool operator < (const Pair& e) const {return x<e.x;}
};int n;
int a[maxn+5];
int dp[maxn+5][maxm*2+5];int main() {int T;read(T);while(T--) {read(n);for(int i=1;i<=n;i++) read(a[i]);for(int i=0;i<=n;i++) for(int j=0;j<=maxm*2;j++) dp[i][j]=(int)1e9;dp[0][0]=0;for(int i=1;i<=n;i++) {for(int j=0;j<=maxm*2;j++) {if(j+a[i]<=maxm*2) {int x=max(dp[i-1][j],j+a[i]);dp[i][j+a[i]]=min(dp[i][j+a[i]],x);}if(j-a[i]>=0) {dp[i][j-a[i]]=min(dp[i][j-a[i]],dp[i-1][j]);} else {dp[i][0]=min(dp[i][0],dp[i-1][j]+a[i]-j);}}}int ans=(int)1e9;for(int i=0;i<=maxm*2;i++) ans=min(ans,dp[n][i]);printf("%d\n",ans);}return 0;
}

http://chatgpt.dhexx.cn/article/TkTwVP1B.shtml

相关文章

CF 817 C

原题链接&#xff1a; Problem - C - Codeforces 题意&#xff1a; 问从 1 ~ n 有多少个数能使&#xff0c;它减去它的数字和 s。 解法&#xff1a; 可以发现&#xff0c;如果 num 满足条件&#xff0c;那么 num 1 一定也满足条件&#xff0c;所以就有单调性&#xff0c…

CF1837 A-D

A题 题目链接&#xff1a;https://codeforces.com/problemset/problem/1837/A 基本思路&#xff1a; 要求计算蚂蚱到达位置 x最少需要多少次跳跃&#xff0c;并输出蚂蚱的跳跃方案。因为每次可以向左或向右跳跃一定距离&#xff08;距离必须为整数&#xff09;&#xff0c;但是…

npm不是内部命令或外部命令

如上&#xff0c;看到npm -v 或者安装软件时&#xff0c;经常跳出的问题。npm需要加入环境变量中。 如上图片&#xff0c;新建两个文件 node_global\npm&#xff0c;并加入环境变量中。 D:nodejs\node_modules\npm路径下找到.npmrc文件&#xff0c;将其内容改为 prefixD:\node…

启动VUE工程时,出现npm不是内部命令

出现npm不是内部命令&#xff0c;然后查询node -v&#xff0c;也发现node不是内部命令。 所以定位应该是nodejs的问题&#xff0c;因为我的nodejs已经安装了&#xff0c;所以最大的可能就是没有配置环境变量或者配置的不对。 解决步骤&#xff1a; 1.设置环境变量&#xff1…

nvm安装node后npm不是内部命令

nvm install时先下载node&#xff0c;然后下载npm&#xff0c; 下载npm时在node安装目录中会出现temp文件夹&#xff0c;其中有npm压缩包 1、及时将npm压缩包复制出来&#xff0c;不然过会就被删除了 2、解压缩 查看安装目录 使用11.0.0版本 node能够使用&#xff0c;npm不能…

'npm' 不是内部或外部命令,也不是可运行的程序

使用npm命令提示: ‘npm’ 不是内部或外部命令&#xff0c;也不是可运行的程序 在安装nodejs时候&#xff0c;有时候我们会把它安装在d盘或别的盘时&#xff0c;经常会遇到npm环境变量没有配好&#xff0c;需要自己手动去配置。 nodejs在nodejs官网下载后直接点击安装 在安装完…

解决办法‘npm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

今天使用了nvm这个node的保姆级版本管理工具,的确很香。 首先打开官网nvm.uihtm.com/ 下载安装过程很顺利&#xff0c;但是验证node及npm是否安装成功时&#xff0c;出现下面错误提示。 C:\Users\Administrator>npm -v npm 不是内部或外部命令&#xff0c;也不是可运行的…

npm不是内部命令也不是外部可运用程序

在安装好nodejs之后发现每次执行npm命令的时候都会报错&#xff1a;npm不是内部命令也不是外部可运用程序 如下&#xff1a; 百度了很久了没有找到解决办法&#xff0c;最后通过https://blog.csdn.net/qq_41542894/article/details/80330108这篇文章才得以搞定 具体办法就是修…

idea中执行“npm”命令,提示‘node‘ 不是内部或外部命令,也不是可运行的程序

问题描述&#xff1a;idea中执行“npm”命令&#xff0c;提示‘node‘ 不是内部或外部命令&#xff0c;也不是可运行的程序 前提&#xff1a;首先确保自己安装的node.js 环境变量配置成功 解决办法&#xff1a; 重启idea&#xff0c;以管理员身份运行idea&#xff01;&#xf…

nvm安装node后,在使用npm指令时候显示不是内部或外部指令

问题回放 前段时间重装了电脑系统&#xff0c;重新下载了nvm来管理node版本&#xff0c;当时下载的时候可能没有注意&#xff0c;今天用npm的时候就报错npm不是内部或外部指令。 思来想去百度了看看&#xff0c;说是环境变量的问题&#xff0c;我安装nvm的时候改的D盘&#x…

nvm安装node后npm run dev一直报node不是内部或外部命令

nvm安装包下载地址https://github.com/coreybutler/nvm-windows/releases 找到nvm-setup.zip&#xff0c;解压安装即可 如果打不开&#xff0c;也可以在这里下载 链接&#xff1a;https://pan.baidu.com/s/1EvC6oTff1uPD20_RRR9SGQ 提取码&#xff1a;9ztx 安装node nvm inst…

nvm管理node版本 nodenpm不是内部或外部命令,也不是可运行的程序

最近&#xff0c;有新老项目一起开发&#xff0c;node版本太高&#xff0c;老项目起不来&#xff1b;node版本太低&#xff0c;新项目还搭不起来…所以&#xff0c;一个nvm就显得很有必要了。这几个坑掉的&#xff0c;摔的我差点起不来… 废话少说就是&#xff1a; 用管理员身…

解决 npm‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

按照网上的方法使用nvm install命令下载&#xff0c;出现 npm‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 显示npm安装完成缺报错。环境变量系统自己配好&#xff0c;也没问题。 打开mvn文件夹一看&#xff0c;npm并没有下好&#xff0c;怪不得报错&#xff0c;…

【无标题】cmd命令窗口显示‘npm‘ 不是内部或外部命令

在cmd命令窗口显示上图信息时&#xff0c;大部分是因为nodejs没有装上&#xff0c;如果装上了nodejs&#xff0c;那就是因为没有正确在环境变量里配置路径。配置路径&#xff1a; &#xff08;1&#xff09;新建变量 NODE_PATH D:\Program Files\nodejs; &#xff08;2&#…

使用nvm下载node版本之后,输入npm报错:“npm”不是内部或外部命令,也不是可运行的程序或批处理文件(nvm使用二)

在使用nvm安装node版本成功之后&#xff0c;输入npm发现npm并没有安装成功&#xff0c;在网上查阅资料&#xff0c;发现可能是由于安装的那个node版本是不带npm包的&#xff0c;可以尝试安装一下其他版本的node&#xff0c;我在安装了第二个node版本之后&#xff0c;发现npm已经…

解决“npm不是内部或外部命令“

在使用npm的时候&#xff0c;或者是通过npm下载了一些包&#xff0c;使用这些包的时候&#xff0c;有时候会遇到“npm 不是内部或外部命令”&#xff0c;或者“XXX 不是内部或外部命令”。这种情况一般都是由于安装node.js的时候&#xff0c;环境变量没有配置好。这里把如何配置…

安装nvm 后npm不是内部或外部命令,也不是可运行的程序的处理方法

全年无休&#xff0c;24小时待命 只要有朋友需要重装电脑&#xff0c;买新电脑&#xff0c;维修电脑&#xff0c;都会找程序员哥哥&#xff0c;他们是会写代码&#xff0c;不见的就会修理电脑啊。真是大家对程序员的错误认知。 学不完的新技术&#xff0c;三天不学习就感觉落…

通过管理员模式 解决idea中 “npm不是内部或外部命令“

这个前提一般就是你的nodejs其实已经是装好了&#xff0c;环境也设置好了&#xff0c;但是你的idea仍然无法使用这个npm的命令 那么原因很有可能是你用了utool之类的工具&#xff0c;导致打开软件的时候基本上是没有管理员权限的 解决方案&#xff1a; 就是你直接用win中找出…

解决安装了node.js在cmd中node npm不是内部命令

解决办法&#xff1a; 1、此电脑邮件选择高级系统设置-选择环境变量 2、在系统变量中找到path-编辑 3、把node.js安装的地址复制下来添加到环境变量中 4、点击确定&#xff0c;然后在cmd

Vscode编辑器使用npm 进行依赖安装出现npm 不是内部和外部命令

Vscode编辑器使用npm 进行依赖安装出现npm 不是内部和外部命令 问题描述——Vscode 使用不了 npm 命令 但是在win系统命令窗口可以使用npm命令 解决方法 vscode使用npm如上面 win系统使用命令查看如下面&#xff1a; 问题原因 vscode里面还是 ps命令终端&#xff0c;要改成…