传送门

A.BowWow and the Timetable

•题意

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

•思路

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

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

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

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

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

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

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

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

•代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e6+5;
 4 char s[maxn];
 5 int main()
 6 {
 7     scanf("%s",s+1);
 8     int len=strlen(s+1),flag=0;
 9     int cnt=(len+1)/2;
10     for(int i=2;i<=len;i++)
11         if(s[i]=='0') flag++;
12     if(flag==len-1 && len&1)
13         cnt--;
14     printf("%d\n",cnt);
15 }

View Code

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$个数中最大的补齐

•代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 int main()
 5 {
 6     int n,l,r;
 7     cin>>n>>l>>r;
 8     ll Min=0;
 9     int cnt,i;
10     for(i=1,cnt=1;i<=l;cnt*=2,i++)
11         Min+=cnt;
12     Min+=(n-l);
13
14     ll Max=0;
15     for(cnt=1,i=1;i<=min(n,r);cnt*=2,i++)
16         Max+=cnt;
17     cnt/=2;
18     if(r<=n)
19         Max+=1ll*(n-r)*cnt;
20     cout<<Min<<' '<<Max<<endl;
21 }

View Code

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不会有

•代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define inf 0x3f3f3f3f
 4 const int maxn=1e6+5;
 5 char s[105][105];
 6 int dis[105][105];
 7 int a[maxn],ans[maxn];
 8 int n,m;
 9
10 void Init()
11 {
12     for(int i=1;i<=n;i++)
13     {
14         for(int j=1;j<=n;j++)
15         {
16             dis[i][j]=inf;
17             if(i==j) dis[i][j]=0;
18             if(s[i][j]=='1') dis[i][j]=1;
19         }
20     }
21 }
22
23 void floyd()
24 {
25     for(int k=1;k<=n;k++)
26         for(int i=1;i<=n;i++)
27             for(int j=1;j<=n;j++)
28                 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
29 }
30
31 int main()
32 {
33     scanf("%d",&n);
34     for(int i=1;i<=n;i++)
35         scanf("%s",s[i]+1);
36     Init();
37     floyd();
38
39     scanf("%d",&m);
40     for(int i=1;i<=m;i++)
41         scanf("%d",a+i);
42
43     int cnt=0;
44     ans[++cnt]=a[1];///首
45     int pre=a[1];
46     for(int i=2;i<=m;i++)
47     {
48         int cur=a[i-1];
49         int nex=a[i];
50         if(pre==cur)
51             continue;
52         ///要不必须经过的点
53         ///不要必须经过的点
54         if(dis[pre][cur]+dis[cur][nex]!=dis[pre][nex])
55         {
56             ans[++cnt]=cur;
57             pre=cur;
58         }
59     }
60     ans[++cnt]=a[m];///尾
61
62     printf("%d\n",cnt);
63     for(int i=1;i<=cnt;i++)
64         printf("%d ",ans[i]);
65     puts("");
66 }

View Code

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$

•代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 const int maxn=1e6+4;
 5 char s[maxn];
 6 int a[maxn];
 7 int main()
 8 {
 9     scanf("%s",s+1);
10     int len=strlen(s+1);
11     int cnt=0;
12     for(int i=len;i>=1;i--)
13     {
14         if(s[i]=='0')
15             cnt++;
16         else
17         {
18             if(cnt) --cnt;
19             else s[i]='0';
20         }
21     }
22
23     printf("%s",s+1);
24 }

View Code

转载于:https://www.cnblogs.com/MMMinoz/p/11511281.html

CodeForces 1204 (#581 div 2)相关推荐

  1. Codeforces Round #581 (Div. 2)

    A:暴力. 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<al ...

  2. Codeforces Round #797 (Div. 3)无F

    Codeforces Round #797 (Div. 3)无F 这打的也太屎了,白天把G补了才知道简单的很,但f还是没头绪呜呜呜 Problem - A - Codeforces Given the ...

  3. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  4. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  5. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  6. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  7. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  8. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  9. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

最新文章

  1. 使php支持mbstring库以及使用
  2. 单行文字垂直/水平跑马灯效果
  3. android7.1默认背光亮度及编译调试
  4. 标准库函数、系统调用的区别
  5. 北京内推 | 阿里云视频处理算法团队招聘视频处理算法实习生
  6. 微云存照片会变模糊吗_QQ相册里的照片,为什么放一段时间就会变模糊?今天可算知道了...
  7. C++面向对象类的实例题目一
  8. 21秋期末考试工商企业文化10631k2
  9. 2014 网选 5014 Number Sequence(异或)
  10. 使用RNN预测股票价格系列二
  11. 我自己对于Netty的疑问
  12. 有关 delphi7读取 excel 报错EoleException with message '未找到提供程序,该程序可能未能正确安装' 解决方式
  13. python dict conver json
  14. 利用信号量机制实现前驱关系
  15. turtle库——绘制八边形、八角图形以及叠边形图形
  16. 电竞杨超越王思聪LOL夏季官方赛C 位出道 王校长真实水平是这样的!
  17. nginx 实现多端口转发
  18. Several alternative term weighting ~~ ——3. Proposed unsupervised term weighting schemes 提出的无监督词项加权方案
  19. 知识点滴 - 自行车分类
  20. 路由器输入三次密码 服务器响应吗,路由器三次密码错误怎么办?

热门文章

  1. python atan_Python
  2. PHP对象的内存模型
  3. rs485编程java_串行编程RS485
  4. linux redhate7 yum源,更换Red Hat Enterprise Linux 7 64位的yum为centos的版本
  5. markdown 字体颜色_一文搞定Markdown编辑头条号方法
  6. python要配置几个环境变量_Python环境变量配置
  7. 【mysql】时间戳
  8. 【spring-boot】启用数据缓存功能
  9. r型聚类分析怎么做_营销型网站怎么做?
  10. 学而思的python课怎么样_有在用学而思网校的同学觉得孙墨漪老师怎么样?报她的课值得吗?...