CSP2021提高组复赛解析

前言

终于出成绩了我可以写博客辣,官方数据还没出就先放洛谷的题目链接了。


正题


T1-廊桥分配

https://www.luogu.com.cn/problem/P7913

题目大意

m1m_1m1种一类飞机,m2m_2m2种二类飞机,每个飞机有一个占用时间的区间。要给两类飞机分配恰好nnn个廊桥。
如果对于一类飞机当它来到时如果有空的它这一类的廊桥就会分配给他。
求最多能容纳多少飞机。

1≤n≤105,1≤m1+m2≤1051\leq n\leq 10^5,1\leq m_1+m_2\leq 10^51n105,1m1+m2105

解题思路

因为飞机的策略就是能停就停,我们可以考虑贪心策略。
先考虑单类的飞机,假设分配的廊桥为kkk,当一辆飞机不能进入当且仅当现在kkk个廊桥已经被霸占了,此时如果需要停靠这俩飞机就需要新开一个廊桥。
我们可以设有无数个廊桥,然后我们优先分配编号小的廊桥,然后最后如果有kkk个廊桥时答案就是在1∼k1\sim k1k的廊桥排列的飞机数。
具体的做法对于两类各做一次,用一个优先队列维护现在所有被霸占的廊桥的恢复时间,然后用一个set维护现在空余的廊桥编号就可以了。

时间复杂度:O(nlog⁡n)O(n\log n)O(nlogn)

code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#include<queue>
#define mp(x,y) make_pair(x,y)
using namespace std;
const int N=1e5+10;
struct node{int l,r;
}a[N];
int n,m,f[N],g[N];set<int> s;
priority_queue<pair<int,int> > q;
bool cmp(node x,node y)
{return x.l<y.l;}
int main()
{int pm;scanf("%d%d%d",&n,&m,&pm);for(int i=1;i<=max(n,max(m,pm));i++)s.insert(i);for(int i=1;i<=m;i++)scanf("%d%d",&a[i].l,&a[i].r);sort(a+1,a+1+m,cmp);for(int i=1;i<=m;i++){while(!q.empty()&&-q.top().first<=a[i].l)s.insert(q.top().second),q.pop();int x=*s.begin();f[x]++;s.erase(x);q.push(mp(-a[i].r,x));}while(!q.empty())s.insert(q.top().second),q.pop();for(int i=1;i<=n;i++)f[i]+=f[i-1];m=pm;for(int i=1;i<=m;i++)scanf("%d%d",&a[i].l,&a[i].r);sort(a+1,a+1+m,cmp);for(int i=1;i<=m;i++){while(!q.empty()&&-q.top().first<=a[i].l)s.insert(q.top().second),q.pop();int x=*s.begin();g[x]++;s.erase(x);q.push(mp(-a[i].r,x));}while(!q.empty())s.insert(q.top().second),q.pop();for(int i=1;i<=n;i++)g[i]+=g[i-1];int ans=0;for(int i=0;i<=n;i++)ans=max(ans,f[i]+g[n-i]);printf("%d\n",ans);return 0;
}

T2-括号序列

https://www.luogu.com.cn/problem/P7914

题目大意

一个合格的括号序被定义为
在这里插入图片描述
然后给出带∗,(,),?*,(,),?,(,),?的字符串,然后求有多少种把???切换成(,),∗(,),*(,),的方案使得是一个合法的括号序。
1≤k≤n≤5001\leq k\leq n\leq 5001kn500

解题思路

开始考虑一个一个填发现不行。
然后这个复杂度考虑区间dpdpdp,设fl,rf_{l,r}fl,r表示区间l∼rl\sim rlr合法的方案。
然后考虑怎么转移,先维护一个sl,rs_{l,r}sl,r表示l∼rl\sim rlr是否能够凑成一个长度不超过kkk的全∗*序列。
对于第111种和第333种情况,先看下l,rl,rl,r是否能是′(′'('(′)′')')的形式,然后第一种情况就直接加sl+1,r−1+fl+1,r−1s_{l+1,r-1}+f_{l+1,r-1}sl+1,r1+fl+1,r1(对应S/AS/AS/A),第三种我们可以枚举k∈[l+1,r−1)k\in[l+1,r-1)k[l+1,r1),然后转移fl+1,k×sk+1,r+sl+1,k×fk+1,rf_{l+1,k}\times s_{k+1,r}+s_{l+1,k}\times f_{k+1,r}fl+1,k×sk+1,r+sl+1,k×fk+1,r(对应了AS/SAAS/SAAS/SA)就好了。
222种情况比较麻烦,我们需要枚举一个l≤L<R≤rl\leq L<R\leq rlL<Rr然后中间填SSS,就是fl,L×fR,r×sL+1,R−1f_{l,L}\times f_{R,r}\times s_{L+1,R-1}fl,L×fR,r×sL+1,R1。但是这个枚举比较慢,因为对于一个rrr,满足sl,r=1s_{l,r}=1sl,r=1lll肯定是一个到rrr的区间,并且rrr向右移动时这个区间也向右移动,所以可以使用一个前缀和优化。

发现这样还是过不了样例,问题出在如果存在ASASAASASAASASA的情况,此时会被统计两次(∣ASA∣SA|ASA|SAASASAAS∣ASA∣AS|ASA|ASASA各一次),更多的同理,所以我们可以设gl,rg_{l,r}gl,r表示不带情况二时的合法方案,然后在后面转移就好了。

code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=510,P=1e9+7;
ll n,k,f[N][N],g[N][N],S[N][N];char s[N];
signed main()
{scanf("%lld%lld",&n,&k);scanf("%s",s+1);for(ll i=1;i<=n;i++){S[i][i-1]=1;for(ll j=i;j<=min(n,i+k-1);j++){S[i][j]=S[i][j-1]&(s[j]=='?'||s[j]=='*');if(!S[i][j])break;}}for(ll len=2;len<=n;len++)for(ll l=1;l<=n-len+1;l++){ll r=l+len-1;if((s[l]=='?'||s[l]=='(')&&(s[r]=='?'||s[r]==')')){(f[l][r]+=S[l+1][r-1]+f[l+1][r-1])%=P;for(ll k=l+1;k<r-1;k++)(f[l][r]+=f[l+1][k]*S[k+1][r-1]+f[k+1][r-1]*S[l+1][k])%=P;}ll sum=0,z=l;g[l][r]=f[l][r];for(ll k=l;k<r;k++){(sum+=f[l][k])%=P;while(!S[z+1][k])(sum-=f[l][z])%=P,z++;(f[l][r]+=g[k+1][r]*sum%P)%=P;}}printf("%lld\n",(f[1][n]+P)%P);return 0;
}

T3-回文

https://www.luogu.com.cn/problem/P7915

题目大意

有一个长度为2n2n2n的序列aaa,保证1∼n1\sim n1n都各出现了两次,你有两种操作

  • aaa的开头添加到序列bbb的末尾并在aaa移除。
  • aaa的末尾添加到序列bbb的末尾并在aaa移除。

一操作为LLL,二操作为RRR,要求使得最终bbb回文的情况下操作序列的字典序最小。

1≤T≤100,∑n≤5×1051\leq T\leq 100,\sum n\leq 5\times 10^51T100,n5×105

解题思路

显然第一个丢进bbb的肯定是第一个或者最后一个,我们先假设是第一个且数字为xxx,那么最后被丢进去的肯定是另一个xxx

然后我们可以从这个xxx的位置开始作为一个区间,然后开始每次你丢进去的下一个数都必须在这个区间的左右,然后再用这个区间再扩展丢进去的数的另一个的对应位置。

但是这样暴力搜丢左边还是右边是2n2^n2n的显然不行,但是我们发现假设如果一个情况左右都能丢,在字典序最小的情况下我们肯定是先丢左边的,而此时丢了之后不会导致右边不能丢了,所以此时丢左边肯定是最优的。

所以其实这样搜是O(n)O(n)O(n)的,时间复杂度O(∑n)O(\sum n)O(n)

code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int T,n,flag,a[N];char v[N];
void dfs(int d,int l,int r,int L,int R){if(l<L&&r>R){flag=1;for(int i=1;i<=2*n;i++)putchar(v[i]);putchar('\n');return;}if(d>n)return;if(L<=l&&(a[L]==a[l]&&L<l||a[L]==a[r]&&r<=R)){v[d]='L';if(a[L]==a[l]&&L<l)v[2*n-d+1]='L',dfs(d+1,l-1,r,L+1,R);else v[2*n-d+1]='R',dfs(d+1,l,r+1,L+1,R);}else if(r<=R&&(a[R]==a[l]&&L<=l||a[R]==a[r]&&r<R)){v[d]='R';if(a[R]==a[l]&&L<=l)v[2*n-d+1]='L',dfs(d+1,l-1,r,L,R-1);else v[2*n-d+1]='R',dfs(d+1,l,r+1,L,R-1);}return;
}
int main()
{scanf("%d",&T);while(T--){scanf("%d",&n);v[2*n]='L';flag=0;for(int i=1;i<=2*n;i++)scanf("%d",&a[i]);for(int i=2;i<=2*n;i++)if(a[i]==a[1]){v[1]='L';dfs(2,i-1,i+1,2,2*n);break;}if(flag)continue;for(int i=1;i<2*n;i++)if(a[i]==a[2*n]){v[1]='R';dfs(2,i-1,i+1,1,2*n-1);break;}if(flag)continue;puts("-1");}return 0;
}

T4-交通规划

https://www.luogu.com.cn/problem/P7916

题目大意

有一个nnn条水平线和mmm条垂直线交叉形成n×mn\times mn×m个格点的图,把所有的边按照顺时针排序如图。在这里插入图片描述
每个格点之间有边权。
TTT次询问,每次给出线外的kkk个额外点的位置,颜色(黑白),和连接线内边界格点的边权。

要求给网格上的所有点染色,要求使得两端颜色不同的边权值和最小。

1≤T≤50,∑k≤50,2≤n,m≤5001\leq T\leq 50,\sum k\leq 50,2\leq n,m\leq 5001T50,k50,2n,m500

解题思路

黑白染色求最小的权值其实就是为最小割,然后平面图最小割是可以转换成对偶图的最短路的。

显然的对于k=2k=2k=2的部分分就是直接求黑色额外点(如果颜色都相同显然答案为000)左右的对偶点在对偶图上的最短路。

对于kkk更大的情况我们具体分析一下对于下图的情况(为了好看用了红蓝代替黑白)
在这里插入图片描述
我们有两种割法(绿/黄)
在这里插入图片描述
发现其实可以写成四个点相互匹配的过程,由于产生交叉的肯定不优(通过改变匹配方式使得交叉部分消去),所以匹配的贡献可以直接写成最短路。

然后考虑如何找到优的匹配方案,我们可以把顺时针的和逆时针的匹配,因为如果顺顺-逆逆的匹配的话,肯定会产生交叉。(虽然这样匹配也可能产生交叉,但是因为权值不优所以不会影响答案)

然后就是一个二分图最大权值匹配的问题了,写个费用流就可以了。

虽然再利用交叉性质做环形区间dpdpdp也能过,但是我不会/kk

code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<vector>
#include<queue>
#define ll long long
#define mp(x,y) make_pair(x,y)
using namespace std;
const ll N=510,M=N*N,K=110;
struct edge{ll to,next,w;
}a[M<<2];
struct node{ll w,p,t;
}q[K];
ll n,m,T,tot,ls[M],f[M],wz[N<<2];
vector<int> A,B;bool v[M];
priority_queue<pair<ll,ll> > qt;
ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
struct Netflow{struct node{ll to,next,w,c;}a[K*K*2];ll tot=1,s=1,t=2,ans,ls[K],f[K],mf[K],pre[K];bool v[K];priority_queue<int> q;void clr(){tot=1;ans=0;memset(ls,0,sizeof(ls));return;}void addl(ll x,ll y,ll w,ll c){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;a[tot].c=c;a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=0;a[tot].c=-c;return;}bool SPFA(){memset(f,0x3f,sizeof(f));q.push(s);f[s]=0;v[s]=1;mf[s]=1e9;while(!q.empty()){ll x=q.top();q.pop();v[x]=0;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(a[i].w&&f[x]+a[i].c<f[y]){f[y]=f[x]+a[i].c;pre[y]=i;mf[y]=min(mf[x],a[i].w);if(!v[y])q.push(y),v[y]=1;}}}return (f[t]!=f[0]);}void Updata(){ll x=t;ans+=mf[t]*f[t];while(x!=s){a[pre[x]].w-=mf[t];a[pre[x]^1].w+=mf[t];x=a[pre[x]^1].to;}return;}ll GetAns(){while(SPFA())Updata();return ans;}
}Nt;
ll p(ll x,ll y)
{return x*(m+1)+y;}
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=w;return;
}
void dij(ll s){memset(f,0x3f,sizeof(f));memset(v,0,sizeof(v));f[s]=0;qt.push(mp(0,s));while(!qt.empty()){ll x=qt.top().second;qt.pop();if(v[x])continue;v[x]=1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(f[x]+a[i].w<f[y]){f[y]=f[x]+a[i].w;qt.push(mp(-f[y],y));}}}return;
}
ll getp(ll x,ll f){if(x<=m)return p(0,x+f);if(x<=m+n)return p(x-m+f,m);if(x<=2*m+n)return p(n,m-(x-m-n+f));return p(n-(x-2*m-n+f),0);
}
bool cmp(node x,node y)
{return x.p<y.p;}
signed main()
{n=read();m=read();T=read();for(ll i=1;i<n;i++)for(ll j=1;j<=m;j++){ll w=read();addl(p(i,j-1),p(i,j),w);}for(ll i=1;i<=n;i++)for(ll j=1;j<m;j++){ll w=read();addl(p(i-1,j),p(i,j),w);}for(ll i=1;i<=m;i++)addl(p(0,i-1),p(0,i),0),wz[i]=tot;for(ll i=1;i<=n;i++)addl(p(i-1,m),p(i,m),0),wz[i+m]=tot;for(ll i=1;i<=m;i++)addl(p(n,m-i+1),p(n,m-i),0),wz[i+n+m]=tot;for(ll i=1;i<=n;i++)addl(p(n-i+1,0),p(n-i,0),0),wz[i+n+2*m]=tot;while(T--){ll k=read();Nt.clr();A.clear();B.clear();for(ll i=1;i<=k;i++){q[i].w=read();q[i].p=read();q[i].t=read();a[wz[q[i].p]].w=a[wz[q[i].p]-1].w=q[i].w;}sort(q+1,q+1+k,cmp);q[0]=q[k];q[k+1]=q[1];for(ll i=1;i<=k;i++)if(q[i].t==1&&q[i-1].t==0)A.push_back(getp(q[i].p,-1));for(ll i=1;i<=k;i++)if(q[i].t==1&&q[i+1].t==0)B.push_back(getp(q[i].p,0));for(ll i=0;i<A.size();i++){Nt.addl(1,3+i,1,0);dij(A[i]);for(ll j=0;j<B.size();j++)Nt.addl(3+i,3+A.size()+j,1,f[B[j]]);}for(ll i=0;i<B.size();i++)Nt.addl(3+A.size()+i,2,1,0);printf("%lld\n",Nt.GetAns());for(ll i=1;i<=k;i++)a[wz[q[i].p]].w=a[wz[q[i].p]-1].w=0;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一起开心集训队第一周训练赛2021/3/14

文章目录比赛链接A CodeForces 1481D AB Graph题意&#xff1a;题解&#xff1a;代码&#xff1a;B CodeForces 1481E Sorting Books题意&#xff1a;题解&#xff1a;代码&#xff1a;C CodeForces 1478D Nezzar and Board题意&#xff1a;题解&#xff1a;代码&#xff1a;D …

使用Azure DevOps持续集成GitHub项目

点击蓝字关注我微软的Azure DevOps是一款软件开发管理工具&#xff0c;整合了需求、代码、编译、测试、发布等所有功能于一身。今天我们就来看看如何用Azure DevOps对自己GitHub上的项目做持续集成&#xff0c;并能在GitHub显示最新编译状态。其实在不久之前&#xff0c;Azure …

[BZOJ 3811]玛里苟斯(线性基)尽量理解的题解

文章目录titlesolutioncodetitle 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心&#xff0c;于是他想了一道数学题。 S 是一个可重集合&#xff0c;S{a1,a2,…,an}。 等概率随机取 S 的一个子集 A{ai1,…,aim}。 计算出 A 中所有元素异或和&#xff0c;记为 x, 求 x^…

CF464E The Classic Problem(线段树 最短路)

CF464E The Classic Problem \(\bigstar\texttt{Hint}\)&#xff1a;发现没有什么好的突破口&#xff1f;为什么不想想怎样才能实现题目中 \(2^x\) 的加减法呢&#xff1f; 可见每次加减法&#xff0c;我们要做的是将添加的 \(1\) 和右边的连续的 \(1\) 合并为一整段&#xff0…

C. Longest Simple Cycle

C. Longest Simple Cycle 题意&#xff1a; 有n条链&#xff0c;第i条链上有c[i]个点&#xff0c;a[i]为第i条链的顶点与第i-1条链的连接点&#xff0c;b[i]为第i条链的最后一个点与第i-1条链的连接点。通过上面的方法连接链会产生很多的环&#xff0c;问这些环的最大长度。 …

【CF813F】Bipartite Checking(线段树分治+可删除并查集)

文章目录titlesolutioncodetitle You are given an undirected graph consisting of n vertices. Initially there are no edges in the graph. Also you are given q queries, each query either adds one undirected edge to the graph or removes it. After each query you…

在.Net Core WebAPI下给Swagger增加导出离线文档功能

一丶前言最近刚接触到Swagger&#xff0c;在github上下载了它的源码和demo学习了一遍&#xff0c;发现这个组件非常好用&#xff0c;不过不足的是它没有导出离线文档的功能&#xff0c;于是乎我就想给它加一个导出功能Swagger Github开源地址二丶思路其实说白了api文档就是一个…

YBTOJ洛谷P4331:数字序列(左偏树)

文章目录题目描述数据范围解析代码题目描述 数据范围 n<1e6n<1e6n<1e6 解析 先考虑简单情况 如果原数列是单调递增的&#xff0c;显然应该使biaib_ia_ibi​ai​ 如果单调递减&#xff0c;应该取中位数 那么原数列如果分成单调递减的几段&#xff0c;那么每一段都取中…

P8441 旭日东升(二维数点经典套路)

P8441 旭日东升 维护一个不可重集合的序列 \(a\)&#xff0c;长度为 \(n\)。支持以下两种操作&#xff1a; l r x 对于每个 \(l\le i\le r\)&#xff0c;将 \(x\) 并入 \(a_i\)。l r 设 \(S\) 把每个 \(l\le i\le r\) 的 \(a_i\) 并在一起的集合&#xff0c;输出 \(S\) 中所有元…

深搜、广搜、搜索剪枝

搜索与回溯讲解 文章目录深搜方向向量&#xff1a;DFS代码&#xff1a;题目讲解&#xff1a;八皇后问题字符序列自然数的拆分广搜BFS代码&#xff1a;题目讲解&#xff1a;瓷砖关系网络bfs与dfs的用途与区别搜索剪枝可行性剪枝最优性剪枝记忆化搜索搜索顺序剪枝题目&#xff1a…

使用logdashboard查看可视化日志

logdashboard日志面板是我在Github写的一个开源项目&#xff0c;旨在让查看日志变的方便快捷。在线预览现在功能有日志检索、趋势图、异常堆栈快速查看、日志详情等logdashboard支持自定义日志模型可以记录更多自定义的属性。logdashboard支持的日志来源有以下两种&#xff0c;…

数论分块专题复习(余数求和+模积和+Ice Rain+The Fool)

文章目录前提知识复习T1&#xff1a;余数求和titlesolutioncodeT2&#xff1a;Ice RaintitlesolutioncodeT3&#xff1a;The FooltitlesolutioncodeT4&#xff1a;模积和titlesolutioncode前提知识复习 整除分块是用于快速处理形似下列式子的方法&#xff0c;是解决莫比乌斯反…

领域驱动设计,让程序员心中有码(六)

领域驱动设计-聚合&#xff0c;一种极简的思维模式引言作为IT技术产业飞速发展的产物&#xff0c;软件工程学已经成为当今时代非常重要的一个学科。作为一名资深的软件开发从业者&#xff0c;我们需要学习的东西实际上已经远远超出了原本在大学教育阶段所接受的知识深度和广度&…

hdu 5094 Maze

题意&#xff1a; n*m大的迷宫 &#xff0c;有p种钥匙。钥匙最多有10种。 然后一个k&#xff0c;然后k行表示 (x1,y1),(x2,y2)直接有门或者墙。 如果g0 &#xff0c;就是有墙&#xff0c; 如果g>0 表示有门&#xff0c;且门需要第g把钥匙才能开。 然后下来一个s&#xff…

数论分块练习([CF830 C]Bamboo Partition + [hdu 6395]Sequence )

文章目录T1&#xff1a;SequencetitlesolutionT2&#xff1a;Bamboo PartitiontitlesolutioncodeT1&#xff1a;Sequence title 传送 solution 一眼就是很裸的矩阵加速 ⌊pl⌋\lfloor\frac{p}{l}\rfloor⌊lp​⌋分块矩阵加速就可以了 [BA1][DC⌊pl⌋010001]\begin{bmatrix}…

YBTOJ:染颜色(KDtree)

文章目录题目描述数据范围解析代码题目描述 数据范围 n≤105,T≤5n\le10^5,T\le5n≤105,T≤5 解析 关键是对问题的转化 考虑一次修改&#xff0c;一个点需要满足哪些条件才可以满足 1.与x的距离不超过lll 2.在x的子树内 这两个条件可以转化为对深度的限制和对dfs序的限制 这样…

Kubernetes初探[1]:部署你的第一个ASP.NET Core应用到k8s集群

Kubernetes简介Kubernetes是Google基于Borg开源的容器编排调度引擎&#xff0c;作为CNCF&#xff08;Cloud Native Computing Foundation&#xff09;最重要的组件之一&#xff0c;它的目标不仅仅是一个编排系统&#xff0c;而是提供一个规范&#xff0c;可以让你来描述集群的架…

01分数规划

参考文章 01分数规划 什么是01分数规划&#xff1a; 给定n个a[i]和b[i]&#xff0c;a[i]和b[i]绑定在一起要选同时选&#xff0c;求sum(a[i]) 除以 sum(b[i]) 的最大值&#xff0c;sum为求和函数 对于这种问题我们可以多定义一个数组x[1…n]&#xff0c;x为bool型只取0或者1,…

CF1156D 0-1-Tree(换根DP)

牛犇犇titlesolutioncodetitle 戳一戳 solution 直接设dp[i][k]dp[i][k]dp[i][k]表示以iii为根时&#xff0c;子树内&#xff0c;边权为kkk时的答案 &#xff08;定义写得好复杂&#xff0c;可略过&#xff09; 考虑对于点uuu&#xff0c;vvv是他的一个儿子&#xff0c;两点…

Entity Framework 6.3 和 EF Core 3.0 路线图

尽管脱离了 .NET Core 发布循环&#xff0c;但是 EF Core 正在开发其 3.0 路线图。除此之外&#xff0c;还对原来的 Entity Framework 进行了一些重要的变更。更多服务器端的查询将 LINQ 查询转换为对应的 SQL 查询通常是比较困难的&#xff0c;甚至是不可能的。许多 QRM 只能在…