题解 | 牛客周赛 Round 98 CDEF Java题解

小红与奇数

https://ac.nowcoder.com/acm/contest/112320/A

C~F Java题解,代码已去除冗余~~~

C 小红与red

贪心,凡是遇到跟前边一样的字符,就换成既跟前边不一样,也跟后边不一样的字符,时间复杂度O(n)

import java.util.*;
public class Main{
   static char candidateChars[]={'r','e','d'};
   public static void main(String args[]){
       Scanner sc=new Scanner(System.in);
       int n=sc.nextInt();
       char ans[]=sc.next().toCharArray();
       for(int i=1;i<n;i++){
           if(ans[i]==ans[i-1]){
               for(char c:candidateChars){
                   if(c!=ans[i-1]&&(i==n-1||c!=ans[i+1])){
                       ans[i]=c;
                       break;
                   }
               }
           }
       }
       System.out.println(new String(ans));
   }
}

D 小红与好数组

按数据模拟即可,时间复杂度O(很小)

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        find(new ArrayList<>(),sc.nextInt());
    }
    static void find(List<Integer> list,int p){
        if(p==0){
            for(int a:list){
                System.out.print(a+" ");
            }
            System.out.println();
        }
        else{
            for(int i=1;i<=p;i++){
                if(list.size()>0&&i==list.get(list.size()-1)){
                    continue;
                }
                list.add(i);
                find(list,p-i);
                list.remove(list.size()-1);
            }
        }
    }
}

E 小红与gcd和sum

若固定了序列的gcd,那么所有该数的倍数均可以加到序列中来,因此只需记录数组中每个数字对于其约数的贡献即可,也就是累加到每种约数的和即可,时间复杂度分析:只考虑数组中存在数字的约数试探最大为1e5*sqrt(max(a))<=1e8,总时间复杂度为O(n*sqrt(C)+C),C==1e6

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        long sum[]=new long[(int)1e6+5],ans=0;
        for(int i=sc.nextInt();i!=0;i--){
            int a=sc.nextInt();
            sum[a]+=a;
        }
        for(int i=1;i<=1e6;i++){
            if(sum[i]!=0){
                for(int j=1;j*j<=i;j++){
                    if(i%j==0&&i!=j){
                        sum[j]+=sum[i];
                        if(j!=1&&i/j!=j){
                            sum[i/j]+=sum[i];
                        }
                    }
                }
            }
        }
        for(int i=1;i<=1e6;i++){
            ans=Math.max(ans,sum[i]*i);
        }
        System.out.println(ans);
    }
}

F 小红与天使猫猫酱

推公式即可,对于所求,可知其通项公式为bn=(4*100^n+28*10^n+49)/81,其前n项之和为Sn=((100^(n+1)-100)*4/99+(10^(n+1)-10)/9*28+49n)/81,直接计算即可,时间复杂度O(log(mod))

import java.util.*;
public class Main{
    static int mod=998244353;
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        long n=sc.nextLong();
        //寻找sigma(a^n,n∈[1,n])的值
        //就是(a^(n+1)-a)/(a-1);
        System.out.println(((pow(100,n+1)-100+mod)*pow(99,mod-2)%mod*4+(pow(10,n+1)-10+mod)*pow(9,mod-2)%mod*28%mod+n%mod*49)%mod*pow(81,mod-2)%mod);
    }
    static long pow(long a,long b){
        long ans=1;
        for(;b!=0;b>>=1,a=a*a%mod){
            if(b%2==1){
                ans=ans*a%mod;
            }
        }
        return ans;
    }
}
全部评论

相关推荐

关于“实习生工资多少才算正常”,其实并没有一个放之四海而皆准的标准,但如果结合一线城市的生活成本、工作强度以及实习本身创造的价值来看,我个人认为6000&nbsp;元左右应当是一个基本及格线,也就是每天&nbsp;200&nbsp;多元。如果能达到&nbsp;300、400&nbsp;元一天,甚至更高,那无疑是更理想的状态。首先,从现实成本看,房租、通勤、餐饮几乎都是刚性支出。低于这个水平的实习,往往意味着实习生需要用家庭或存款“倒贴”工作,这在长期来看并不合理。实习本质上是学习,但并不等于“廉价劳动力”,更不应该是经济压力的来源。其次,愿意给实习生更高薪资的公司,通常不会是差公司。这至少说明两点:一是公司资金相对充足,不是靠压缩人力成本勉强维持;二是公司认可实习生的价值,希望你真正参与业务、创造产出,而不是只做边角料工作。很多高薪实习往往伴随着更规范的培养体系、更高的信息密度和更真实的项目经验。当然,高工资并不等于一切,但它往往是一个重要信号。能给到&nbsp;300、400&nbsp;元一天甚至更多的公司,往往对效率、能力和长期发展更有追求,也更可能处在一个有前景的赛道中。总结来说,实习工资不仅是钱的问题,更是公司态度、实力和发展前景的体现。在条件允许的情况下,争取一份“付得起你时间”的实习,本身就是一种理性选择。
北国牛马:你是不是忘了你一周只能上五天班,月薪6000那你日薪就得300了,日薪200一个月也就4000,也就刚好覆盖生活成本了
实习生工资多少才算正常?
点赞 评论 收藏
分享
01-05 09:14
同济大学 Java
心碎一号线:我要是9✌🏻我就选保研,保研了大四再找实习,实习之后,如果觉得自己不适合互联网工作模式,还能有其他选择,如果实习后决定了走互联网,也能提升学历提高竞争力
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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