鱼C论坛

 找回密码
 立即注册
查看: 477|回复: 1

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

[复制链接]
发表于 2024-1-9 22:14:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


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

//         }

//     }
//     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[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];
                
//             }
//         }
 //////////////////
 ///二维前缀和模板///
//  int x1,y1,x2,y2;
//         cin>>x1>>y1>>x2>>y2; //表示行号和列号
//         cout<<s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]<<endl;

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

// }
// int main()
// {
//     int n,m; // m表示多少次询问(操作)
//     cin>>n>>m;
//     for(int i=1;i<=n;i++) f[i]=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[fa]=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   倒掉   
// 100  0
// 0   0  (这个要么为0要么就是满)  //此时又是一个循环



// c  d
// 0 500    //第三中情况
// 500-300 300  
//  ans=300   
// 300 200     c+a     d-a
//ans=200
// 2
// 0   200     c+ans     d-=ans
// 200  0   //此时不满足,所以不用
// 200  300      //第五次
// 300  200      // 第六次
// 0    200      //
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表