|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 贪吃蛇2 于 2023-2-16 19:32 编辑 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,k;
char s[maxn];
int e[maxn],is[maxn],ans[maxn];
int cnt[maxn][2],a[maxn][2];//记录字符串情况
int main(){
scanf("%d",&n);
scanf("%s",s+1);
for(int i=1;i<=n;i++)scanf("%d",&e[i]);
for(int i=1;i<=n;i++){
//printf("%c ",s[i]);
if(s[i]=='G')cnt[i][0]++;
else cnt[i][1]++;
}
//for(int i=1;i<=n;i++)printf("cnt = %d %d\n",cnt[i][0],cnt[i][1]);
for(int i=1;i<=n;i++){
a[i][0]=a[i-1][0]+cnt[i][0];
a[i][1]=a[i-1][1]+cnt[i][1];
}
//for(int i=1;i<=n;i++)printf("a = %d %d\n",a[i][0],a[i][1]);
for(int i=1;i<=n;i++){
int l=0;
if(s[i]=='H')l=1;
if(a[e[i]][l]-a[i-1][l]==a[n][l])is[i]=1;
}
//for(int i=1;i<=n;i++)printf("is = %d\n",is[i]);
for(int i=1;i<=n;i++)ans[i]=ans[i-1]+is[i];
//for(int i=1;i<=n;i++)printf("ans = %d\n",ans[i]);
for(int i=1;i<=n;i++)k=k+ans[e[i]]-ans[i];
k=k+ans[n]*(ans[n]-1)/2;
printf("%d\n",k);
return 0;
}
求指教
本帖最后由 ExiaGN001 于 2023-2-16 13:32 编辑
有用请设置最佳谢谢
另:希望本版鱼油在提问的时间注意以下几点:
1. 提问尽量不要点将,例如: 小甲鱼来问答下... XX来回答下... (影响他人回帖积极性)
2. 代码大于20行以上时,最好写清自己的思路和注释,这样回答的人才能尽快给大家答案!(避免扔上一大堆代码,说是有错误,请人指点!)
3. 发代码请务必使用编辑器的“添加代码文字”(这个符号:<>)(以上是官方说法)
bug类型:
C++语言-语法错误(CE)
具体bug/编译提示:
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
[为保护个人隐私,无关路径已省去] FishC_224470.cpp||In function 'int main()':|
[为保护个人隐私,无关路径已省去] FishC_224470.cpp|10|error: 'amp' was not declared in this scope|
[为保护个人隐私,无关路径已省去] FishC_224470.cpp|10|error: expected ';' before ')' token|
[为保护个人隐私,无关路径已省去] FishC_224470.cpp|12|error: 'i' was not declared in this scope|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
原因/解释:
所有问题都是因为转义字符&即"&"导致的
将转义字符换回对应一般字符就可以正常编译。
改错完成代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,k;
char s[maxn];
int e[maxn],is[maxn],ans[maxn];
int cnt[maxn][2],a[maxn][2];//记录字符串情况
int main(){
scanf("%d",&n); //bug发现 处理:将&变成&
scanf("%s",s+1);
for(int i=1;i<=n;i++)scanf("%d",&e[i]); //bug发现 处理:将&变成&
for(int i=1;i<=n;i++){
//printf("%c ",s[i]);
if(s[i]=='G')cnt[i][0]++;
else cnt[i][1]++;
}
//for(int i=1;i<=n;i++)printf("cnt = %d %d\n",cnt[i][0],cnt[i][1]);
for(int i=1;i<=n;i++){
a[i][0]=a[i-1][0]+cnt[i][0];
a[i][1]=a[i-1][1]+cnt[i][1];
}
//for(int i=1;i<=n;i++)printf("a = %d %d\n",a[i][0],a[i][1]);
for(int i=1;i<=n;i++){
int l=0;
if(s[i]=='H')l=1;
if(a[e[i]][l]-a[i-1][l]==a[n][l])is[i]=1;
}
//for(int i=1;i<=n;i++)printf("is = %d\n",is[i]);
for(int i=1;i<=n;i++)ans[i]=ans[i-1]+is[i];
//for(int i=1;i<=n;i++)printf("ans = %d\n",ans[i]);
for(int i=1;i<=n;i++)k=k+ans[e[i]]-ans[i];
k=k+ans[n]*(ans[n]-1)/2;
printf("%d\n",k);
return 0;
}
有用请设置最佳谢谢
另:希望本版鱼油在提问的时间注意以下几点:
1. 提问尽量不要点将,例如: 小甲鱼来问答下... XX来回答下... (影响他人回帖积极性)
2. 代码大于20行以上时,最好写清自己的思路和注释,这样回答的人才能尽快给大家答案!(避免扔上一大堆代码,说是有错误,请人指点!)
3. 发代码请务必使用编辑器的“添加代码文字”(这个符号:<>)
|
评分
-
查看全部评分
|