我DEV c++ 怎么了???
查看原帖
我DEV c++ 怎么了???
311502
逸之为一楼主2021/12/8 14:31

大家看一下这两个代码!

#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 ;
}
#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 , 第二个代码却一直都是对的 。

2021/12/8 14:31
加载中...