65分求助
查看原帖
65分求助
91182
山道青冥楼主2020/11/9 17:20
#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 1000005
#define ll long long
using namespace std;

ll n,m,k,c,x,y;
bool flag,pd[65];
ll a[N];

int read()
{
	int x=0; bool flag=1; char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')flag=0;
		c=getchar();
	}
	while(c<='9'&&c>='0'){
		x=(x<<3)+(x<<1)+c-48;
		c=getchar();
	}
	return flag?x:-x;
}

string chen(string s, int k)
{
	int t,g,cnt=0;
	string ans;
	char c[10005];
	for(int i=s.size()-1; i>=0; i--)
	{
		t=(s[i]-48)*k+g;
		g=t/10;
		t%=10;
		c[++cnt]=char(t+48);
	}
	if(g)c[++cnt]=g+48;
	for(int i=1; i<=cnt; i++)ans=c[i]+ans;
//	cout<<endl;
	return ans;
	
}

string jian(string s1, string s2)
{
	while(s1.size()<s2.size())s1="0"+s1;
	while(s1.size()>s2.size())s2="0"+s2; 
	string t="";
	int c,g=0;
	for(int i=s1.size()-1; i>=0; i--)
	{
		c=s1[i]-s2[i]-g;
		if(c<0)
		{
			g=1;
			c+=10;
		}else g=0;
		t=char(c+48)+t;
	}
	return t;
}

string s="2";
string n1;

string stri(int n)
{
	int c;
	string s;
	while(n>0)
	{
		c=n%10;
		s=char(c+48)+s;
		n/=10;
	}
	return s;
}

int main()
{
//	freopen("zoo.in","r",stdin);
//	freopen("zoo.out","w",stdout);
	n=read(); m=read(); c=read();k=read();
	for(int i=1; i<=n; i++)a[i]=read();
	sort(a+1,a+1+n);
	for(int i=1; i<=m; i++)
	{
		flag=0;
		x=read(); y=read();
		if(pd[x])flag=1;
		for(int i=n; i>=1; i--)
		{
			if(flag==1)break;
			if(a[i]<(1<<x))break;
			else if((a[i]>>x)&1)flag=1;
		} 
		if(flag==false)
		{k--;pd[x]=1;}
//		cout<<k<<endl;
	}
	if(k<30)cout<<(1<<k)-n;
	else{
		n1=stri(n);
		for(int i=2; i<k; i++)s=chen(s,2);
		cout<<jian(s,n1);
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}
2020/11/9 17:20
加载中...