Cf1741
文章目录
- A. Compare T-Shirt Sizes
- B. Funny Permutation(思维)
- C. Minimize the Thickness()
A. Compare T-Shirt Sizes
题意:
第一行,输入测试样例个数n,接下来n行输入 ,输入a和b代表衣服的尺寸,输出a和b的大小关系,以下是对比原则:
S代表最小号,M代表中号,L代表大号,S和L前面可以有前置X,S前面的X越多,代表码数越小,相反L前面X越多代表尺寸越大,M前面不可以加X。另外L大于M大于S,当都为L时候,谁前面的X越多谁就越大,相反当结尾都为S,前面的X越多则尺码越小。
思路
:
如果根据题意描述模拟所给条件,会写出很多if…else判断,会让程序写起来特别乱,观察题意可以发现,所有情况下都可以先对比最后一位是什么,如果最后以为不相等,则直接对比最后一位的大小即可得出答案。否则,对于最后以为相同的情况下,可以分为3中情况,都为’S’,‘M’,'L’此时直接对比字符串的长度即可。
AC代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class A1741 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws NumberFormatException, IOException {
int n = Integer.parseInt(br.readLine());
for(int i = 1; i <= n; i++) {
String s[] = br.readLine().split(" ");
String str1 = s[0];
String str2 = s[1];
char c1 = str1.charAt(str1.length() - 1);
char c2 = str2.charAt(str2.length() - 1);
if(c1 != c2) {
if(c1 < c2) {
System.out.println(">");
}
if(c1 > c2) {
System.out.println("<");
}
}
else {
if(c1 == 'M') {
if(str1.length() == str2.length()) {
System.out.println("=");
} //当相同的部分为M时,不需要判断下面的条件也可以,因为M前面不能加X。
if(str1.length() > str2.length()) {
System.out.println("<");
}
if(str1.length() < str2.length()) {
System.out.println(">");
}
}
if(c1 == 'S') {
if(str1.length() == str2.length()) {
System.out.println("=");
}
if(str1.length() > str2.length()) {
System.out.println("<");
}
if(str1.length() < str2.length()) {
System.out.println(">");
}
}
if(c1 == 'L') {
if(str1.length() == str2.length()) {
System.out.println("=");
}
if(str1.length() > str2.length()) {
System.out.println(">");
}
if(str1.length() < str2.length()) {
System.out.println("<");
}
}
}
}
}
}
B. Funny Permutation(思维)
题意:给定长度,让输出满足以下条件的序列:
- 对于每个元素pi,至少有一个相邻的元素的值与pi的值相差1.(+1/-1)
- 不能存在第i个点在第i个位置。
第一行输入测试样例数,接下来每一行输入序列长度。
思路
:
对于序列1,2,3,4,5肯定是满足相邻元素相差1,但是不满足第i个元素等于i;
如果倒着放5,4,3,2,1满足相差1,但是中间元素不满足第i个元素不能放在i位置,因此
我们将mid到n这些数放在前面,前面的1,2,3,…mid - 1放在后面,即得到序列:
mid,mid + 1…,1,2,3,…mid - 1肯定可以同时满足所有条件。
AC代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws NumberFormatException, IOException {
int n = Integer.parseInt(br.readLine());
while((n--) > 0) {
int m = Integer.parseInt(br.readLine());
if(m == 3) {
System.out.println(-1);
continue;
}
int p = (m + 1) / 2;
for(int i = p + 1; i <= m; i++) {
System.out.print(i +" ");
}
for(int i = 1; i <= p; i++) {
System.out.print(i +" ");
}
System.out.println();
}
}
}
C. Minimize the Thickness()
题意:
思路:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class C {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int []a = new int[2022];
static int []sum = new int[2022];
public static void main(String[] args) throws Exception {
int t = Integer.parseInt(br.readLine());
while((t--) > 0) {
solve();
}
}
private static void solve() throws Exception {
Arrays.fill(a, 0);
Arrays.fill(sum, 0);
int n = Integer.parseInt(br.readLine());
int maxx = n;
String nums[] = br.readLine().split(" ");
for(int i = 1; i <= n; i++) {
a[i] = Integer.parseInt(nums[i - 1]);
}
for(int i = 1; i <= n; i++) {
sum[i] = sum[i - 1] + a[i];
// System.out.println(sum[i]);
}
int x = 0;
for(int i = 1; i <= n; i++) { //枚举区间长度
int j = i + 1,k = j;
x = i;
int cnt = 0;
while(j <= n) {
cnt += a[j];
if(cnt > sum[i]) {
break;
}
if(cnt == sum[i] && j != n) {
cnt = 0;
x = Math.max(x, j - k + 1);
k = j + 1;
}
j++;
}
if(j > n) {
if(cnt == sum[i]) {
x = Math.max(x, j - k);
maxx = Math.min(maxx, x);
}
}
}
System.out.println(maxx);
}
}