题目


题意及思路

题意:给定一串序列并给定n和k,循环n次,i从1到n,每次删除现有序列中第i个数字。求,n次后,第k个数是多少(每一位数字取值为0...9)。

思路:一开始想用Java中集合存储来进行操作,结果内存超限。然后仔细看了看题目,发现每次都是删除的是原始序列中奇数位的数字,所以删除n个后,第k个数必然是原来序列的第2k个偶数位上。


代码

package com.codeforces.round68Div2;

import java.util.Scanner;

public class A {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        int n, x;
        while (t-- > 0) {

            n = in.nextInt();
            x = in.nextInt();
            System.out.println(x * 2);
        }
        in.close();
    }
}





题意及思路

题意:略

思路:保存行、列上的*字符的个数,并维护一个二维数组(ArrayList实现),实现见代码。

代码关键点:见代码import step部分。每一行每一列的最大涂黑的个数为n+m-1(减去公共格子)。维护一个ans 和 每一行每一列的 cur。ans表示需要涂黑格子数,cur表示当前行列已经涂黑格子数。每次取(ans,n+m-1-cur)的较小值。

代码

package com.codeforces.round68Div2;

import java.util.ArrayList;
import java.util.Scanner;

public class B2 {
    // 保存行、列的“*”数目
    private static int row[] = new int[50500];
    private static int col[] = new int[50500];
    // 二维数组
    private static ArrayList<int[]> aa = new ArrayList<>();

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        int n, m, ans;
        String s;
        char cs[];
        while (t-- > 0) {
            aa.clear();
            n = in.nextInt();
            m = in.nextInt();
            for (int i = 0; i < n; i++) {
                row[i] = 0;
            }
            for (int i = 0; i < m; i++) {
                col[i] = 0;
            }
       // import step1
            for (int i = 0; i < n; i++) {
                s = in.next();
                cs = s.toCharArray();
                int a[] = new int[m];
                for (int j = 0; j < m; j++) {
                    if (cs[j] == '*') {
                        row[i]++;
                        col[j]++;
                        a[j] = 1;
                    } // 否则a[j]=0
                }
                aa.add(a);
            }
       // import step2
            ans = n + m - 1;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++) {
                    int cur = row[i] + col[j] - aa.get(i)[j];
                    ans = Math.min(ans, n + m - 1 - cur);
                }
            }
            System.out.println(ans);
        }
        in.close();
    }
}