2021-2022 ICPC North America - Greater New York Regional Contest 题解

A
签到

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int x, res;
    int attrs[] = {6, 3, 2, 1, 2};
    for (int i = 0; i < 2; i++)
    {
        res = 0;
        for (int j = 0; j < 5; j++)
        {
            cin >> x;
            res += x * attrs[j];
        }
        cout << res << " ";
    }
}

B

高斯消元,每个三点组是一个方程,求自由变元个数即可

#include<iostream>

#define lint int64_t
#define ulint uint64_t

#define maxn 21
#define maxm 602
#define mod 3

using
		namespace
					std;

int n,m;
int id[maxn][maxn];
int val[maxn][maxn];
int x[maxm],y[maxm],c;
int mat[maxm][maxm],r;

void debug_mat(){
	
	for(int i=0;i<r;i++){
		
		for(int j=0;j<c;j++){
			
			printf("%d ",mat[i][j]);
		}
		printf("= %d\n",mat[i][c]);
	}
}

ulint qow(ulint a,ulint b){
	
	ulint ans=1;
	for(;b;a=a*a,b>>=1) if(b&1) ans=ans*a;
	return ans;
}

bool empty_row(int u){
	
	for(int i=0;i<c;i++){
		
		if(mat[u][i]) return false;
	}
	
	return true;
}

void swap_row(int u,int v){
	
	if(u==v) return;
	
	for(int i=0;i<=c;i++){
		
		swap(mat[u][i],mat[v][i]);
	}
}

void GE(){
	
//	for(int i=1;i<=n;i++){
//		
//		for(int j=1;j<=i;j++){
//			
//			cout<<val[i][j]<<' ';
//		}
//		cout<<endl;
//	}
	
	for(int i=2;i<=n;i++){
		
		for(int j=1;j<i;j++){
			
			bool valid=false;
			
			if(~id[i][j]) mat[r][id[i][j]]=1,valid|=true;
			if(~id[i-1][j]) mat[r][id[i-1][j]]=1,valid|=true;
			if(~id[i][j+1]) mat[r][id[i][j+1]]=1,valid|=true;
			mat[r][c]=(3*mod-val[i][j]-val[i-1][j]-val[i][j+1])%mod;
			
			if(!valid&&mat[r][c]){
				
				printf("0\n");
				return;
			}
			
			//cout<<"||"<<i<<' '<<j<<' '<<valid<<endl;
			
			if(!valid){
				
				continue;
			}
			
			r++;
		}
	}
	
//	for(int i=2;i<n;i++){
//		
//		for(int j=1;j<i;j++){
//			
//			bool valid=false;
//			
//			if(~id[i][j]) mat[r][id[i][j]]=1,valid|=true;
//			if(~id[i][j+1]) mat[r][id[i][j+1]]=1,valid|=true;
//			if(~id[i+1][j+1]) mat[r][id[i+1][j+1]]=1,valid|=true;
//			mat[r][c]=(3*mod-val[i][j]-val[i][j+1]-val[i+1][j+1])%mod;
//			
//			if(!valid&&mat[r][c]){
//				
//				printf("0\n");
//				return;
//			}
//			
//			//cout<<"||"<<i<<' '<<j<<' '<<valid<<endl;
//			
//			if(!valid){
//				
//				continue;
//			}
//			
//			r++;
//		}
//	}
	
	debug_mat();
	printf("\n");
	
	int i=0,p=0;
	
	for(;i<r&&p<c;i++,p++){
		
		int nxti=i;
		
		while(nxti<r&&!mat[nxti][p]){
			
			nxti++;
		}
		
		if(nxti==r){
			
			i--;
			continue;
		}
		
		swap_row(i,nxti);
		
		for(int j=i+1;j<r;j++){
			
			int f=mat[i][p]*mat[j][p]%mod;
			
			for(int k=0;k<=c;k++){
				
				mat[j][k]=(mat[j][k]+f*(mod-mat[i][k]))%mod;
			}
		}
	}
	
	debug_mat();
	
	for(int i=r-1;~i;i--){
		
		if(empty_row(i)){
			
			if(mat[i][c]){
				
				printf("0\n");
				return;
			}
		}
	}
	
	printf("%llu\n",qow(3,c-i));
}

signed main(){
	
	scanf("%d %d",&n,&m);
	
	for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) val[i][j]=-1;
	for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) id[i][j]=-1;
	
	int u,v,w;
	
	for(int i=0;i<m;i++){
		
		scanf("%d %d %d",&u,&v,&w);
		
		val[u][v]=w;
	}
	
	for(int i=1;i<=n;i++){
		
		for(int j=1;j<=n;j++){
			
			if(val[i][j]<0){
				
				x[c]=i;
				y[c]=j;
				id[i][j]=c;
				c++;
				
				val[i][j]=0;
			}
		}
	}
	
	GE();
	
end:
	return EOF+1;
}
/*
4 4
1 1 0
2 1 2
4 1 2
4 4 2

4 4
1 1 1
2 1 2
4 1 2
3 3 2

4 4
1 1 0
2 1 1
4 1 0
4 4 0
*/

C
搜索

#include<iostream>
#include<string.h>
#include<map>
#include<set>
#include<deque>

#define lint int64_t

using
		namespace
					std;

class Config{
	
	public:
		
		bool a[6][6];
		int x[4],y[4];
		
		Config(){
			
			memset(a,false,sizeof(a));
		}
		
		bool __equal(Config& B){
			
			for(int i=0;i<6;i++){
				
				for(int j=0;j<6;j++){
					
					if(a[i][j]^B.a[i][j]){
						
						return false;
					}
				}
			}
			
			return true;
		}
		
		void print(){
			
			for(int i=0;i<6;i++){
				
				for(int j=0;j<6;j++){
					
					putchar(a[i][j]?'*':'_');
				}
				putchar('\n');
			}
			putchar('\n');
		}
	
};

class Mpace{
	
	public:
		
		int xs,ys,xt,yt;
		
		Mpace(int xs_=0,int ys_=0,int xt_=0,int yt_=0){
			
			xs=xs_,ys=ys_,xt=xt_,yt=yt_;
		}
};

lint c2i(Config& c){
	
	lint ans=0;
	
	for(int i=0;i<6;i++){
		
		for(int j=0;j<6;j++){
			
			ans+=c.a[i][j];
			ans<<=1;
		}
	}
	
	return ans;
}

Config _move(Config now,int i,int dx,int dy){
	
	if(dx==-1&&dy==0){
		
		int nxtx=0;
		
		for(int k=0;k<4;k++){
			
			if(now.x[k]<now.x[i]&&now.y[k]==now.y[i]){
				
				nxtx=max(nxtx,now.x[k]+1);
			}
		}
		
		now.a[now.x[i]][now.y[i]]=false;
		now.a[nxtx][now.y[i]]=true;
		now.x[i]=nxtx;
	}
	else if(dx==1&&dy==0){
		
		int nxtx=5;
		
		for(int k=0;k<4;k++){
			
			if(now.x[k]>now.x[i]&&now.y[k]==now.y[i]){
				
				nxtx=min(nxtx,now.x[k]-1);
			}
		}
		
		now.a[now.x[i]][now.y[i]]=false;
		now.a[nxtx][now.y[i]]=true;
		now.x[i]=nxtx;
	}
	else if(dx==0&&dy==-1){
		
		int nxty=0;
		
		for(int k=0;k<4;k++){
			
			if(now.y[k]<now.y[i]&&now.x[k]==now.x[i]){
				
				nxty=max(nxty,now.y[k]+1);
			}
		}
		
		now.a[now.x[i]][now.y[i]]=false;
		now.a[now.x[i]][nxty]=true;
		now.y[i]=nxty;
	}
	else if(dx==0&&dy==1){
		
		int nxty=5;
		
		for(int k=0;k<4;k++){
			
			if(now.y[k]>now.y[i]&&now.x[k]==now.x[i]){
				
				nxty=min(nxty,now.y[k]-1);
			}
		}
		
		now.a[now.x[i]][now.y[i]]=false;
		now.a[now.x[i]][nxty]=true;
		now.y[i]=nxty;
	}
	
	return now;
}

Config S,T;
deque<Mpace> kotae;
map<lint,lint> pre;
map<lint,Mpace> sousa;

void bfs(){
	
	deque<Config> q;
	
	q.push_back(S);
	
	pre[c2i(S)]=-1;
	
	while(!q.empty()){
		
		Config now=q.front();
		
//		for(int i=0;i<6;i++){
//			
//			for(int j=0;j<6;j++){
//				
//				putchar(now.a[i][j]?'*':'_');
//			}
//			putchar('\n');
//		}
//		putchar('\n');
		
//		if(now.a[2][2]&&now.a[3][2]&&now.a[4][2]&&now.a[5][5]){
//			
//			printf("^-^\n");
//			
//			for(int i=0;i<4;i++){
//				
//				cout<<now.x[i]<<' '<<now.y[i]<<endl;
//			}
//		}
		
		lint id=c2i(now);
		
		q.pop_front();
		
		if(now.__equal(T)){
			
			break;
		}
		
		Config nxt;
		lint idnxt;
		
		for(int i=0;i<4;i++){
			
			nxt=_move(now,i,-1,0);
			
			idnxt=c2i(nxt);
			
			if(pre.find(idnxt)==pre.end()){
				
				q.push_back(nxt);
				pre[idnxt]=id;
				sousa[idnxt]=Mpace(now.x[i],now.y[i],nxt.x[i],nxt.y[i]);
				if(nxt.__equal(T)) return;
			}
			
			nxt=_move(now,i,1,0);
			
			idnxt=c2i(nxt);
			
			if(pre.find(idnxt)==pre.end()){
				
				q.push_back(nxt);
				pre[idnxt]=id;
				sousa[idnxt]=Mpace(now.x[i],now.y[i],nxt.x[i],nxt.y[i]);
				if(nxt.__equal(T)) return;
			}
			
			nxt=_move(now,i,0,-1);
			
			idnxt=c2i(nxt);
			
			if(pre.find(idnxt)==pre.end()){
				
				q.push_back(nxt);
				pre[idnxt]=id;
				sousa[idnxt]=Mpace(now.x[i],now.y[i],nxt.x[i],nxt.y[i]);
				if(nxt.__equal(T)) return;
			}
			
			nxt=_move(now,i,0,1);
			
			idnxt=c2i(nxt);
			
			if(pre.find(idnxt)==pre.end()){
				
				q.push_back(nxt);
				pre[idnxt]=id;
				sousa[idnxt]=Mpace(now.x[i],now.y[i],nxt.x[i],nxt.y[i]);
				if(nxt.__equal(T)) return;
			}
		}
	}
}

signed main(){
	
	int u,v;
	
	for(int i=0;i<4;i++){
		
		cin>>u>>v;
		S.a[u][v]=true;
		S.x[i]=u;
		S.y[i]=v;
	}
	
	for(int i=0;i<4;i++){
		
		cin>>u>>v;
		T.a[u][v]=true;
		T.x[i]=u;
		T.y[i]=v;
	}
	
	bfs();
	
	lint iS=c2i(S);
	
	for(lint now=c2i(T);now!=iS;now=pre[now]){
		
		kotae.push_front(sousa[now]);
	}
	
	cout<<kotae.size()<<endl;
	
	for(Mpace& it:kotae){
		
		cout<<it.xs<<' '<<it.ys<<' '<<it.xt<<' '<<it.yt<<endl;
	}
	
end:
	return EOF+1;
}
/*
5 5 5 0 0 5 0 0
2 2 2 1 1 2 1 1

2 2 2 3 3 2 3 3
0 0 0 5 5 0 5 5

0 0 3 4 5 3 1 2
0 0 3 4 5 3 1 2

1 2 2 2 3 2 4 2
2 2 3 2 4 2 5 2

1 2 2 2 3 2 4 2
1 2 2 2 3 2 5 5

0 0 0 5 5 0 5 5
0 0 0 1 0 2 0 3
*/

D
签到

#include<iostream>
#include<string.h>
#include<algorithm>

#define gcd __gcd
#define lint int64_t
#define ulint uint64_t

#define maxn 64

using
		namespace
					std;

int n;
char s[maxn];

ulint qow(ulint a,int b){
	
	ulint ans=1;
	for(;b;a=a*a,b>>=1) if(b&1) ans=ans*a;
	return ans;
}

signed main(){
	
	scanf("%s",s);
	
	n=strlen(s);
	
	reverse(s,s+n);
	
	n--;
	
	ulint nu=0,de=qow(2,n);
	
	for(int i=0;i<=n;i++){
		
		nu+=(s[i]-'0')*qow(3,i)*qow(2,n-i);
	}
	
	ulint g=gcd(nu,de);
	
	nu/=g,de/=g;
	
	if(de==1){
		
		printf("%llu\n",nu);
	}
	else{
		
		printf("%llu %llu/%llu\n",nu/de,nu%de,de);
	}
	
end:
	return EOF+1;
}
/*
99999999999999999999999999999999
*/

E
首先dp求i个孤立点时不同连接方法数,然后枚举环,将环左右两边孤立点数量对应dp值相乘贡献到答案即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define mod 100007
#define pb push_back
typedef pair<int,int> pir;
string sstr[]={"NO\n","YES\n"};
#define int ll
const int N=4010;
int T,n;
int dp[N][N];
int sum[N];
int ans=0;
signed main()
{
	cin>>n;
	n--;
	dp[0][0]=1;
	sum[0]=1;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=n;j++){
			dp[i][0]=(dp[i][0]+dp[i-1][j]*(j+1))%mod;
		}
		for(int j=1;j<=n;j++){
			dp[i][j]=dp[i-1][j-1];//这条边继续用于连接环
		}
		for(int j=0;j<=i;j++) sum[i]=(sum[i]+dp[i][j])%mod;//跟环连接
		//cout<<"|||"<<i<<' '<<dp[i][0]<<' '<<sum[i]<<'\n';
	}
	for(int i=n+1;i>=3;i--){//组成i元环
		int ans1=0;
		for(int j=0;j+i-1<=n;j++){
			//一边为j,另外一边为n-i+1-j
			ans1=(ans1+sum[j]*sum[n-i+1-j]%mod)%mod;
		}
		//cout<<i<<' '<<ans1<<'\n';
		ans=(ans+ans1)%mod;
	}
	cout<<ans<<'\n';
}

F
暴力枚举,大型模拟。。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define mod 1000000007
#define pb push_back
typedef pair<int,int> pir;
string sstr[]={"NO\n","YES\n"};
const int N=200010;
int w,h,l;
int w1,h1,l1,w2,h2,l2;
int pos1,pos2;
double cal3()
{
	double ans=1e18;
	int d1[4],d2[4];
	int ww,hh,ll;
	if(pos1%3==0){
		d1[0]=w-w1,d2[0]=w-w2;
		d1[1]=h-h1,d2[1]=h-h2;
		d1[2]=w1,d2[2]=w2;
		d1[3]=h1,d2[3]=h2;
		ww=l,hh=w,ll=h;
	}
	else if(pos1%3==1){
		d1[0]=l-l1,d2[0]=l-l2;
		d1[1]=h-h1,d2[1]=h-h2;
		d1[2]=l1,d2[2]=l2;
		d1[3]=h1,d2[3]=h2;
		ww=w,hh=h,ll=l;
	}
	else{
		d1[0]=l-l1,d2[0]=l-l2;
		d1[1]=w-w1,d2[1]=w-w2;
		d1[2]=l1,d2[2]=l2;
		d1[3]=w1,d2[3]=w2;
		ww=h,hh=w,ll=l;
	}
	// cout<<d1[0]<<' '<<d1[1]<<' '<<d1[2]<<' '<<d1[3]<<' '<<ll<<'\n';
	// cout<<d2[0]<<' '<<d2[1]<<' '<<d2[2]<<' '<<d2[3]<<' '<<ww<<'\n';
	//不旋转
	for(int i=0;i<4;i++){
		ans=min(ans,sqrt(1.0*(ww+d1[i]+d2[i])*(ww+d1[i]+d2[i])+1.0*abs(d1[(i+1)%4]-d2[(i+1)%4])*abs(d1[(i+1)%4]-d2[(i+1)%4])));
		ans=min(ans,sqrt(1.0*(ww+d1[i]+d2[i])*(ww+d1[i]+d2[i])+1.0*abs(d1[(i-1+4)%4]-d2[(i-1+4)%4])*abs(d1[(i-1+4)%4]-d2[(i-1+4)%4])));
	}
	//旋转一次
	for(int i=0;i<4;i++){
		ans=min(ans,sqrt(1.0*(ww+d1[i]+d2[(i+1)%4])*(ww+d1[i]+d2[(i+1)%4])+1.0*(d2[i]+d1[(i+1)%4])*(d2[i]+d1[(i+1)%4])));
	}
	//旋转2次
	for(int i=0;i<4;i++){
		ans=min(ans,sqrt(1.0*(ww+d1[(i-1+4)%4]+d2[(i+1)%4])*(ww+d1[(i-1+4)%4]+d2[(i+1)%4])+1.0*(ll+d2[i]+d1[i])*(ll+d2[i]+d1[i])));
		ans=min(ans,sqrt(1.0*(ww+d1[(i+1)%4]+d2[(i-1+4)%4])*(ww+d1[(i+1)%4]+d2[(i-1+4)%4])+1.0*(ll+d2[i]+d1[i])*(ll+d2[i]+d1[i])));
	}

	return ans;
}
double cal2()
{
	double ans=1e18;
	int d1[4],d2[4];
	int ww,hh,ll;
	if(pos1==1) d2[0]=w-w2,d2[2]=w2;
	else if(pos1==2) d2[0]=h-h2,d2[2]=h2;
	else if(pos1==3) d2[0]=l2,d2[2]=l-l2;
	else if(pos1==4) d2[0]=w2,d2[2]=w-w2;
	else if(pos1==5) d2[0]=h2,d2[2]=h-h2;
	else d2[0]=l-l2,d2[2]=l2;

	if(pos2==1) d1[0]=w-w1,d1[2]=w1;
	else if(pos2==2) d1[0]=h-h1,d1[2]=h1;
	else if(pos2==3) d1[0]=l1,d1[2]=l-l1;
	else if(pos2==4) d1[0]=w1,d1[2]=w-w1;
	else if(pos2==5) d1[0]=h1,d1[2]=h-h1;
	else d1[0]=l-l1,d1[2]=l1;
	if(pos1%3!=0&&pos2%3!=0){
		d1[1]=l-l1;
		d1[3]=l1;
		d2[1]=l-l2;
		d2[3]=l2;
		hh=l;
		if(pos1%3==1) ll=h,ww=w;
		else ll=w,ww=h; 
	}
	else if(pos1%3!=1&&pos1%3!=1){
		d1[1]=w-w1;
		d1[3]=w1;
		d2[1]=w-w2;
		d2[3]=w2;
		hh=w;
		if(pos1%3==0) ll=h,ww=l;
		else ll=l,ww=h; 
	}
	else{
		d1[1]=h-h1;
		d1[3]=h1;
		d2[1]=h-h2;
		d2[3]=h2;
		hh=h;
		if(pos1%3==0) ll=w,ww=l;
		else ll=l,ww=w; 
	}
	// cout<<d1[0]<<' '<<d1[1]<<' '<<d1[2]<<' '<<d1[3]<<' '<<ll<<'\n';
	// cout<<d2[0]<<' '<<d2[1]<<' '<<d2[2]<<' '<<d2[3]<<' '<<ww<<'\n';
	//不转
	ans=min(ans,sqrt(1.0*(d1[0]+d2[0])*(d1[0]+d2[0])+1.0*abs(d1[1]-d2[1])*abs(d1[1]-d2[1])));
	//转一圈
	ans=min(ans,sqrt(1.0*(d1[0]+d2[1])*(d1[0]+d2[1])+1.0*(d1[1]+d2[0])*(d1[1]+d2[0])));
	ans=min(ans,sqrt(1.0*(d1[0]+d2[3])*(d1[0]+d2[3])+1.0*(d1[3]+d2[0])*(d1[3]+d2[0])));
	//转2圈
	ans=min(ans,sqrt(1.0*(d1[2]+d2[0])*(d1[2]+d2[0])+1.0*(d1[1]+d2[1]+ll)*(d1[1]+d2[1]+ll)));
	ans=min(ans,sqrt(1.0*(d1[2]+d2[0])*(d1[2]+d2[0])+1.0*(d1[3]+d2[3]+ll)*(d1[3]+d2[3]+ll)));
	ans=min(ans,sqrt(1.0*(d2[2]+d1[0])*(d2[2]+d1[0])+1.0*(d2[1]+d1[1]+ww)*(d2[1]+d1[1]+ww)));
	ans=min(ans,sqrt(1.0*(d2[2]+d1[0])*(d2[2]+d1[0])+1.0*(d2[3]+d1[3]+ww)*(d2[3]+d1[3]+ww)));
	return ans;
}
signed main()
{
	cin>>w>>h>>l;
	cin>>w1>>h1>>l1;
	cin>>w2>>h2>>l2;
	if(w1==0) pos1=4;
	else if(w1==w) pos1=1;
	else if(h1==0) pos1=5;
	else if(h1==h) pos1=2;
	else if(l1==0) pos1=3;
	else if(l1==l) pos1=6;
	else assert(0);
	if(w2==0) pos2=4;
	else if(w2==w) pos2=1;
	else if(h2==0) pos2=5;
	else if(h2==h) pos2=2;
	else if(l2==0) pos2=3;
	else if(l2==l) pos2=6;
	else assert(0);

	//cout<<pos1<<' '<<pos2<<'\n';

	if(abs(pos1-pos2)==0){//同面
		printf("%.3lf",sqrt(1.0*(w1-w2)*(w1-w2)+1.0*(h1-h2)*(h1-h2)+1.0*(l1-l2)*(l1-l2)));
	}
	else if(abs(pos1-pos2)==3){//对面
		printf("%.3lf",cal3());
	}
	else{//相邻
		printf("%.3lf",cal2());
		
	}
}
/*
12 10 20
0 10 0
12 0 20

*/

G
找规律,枚举最低位的1,高位方案数和斐波那契有关

#include<iostream>

#define lint int64_t

#define inv(x) qow(x,mod-2)

#define maxn 40004
#define mod 1000007

using
		namespace
					std;

lint fac[maxn],invfac[maxn];

lint qow(lint a,lint b){
	
	lint ans=1;
	for(;b;a=a*a%mod,b>>=1) if(b&1) ans=ans*a%mod;
	return ans;
}

void prework(){
	
	fac[0]=1;
	for(int i=1;i<maxn;i++){
		
		fac[i]=fac[i-1]*i%mod;
	}
	
	invfac[maxn-1]=inv(fac[maxn-1]);
	
	for(int i=maxn-2;~i;i--){
		
		invfac[i]=invfac[i+1]*(i+1)%mod;
	}
}

lint Binomial(lint a,lint b){
	
	if(a<0||b<0||b>a) return 0;
	return fac[a]*invfac[b]%mod*invfac[a-b]%mod;
}

int n;
lint f[maxn];

signed main(){
	
//	prework();
//	
//	for(int i=1;i<maxn;i++){
//		
//		lint ans=0;
//		
//		for(int j=1;j<i;j++){
//			
//			ans=(ans+Binomial(i-j,j-1))%mod;
//		}
//		
//		cout<<i<<' '<<ans<<endl;
//	}
	
	f[0]=f[1]=f[2]=1;
	
	for(int i=3;i<maxn;i++){
		
		f[i]=(f[i-1]+f[i-2])%mod;
	}
	
	cin>>n;
	
	lint kotae=0;
	
	for(int i=0;i<=n-2;i++){
		
		kotae=(kotae+f[i])%mod;
	}
	
	if(n==1) kotae=1;
	
	cout<<kotae<<endl;
	
end:
	return EOF+1;
}

H
签到

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define mod 1000000007
#define pb push_back
typedef pair<int,int> pir;
string sstr[]={"NO\n","YES\n"};
const int N=200010;
int T,n,m;
int has[N][2];
int tmp[4];
int mi=32;
char ch;
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>tmp[3]>>ch>>tmp[2]>>ch>>tmp[1]>>ch>>tmp[0];
		int bias=0;
		for(int i=0;i<4;i++){
			for(int j=0;j<=7;j++){
				has[bias+j][!!(tmp[i]&(1<<j))]=1;
			}
			bias+=8;
		}
	}
	for(int i=31;i>=0;i--){
		if(has[i][0]&&has[i][1]) break;
		mi--;
	}
	if(mi==32) mi=0;
	cout<<32-mi<<'\n';
}
/*
4
12.0.0.1
10.0.0.24
10.0.0.8
10.0.0.16

*/

I
unsolved
J
签到

#include <iostream>
#include <map>
std::map<char, std::string> mp;
void init() {
	mp['A'] = mp['a'] = ".-";
	mp['B'] = mp['b'] = "-...";
	mp['C'] = mp['c'] = "-.-.";
	mp['D'] = mp['d'] = "-..";
	mp['E'] = mp['e'] = ".";
	mp['F'] = mp['f'] = "..-.";
	mp['G'] = mp['g'] = "--.";
	mp['H'] = mp['h'] = "....";
	mp['I'] = mp['i'] = "..";
	mp['J'] = mp['j'] = ".---";
	mp['K'] = mp['k'] = "-.-";
	mp['L'] = mp['l'] = ".-..";
	mp['M'] = mp['m'] = "--";
	mp['N'] = mp['n'] = "-.";
	mp['O'] = mp['o'] = "---";
	mp['P'] = mp['p'] = ".--.";
	mp['Q'] = mp['q'] = "--.-";
	mp['R'] = mp['r'] = ".-.";
	mp['S'] = mp['s'] = "...";
	mp['T'] = mp['t'] = "-";
	mp['U'] = mp['u'] = "..-";
	mp['V'] = mp['v'] = "...-";
	mp['W'] = mp['w'] = ".--";
	mp['X'] = mp['x'] = "-..-";
	mp['Y'] = mp['y'] = "-.--";
	mp['Z'] = mp['z'] = "--..";
	mp['0'] = "-----";
	mp['1'] = ".----";
	mp['2'] = "..---";
	mp['3'] = "...--";
	mp['4'] = "....-";
	mp['5'] = ".....";
	mp['6'] = "-....";
	mp['7'] = "--...";
	mp['8'] = "---..";
	mp['9'] = "----.";


}

int main() {
	std::string s;
	std::getline(std::cin, s);
	std::string p;
	init();
	for (char &i:s) {
		if (mp.count(i)) p+=mp[i];
	}
	int l = 0, r = p.size()-1;
	// std::cout << r <<"\n";
	int flag = 0;
	while (l<r) {
		if (p[l++]!=p[r--]) flag = 1;
	}

	if (flag || p.size()==0) std::cout << "NO";
	else std::cout << "YES";
	return 0;
}

K
签到

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define mod 1000000007
#define pb push_back
typedef pair<int,int> pir;
string sstr[]={"NO\n","YES\n"};
const int N=200010;
int T,n,m;
double p;
double e[N];
double mi=1;
int mipos=1; 
signed main()
{
	cin>>p;
	for(int i=2;i<=16;i++){
		double p1=pow((1-p),i);//全部没有感染
		e[i]=(p1+i*(1-p1))/i;
		if(e[i]<mi){
			mi=e[i];
			mipos=i;
		}
	}
	cout<<mipos<<'\n';
}

L
签到

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define mod 1000000007
#define pb push_back
typedef pair<int,int> pir;
string sstr[]={"NO\n","YES\n"};
const int N=200010;
int T,n,m;
char c[N];
char d[N];
set<char> mp;
signed main()
{
	for(int i=1;i<=5;i++){
		cin>>c[i];
		mp.insert(c[i]);
	}
	for(int i=1;i<=7;i++){
		string out="";
		for(int j=1;j<=5;j++){
			cin>>d[j];
			if(d[j]==c[j]) out+='G';
			else if(mp.find(d[j])!=mp.end()) out+='Y';
			else out+='X';
		}
		if(out=="GGGGG"){
			cout<<"WINNER\n";
			return 0;
		}
		if(i==7){
			cout<<"LOSER\n";
			return 0;
		}
		cout<<out<<'\n';
	}
	
}

M
签到


#include <iostream>
#include <vector>
#include <string>
using namespace std;


string s[7] = { "XXX     XXX XXX     XXX XXX XXX XXX XXX XXX     XXX     XXX XXX ",
            	"X X   X   X   X X X X   X     X X X X X X X X   X     X X   X   ",
				"X X   X   X   X X X X   X     X X X X X X X X   X     X X   X   ",
				"        XXX XXX XXX XXX XXX     XXX XXX XXX XXX     XXX XXX XXX ",
				"X X   X X     X   X   X X X   X X X   X X X X X X   X X X   X   ",
				"X X   X X     X   X   X X X   X X X   X X X X X X   X X X   X   ",
				"XXX     XXX XXX     XXX XXX     XXX XXX     XXX XXX XXX XXX     "};

string p = "111011101001001011101110110101011101101011111101101001011111111110111101111111111010101001111111001011011001101111101110100100101110111011010101110110101111110110100101111111111011110111111111101010100111111100101101100110111110111010010010111011101101";

int getnum(string & tmp) {
	for (int i = 0; i<=15; ++i) {
		if (tmp==p.substr(i*7, 7))  return i;
	}
	return -1;
}

int main() {
	ios::sync_with_stdio(false);
	cout.tie(0);
	int n;
	cin >>n ;
	// n = 2;
	{
		string ans[7];
		for (int i = 0; i<7; ++i) ans[i] = string(1000, ' '); 
		string in, _in;
		cin >> in;
		if (in.size()%7) _in = string(7-in.size()%7, '0');
		_in+=in;
		int len = _in.size();
		for (int i = 0; i<len; i+=7) {
			string tmp = _in.substr(i, 7);
			int num = getnum(tmp);
			bool flag = 0;
			if (num==-1) {
				flag = 1;
			}
			for (int j = 0; j<7; ++j) {
				ans[j][i/7*5] = ' ';
				for (int k = i/7*5+1; k<i/7*5+5; ++k) {
					if (flag) ans[j][k] = ' ';
					else ans[j][k] = s[j][num*4+k-i/7*5-1];
				}
			}
		}
		int t = 80/(n*5);
		for (int k = 0; k<len/7*5-1; k+=5*t) {
				for (int i = 0; i<7; ++i) {
					for (int ll = 1; ll<=n; ++ll) {
						for (int j = k; j<min(k+5*t-1, len/7*5-1); ++j) {
							if (j==k) continue;
							for (int l = 1; l<=n; ++l) cout << ans[i][j];
						}
						cout << "\n";						
					}

				}
			for (int ll = 1; ll<=n; ++ll)
			cout << "\n";
		}

	
	}


	return 0;
}

/*
1
111011101001001011101110110101011101101011111101101001011111111110111101111111111010101001111111001011011001101111101110100100101110111011010101110110101111110110100101111111111011110111111111101010100111111100101101100110111110111010010010111011101101
*/


N
unsolved
O
仔细读题

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
#define mod 1000000007
#define pb push_back
typedef pair<int,int> pir;
string sstr[]={"NO\n","YES\n"};
#define int ll
const int N=10000010;
int T,a,b,c,d;
int ans1,ans2,flag=0;
signed main()
{
	cin>>a>>b>>c>>d;
	for(int i=0;i<N;i++){//运i趟
		int cur1=a*i;
		if((cur1-d)%b!=0) continue;
		if(cur1-d<c) continue;
		ans1=i,ans2=(cur1-d)/b;
		flag=1;
		break;
	}
	if(!flag){
		cout<<"No solution.";
	}
	else{
		cout<<"We need "<<ans1<<" truck";
		if(ans1!=1) cout<<'s';
		cout<<" and "<<ans2<<' '<<"boat";
		if(ans2!=1) cout<<'s';
		cout<<'.';
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值