社区讨论
ABC求助memset的替代物
学术版参与者 11已保存回复 24
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 24 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1vtdc
- 此快照首次捕获于
- 2025/11/03 19:22 4 个月前
- 此快照最后确认于
- 2025/11/03 20:36 4 个月前
RT,上周六晚复建打ABC 很快做完了ABCDEF,但是为什么我D挂了呢?我写的O((n+m)k)自认为复杂度非常正确,一看只T一个点,妈妈耶为啥这个复杂度sample1会跑2200ms?于是开始反复检查反复优化,甚至从TLE变成WA,最终拼尽全力无法战胜D题,赛时无比绝望。赛后一看题解:我这不是写的完全正确吗?于是继续愤而卡常,仍然是拼尽全力无法战胜。
直到我万念俱灰开始比对AC代码,然后发现了罪魁祸首:memset清空dp 删去这一句之后直接从2200ms->60ms
我真的吐了
这次是因为实现所以恰好不用dp清空,删去没有问题,但是若下次需要进行清空的情况下请问有什么可以替代的方式吗?
附代码:
C#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
typedef long long ll;
vector<int>e[maxn];
int pos[maxn][20];
void dfs(int x,int k)//xianshou win1 houshou win 2
{
for(int i=0;i<e[x].size();i++)
{
if(pos[e[x][i]][k-1]==2)
{
pos[x][k]=1;
return;
}
}
pos[x][k]=2;
return;
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
int n,m,k;
cin>>n>>m>>k;
string s;
cin>>s;
for(int i=1;i<=n;i++)
e[i].clear();
//这里本有句memset
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
e[x].push_back(y);
}
for(int i=1;i<=n;i++)
if(s[i-1]=='A')
pos[i][0]=1;
else
pos[i][0]=2;
for(int i=1;i<=2*k;i++)
for(int x=1;x<=n;x++)
dfs(x,i);
if(pos[1][2*k]==1)
cout<<"Alice"<<endl;
else
cout<<"Bob"<<endl;
}
return 0;
}
回复
共 24 条回复,欢迎继续交流。
正在加载回复...