Codeforces 107

A题
看有几个1和3,统计输出即可
B题
给出a/b/c,找到x,y使得x的位数是a,y的位数是b,gcd(x,y)的位数是c
解:刚开始没想出太好的解,就暴力打表然后存进去的,太麻烦啦
假设x,y初始都为任意一个位数为c的值z,然后x不断3直到位数符合要求,y不断5直到符合要求,这样可以保证gcd的值一定是z,并且因为每次乘3/5,每次乘位数最多增加1

import java.util.Scanner;

public class Main {

    public static long ksm(long a,long c) {
        // TODO Auto-generated method stub
        long s = 1;
        while(c != 0) {
            if((c & 1) != 0) s *= a;
            a *= a;
            c >>= 1;
        }
        return s;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while(n-- != 0) {
            long a = sc.nextLong(); long b = sc.nextLong(); long c = sc.nextLong();
            long cc = ksm(10,c - 1);
            //System.out.println("cc = " + cc);
            long aa = cc; long bb = cc;
            while(true) {
                if((long)(Math.log10(aa)) + 1 == a) break;
                aa *= 3;
            }
            while(true) {
                if((long)(Math.log10(bb))+ 1 == b) break;
                bb *= 2;
            }
            System.out.println(aa + " " + bb);
        }
    }
}

C题
题意:n张卡片从上到下放置,每张卡片都有一个颜色,q个询问,每次给出颜色t,找到最上面的颜色为t的卡片的位置,并把它放在最上面。
解:可以发现,我们用到的信息只有每种颜色最上面的那张卡片位置,其他的都不需要

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(),q = sc.nextInt();
        int[] pos = new int[100];
        for(int i = 1;i <= 50; ++i)
            pos[i] = n;
        for(int i = 1;i <= n; ++i) {
            int x = sc.nextInt();
            pos[x] = Math.min(i,pos[x]);
        }
        for(int i = 1;i <= q; ++i) {
            int x = sc.nextInt();
            System.out.print(pos[x] + ((i == q)?"\n":" "));
            for(int j = 1;j <= 50; ++j)
                if(pos[x] > pos[j]) pos[j]++;
            pos[x] = 1;
        }
    }
}

D题
题意:每个串的代价是i和j的对数,满足s[i] = s[j]且s[i + 1] = s[j + 1],构造一个只由前k种小写字母组成的长度为n的字符串,使其代价最小。
解:构造方法a ab ac ad .....b bc bd ..... c ...这样构造不会产生代价,如果n大于这个长度,那么多次重复这个串即可

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(),k = sc.nextInt();
        String s = "";
        for(char i = 'a';i < 'a' + k; ++i)
            for(char j = i;j < 'a' + k; ++j)
                if(i == j) s = s + i;
                else s = s + i + j;
        while(n > s.length()) {
            System.out.print(s);
            n -= s.length();
        }
        if(n <= s.length()) 
            System.out.println(s.substring(0, n));
    }
}
全部评论

相关推荐

刷牛客的我很豁达:你是不是对算法有什么误解,你没手握两篇顶刊顶会,还想搞算法岗,有顶刊顶会在算法岗算才入门
点赞 评论 收藏
分享
来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务