拼多多2021笔试题解

A K . j p g . . . h h h 总结:技不如人,AK失败.jpg...以及真的好烦大模拟啊hhh

T4

题目大意:求 [ 1 , n ] [1,n] 中有多少个数能被 m m A i A_i 中的至少一个整除
n < = 1 e 9 , m < = 10 , A i < = 20 n<=1e9,m<=10,A_i<=20

由于 m m 十分小,经典 O ( 2 m ) O(2^m) 容斥即可

import java.util.*;

public class zbr01
{
	static long []a=new long[50005];
	
	public static long pw(long a,long b)
	{
		long ans=1,base=a;
		while(b!=0)
		{
			if(b%2==1) ans=(ans*base);
			base=(base*base); b>>=1;
		}
		return ans;
	}
	
	public static long gcd(long a,long b)
	{
        return b==0?a:gcd(b,a%b);
    }
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		long n=S.nextLong(),m=S.nextLong();
		for(int i=1;i<=m;i++) a[i]=S.nextInt();
		long ed=pw(2,m),ans=n;
		for(int i=1;i<ed;i++)
		{
			long cnt=0,tmp=1;
			for(int j=1;j<=m;j++)
			{
				if((i&(1<<(j-1)))!=0)
				{
					cnt++;
					tmp=tmp/gcd(tmp,a[j])*a[j];
				}
			}
			if(cnt%2==1) ans-=(n/tmp);
			else ans+=(n/tmp);
		}
		System.out.println(n-ans);
    }
}

T1

大模拟板子题…略略略

import java.util.*;

public class zbr01
{
	static int [][]a=new int[505][505];
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		int n=S.nextInt(),p=n/2;
		for(int i=1;i<=n/2;i++) for(int j=1;j<=n/2;j++) if(i<j) a[i][j]=2; else if(i>j) a[i][j]=3;
		for(int i=(n+1)/2+1;i<=n;i++) for(int j=1;j<=n/2;j++)
			if((n-i+1)<j) a[i][j]=5; else if((n-i+1)>j) a[i][j]=4;
		
		for(int i=(n+1)/2+1;i<=n;i++) for(int j=(n+1)/2+1;j<=n;j++)
			if((n-i+1)<(n-j+1)) a[i][j]=6; else if((n-i+1)>(n-j+1)) a[i][j]=7;
		
		for(int i=1;i<=n/2;i++) for(int j=(n+1)/2+1;j<=n;j++)
			if(i<(n-j+1)) a[i][j]=1; else if(i>(n-j+1)) a[i][j]=8;
		
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++) System.out.print(a[i][j]);
			System.out.println();
		}
    }
}

T2

bfs大模拟板子…略略略

import java.util.*;

public class zbr01
{
	static int [][]a=new int[405][405];
	static int [][]col=new int[405][405];
	static int []qx=new int[200005];
	static int []qy=new int[200005];
	static int []siz=new int[200005];
	static int []v=new int[200005];
	static int cnt,n,m;
	
	static int []kx={0,0,1,-1};
	static int []ky={1,-1,0,0};
	
	public static void bfs(int x,int y)
	{
		int eh=1,ed=0,eh2=1,ed2=0;
		qx[++ed]=x; qy[++ed2]=y;
		while(eh<=ed)
		{
			int u=qx[eh],v=qy[eh2]; eh++; eh2++; col[u][v]=cnt; siz[col[u][v]]++;
			for(int i=0;i<=3;i++)
			{
				int tx=u+kx[i],ty=v+ky[i];
				if(tx<=0||tx>n||ty<=0||ty>m||col[tx][ty]!=0||a[tx][ty]==0) continue;
				qx[++ed]=tx; qy[++ed2]=ty;
			}
		}
	}
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		n=S.nextInt(); m=S.nextInt();
		for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=S.nextInt();
		for(int i=1;i<=n;i++) for(int j=1;j<=m;j++)
			if(a[i][j]==1&&col[i][j]==0) {cnt++; bfs(i,j);}
		
		int ans=0;
		for(int i=1;i<=cnt;i++) ans=Math.max(ans,siz[i]);
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				if(a[i][j]==1) continue;
				int tmp=0;
				for(int k=0;k<=3;k++)
				{
					int tx=i+kx[k],ty=j+ky[k];
					if(tx<=0||tx>n||ty<=0||ty>m) continue;
					if(v[col[tx][ty]]==0)
					{
						v[col[tx][ty]]=1;
						tmp+=siz[col[tx][ty]];
					}
				}
				ans=Math.max(ans,tmp+1);
				for(int k=0;k<=3;k++)
				{
					int tx=i+kx[k],ty=j+ky[k];
					if(tx<=0||tx>n||ty<=0||ty>m) continue;
					v[col[tx][ty]]=0;
				}
			}
		}
		
		int p2=0;
		for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) p2+=a[i][j];
		System.out.println(Math.min(ans,p2));
    }
}

T3

被大模拟板子们恶心到了…也不想写了emm…崩崩崩的80pts代码…丢人现场.jpg

import java.util.*;

public class zbr01
{
	static int []dp=new int[1000005];
	static int []c=new int[500005];
	static int []v=new int[500005];
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		int n=S.nextInt(),m=S.nextInt(),k=20005;
		for(int i=0;i<k;i++) dp[i]=-10000000;
		for(int i=1;i<=n;i++)
		{
			int w=S.nextInt(),v=S.nextInt();
			if(w<0)
			{
				for(int j=0;j<k+m+w;j++)
					dp[j]=Math.max(dp[j],dp[j-w]+v);
			}
			else
			{
				for(int j=k+m;j>=w;j--)
					dp[j]=Math.max(dp[j],dp[j-w]+v);
			}
		}
		int ans=0;
		for(int i=k-5;i<=k+m;i++) ans=Math.max(ans,dp[i]);
		System.out.println(ans);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38649940/article/details/108351944