|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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. 发代码请务必使用编辑器的“添加代码文字”(这个符号:<>)
|
评分
-
查看全部评分
|