鱼C论坛

 找回密码
 立即注册
查看: 951|回复: 2

修改代码,为什么没有输出呢

[复制链接]
发表于 2023-11-19 16:38:30 | 显示全部楼层 |阅读模式

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

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

x
#include <bits/stdc++.h>
using namespace std;
const int N=1e5;
int a[N],b[N];
typedef long long ll;
vector<ll>c;
ll ans=0;

int main()
{
    int n,m;
    ll x,y;
    cin>>n>>m;
    c.resize(n+m);
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        a[i]=x;
        c.push_back(x);
        
    }
    for(int j=1;j<=m;j++)
    {
        cin>>y;
        b[j]=y;
        c.push_back(y);
    }
    sort(c.begin(),c.end());
    for(int i=1;i<=n;i++)
    {
           ans =a[i];
        //    cout<<ans<<endl;
          int l=1,r=c.size();
          while(l<r)
          {
                ll mid=l+r/2;
                if(c[mid]>=ans) r=mid;
                else l=mid+1;
          }
          cout<<l<<endl;
         
         
    }
    cout<<endl;
    for(int i=1;i<=m;i++)
    {
           ans =b[i];
        //    cout<<ans<<endl;
          int l=1,r=c.size();
          while(l<r)
          {
                ll mid=l+r/2;
                if(c[mid]>=ans) r=mid;
                else l=mid+1;
          }
          cout<<l<<endl;
         
         
    }
   


   
   
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 16:38:41 | 显示全部楼层
问题出在对c的大小进行了resize操作,然后又使用push_back来添加元素,导致c中前n+m个元素是未初始化的。应该将resize操作修改为c.reserve(n+m)来预留空间,然后使用c[ i]=x和c[n+i]=y来赋值。此外,二分查找时mid的计算应该为(ll)(l+r)/2,而不是l+r/2。最后,应该在每次循环结束后将l和r初始化为1和c.size(),以便下一次使用。以下是修改后的代码:
#include <bits/stdc++.h>
using namespace std;
const int N=1e5;
int a[N],b[N];
typedef long long ll;
vector<ll>c;
ll ans=0;

int main()
{
    int n,m;
    ll x,y;
    cin>>n>>m;
    c.reserve(n+m); // 修改为reserve
    for(int i=0;i<n;i++) // 修改为从0开始
    {
        cin>>x;
        a[ i]=x; // 修改为a[ i]
        c[ i]=x; // 修改为c[ i]
    }
    for(int j=0;j<m;j++) // 修改为从0开始
    {
        cin>>y;
        b[j]=y; // 修改为b[j]
        c[n+j]=y; // 修改为c[n+j]
    }
    sort(c.begin(),c.end());
    for(int i=0;i<n;i++) // 修改为从0开始
    {
            ans =a[ i];
            int l=1,r=c.size();
            while(l<r)
            {
                ll mid=(ll)(l+r)/2; // 修改二分查找中mid的计算
                if(c[mid]>=ans) r=mid;
                else l=mid+1;
            }
            cout<<l<<endl;
    }
    cout<<endl;
    for(int i=0;i<m;i++) // 修改为从0开始
    {
            ans =b[ i];
            int l=1,r=c.size();
            while(l<r)
            {
                ll mid=(ll)(l+r)/2; // 修改二分查找中mid的计算
                if(c[mid]>=ans) r=mid;
                else l=mid+1;
            }
            cout<<l<<endl;
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 16:41:28 | 显示全部楼层
修改后的代码如下:
++#include <iostream>#include <vector>#include <algorithm>typedef long long ll;int main(){    int n, m;    ll x, y;    std::cin >> n >> m;    std::vector<ll> a(n), b(m), c(n + m);    for (int i = 0; i < n; ++i)    {        std::cin >> x;        a[i] = x;        c[i] = x;    }    for (int i = 0; i < m; ++i)    {        std::cin >> y;        b[i] = y;        c[n + i] = y;    }    std::sort(c.begin(), c.end());    for (int i = 0; i < n; ++i)    {        ll ans = a[i];        int l = 0, r = c.size() - 1;        while (l < r)        {            int mid = l + (r - l) / 2;            if (c[mid] >= ans)                r = mid;            else                l = mid + 1;        }        std::cout << l + 1 << std::endl;    }    std::cout << std::endl;    for (int i = 0; i < m; ++i)    {        ll ans = b[i];        int l = 0, r = c.size() - 1;        while (l < r)        {            int mid = l + (r - l) / 2;            if (c[mid] >= ans)                r = mid;            else                l = mid + 1;        }        std::cout << l + 1 << std::endl;    }    return 0;}
主要的修改包括:

1. 将 vector 的大小定义为 n + m,避免不必要的调整大小操作。
2. 在输入数据时,将元素存入向量 ab 中,并且将它们的值同时放入向量 c 中。
3. 使用 std::sort 函数来对向量 c 进行排序。
4. 对于每个元素 a[i]b[i],使用二分查找在有序向量 c 中找到其插入位置,并输出位置信息。
5. 修改了一些变量的初始值和循环索引,使得程序逻辑更加清晰。

希望以上修改对你有所帮助,如果还有其他问题,请随时向我提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 15:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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