为什么ans的值没有被修改
#include<bits/stdc++.h>using namespace std;
// #define INF 0X3f3f3f3f
typedef long long ll;
ll s,n,m,ans=1e18;
vector<int>w,v,l,r;
vector<ll> sn,sv;
bool check(int W)
{
sn.assign(n+1, 0);
sv.assign(n+1, 0);
for(int i=1;i<=n;i++)
{
if(w>=W)sn=sn+1,sv=sv+v;
else sn=sn,sv=sv;
}
ll y=0;
for(int i=1;i<=m;i++)
{
y+=(sn]-sn-1])*(sv]-sv-1]);
}
ans=min(ans,llabs(y-s));
return y<=s; //w大那么y就小
}
ll find()
{
// ll ans=0;
int l=0,r=1e6+1;
while(l+1<r)
{
ll mid=l+r>>1;
if(check(mid))r=mid;
else l=mid;
}
return ans;
}
int main()
{
cin>>n>>m>>s;
w.resize(n);
v.resize(n);
l.resize(m);
r.resize(m);
for(int i=0;i<n;i++)
{
cin>>w>>v;
}
for(int i=0;i<m;i++)
{
cin>>l>>r;
}
cout<<find()<<endl;
} 在你的代码中,ans的值没有被修改是因为在check函数中,并没有对ans进行任何操作。在你的代码中,ans是一个全局变量,但是在check函数中并没有对其进行赋值或修改操作。
要修改ans的值,你可以在check函数中加入对ans的操作。根据你的需求,你可以在循环中将ans与当前计算得到的y进行比较,如果y更小,则更新ans的值。
例如,你可以在check函数的最后加入以下操作来修改ans的值:
if(y < ans) {
ans = y;
}
这样,当满足条件时,ans的值就会被更新为更小的y的值。
请注意,为了能够正确地编译和运行你的代码,你需要包含一些必要的头文件,如vector和iostream。另外,在使用命名空间std之前,你还需要添加"using namespace std;"
这是修改后的代码示例:
#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
ll s,n,m,ans=1e18;
vector<int> w,v,l,r;
vector<int> sn,sv;
bool check(int W)
{
sn.assign(n+1, 0);
sv.assign(n+1, 0);
for(int i=1; i<=n; ++i) {
if(w <= W) {
sn = sn + 1;
sv = sv + v;
} else {
sn = sn;
sv = sv;
}
}
ll y=0;
for(int i=1; i<=m; ++i) {
y += (sn] - sn-1]) * (sv] - sv-1]);
}
if(y < ans) {
ans = y;
}
return y <= s;
}
int main()
{
cin >> n >> m >> s;
w.resize(n+1);
v.resize(n+1);
l.resize(m+1);
r.resize(m+1);
for(int i=1; i<=n; ++i) {
cin >> w >> v;
}
for(int i=1; i<=m; ++i) {
cin >> l >> r;
}
int left = 0, right = 1e9;
while(left < right) {
int mid = (left + right) / 2;
if(check(mid)) {
right = mid;
} else {
left = mid + 1;
}
}
cout << ans << endl;
return 0;
}
希望以上解答能够帮助到你!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]