C~F Java题解,代码已去除冗余~~~
贪心,凡是遇到跟前边一样的字符,就换成既跟前边不一样,也跟后边不一样的字符,时间复杂度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));
}
}
按数据模拟即可,时间复杂度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);
}
}
}
}
若固定了序列的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);
}
}
推公式即可,对于所求,可知其通项公式为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;
}
}