社区讨论
大佬帮忙,100分Unaccept,后面几个紫色RE
P8815[CSP-J 2022] 逻辑表达式参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo1mtnva
- 此快照首次捕获于
- 2023/10/22 23:37 2 年前
- 此快照最后确认于
- 2023/11/03 00:21 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
bool p1[100002],p2[1000002];int a1,a2,ans,a[1000002]; string s;
int finded(int g)
{
int cnt1=0;
for(int j=g;;j++){
if(s[j]=='(')cnt1++;
else if(s[j]==')')cnt1--;
if(cnt1==0)return j;
}
}
int main()
{
cin>>s;//cout<<s.length();
//if(s[0]=='1')a[0]=1;
int cnt=0;
for(int i=0;i<s.size();i++){
if(p1[cnt])a[i]=1;
if(s[i]==')'){
if(a[i-1]) {
for(int k=i;s[k]==')';k++){
a[k]=1;//cout<<'b';
}
}
p1[cnt]=p2[cnt]=0;cnt--;
}
if(!p1[cnt]&&!p2[cnt]&&s[i]=='1'){
a[i]=1;//cout<<'a';
}
if((p1[cnt]||p2[cnt])&&s[i]=='('){
i=finded(i);
if(p1[cnt]) {
for(int k=i;s[k]==')';k++){
a[k]=1;//cout<<'b';
}
}
}
else if(s[i]=='(')cnt++;
if((!p1[cnt]&&!p2[cnt])&&i){
if(s[i]=='1'){
if(s[i-1]=='|'){
a[i]=1;//cout<<'c';
}
else if(s[i-1]=='&'&&a[i-2]){
a[i]=1;//cout<<'d';
}
}
}
if(s[i]=='|'){
if(!a[i-1])p1[cnt]=0,p2[cnt]=0;
if(a[i-1]==1){
p1[cnt]=1;
a1++;
}
}
if(s[i]=='&'&&p1[cnt]==0){
if(a[i-1]==1)p2[cnt]=0;
if(a[i-1]==0){
p2[cnt]=1;
a2++;
}
}
}
cout<<a[s.size()-1]<<endl;
printf("%d %d\n",a2,a1);
/* for(int i=0;i<s.size();i++){
cout<<a[i]<<' ';
}*/
return 0;
}
语言最朴实了
回复
共 5 条回复,欢迎继续交流。
正在加载回复...