24pts求条玄关
查看原帖
24pts求条玄关
1272956
UnknownLqx楼主2025/8/29 14:30
#include <bits/stdc++.h>
const int M=3e5+7,INF=0x3f3f3f3f;
using namespace std;
int q,n,m,k,tmp,Max[M],EvenMax[M],OddMax[M],EvenMin[M],OddMin[M],choose[M];
int main() {
	ios::sync_with_stdio(0);
	cin.tie(NULL),cout.tie(NULL);
	cin>>q;
	for(int w=1; w<=q; ++w) {
		memset(OddMin,0x3f,sizeof OddMin);
		memset(EvenMin,0x3f,sizeof EvenMin);
		memset(EvenMax,0,sizeof EvenMax);
		memset(OddMax,0,sizeof OddMax);
		memset(Max,0,sizeof Max);
		bool flag=0;
		cin>>n>>m>>k;
		int x=n,cnt=0;
		for(int i=1; i<=m; ++i) {
			for(int j=0; j<k; ++j) {
				cin>>tmp;
				Max[i]=max(Max[i],tmp);
				if(tmp%2==0) EvenMax[i]=max(EvenMax[i],tmp),EvenMin[i]=min(EvenMin[i],tmp);
				else OddMax[i]=max(OddMax[i],tmp),OddMin[i]=min(OddMin[i],tmp);
			}
		}
		for(int i=1; i<=m; ++i) {
			if(Max[i]%2==0) {
				if(OddMax[i]==0) {
					x+=EvenMin[i];
					cnt+=EvenMin[i];
				} else x-=OddMax[i];
			} else {
				if(EvenMax[i]==0) {
					x+=OddMin[i];
					cnt+=OddMin[i];
//					cout<<"oddmin["<<i<<"] = "<<OddMin[i]<<endl;
				} else x-=EvenMax[i];
				choose[i]=1;
			}
			if(x<=0) {
				cout<<-1<<'\n';
				flag=1;
				break;
			}
			//	if(d<0) break;
		}
		if(flag) continue;
//		cout<<"x = "<<x<<endl;
		x-=cnt;
//		cout<<"x:                  "<<x<<endl;
		for(int i=1; i<=m; ++i) {
			//	cout<<x+EvenMax[i]-Max[i]<<'\n';
			if(Max[i]%2==1&&(x+EvenMax[i]-Max[i]>0)) {
				x=x+EvenMax[i]-Max[i];
				choose[i]=0;
			} else {
				if(Max[i]%2==1&&EvenMax[i]==0) x+=OddMin[i];
				if(Max[i]%2==0&&OddMax[i]==0) x+=EvenMin[i];
			}
		}
		for(int i=1; i<=m; ++i) {
			if(i!=m) {
				if(choose[i]==0) cout<<"Even ";
				else cout<<"Odd ";
			} else {
				if(choose[i]==0) cout<<"Even";
				else cout<<"Odd";
			}
		}
		if(w!=q) cout<<'\n';
	}
}
2025/8/29 14:30
加载中...