CodeForces 1204 (#581 div 2)
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)的更多相关文章
- 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] ...
- 01串LIS(固定串思维)--Kirk and a Binary String (hard version)---Codeforces Round #581 (Div. 2)
题意:https://codeforc.es/problemset/problem/1204/D2 给你一个01串,如:0111001100111011101000,让你改这个串(使0尽可能多,任意 ...
- Codeforces Round #581 (Div. 2)
A:暴力. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm& ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- Codeforces Round #581 (Div. 2)D(思维,构造,最长非递减01串)
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;char s[100007];int main ...
- Codeforces Round #581(Div. 2)
Codeforces Round #581(Div. 2) CF 1204 A. BowWow and the Timetable 题解:发现,$4$的幂次的二进制就是一个$1$后面跟偶数个$0$. ...
随机推荐
- jQuery $.isNumeric vs. $.isNaN vs. isNaN
在jQuery中,有几种方式可以判断一个对象是否是数字,或者可否转换为数字. 首先,jQuery.isNaN()在最新版本中已经被移除了(1.7之后),取而代之的是 jQuery.isNumeric ...
- UI2CODE复杂背景无法识别?闲鱼工程师这样打造高准确率方案
引言: 复杂背景内容提取指的是从复杂的背景中提取出特定的内容,例如在图片中提取特定的文字,在图片中提取特定的叠加图层等等.这是一个业界难题,基于传统的图像处理的方法存在准确率和召回率的问题,没法解决语 ...
- day10-12_线程queue(了解)
queue队列 :使用import queue,用法与进程Queue一样 queue is especially useful in threaded programming when informa ...
- sql查询报java.sql.SQLException: Column 'LC_ID' not found 的错误实际上是mysql在hibernate别名的问题
报java.sql.SQLException: Column 'LC_ID' not found 的错误实际上是mysql在hibernate别名的问题 我的查询sql是 String sql2 =& ...
- oracle函数 current_date
[功能]:返回当前会话时区中的当前日期 [参数]:没有参数,没有括号 [返回]:日期 [示例]select current_date from dual; 返回:2008-11-14
- 【[Offer收割]编程练习赛15 A】 偶像的条件
[题目链接]:http://hihocoder.com/contest/offers15/problem/1 [题意] [题解] 把3个数组的元素全都合并在一个数组里面; (当然你要记录每个数字原本是 ...
- 6 获取请求头和URL信息
@app.route("/req",methods=['GET','POST'])def req(): print(request.headers) #请求头的信息全部在这里面 p ...
- JQuery完整验证&密码的显示与隐藏&验证码
HTML <link href="bootstrap.css" rel="stylesheet"> <link href="gloa ...
- Spring Boot 集成日志logback + 控制台打印SQL
一: 控制台打印SQL application.properties中添加如下即可在控制台打印sql logging.level.com.fx.fxxt.mapper=debug 二:日志 因为Spr ...
- h5 的canvas绘制基本图形
文章地址:https://www.cnblogs.com/sandraryan/ canvas是一个标签,可用于绘制复杂图形,渲染效果比普通DOM快 某些低版本浏览器不支持 canvas 使用原生几乎 ...
