郑州工商算法比赛java版本

郑州工商算法比赛java版本,第1张

工厂需要采购一批产品,现有3种家公司进入采购名单,为了保证质量足够统一。选了一家公司就采购同一批次的所有产品。每家公司由于生产线不同,每一批产品的价格和数量也不同。

问:在能满足公司需求的情况下最少花费多少钱才能采购完成。

输入格式

第一行包含一个正整数n,表示需要的产品数量。

接下来三行,每行用2个正整数描述此公司一批产品:其中第1个整数表示这种产品一批次的数量,第2个整数表示这种产品一批次的价格。

保证所有的7个数都是不超过10000的正整数。

输出格式

1个整数,表示最少需要花费的钱。

A题,看题目,只选同一家公司的产品,直接秒杀,贴代码了

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public A {
	static int GS[][];
	public static void main(String[] args) throws IOException {
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		
		int min=Integer.MAX_VALUE;
		in.nextToken();
		int target=(int)in.nval;
		GS=new int[3][2];
		for(int i=0;i<3;i++){
			for(int j=0;j<2;j++){
				in.nextToken();
				GS[i][j]=(int)in.nval;
			}
		}
		for(int i=0;i<3;i++){
			if(help(target,GS[i][0])==true){
				min=Math.min(target/GS[i][0]*GS[i][1], min);
			}else{
				min=Math.min(((target/GS[i][0])+1)*GS[i][1], min);
			}
		}
		out.print(min);
		out.flush();
	}
	public static boolean help(int a,int b){
		if(a%b==0){
			return true;
		}
		return false;
	}
}

B

现在有两张清单。清单A有N个字符串,清单B有M个字符串。

现在需要以A为标准,检验B中的字符串。

对于B中的每个字符串:

若A中没有则输出 NO

若A中有则输出 YES;

若A中有且在B中第二次出现则输出 REPEAT;

输入格式

第一行N表示A中有的字符串

后续N行每行一个字符串。字母全部小写,且长度小于50大于0;

第N+2行整数M表示B中的字符串数

后续M行每行一个字符串。字母全部小写,且长度小于50大于0;

两个集合搞定,贴代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.HashSet;
import java.util.Set;

public class  {
	public static void main(String[] args) throws IOException{
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		
		Set seta= new HashSet();
		Set setb= new HashSet();
		in.nextToken();
		int N=(int)in.nval;
		for(int i=0;i

C

题目描述

图书馆有一堆图书,为了方便查找每本书都有自己的编号。

小明是图书馆的常客,现在图书馆将小明一年的借书都提取出来了,不过由于系统故障导致图书编号发生了重叠。

现在求助于你,请问小明借的书中出现最多的书的次数和编号。

输入格式

第一行一个数表示图书馆馆藏n n<200

接下来的n行每行一个图书的编号只包含大小写字母且不长于80

最后一行小明写的编号只包含大小写字母,长度小于1000000

这道题我觉得是KMP算法,但是我忘记模板了,然后用暴力跑分,没跑出来...老师说是用trie,等大神

D

题目描述

现在有个神奇的湖,

如果将BAA的B端碰触水面则字符串会增长为AABBAA

如果将BBA的A端碰触水面则字符串会增长为BBAABB

现在给出一个字符串请输出此字符串碰触湖水前的最小长度。

(一个字符串可 *** 作多次或者不 *** 作)

输入格式

一个用A和B组成的字符串 长度<100000

仔细看题目,很容易想到二分法,然后再套一个逆转字符串,秒杀,上代码。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class {
	static String S;
	public static void main(String[] args) throws IOException {
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
	
		in.nextToken();
		S=in.sval;
//		System.out.println(S.substring(0,3+1));
//		System.out.println(S.substring(3+1,8));
		System.out.println(erfen());
		
	}
		public static int erfen(){
	        int left = 0;
	        int right = S.length()-1; 
	        while (left <= right) {
	            int middle = (left+right)/2;
	            if(S.substring(0,middle+1).equals(nizhuan(S.substring(middle+1,right+1)))){
	            	//继续判断,直接选择左边
	            	right=middle;
	            }else{
	            	return right-left+1;//没办法继续分了
	            }
	        }
	        return -1;
	    }
		static public String nizhuan(String sss){
			StringBuffer sb=new StringBuffer(sss);
			return sb.reverse().toString();
		}
	}

E

题目描述

有一个游戏会给出如下数据

4

0 0 0 0

0 1 1 1

0 1 0 1

0 1 1 1

将被封死的0变为2

0 0 0 0

0 1 1 1

0 1 2 1

0 1 1 1

输入格式

n<31

提示(每组只会有一个满足的闭合的多边形)

思路:DFS,把所有的封闭图形外边的点过一遍标记一下,里面的点到达不了的就是我们要求的点,上代码。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class M {
	static int [][]G;
	static int N;
	public static void main(String[] args) throws IOException {
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		
		in.nextToken();
		N=(int)in.nval;
		G=new int[N][N];
		for(int i=0;i=N || j>=N) {
	           return;
	        }
	        if (G[i][j] == 1||G[i][j] ==9) {
	            return;
	        }
	        G[i][j] = 9;
	        dfs(i - 1, j);
	        dfs(i + 1, j);
	        dfs(i, j - 1);
	        dfs(i, j + 1);
	    }
	}
题目描述

在路上设置了 n 个驿站1,2,⋯,n。行人可在这些驿站租用马车,并在之后的任何一个驿站归还马车。驿站 i 到驿站 j 之间的租金为 r(i,j)(1≤i 输入格式

第一行中有一个正整数 n,表示有 n 个驿站。接下来的 n−1 行是一个半矩阵 r(i,j)(1≤i

思路:迪杰斯特拉算法套用一下,秒杀

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class {
	static int n;
	static int G[][];
	static int dis[];
	static boolean vis[];
	public static void main(String[] args) throws IOException {
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
	
		in.nextToken();
		n=(int)in.nval;
		G=new int[n+2][n+2];
		dis=new int[n+1];
		vis=new boolean[n+1];
		for(int i=1;i

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/736379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)