社区讨论

我DEV c++ 怎么了???

P4058[Code+#1] 木材参与者 4已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@lob7ffj4
此快照首次捕获于
2023/10/29 16:23
2 年前
此快照最后确认于
2023/11/03 22:41
2 年前
查看原帖
大家看一下这两个代码!
CPP
#include<bits/stdc++.h>
using namespace std ;
const int maxs = 200010 , TIL = (1 << 28) ;
int H[maxs] , A[maxs] ;
int n , S , L ;
int U[maxs] ;
int Ans ;
bool CMP(int X){
	long long sum ;
	for(int i = 1 ; i <= n ; i ++ ){
		U[i] = H[i] + A[i] * X ;
		if(U[i] >= L) sum += U[i] ;
	}return sum >= S ;
}int l = 0 , r = TIL ;
int main(){
	cin >> n >> S >> L ;
	for(int i = 1 ; i <= n ; i ++ ) cin >> H[i] ;
	for(int i = 1 ; i <= n ; i ++ ) cin >> A[i] ;
	while(l < r){
		int mid = (l + r) >> 1 ;
		if(CMP(mid) == true) r = mid ;
		else l = mid + 1 ;
	}cout << l << endl;
	return 0 ;
}
CPP
#include<bits/stdc++.h>
using namespace std ;
const int maxs = 200010 , TIL = (1 << 28) ;
int H[maxs] , A[maxs] ;
int n , S , L ;
int U[maxs] ;
int Ans ;
bool CMP(int X){
	long long sum ;
	for(int i = 1 ; i <= n ; i ++ ){
		U[i] = H[i] + A[i] * X ;
		if(U[i] >= L) sum += U[i] ;
	}return sum >= S ;
}int l = 0 , r = TIL ;
int main(){
	cin >> n >> S >> L ;
	for(int i = 1 ; i <= n ; i ++ ) cin >> H[i] ;
	for(int i = 1 ; i <= n ; i ++ ) cin >> A[i] ;
	while(l < r){
		cout << l << ' ' << r << endl ; 
		int mid = (l + r) >> 1 ;
		if(CMP(mid) == true) r = mid ;
		else l = mid + 1 ;
	}cout << l << endl;
	return 0 ;
}
这两代码都是一模一样的 ,只不过第二个代码多输出了二分时的两端点 , 结果最后输出的答案竟然不同, 不信你去试试!第一个代码只输出0 , 第二个代码却一直都是对的 。

回复

10 条回复,欢迎继续交流。

正在加载回复...