lsmCC 发表于 2024-1-9 22:14:11

为什么c跟d一直显示0啊,按照代码逻辑不是200 500吗


/////差分模板//////
//void insert(int x1,int y1,int x2,int y2,int c)
// {
//   b+=c;
//   b-=c;
//   b-=c;
//   b+=c;


// }
//for(int i=1;i<=n;i++)
//   {
//         for(int j=1;j<=m;j++)
//         {
//             insert(i,j,i,j,a);
            

//         }

//   }
//   while(q--)
//   {
//         int x1,y1,x2,y2,c;
//         cin>>x1>>y1>>x2>>y2>>c;
//         insert(x1,y1,x2,y2,c);

//   }
//   for(int i=1;i<=n;i++)
//         {
//             for(int j=1;j<=m;j++)
//             {
//               b+=b+b-b;
               
//             }
//         }
//////////////////
///二维前缀和模板///
//int x1,y1,x2,y2;
//         cin>>x1>>y1>>x2>>y2; //表示行号和列号
//         cout<<s-s-s+s<<endl;

//////////并查集模板///////
// int f;
// int find(int x)
// {
//   if(f==x)return f;
//   f=find(f);
//   return f;

// }
// int main()
// {
//   int n,m; // m表示多少次询问(操作)
//   cin>>n>>m;
//   for(int i=1;i<=n;i++) f=i;
//   while(m--)
//   {
//         char op;
//         int a,b;
//         cin>>op>>a>>b;
//         if(op=='M') //将两个集合进行合并
//         {
//             int fa=find(a),fb=find(b);
//             if(fa!=fb)f=fb;

//         }
//         else
//         {
//             if(find(a)==find(b))cout<<"yes"<<endl;
//             else cout<<"no"<<endl;
//         }

//   }


// }

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long ll;
#define x first
#define y second
typedef pair<int,int>p;
int dx[]={-1,0,1,0},dy[]={0,-1,0,1}; //上左下右
void solve()
{
    int n,a,b;   // a为需要满足的水,b为马克杯的容量   
    int c=0,d=0;
    cin>>n>>a>>b;
    while(n--)
    {
      if(c==a)
      {
            c-=a;

      }
      else if(d==0)
      {
            d==b;
      }
      else
      {
            int ans=min(a-c,d);//表示要减到多少
            c+=ans;
            d-=ans;
      }
    }
    cout<<c<<" "<<d<<endl;

   
}
int main()
{
    int t;
    t=1;
    while(t--)
    {
      solve();
    }
}
//开始值 0 0
// 0 200   c=0 , b=200   
// 100 100   a+=100, b-a=100
// 0   100   倒掉   
// 1000
// 0   0(这个要么为0要么就是满)//此时又是一个循环



// cd
// 0 500    //第三中情况
// 500-300 300
//ans=300   
// 300 200   c+a   d-a
//ans=200
// 2
// 0   200   c+ans   d-=ans
// 2000   //此时不满足,所以不用
// 200300      //第五次
// 300200      // 第六次
// 0    200      //

FishC 发表于 2024-1-9 22:14:25

根据你提供的代码,似乎出现了一些错误和逻辑问题。首先,`insert`函数中的操作似乎存在冗余,可以简化为`b += c;`。其次,在第一个for循环中,没有给`i`赋初值,导致可能无法进入循环。此外,对于第二个for循环,无法确定变量`op`的值是什么,所以无法确定输出的内容。最后,在判断`op`的值时,需要使用单引号`' '`而不是双引号`" "`。

下面是修正后的代码:

void insert(int x1, int y1, int x2, int y2, int c)
{
    b += c;
}

int main()
{
    int x1, y1, x2, y2, c;
    for (int i = 1; i <= n; i++)
    {
      cin >> x1 >> y1 >> x2 >> y2 >> c;
      insert(x1, y1, x2, y2, c);
    }

    for (int i = 1; i <= m; i++)
    {
      cin >> x1 >> y1 >> x2 >> y2; //表示行号和列号
      cout << m;
    }

    char op;
    int a, b;
    while (cin >> op >> a >> b)
    {
      if (op == 'M') //将两个集合进行合并
      {
            int fa = find(a), fb = find(b);
            if (fa != fb)
                f = fb;
      }
      else
      {
            if (find(a) == find(b))
                cout << "0";
      }
    }

    return 0;
}

请注意,以上代码只是根据您提供的部分代码进行了修正,并无法确定是否完全符合您的需求。如果您能够提供更多的代码和问题细节,我将能够更具体地帮助您解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 为什么c跟d一直显示0啊,按照代码逻辑不是200 500吗