社区讨论

52分求条,玄关

P11214【MX-J8-T2】黑洞参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@m55b2rz1
此快照首次捕获于
2024/12/26 20:34
去年
此快照最后确认于
2024/12/27 14:21
去年
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct MA{
	int num;
    bool t;
};
int n;
MA ma[400005];
long long fastpow(long long x,long long m){
	long long res=1;
	while(m>0){
		if(m%2==1)res=res*x;
		x=x*x;
		m=m/2;
	}
	return res;
}
bool cmp(MA x,MA y){
	return x.num<y.num;
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>ma[i].num;
	for(int i=n+1;i<=2*n;i++){
		cin>>ma[i].num;
		ma[i-n].num-=ma[i].num;
		ma[i].num--;
		if(ma[i].num<ma[i-n].num){
			ma[i-n].t=1;
		}
		else if(ma[i].num==ma[i-n].num){
			ma[i].t=1,ma[i-n].t=1;
		}
		else ma[i].t=1;
	}
	sort(ma+1,ma+2*n+1,cmp);
    long long times=fastpow(2,n);
//    cout<<times<<endl;
    long long ans=1;
    for(int i=1;i<=2*n;i++){
		times=times/2;
		if(times==0){
			ans+=ma[i].num;
			break;
		}
    	if(ma[i].t==0){
//    		cout<<ma[i].num<<" "<<times<<" ";
    		ans+=ma[i].num*times;
//    		cout<<ans<<endl;
		}
		if(ma[i].t==1){
			ans+=ma[i].num*times*2;
//			cout<<ans<<" ";
			break;
		}
		ans=ans%1000000007;
	}
//	cout<<endl;
	cout<<ans%1000000007;
	return 0;
}

回复

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

正在加载回复...