封装二分宏函数求调
  • 板块学术版
  • 楼主wzc_IOI_czl
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/8/11 15:55
  • 上次更新2023/11/3 04:28:10
查看原帖
封装二分宏函数求调
539724
wzc_IOI_czl楼主2023/8/11 15:55
#include<iostream>
#include<cstdio>
using namespace std;

#define um_nik(L, R, U, __UMNIK__CHECK, res)                           \
	do {                                                               \
		int __UMNIK__L = (L), __UMNIK__R = (R);                        \
		while(__UMNIK__L < __UMNIK__R) {                               \
			if(U) {                                                    \
				int mid = (__UMNIK__L + __UMNIK__R) >> 1;              \
				if(__UMNIK__CHECK(mid)) __UMNIK__R = mid;              \
				else __UMNIK__L = mid + 1;                             \
				cout << mid << ' ' << (__UMNIK__CHECK(mid)) << endl;   \
			}                                                          \
			else {                                                     \
				int mid = (__UMNIK__L + __UMNIK__R + 1) >> 1;          \
				if(__UMNIK__CHECK(mid)) __UMNIK__L = mid;              \
				else __UMNIK__R = mid - 1;                             \
			}                                                          \
		}                                                              \
		*res = __UMNIK__L;                                             \
	} while(false);

int n, a[1005];
bool check(int x) { return a[x]; }

int main() {
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i];
	int res = 0;
	int x; cin >> x;
	um_nik(1, n, 1, x <= check, &res); 
	cout << res << endl; 
} 

__UMNIK__CHECK 一直返回 0.

2023/8/11 15:55
加载中...