1. 程式人生 > >codeforce R 491 (div2)

codeforce R 491 (div2)

asn cep 二分 exception else if 發現 tar stream ans

本來打完就想寫的,,奈何舍友要睡了,我開個臺燈感覺怪怪的,就沒寫。

A題竟然一開始wa了。。。後來發現對於c和a還有c和b的關系沒有判斷,,丟掉了很多罰時。

B題我的方法是 計算 sum,然後 分別統計 2、3、4的個數,一個一個試,具體看代碼(前面快速io有點長見諒

package R491;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class Main2 {
    static BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tok;
    static boolean hasNext()
    {
        while(tok==null||!tok.hasMoreTokens())
            try{
                tok=new StringTokenizer(in.readLine());
            }
            catch(Exception e){
                return false;
            }
        return true;
    }
    static String next()
    {
        hasNext();
        return tok.nextToken();
    }
    static long nextLong()
    {
        return Long.parseLong(next());
    }
    static int nextInt()
    {
        return Integer.parseInt(next());
    }
    static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) {
        int n = nextInt();
        int a[] = new int[n];
        int b[] = new int[8];
        int sum = 0;
        for(int i=0;i<n;i++){
            a[i] = nextInt();
            b[a[i]]++;
            sum+=a[i];
        }
        int num = 0;
        while (sum<4.5*n){
            if (b[2]>0){
                sum+=3;
                b[2]--;
                num++;
            }else if (b[3]>0){
                sum+=2;
                b[3]--;
                num++;
            }else if (b[4]>0){
                sum+=1;
                b[4]--;
                num++;
            }
        }
        out.print(num);
        out.flush();
    }
}

  

C 一開始還以為可能有點意思,然後二分板子就出來了,沒啥可說的,中間竟然wa了一發,,很玄學, ,判斷時 如果 把 num1>=num2 寫成 num1>=(double)n/2 就會wa。。。

package R491;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class Main3 {
    static BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tok;
    static boolean hasNext()
    {
        while(tok==null||!tok.hasMoreTokens())
            try{
                tok=new StringTokenizer(in.readLine());
            }
            catch(Exception e){
                return false;
            }
        return true;
    }
    static String next()
    {
        hasNext();
        return tok.nextToken();
    }
    static long nextLong()
    {
        return Long.parseLong(next());
    }
    static int nextInt()
    {
        return Integer.parseInt(next());
    }
    static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));

    static long n;
    public static void main(String[] args) {
        n = nextLong();
        long l = 1;
        long r = n;
        while (l<=r){
            long mid=(l+r)/2;
            if (caneat(mid)){
                r=mid-1;
            }else {
                l=mid+1;
            }
        }
        out.print(l);
        out.flush();
    }
    public static boolean caneat(long k){
        long num=0;
        long num2 = 0;
        long temp = n;
        while (temp>0){
            if (temp<k){
                num+=temp;
                break;
            }
            num+=k;
            temp-=k;
            num2+=(temp/10);
            temp-=temp/10;
        }
        if (num>=num2){
            return true;
        }else {
            return false;
        }
    }
}

  

D題就很和藹可親了,竟然只有兩行,直接暴力,我的方法是 umm懶得說看代碼吧

package R491;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class Main4 {
    static BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tok;
    static boolean hasNext()
    {
        while(tok==null||!tok.hasMoreTokens())
            try{
                tok=new StringTokenizer(in.readLine());
            }
            catch(Exception e){
                return false;
            }
        return true;
    }
    static String next()
    {
        hasNext();
        return tok.nextToken();
    }
    static long nextLong()
    {
        return Long.parseLong(next());
    }
    static int nextInt()
    {
        return Integer.parseInt(next());
    }
    static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) {
        String s[] = new String[2];
        for(int i=0;i<2;i++){
            s[i] = next();
        }
        if (s[0].length()==1){
            out.print(0);
            out.flush();
            return;
        }
        char ch1[] = s[0].toCharArray();
        char ch2[] = s[1].toCharArray();
        int ans = 0;
        for(int i=0;i<ch1.length;i++){
            if (ch1[i]==‘0‘&&ch2[i]==‘0‘){
                if (i==0){
                    if (ch1[i+1]==‘0‘){
                        ans++;
                        ch1[i+1]=‘X‘;
                        ch1[i]=ch2[i]=‘X‘;
                    }else if (ch2[i+1]==‘0‘){
                        ans++;
                        ch2[i+1]=‘X‘;
                        ch1[i]=ch2[i]=‘X‘;
                    }
                }else if (i<ch1.length-1){
                    if (ch1[i-1]==‘0‘){
                        ans++;
                        ch1[i-1]=‘X‘;
                        ch1[i]=ch2[i]=‘X‘;
                    }else if (ch2[i-1]==‘0‘){
                        ans++;
                        ch2[i-1]=‘X‘;
                        ch1[i]=ch2[i]=‘X‘;
                    }else if (ch1[i+1]==‘0‘){
                        ans++;
                        ch1[i+1]=‘X‘;
                        ch1[i]=ch2[i]=‘X‘;
                    }else if (ch2[i+1]==‘0‘){
                        ans++;
                        ch2[i+1]=‘X‘;
                        ch1[i]=ch2[i]=‘X‘;
                    }
                }else if (i== ch1.length-1) {
                    if (ch1[i - 1] == ‘0‘) {
                        ans++;
                        ch1[i - 1] = ‘X‘;
                        ch1[i] = ch2[i] = ‘X‘;
                    } else if (ch2[i - 1] == ‘0‘) {
                        ans++;
                        ch2[i - 1] = ‘X‘;
                        ch1[i] = ch2[i] = ‘X‘;
                    }
                }
            }
        }
        out.print(ans);
        out.flush();
    }
}

  E 啊哈哈哈哈,尷尬而不失禮貌的微笑,因為我太弱了又很垃圾還是一個數學白癡所以我沒寫出來。。。

  F學長都沒寫。。。學長51分鐘過掉ABCDE好像就開始掛機了,發現F有點難就睡覺去了,然後D題掉了,囍

  近期:補一下排列組合,抓緊學個tarjan把前天的E題補掉。(對不起是我太弱了不會tarjan

  rating:1548

  忽然發現今晚還有一場,我可能要1600+了欸嘿嘿嘿。

codeforce R 491 (div2)