问题标题: 酷町堂:2012 合唱课

0
0
已解决
黄俊博
黄俊博
资深光能
资深光能

 

2012合唱课

为什么一编译就:

求大佬:

#include<iostream>
#include<queue>
#include<cmath>
using namespace std;

struct data{
    int c;
    int b,g;
    bool f;
};

priority_queue< data,vector<data>,greater<data> >q;
int n;
int m[100010];
bool flag[100010];
char sex[100010];

int main()
{
    cin>>n;
    cin>>sex[1];
    for(int i=1;i<=n;i++)
    {
        cin>>sex[i];
    }
    for(int i=1;i<=n;i++)
    {
        cin>>m[i];
    }
    for(int i=2;i<=n;i++)
    {
        if(sex[i]=='B' && sex[i-1]=='G')
        {
            int w=abs(m[i]-m[i-1]);
            q.push((data){w,i,i-1});
        }
        else if(sex[i]=='G' && sex[i-1]=='B')
        {
            int w=abs(m[i]-m[i-1]);
            q.push((data){w,i-1,i});
        }
        
    }
    int b1,g1;
    while(!q.empty())
    {
        data pq=q.top();
        q.pop();
        if(pq.f || flag[pq.b] || flag[pq.g])continue;
        else
        {
            pq.f=true;
            b1=pq.b,g1=pq.g;
            flag[b1]=true;
            flag[g1]=true;
            for(int i=b1;i>=1;i--)
            {
                if(sex[g1+i-b1]=='G' && sex[i]=='B')
                {
                    q.push((data){abs(m[g1+i-b1]-m[i]),i,g1+i-b1});
                }else if(sex[g1+i-b1]=='B' && sex[i]=='G')
                {
                    q.push((data){abs(m[g1+i-b1]-m[i]),g1+i-b1,i});
                }
            }
            cout<<b1<<" "<<g1<<endl;
        }
    }
    return 0;
}


0
已采纳
栾峻岩
栾峻岩
初级天翼
初级天翼

你定义的结构体data里面是有四个参数的。

然而你在35行就只插入了3个参数放入队列,明显3个参数是不够组成一个data的,所以就会CE。

@黄俊博 

0
0
0
我要回答