社区讨论

震惊!数据水的可怕,一男子错误代码竟然……

P1310[NOIP 2011 普及组] 表达式的值参与者 9已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@mi7vzkbi
此快照首次捕获于
2025/11/21 04:31
4 个月前
此快照最后确认于
2025/11/21 04:31
4 个月前
查看原帖
没错我就是uc编辑部的
rt,第63行,很明显的bug,然而AC了
建议加强数据
CPP
else if(a[i]=='*')
        {
            while(q.top()=='&')//63行
            {
                calc(q.top());
                q.pop();
            }
完整代码
CPP
#include<bits/stdc++.h>
#define a0 f[0][top]
#define a1 f[1][top]
#define b0 f[0][top-1]
#define b1 f[1][top-1]
using namespace std;
const int mod=10007,N=300005;
string a;
int n,top=1;
stack<char>q;
int f[2][N];
inline void calc(char c)
{
    int ans0,ans1;
    if(c=='+')
    {
        ans0=(a0*b0)%mod;
        ans1=((a0*b1)%mod+(a1*b0)%mod+(a1*b1)%mod)%mod;
    }
    if(c=='*')
    {
        ans0=((a0*b0)%mod+(a1*b0)%mod+(a0*b1)%mod);
        ans1=(a1*b1)%mod;
    }
    top--;
    a1=ans1;
    a0=ans0;
}
int main()
{
    cin>>n>>a;n+=2;
    a='('+a+')';
    for(int i=0;i<n;i++)
    {
    	if(a[i]=='(')
    	{
    		q.push('(');
    		if(a[i+1]!='(')top++,f[0][top]=f[1][top]=1;
    	}
    	else if(a[i]==')')
    	{
    		while(q.top()!='(')
    		{
    			calc(q.top());
    			q.pop();
            }
            q.pop();
        }
        else if(a[i]=='+')
        {
            while(q.top()!='(')
            {
                calc(q.top());
                q.pop();
            }
            q.push(a[i]);
            if(a[i+1]!='(')top++,f[0][top]=f[1][top]=1;
        }
        else if(a[i]=='*')
        {
            while(q.top()=='&')//qwq
            {
                calc(q.top());
                q.pop();
            }
            q.push(a[i]);
            if(a[i+1]!='(')top++,f[0][top]=f[1][top]=1;
        }
    }
    cout<<a0%mod;
    return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...