Codeforces Round 918 (Div. 4)

发布时间 2023-12-30 00:37:11作者: sixsix666

基本情况

做出了a,b,c,a题和b题在看题目的时候马上就有了思路,但是实际操作的时候出现代码错误,c题题目花了一部分时间理解后大概花了5分钟左右找到思路,d题一条路走到黑

A. Odd One Out

1.一开始用来键盘读入next.Int和next.Line在运行中如果手打一个个的话结果是不会报错的但是当复制样例的input直接进去的时候会发生报错,因为其实int是以空格读入但是line又是用enter会产生矛盾所以机器会发生报错,解决办法是可以通过开一种键盘读入的方式
之后进行强转,或者用数组等。
2.局部变量的问题,当用循环的时候例如求和等如果没有重新声明其值会一直循环,总之就是注意循环的变量的位置

B. Not Quite Latin Square

比赛过程中主要也是键盘读入的问题,要迅速把c++基础学完

C. Can I Square?

一开始通过开方求double之后乘其开方指加1然后比较与原值加开方值是否相等,但其实用了double之后会有误差,其实可以直接转为int故意使其丢失精度因为如果是整数的话是不会丢失精度的最后平方比较

D. Unnatural Language Processing

一开始的思路是因为想两两比较看会不会有连续两个重复的cc之后判断是否是奇数或偶数来特判等等一堆情况导致思路紊乱,其实发现这么多情况很不好做的时候就应该尝试找别的方法重新看题目而不是一直用这种方法做。其实在第一次想的时候已经有一个突破点了就是两个cc时候就要输出三个,把一个"."当作一个部分之后用标记法让他归零再判断下一个部分。想到这个的关键就是可以发现每次判断cc的时候前面必须有一个v并且每一个环节都只有一个v,但在比赛的时候只关注到了两个cc这一个焦点就没有看到其他得了,需要分析的透彻一点,看到全部,当有一个突破口的时候不能急于寻找方法而是要想到看看能不能找到其他的

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t= sc.nextInt();

        for (int i = 1; i <=t; i++) {
            int m=sc.nextInt();
            int flag =1;
            String str=sc.nextLine();
            for (int j = 0; j < str.length()-1; j++) {
                char ch =str.charAt(j);
                if (flag==1){
                    System.out.print(ch);
                }else{
                    if (str.charAt(j+1)=='a'||str.charAt(j+1)=='e'){
                        System.out.print(".");
                        flag=1;
                        System.out.print(ch);
                    }else{
                        System.out.print(ch);
                        System.out.print(".");
                        flag=1;
                    }
                }
                if(ch=='a'||ch=='e'){
                    flag=0;
                }


            }
            System.out.println(str.charAt(str.length()-1));
        }
    }
}