传送门

A.BowWow and the Timetable

•题意

给你一个二进制数,让你求小于这个数的所有4的幂的个数

•思路

第一反应是二进制与四进制转换

(其实不用真正的转换 QwQ)

由于二进制的两位对应四进制的一位

所以可以得到四进制下的位数

四进制的位数就是小于等于这个数的所有4的幂的个数,类比10进制下10的幂

由于不能有等于,所以根据二进制判断一下这个数是不是4的幂

因为12,1002,100002 ,二进制下4的幂除了首位的1,后面是偶数个0

所以判断是否是1带偶数个0,是的话个数减一

•代码

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
char s[maxn];
int main()
{
scanf("%s",s+);
int len=strlen(s+),flag=;
int cnt=(len+)/;
for(int i=;i<=len;i++)
if(s[i]=='') flag++;
if(flag==len- && len&)
cnt--;
printf("%d\n",cnt);
}

B.Mislove Has Lost an Array

•题意

数组中只存在$1$或者$x$

$x$是偶数并且$x/2$必须在数组中存在

给定$l,r$数组中最少有$l$个不同的数,最多有$r$个不同的数

求数组里数的和的最小最大值

•思路

最小值是有$1,2,4...$等$l$个数,如果不足n个用$1$补齐

最大值是有$1,2,4...$等$r$个数,如果不足用这$r$个数中最大的补齐

•代码

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int n,l,r;
cin>>n>>l>>r;
ll Min=;
int cnt,i;
for(i=,cnt=;i<=l;cnt*=,i++)
Min+=cnt;
Min+=(n-l); ll Max=;
for(cnt=,i=;i<=min(n,r);cnt*=,i++)
Max+=cnt;
cnt/=;
if(r<=n)
Max+=1ll*(n-r)*cnt;
cout<<Min<<' '<<Max<<endl;
}

C. Anna, Svyatoslav and Maps

•题意

给出邻接矩阵表示一个有向图

"1"代表有路,"0"代表没有路

给出长度为$m$的序列,表示一条最短路

求,这个序列的一个子序列s,

满足这个子序列s的最短路是m的序列,且s最短

•思路

由于从一个点到另一个点的路径可能不止一条

一旦固定了路径,那么从这个点到另一个点不必须经过的点如果在固定的路径中的话

就必须有,防止从其它点经过

二那些必须经过的点,就不用有了,因为要使长度最短

固定路径1,2,3,4

1可以直接到3而不必须经过2,但是固定路径里有2

所以2必须存在,才能使得经过1,2

2到4必须经过3,所以2->4路径有存在了3

为了使s最短,3不会有

•代码

 #include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=1e6+;
char s[][];
int dis[][];
int a[maxn],ans[maxn];
int n,m; void Init()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
dis[i][j]=inf;
if(i==j) dis[i][j]=;
if(s[i][j]=='') dis[i][j]=;
}
}
} void floyd()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%s",s[i]+);
Init();
floyd(); scanf("%d",&m);
for(int i=;i<=m;i++)
scanf("%d",a+i); int cnt=;
ans[++cnt]=a[];///首
int pre=a[];
for(int i=;i<=m;i++)
{
int cur=a[i-];
int nex=a[i];
if(pre==cur)
continue;
///要不必须经过的点
///不要必须经过的点
if(dis[pre][cur]+dis[cur][nex]!=dis[pre][nex])
{
ans[++cnt]=cur;
pre=cur;
}
}
ans[++cnt]=a[m];///尾 printf("%d\n",cnt);
for(int i=;i<=cnt;i++)
printf("%d ",ans[i]);
puts("");
}

D.Kirk and a Binary String

•题意

给你一个$01$字符串s,让你找到一个t串,使得

  • t串与s串的区间所有单调非递减长度相同
  • t串中0个数最多

•思路

对于一个字符串,当前位置有$0,1$两种情况

  • 当前位置是0

  当前位置是0,对于以他为起点的单调非递减子序列肯定有贡献,

  如果变为1,大多数情况下长度会减小(除了0后面全是1的情况,011111长度不变)

  如果变为1,0的数量比不变减少违背第二个任务

  • 当前位置是1

  如果变为0,对于以他(也就是以1) 为起点的单调非递减子序列来说,长度无影响

  对于以0为起点的单调非递减子序列来说,长度会受到影响

既然想要更多的0,那就需要尽可能的把1 变成0,那如何才能没有影响呢?

那就需要以他(也就是以1) 为起点的单调非递减子序列的长度大于以0为起点的单调非递减子序列长度

因为影响大局的最长的那个,那就让即使小的变化了,也不会对大局产生影响!

换句话说,若想将$1$ 变为 $0$ ,必须保证后面所有的区间的单调非递减子序列长度必须和 1 的个数相等

也就是从后往前找,当$1$的个数大于$0$的个数时,$1$才可以变成$0$

•代码

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e6+;
char s[maxn];
int a[maxn];
int main()
{
scanf("%s",s+);
int len=strlen(s+);
int cnt=;
for(int i=len;i>=;i--)
{
if(s[i]=='')
cnt++;
else
{
if(cnt) --cnt;
else s[i]='';
}
} printf("%s",s+);
}
 

CodeForces 1204 (#581 div 2)的更多相关文章

  1. Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学

    Codeforces Round #581 (Div. 2)-E. Natasha, Sasha and the Prefix Sums-动态规划+组合数学 [Problem Description] ...

  2. 01串LIS(固定串思维)--Kirk and a Binary String (hard version)---Codeforces Round #581 (Div. 2)

    题意:https://codeforc.es/problemset/problem/1204/D2 给你一个01串,如:0111001100111011101000,让你改这个串(使0尽可能多,任意 ...

  3. Codeforces Round #581 (Div. 2)

    A:暴力. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm& ...

  4. Codeforces Round #581 (Div. 2) C. Anna, Svyatoslav and Maps (Floyd 算法,最短路)

    C. Anna, Svyatoslav and Maps time limit per test2 seconds memory limit per test256 megabytes inputst ...

  5. D2. Kirk and a Binary String (hard version) D1 Kirk and a Binary String (easy version) Codeforces Round #581 (Div. 2) (实现,构造)

    D2. Kirk and a Binary String (hard version) time limit per test1 second memory limit per test256 meg ...

  6. Codeforces Round #581 (Div. 2) B. Mislove Has Lost an Array (贪心)

    B. Mislove Has Lost an Array time limit per test1 second memory limit per test256 megabytes inputsta ...

  7. Codeforces Round #581 (Div. 2)A BowWow and the Timetable (思维)

    A. BowWow and the Timetable time limit per test1 second memory limit per test256 megabytes inputstan ...

  8. Codeforces Round #581 (Div. 2)D(思维,构造,最长非递减01串)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;char s[100007];int main ...

  9. Codeforces Round #581(Div. 2)

    Codeforces Round #581(Div. 2) CF 1204 A. BowWow and the Timetable 题解:发现,$4$的幂次的二进制就是一个$1$后面跟偶数个$0$. ...

随机推荐

  1. Inno setup 卸载时删除程序文件夹(文件)

    Inno setup 卸载时删除程序文件夹(文件) //删除所有配置文件以达到干净卸载的目的 procedure CurUninstallStepChanged(CurUninstallStep: T ...

  2. node.js(连接mysql)

    mysql语句中的SQL sql语句中的分类: ---DDL:(data define language)定义数据列(create,drop,alter,truncate) ---DML:(data ...

  3. 程序中提醒用户进去App Store 评分 跳转 代码

           大家都知道,评论和评分是决定app在appstore中排名的重要因素,但是大部分用户下载安装APP后却不会去点评,所以添加提示用户去点评的功能是很必要的,如下是代码: 很多用户用了好软件 ...

  4. 字符串Hash算法比较

    基本概念所谓完美哈希函数,就是指没有冲突的哈希函数,即对任意的 key1 != key2 有h(key1) != h(key2).设定义域为X,值域为Y, n=|X|,m=|Y|,那么肯定有m> ...

  5. 原生js扫雷代码

    思路要点: 1. 随机地雷放到一个二维数组中: 2. 每一个格子要统计周围有几颗雷: 3. 每一个格子是否处于打开状态,用于判断是否赢得游戏: 4. 如果点击到周围没有雷的地方,把周围的打开: 具体的 ...

  6. selenium实现网页截全屏

    from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--headless' ...

  7. 上传图片如何对图片进行压缩canvas

    前言:哈喽,朋友们,最近一直在马不停蹄地赶项目,很久没有写博客了.今天我们来看一下前端上传图片地时候如何对图片进行压缩 1.图片上传 我近期写项目都是使用的VUE,这里上传图片使用了Element-u ...

  8. poj 1263 Reflections (Simple Geometry)

    1263 -- Reflections 简单计算几何.题目给出射线以及若干个不相交的圆,求出射线会在哪些圆上反弹,依次写出反弹球的编号. 代码如下: #include <cstdio> # ...

  9. python不得不知的几个开源项目

    1.Trac Trac拥有强大的bug管理 功能,并集成了Wiki 用于文档管理.它还支持代码管理工具Subversion ,这样可以在 bug管理和Wiki中方便地参考程序源代码. Trac有着比较 ...

  10. HTML静态网页--JavaScript-简介

    JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司(已 ...