贝壳四道编程题(2020/09/07)

1、剪刀石头布

python实现

def win(b):
    wintimesleft,wintimesright=0,0
    if b[0]=="S" and "J" in b[2:]:
        wintimesleft+=1
    elif b[0]=="J" and "B" in b[2:]:
        wintimesleft+=1
    elif b[0]=="B" and "S" in b[2:]:
        wintimesleft+=1
    if b[1]=="S" and "J" in b[2:]:
        wintimesright+=1
    elif b[1]=="J" and "B" in b[2:]:
        wintimesright+=1
    elif b[1]=="B" and "S" in b[2:]:
        wintimesright+=1
    if wintimesleft>wintimesright:
        print("left")
    elif wintimesleft==wintimesright:
        print("same")
    else:
        print("right")

while True:
    try:
        T=int(input())
        index=0
        a=[]
        while index<T:
            a.append(input().split(" "))
            index+=1
        for line in a:
            win(line)
    except:
        break
        
#作者:牛客463320147号
#链接:https://www.nowcoder.com/discuss/501925?#type=6&channel=666&source_id=discuss_center_discuss_hot
#来源:牛客网

java实现

import java.util.*;

public class zbr01
{
    
    
	public static int n,m;
	public static int []arr=new int[100005];
	public static int []b=new int[100005];
	
	public static void main(String[] args)
	{
    
    
		Scanner S=new Scanner(System.in);
		int T=S.nextInt();
		for(int z=1;z<=T;z++)
		{
    
    
			String s=S.next(); char a=s.charAt(0);
			s=S.next(); char b=s.charAt(0);
			s=S.next(); char c=s.charAt(0);
			s=S.next(); char d=s.charAt(0);
			
			int x1=0,x2=0;
			if(a=='J'&&d=='B'||a=='J'&&c=='B') x1++;
			if(a=='S'&&d=='J'||a=='S'&&c=='J') x1++;
			if(a=='B'&&d=='S'||a=='B'&&c=='S') x1++;
			
			if(b=='J'&&d=='B'||b=='J'&&c=='B') x2++;
			if(b=='S'&&d=='J'||b=='S'&&c=='J') x2++;
			if(b=='B'&&d=='S'||b=='B'&&c=='S') x2++;
			
			if(x1==x2) System.out.println("same");
			else if(x1>x2) System.out.println("left");
			else System.out.println("right");
		}
	}
}

2、构造字符串,本质是求最长重复子串

import java.util.*;

public class Solution {
    
    

    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        int n =  in.nextInt();
        String str = in.next();
        if(n<=2){
    
    
            System.out.println(n);
            return;
        }
        int mid = n/2;
        for (int i = mid; i >1; i--) {
    
    
            if(canCopy(str,i)){
    
    
                System.out.println(n+1-i);
                return;
            }
        }
        System.out.println(n);
    }

    private static boolean canCopy(String str, int mid) {
    
    
        for (int i = 0; i < mid; i++) {
    
    
            char c1 = str.charAt(i);
            char c2 =str.charAt(i+mid);
            if(c1 != c2) return false;
        }
        return true;
    }
}

作者:tianyikun
链接:https://www.nowcoder.com/discuss/501925?type=6&channel=666&source_id=discuss_center_discuss_hot
来源:牛客网

3,涂栅栏方案数

import java.util.*;

public class zbr01
{
    
    
	public static int n,m,k;
	
	public static long mod=1000000007;
	public static long [][]dp=new long [1005][15];
	public static int [][]p=new int [15][15];
	
	public static void main(String[] args)
	{
    
    
		Scanner S=new Scanner(System.in);
		int T=S.nextInt();
		for(int z=1;z<=T;z++)
		{
    
    
			n=S.nextInt(); m=S.nextInt(); k=S.nextInt();
			
			for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) p[i][j]=0;
			for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dp[i][j]=0;
			
			for(int i=1;i<=m;i++)
			{
    
    
				for(int j=1;j<=k;j++)
				{
    
    
					int x=S.nextInt();
					p[i][x]=1;
				}
			}
			
			for(int i=1;i<=m;i++) dp[1][i]=1;
			long ans=0;
			
			for(int i=2;i<=n;i++)
			{
    
    
				for(int j=1;j<=m;j++)
				{
    
    
					for(int k=1;k<=m;k++)
					{
    
    
						if(p[j][k]==1) continue;
						dp[i][k]=(dp[i-1][j]+dp[i][k])%mod;
					}
				}
			}
			for(int i=1;i<=m;i++) ans=(ans+dp[n][i])%mod;
			System.out.println(ans);
		}
	}
}

4,打怪初始血量

import java.util.*;

public class zbr01
{
    
    
	public static int []a1=new int[1005];
	public static int []a2=new int[1005];
	public static int []b1=new int[1005];
	public static int []b2=new int[1005];
	public static int []pa1=new int[1005];
	public static int []pa2=new int[1005];
	public static int []pb1=new int[1005];
	public static int []pb2=new int[1005];
	
	public static int [][]dp=new int[1005][1005];
	
	public static int inf=2000000001;
	
	public static void main(String[] args)
	{
    
    
		Scanner S=new Scanner(System.in);
		int n=S.nextInt();
		for(int i=n;i>=1;i--) a1[i]=S.nextInt();
		for(int i=1;i<=n;i++) {
    
    a2[i]=S.nextInt(); pa2[i]=pa2[i-1]+a2[i];}
		for(int i=n;i>=1;i--) b1[i]=S.nextInt();
		for(int i=1;i<=n;i++) {
    
    b2[i]=S.nextInt(); pb2[i]=pb2[i-1]+b2[i];}
		
		for(int i=1;i<=n;i++) {
    
    pa1[i]=pa1[i-1]+a1[i]; pb1[i]=pb1[i-1]+b1[i];}
		
		for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) dp[i][j]=inf; dp[0][0]=0;
		
		for(int i=0;i<=n;i++) for(int j=0;j<=n;j++)
		{
    
    
			if(i>=1)
			{
    
    
				int res=dp[i-1][j];
				res-=pa1[i-1]; res+=pb1[i-1]; res-=pa2[j]; res+=pb2[j];
				if(res>=a1[i]) dp[i][j]=Math.min(dp[i][j],dp[i-1][j]);
				else dp[i][j]=Math.min(dp[i][j],dp[i-1][j]+(a1[i]-res));
			}
			
			if(j>=1)
			{
    
    
				int res=dp[i][j-1];
				res-=pa1[i]; res+=pb1[i]; res-=pa2[j-1]; res+=pb2[j-1];
				if(res>=a2[j]) dp[i][j]=Math.min(dp[i][j],dp[i][j-1]);
				else dp[i][j]=Math.min(dp[i][j],dp[i][j-1]+(a2[j]-res));
			}
		}
		System.out.println(dp[n][n]+1);
	}
}

阅读题目可以查看原文链接

猜你喜欢

转载自blog.csdn.net/weixin_41896265/article/details/108457117
今日推荐