2021ccpc(昆明站题解)


A.A Hero Named Magnus

因为核酸检测然后迟到,到了队友开始看题,因为没有榜(是训练),所以我们就去看运行时间少的,然后就看了A题,我有个好习惯 先看输出样例,看了一眼满足2*x-1,然后队友就开始写,因为对数据范围没处理好,然后爆int了,然后改成long long,就AC了(上次ICPOC昆明站也是看样例,猜出来结论,需要处理一下取整,不过我是志愿者,旁观者清吧)
题目链接

#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<stdlib.h>
#include<string.h>
using namespace std;
const int N=1e6+7;
int a[N],b[N],dp[505][505];
#define ll long long
int main()
{
   
  ll t;
  ll p,q;
  cin>>t;
  for(ll i=1;i<=t;i++)
  {
   
    cin>>p;
    cout<<2*p-1<<endl;
  }
  return 0;
}

G.Occupy the Cities

在这里插入图片描述
在这里插入图片描述
题目大意:给定一个0,1串,然后通过某种操作将其全变为1,要按照下列规则;对于所有的1,一次操作都可以向左或右同化一个(将其变为1),则此次的同化为的1,也会参与下次变化,输出一共最少进行多少次操作
例;0100-》0110-》1111,输出2
思路:二分答案,关键是check函数,我们将遇到的第一个1,前面的0进行记录
1.若未同化0的数量大于mid(二分的数),则直接返回false,说明若这个1只考虑向左同化都不能将左边的全变为1,当然就不符合条件
在这里插入图片描述

2.当未同化0的个数的等于mid,则说明在不考虑右边的情况下,可以将未同化的0变为1,所以1的第一步一定向左同化,考虑到第一步向左同化后,一开始的1可以向右同化的数量为mid-1
在这里插入图片描述

3.当未同化的0的个数小于mid,则说明这个1可以先往右同化一个然后再同时向两边同化,所以可以向左和向右都可以同化mid
在这里插入图片描述
后面可以用负数代表这个1往右同化多少,细节见代码

#include<bits/stdc++.h>
#define ll long long
#define PI 3.141592653589793
#define E 2.718281828459045
#define 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值