Codeforces Round #629 (Div. 3)B.K-th Beautiful String

在这里插入图片描述
在这里插入图片描述
该题目的意思:两个b在一堆a里面不断地移动过,当两个b走到一起时,前面的b回向前移动一位后面的一个b回到最后面的位置,我们可有题目给的10种情况可得到规律前一个b 的位置变化为1,2,4,7……所以可以用一个数组将大量的数据装在一个数组里去判断第一个b出现的位置,再判断第二个b出现的位置。
代码如下:

public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  int arr[]=new int [300000];
  arr[2]=1;
  int x=1;
  for(int i=3;i<arr.length-1;i++) {
   arr[i]=arr[i-1]+x;
   x++;
  }
  //System.out.println(arr[5]);
  for(int t=sc.nextInt();t>0;t--) {
   int n=sc.nextInt();
   int m=sc.nextInt();
   int a=0,b=0;
   StringBuilder str=new StringBuilder("");
   for(int i=0;i<arr.length;i++) {
    if(m>=arr[i]&&m<arr[i+1]) {
     a=i;
     b=m-arr[i]+1;
     //System.out.println(a+" "+b);
     break;
     
    }
   }
   for(int i=1;i<=n;i++) {
    if(i==a||i==b) {
     str=str.append("b");
    }else {
     str=str.append("a");
    }
   }
   System.out.println(str.reverse());
  }
 }

改代码用String回出现超时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值