模拟赛补题

2023.2.18

比赛地址

T1

题意

补题代码
#include<bits/stdc++.h>
using namespace std;

int n;
int x[230],y[230];
int az1[20][20],az2[20][20];

bool checktie(){//需要优化 
	int nw1=0,nw2=0;
	for(int i=1;i<=15;i++){
		for(int j=1;j<=15;j++){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
	}
	for(int j=1;j<=15;j++){
		for(int i=1;i<=15;i++){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
	}
	for(int k=1;k<=15;k++){
		for(int i=k,j=1;i<=15&&j<=15;i++,j++){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
		for(int i=k,j=1;i>=1&&j<=15;i--,j++){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
		
		for(int i=k,j=15;i<=15&&j>=1;i++,j--){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
		for(int i=k,j=15;i>=1&&j>=1;i--,j--){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
		
		for(int j=k,i=1;j<=15&&i<=15;i++,j++){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
		for(int j=k,i=1;j>=1&&i<=15;j--,i++){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
		
		for(int j=k,i=15;j<=15&&i>=1;j++,i--){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
		for(int j=k,i=15;j>=1&&i>=1;j--,i--){
			if(az1[i][j])nw1++;
			else nw1=0;
			if(az2[i][j])nw2++;
			else nw2=0;
			if(nw1==5||nw2==5)return 0;
		}
		nw1=0;nw2=0;
	}
	return 1;
}

bool check(int dx){
	memset(az1,0,sizeof(az1));
	memset(az2,0,sizeof(az2));
	for(int i=1;i<=dx;i++){
		if(i%2==1)az1[x[i]][y[i]]=1;
		else az2[x[i]][y[i]]=1;
	}
	if(checktie())return 0;
	return 1;
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&x[i],&y[i]);
		if(i%2==1)az1[x[i]][y[i]]=1;
		else az2[x[i]][y[i]]=1;
	}
	/*
	for(int i=1;i<=15;i++){
		for(int j=1;j<=15;j++){
			if(az1[i][j]){
				printf("*");
				continue;
			}
			if(az2[i][j])printf("+");
			else printf("-");
		}
		puts("");
	}
	*/
	if(checktie())return printf("Tie"),0;
	//cout<<111<<endl;
	int l=1,r=n,res=n;
	while(l<=r){
		int mid=(l+r)/2;
		if(check(mid))res=mid,r=mid-1;
		else l=mid+1;
	}
	if(res%2==0)printf("B ");
	else printf("A ");
	printf("%d",res);
	return 0;
} 
T2

题意

补题代码
#include<bits/stdc++.h>
using namespace std;

int n,k,q; 
long long a[2];
long long c[2000005],d[2000005];
//bool b[2000005];
int ans;

bool check(){
	for(int i=n-k+2;i<=n+1;i++)if(d[i]!=c[i])ans++;
	if(ans!=0)return 0;
	return 1;
}

int main(){
	scanf("%d%d%d",&n,&k,&q);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i%2]);
		c[i]=a[i%2]-a[(i%2)^1];
	}
	c[n+1]=-a[n%2];
	for(int i=1;i<=n-k+1;i++){
		if(d[i]==c[i])continue;//其实可以省略 
		d[i+k]+=d[i]-c[i];
		d[i]=c[i];
	}
	if(check())printf("Yes\n");
	else printf("No\n");
	while(q--){
		int pos,dx;
		scanf("%d%d",&pos,&dx);
		/*
		c[pos]+=dx;
		c[pos+1]-=dx;
		for(int i=pos;i<=n-k+1;i++){
			if(d[i]==c[i])continue;//其实可以省略 
			d[i+k]+=d[i]-c[i];
			d[i]=c[i];
		}
		*/
		int tiaoyi=(n+1-pos)/k*k+pos,tiaoer=(n-pos)/k*k+pos+1;
		if(d[tiaoer]!=c[tiaoer])ans--;
		if(d[tiaoyi]!=c[tiaoyi])ans--;
		d[tiaoyi]-=dx;d[tiaoer]+=dx; 
		if(d[tiaoer]!=c[tiaoer])ans++;
		if(d[tiaoyi]!=c[tiaoyi])ans++;
		if(ans==0)printf("Yes\n");
		else printf("No\n");
	}
	return 0;
} 
T3

题意

补题代码
#include<bits/stdc++.h>
using namespace std;

int n,m,k; 
bool b[405][405];
int dx[405],dy[405];
int f[200][405][405];
int ans=1<<30;


int main(){
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			char ch;
			scanf(" %c",&ch);
			//cout<<ch;
			if(ch=='1')b[i][j]=1;
		}
	}
	for(int i=1;i<=k;i++){
		char ch;scanf(" %c",&ch);
		if(ch=='L')dy[i]--;else if(ch=='R')dy[i]++;
		else if(ch=='U')dx[i]--;else dx[i]++;
	}
	memset(f,0x3f,sizeof(f));
	//cout<<f[0][0][0]<<endl;
	f[0][1][1]=0;
	for(int ii=1;ii<=k;ii++){
		int i=(ii%2);
		//cout<<ii<<":"<<endl;
		for(int x=1;x<=n;x++){
			for(int y=1;y<=m;y++){
				f[i][x][y]=f[i^1][x][y]+1;
				if(x-dx[ii]>=1&&y-dy[ii]>=1&&x-dx[ii]<=n&&y-dy[ii]<=m&&b[x][y]==0)
					f[i][x][y]=min(f[i^1][x][y]+1,f[i^1][x-dx[ii]][y-dy[ii]]);
				//cout<<x<<" "<<y<<" "<<f[i][x][y]<<endl;
			}
		}
	}
	for(int x=1;x<=n;x++)
		for(int y=1;y<=m;y++)
			ans=min(ans,f[k%2][x][y]);
	printf("%d",ans);
	return 0;
} 
T4

题意


2023.2.24

比赛地址

T1

题意

补题代码
#include<bits/stdc++.h>
using namespace std;

long long n;
map<long long,int> a;
vector<long long> vc;

long long phi(long long k){
	long long ans=k;
	for(int i=2;i*i<=k;i++){
		if(k%i==0){
			ans=ans/i*(i-1);
			while(k%i==0)k/=i;
		}
	}
	if(k>1)ans=ans/k*(k-1);
	return ans;
}

void cyf(){
	for(long long i=1;i*i<=n;i++){
		if(n%i!=0)continue;
		printf("%lld %lld\n",i,phi(n/i));
		if(i*i==n)continue;
		a[n/i]=phi(i);
		vc.push_back(n/i);
	}
	return;
}
int main(){
	scanf("%lld",&n);
	cyf();
	for(int i=vc.size()-1;i>=0;i--)printf("%lld %lld\n",vc[i],a[vc[i]]);
	return 0;
}
T2

题意

T3

题意

T4

题意

posted @ 2023-02-18 10:28  MX_muxi  阅读(35)  评论(0)    收藏  举报
Title