/*
[编程题] 1,最长公共连续子串
牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他,并输出其长度。
输入描述:
输入为两行字符串(可能包含空格),长度均小于等于50.
输出描述:
输出为一个整数,表示最长公共连续子串的长度。
输入例子:
abcde
abgde
输出例子:
2
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
String s2 = scanner.nextLine();
fun(s1, s2);
}
public static void fun(String s1, String s2) {
int n = s1.length();
int m = s2.length();
int[][] a = new int[n][m];
int max = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (s1.charAt(i) == s2.charAt(j)) {
if (i > 0 && j > 0) {
a[i][j] = a[i - 1][j - 1] + 1;
} else {
a[i][j] = 1;
}
if (max < a[i][j]) {
max = a[i][j];
}
}
}
}
System.out.println(max);
}
}
/*
[编程题]2,找整除
热度指数:6187
时间限制:1秒
空间限制:32768K
牛牛想在[a, b]区间内找到一些数满足可以被一个整数c整除,现在你需要帮助牛牛统计区间内一共有多少个这样的数满足条件?
输入描述:
首先输入两个整数a,b,(-5*10^8 ≤ a ≤ b ≤ 5*10^8)
接着是一个正整数c(1 <= c <= 1000)
输出描述:
输出一个整数表示个数。
输入例子:
0 14 5
输出例子:
3
*/
importjava.util.Scanner;
publicclassMain {
publicstaticvoidmain(String[] args){
Scanner in = newScanner(System.in);
while(in.hasNext()){
intbegin = in.nextInt();
intend = in.nextInt();
intnum = in.nextInt();
//int count = 0;
//for(int i = begin; i <= end; i++){
// if(i % num == 0){
// count++;
//}
//}
//System.out.println(count);
while(begin % num != 0){
begin++;
}
if(begin > end){
System.out.println(0);
}else{
System.out.println((end - begin) / num + 1);
}
}
}
}
/*
[编程题] 3,组装三角形
牛牛手里有N根木棒,分别编号为1~N,现在他从N根里想取出三根木棒,使得三根木棒构成一个三角形,你能计算出牛牛有多少种取法吗?(考虑两种取法中使用的木棒编号有一个不一样就认为是不同的取法)。
输入描述:
首先输入一个正整数N,接下来的一行共有N个正整数表示每个木棒的长度。
N ≤ 50, 木棒的长度 ≤ 10000.
输出描述:
输出一个整数表示方法数。
输入例子:
5
1 2 3 4 5
输出例子:
3
*/
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int a[]=new int[n];
for (int i = 0; i <n; i++) {
a[i]=sc.nextInt();
}
Arrays.sort(a);
fun(n,a);
}
public static void fun(int n,int a[]) {
int sum=0;
for (int i = 0; i <n-2; i++) {
for (int j = i+1; j <n-1; j++) {
for (int m= j+1; m <n; m++) {
if (a[i]+a[j]>a[m]) {
sum++;
}
}
}
}
System.out.println(sum);
}
}
/*
[编程题] 4,最小的矩形
时间限制:1秒
空间限制:32768K
牛牛在二维坐标系中画了N个点,且都是整点。现在牛牛想画出一个矩形,使得这N个点都在矩形内或者在矩形上。
矩形的边均平行于坐标轴。牛牛希望矩形的面积最小。请你帮助牛牛计算下最小矩形的面积。
输入描述:
首先输入一个正整数N表示点的个数(2 <= N <= 50)
接下来N行每行两个整数x, y,表示该点的坐标。绝对值均小于等于100.
输出描述:
一个整数表示最小矩形的面积。
输入例子:
2
0 1
1 0
输出例子:
1
*/
import java.util.Scanner;
public class Main{
static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
int n = in.nextInt();
int maxX = Integer.MIN_VALUE,minX = Integer.MAX_VALUE;
int maxY = Integer.MIN_VALUE,minY = Integer.MAX_VALUE;
for(int i=1;i<=2*n;i++){
int nums = in.nextInt();
if(i%2 ==0){
if(maxY < nums) maxY = nums;
if(minY > nums) minY = nums;
}else{
if(maxX < nums) maxX = nums;
if(minX > nums) minX = nums;
}
}
int y = maxY - minY;
int x = maxX - minX;
System.out.println(y*x);
}
}
/*
[编程题] 5,平衡数
牛牛在研究他自己独创的平衡数,平衡数的定义是:将一个数分成左右两部分,分别成为两个新的数。
左右部分必须满足以下两点:
1,左边和右边至少存在一位。
2,左边的数每一位相乘如果等于右边的数每一位相乘,则这个数称为平衡数。
例如:1221这个数,分成12和21的话,1*2=2*1,则称1221为平衡数,再例如:1236这个数,可以分成123和1*2*3=6,所以1236也是平衡数。而1234无论怎样分也不满足平衡数。
输入描述:
输入一个正整数(int范围内)。
输出描述:
如果该数是平衡数,输出 "YES", 否则输出 "NO"。
输入例子:
1221
1234
输出例子:
YES
NO
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s=sc.nextLine();
int a[]=new int[s.length()];
for (int i = 0; i < a.length; i++) {
a[i]=s.charAt(i)-48;
// System.out.println(a[i]);
}
fun(a);
}
public static void fun(int[] a) {
for (int i = 1; i <a.length; i++) {
int sum1=1;
int sum2=1;
for (int j1 = 0; j1 <i; j1++) {
sum1*=a[j1];
}
for (int j2 = i; j2 <a.length; j2++) {
sum2*=a[j2];
}
if (sum1==sum2) {
System.out.println("YES");
return;
}
}
System.out.println("NO");
}
}
/*
[编程题] 6,字符串分类
牛牛有N个字符串,他想将这些字符串分类,他认为两个字符串A和B属于同一类需要满足以下条件:
A中交换任意位置的两个字符,最终可以得到B,交换的次数不限。比如:abc与bca就是同一类字符串。
现在牛牛想知道这N个字符串可以分成几类。
输入描述:
首先输入一个正整数N(1 <= N <= 50),接下来输入N个字符串,每个字符串长度不超过50。
输出描述:
输出一个整数表示分类的个数。
输入例子:
4
abcd
abdc
dabc
bacd
输出例子:
1
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=Integer.parseInt(sc.nextLine());
Set<String> set=new HashSet<String>();
for (int i = 1; i <= n; i++) {
String str=sort(sc.nextLine());
set.add(str);
}
System.out.println(set.size());
}
public static String sort(String str) {
char[] chars = str.toCharArray();
Arrays.sort(chars);
return new String(chars);
}
}
/*
[编程题] 7,创造新世界
众所周知计算机代码底层计算都是0和1的计算,牛牛知道这点之后就想使用0和1创造一个新世界!牛牛现在手里有n个0和m个1,给出牛牛可以创造的x种物品,每种物品都由一个01串表示。牛牛想知道当前手中的0和1可以最多创造出多少种物品。
输入描述:
输入数据包括x+1行:
第一行包括三个整数x(2 ≤ x ≤ 20),n(0 ≤ n ≤ 500),m(0 ≤ m ≤ 500),以空格分隔
接下来的x行,每行一个01串item[i],表示第i个物品。每个物品的长度length(1 ≤ length ≤ 50)
输出描述:
输出一个整数,表示牛牛最多能创造多少种物品
输入例子:
3 3 1
1
00
100
输出例子:
2
*/
import java.util.Scanner;
public class Main {
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x=sc.nextInt();
int n=sc.nextInt();
int m=sc.nextInt();
String ssString=sc.nextLine();
int s1[]=new int[x+1];//存0
int s2[]=new int[x+1];//存1
s1[0]=0;
s2[0]=0;
for(int i=1;i<=x;i++){
String temp=sc.nextLine();
for (int j = 0; j < temp.length(); j++) {
if (temp.charAt(j)==48) {
s1[i]++;
}else {
s2[i]++;
}
}
}
fun(x, n, m,s1,s2);
}
public static void fun(int x,int n,int m,int s1[],int s2[]){
int a[][]=new int[n+1][m+1];
for (int i = 0; i <=n; i++) {
a[i][0]=0;
}
for (int i = 0; i <=m; i++) {
a[0][i]=0;
}
for (int i = 1; i <=x; i++) {
for (int j = n; j >= s1[i]; j--)
for (int k = m; k >= s2[i]; k--)
a[j][k] = Math.max(a[j][k], a[j - s1[i]][k - s2[i]] + 1);//关键递推关系
}
System.out.println(a[n][m]);
}
}
/*
[编程题] 8,优美的回文串
时间限制:1秒
空间限制:32768K
牛牛在书上看到一种字符串叫做回文串,当一个字符串从左到右和从右到左读都是一样的,就称这个字符串为回文串。牛牛又从好朋友羊羊那里了解到一种被称为优美的回文串的字符串,考虑一个长度为N只包含大写字母的字符串,写出它所有长度为M的连续子串(包含所有可能的起始位置的子串,相同的子串也要计入),如果这个字符串至少有K个子串都是回文串,我们就叫这个字符串为优美的回文串。现在给出一个N,牛牛希望你能帮他计算出长度为N的字符串有多少个是优美的回文串(每个位置都可以是'A'~'Z'的一个。)
输入描述:
输入数据包括三个整数N, M, K(2 ≤ N ≤ 11, 2 ≤ M ≤ N, 0 ≤ K ≤ 11).
输出描述:
输出一个整数,表示所求的字符串个数.
输入例子:
2 2 1
输出例子:
26
长度为2的字符串,它长度为2的子串只有它自身。长度为2的回文串有"AA","BB","CC"..."ZZ",一共26种。
*/
。。。省略