假如下次初赛出这个(((
  • 板块学术版
  • 楼主dingshengyang
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/5/19 09:29
  • 上次更新2024/5/19 12:16:39
查看原帖
假如下次初赛出这个(((
302394
dingshengyang楼主2024/5/19 09:29
#include<bits/stdc++.h>
using namespace std;

#define each(CONTAINER_OUT_OF_LAMBDA,VAR,DOSOMETHING)\
	[&](auto CONTAINER) -> decltype(CONTAINER)\
	{\
		decltype(CONTAINER) Result;\
		auto BACKUP = CONTAINER;\
		for(decltype(*CONTAINER.begin()) VAR : CONTAINER)\
		{\
			DOSOMETHING;\
			Result.APIINSERT(VAR);\
		}\
		CONTAINER = BACKUP;\
		return Result;\
	}\
	(CONTAINER_OUT_OF_LAMBDA)

#define which(CONTAINER_OUT_OF_LAMBDA,VAR,CONDITION_OUT_OF_LAMBDA)\
	[=](auto CONTAINER)\
	-> decltype(CONTAINER)\
	{\
		decltype(CONTAINER) Result;\
		for(decltype(*CONTAINER.begin()) VAR : CONTAINER)\
		{\
			if(CONDITION_OUT_OF_LAMBDA)\
				Result.APIINSERT(VAR);\
		}return Result;\
	}\
	(CONTAINER_OUT_OF_LAMBDA)

#define eachi(CONTAINER_OUT_OF_LAMBDA,VAR,VARINDEX,DOSOMETHING)\
	[&](auto CONTAINER) -> decltype(CONTAINER)\
	{\
		decltype(CONTAINER) Result;\
		auto BACKUP = CONTAINER;\
		int VARINDEX = 0;\
		for(decltype(*CONTAINER.begin()) VAR : CONTAINER)\
		{\
			DOSOMETHING;\
			Result.APIINSERT(VAR);\
			VARINDEX ++;\
		}\
		CONTAINER = BACKUP;\
		return Result;\
	}\
	(CONTAINER_OUT_OF_LAMBDA)

#define whichi(CONTAINER_OUT_OF_LAMBDA,VAR,VARINDEX,CONDITION_OUT_OF_LAMBDA)\
	[=](auto CONTAINER)\
	-> decltype(CONTAINER)\
	{\
		decltype(CONTAINER) Result;\
		int VARINDEX = 0;\
		for(decltype(*CONTAINER.begin()) VAR : CONTAINER)\
		{\
			if(CONDITION_OUT_OF_LAMBDA)\
				Result.APIINSERT(VAR);\
			VARINDEX ++;\
		}return Result;\
	}\
	(CONTAINER_OUT_OF_LAMBDA)

struct EXCPP_TYPE_INFO{
	uint64_t high,low;
	bool operator < (const EXCPP_TYPE_INFO another)const{
		if(high != another.high){
			return high < another.high;
		}
		return low < another.low;
	}
};

map<EXCPP_TYPE_INFO,void*> READLIB;

template<typename T>
void AddReadSupport(auto READ_FUNCTION){
	function<void(T&)> rf = READ_FUNCTION;
	function<void(T&)>* pointer = new function<void(T&)>;
	*pointer = rf;
	READLIB[*((EXCPP_TYPE_INFO*)(&typeid(T&)))] = (void*)(pointer);
}

void APIRead(auto& x){
	typedef  decltype(x) VarType;
	void* rfp = READLIB[*((EXCPP_TYPE_INFO*)(&typeid(VarType)))];
	if (rfp == nullptr) {
        throw runtime_error("No read function registered for this type.");
    }
	function<void(VarType x)> rf = *((function<void(VarType x)>*)(rfp));
	rf(x);
}
template<typename T>
void read(T& x){
	APIRead(x);
	return;
}
template<typename T,typename... Args>
void read(T& x,Args&... arg){
	APIRead(x);
	read(arg...);
}

int main() {
	AddReadSupport<int>([](int& x){cin >> x;});
	AddReadSupport<string>([](string& x){cin >> x;});
	
	return 0;
}

2024/5/19 09:29
加载中...