Codeforces Round #735 (Div. 2) 题解

题目链接

在这里插入图片描述
A 题意: 计算整个区间内最大的值,满足一个区间的max*区间的min
分析:
考虑到我们固定一个数,那么左右移动的时候可能随着长度增加,区间min会改变(我们先假设这个固定的数就是该区间的max)那么我们只需要计算相邻两个数的乘积即可。

ll n;
read(n);
ll ans=0;
for(int i=1; i<=n; i++)
{
    read(a[i]);
    if(i>=2)
    {
        ans=max(ans,a[i]*a[i-1]);
    }
}
printf("%lld\n",ans);


在这里插入图片描述
B题意: 如图计算那个式子的最大值。
分析
K只有不到100 ,而且ai的范围也不大。因此i*j 越大,K的影响就越小,因此只需要枚举后面的一部分数即可。

  for(int i = 1;i <= n;i++) read(a[i]);
        ll res = -0x3f3f3f3f3f3f3f3f;
    	for(int i = max(1,n - 200);i <= n - 1;i++)
    		for(int j = i + 1;j <= n;j++)
    			res = max(res,1ll * i * j - 1ll * k * (a[i] | a[j]));

在这里插入图片描述
直接枚举n ,m 的后i 位,统计答案取min即可
在这里插入图片描述
构造一个长度为N的字符串,任何一个子串出现奇数次。
考虑到这么一个序列 x*(n)+y+x*(n-1) 显然x*(n) 相当于在n-1的基础上多加了一个字符,那么多产生一个长度为n的子串。那么本来x*(n)中的x*(n-1) 就会因为多加入一个字符,每个子串多增加奇数个。因此可以达成任意子串出现奇数次。

while(t--){
ll n;
    read(n);
        for(int i=1;i<=n/2;i++)
           printf("a");
        printf("b");
        for(int i=1;i<=n/2-1;i++)
         printf("a");
        if(n&1 && n>1)printf("c");
        printf("\n");
}
 
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值