A.连续1的个数,0用来分割,注意连续的0。

#include<bits/stdc++.h>
using namespace std; int n;
string s; int main()
{
ios::sync_with_stdio();
cin >> n >> s;
int now = ,flag = ;
for(int i = ;i < n;i++)
{
if(s[i] == '') now++,flag = ;
else
{
cout << now;
now = ;
flag = ;
}
}
if(now || flag) cout << now;
cout << endl;
return ;
}

B.暴力每个点放X,判断即可。

#include<bits/stdc++.h>
using namespace std; string s[]; bool ok()
{
for(int i = ;i <= ;i++)
{
for(int j = ;j <= ;j++)
{
if(i <= )
{
int flag = ;
for(int ii = i;ii < i+;ii++)
{
if(s[ii][j] != 'X') flag = ;
}
if(flag) return ;
}
if(j <= )
{
int flag = ;
for(int jj = j;jj < j+;jj++)
{
if(s[i][jj] != 'X') flag = ;
}
if(flag) return ;
}
if(i <= && j <= )
{
int flag = ;
for(int ii = i,jj = j;ii < i+;ii++,jj++)
{
if(s[ii][jj] != 'X') flag = ;
}
if(flag) return ;
}
if(i >= && j <= )
{
int flag = ;
for(int ii = i,jj = j;ii > i-;ii--,jj++)
{
if(s[ii][jj] != 'X') flag = ;
}
if(flag) return ;
}
}
}
return ;
}
int main()
{
ios::sync_with_stdio();
for(int i = ;i <= ;i++)
{
cin >> s[i];
s[i] = ' '+s[i];
}
for(int i = ;i <= ;i++)
{
for(int j = ;j <= ;j++)
{
if(s[i][j] != '.') continue;
s[i][j] = 'X';
if(ok())
{
cout << "YES" << endl;
return ;
}
s[i][j] = '.';
}
}
cout << "NO" << endl;
return ;
}

C.排序后模拟。

#include<bits/stdc++.h>
using namespace std; int n,k,a[]; int main()
{
ios::sync_with_stdio();
cin >> n >> k;
for(int i = ;i <= n;i++) cin >> a[i];
sort(a+,a++n);
int ans = ;
for(int i = ;i <= n;i++)
{
while(k* < a[i])
{
k *= ;
ans++;
}
k = max(k,a[i]);
}
cout << ans << endl;
return ;
}

D.模拟,给字母少的先分配。

#include<bits/stdc++.h>
using namespace std; string s1,s2;
map<char,int> mp; int main()
{
ios::sync_with_stdio();
cin >> s1 >> s2;
for(int i = ;i < s1.length();i++) mp[s1[i]]++;
int now = ;
for(int i = ;i < s1.length();i++)
{
if(s1[i] != '?') continue;
now = (now+)%s2.length();
if(mp[s2[now]])
{
mp[s2[now]]--;
i--;
}
else s1[i] = s2[now];
}
cout << s1 << endl;
return ;
}

E.优先队列逆向拓扑排序。

#include<bits/stdc++.h>
using namespace std; int n,m,in[] = {},ans[];
vector<int> v[]; int main()
{
ios::sync_with_stdio();
cin >> n >> m;
while(m--)
{
int x,y;
cin >> x >> y;
v[y].push_back(x);
in[x]++;
}
priority_queue<int> q;
for(int i = ;i <= n;i++)
{
if(!in[i]) q.push(i);
}
int cnt = n;
while(!q.empty())
{
int now = q.top();
q.pop();
ans[now] = cnt--;
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i];
if(--in[t] == ) q.push(t);
}
}
for(int i = ;i <= n;i++) cout << ans[i] << " ";
cout << endl;
return ;
}

F.预处理最长公共前缀,dp枚举最小串。

#include<bits/stdc++.h>
using namespace std; string s;
int lcp[][] = {},dp[],cnt[]; int main()
{
ios::sync_with_stdio();
cin >> s;
int n = s.length();
memset(dp,0x3f,sizeof(dp));
for(int i = ;i <= ;i++) cnt[i] = ;
for(int i = ;i <= ;i++) cnt[i] = ;
for(int i = ;i <= ;i++) cnt[i] = ;
for(int i = ;i <= ;i++) cnt[i] = ;
for(int i = n-;i >= ;i--)
{
for(int j = n-;j >= i;j--)
{
if(s[i] == s[j]) lcp[i][j] = lcp[i+][j+]+;
else lcp[i][j] = ;
}
}
dp[] = ;
for(int i = ;i < n;i++)
{
for(int j = ;i+j <= n;j++)
{
for(int k = i+j,t = ;k <= n;k += j,t++)
{
if(lcp[i][k-j] < j) break;
dp[k] = min(dp[k],dp[i]+j+cnt[t]);
}
}
}
cout << dp[n] << endl;
return ;
}

G.记录一个最小的点即可。

#include<bits/stdc++.h>
using namespace std; int n,q,ans[];
vector<int> v[]; int dfs(int now,int pre)
{
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i];
if(t == pre) continue;
ans[t] = min(t,ans[now]);
dfs(t,now);
}
} int main()
{
ios::sync_with_stdio();
cin >> n >> q;
int x,y;
for(int i = ;i < n;i++)
{
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
int lastt = ;
cin >> x >> y;
y = (lastt+y)%n+;
ans[y] = y;
dfs(y,-);
int minn = y;
while(--q)
{
int x,y;
cin >> x >> y;
y = (y+lastt)%n+;
if(x == ) minn = min(minn,ans[y]);
else
{
lastt = min(ans[y],minn);
cout << lastt << endl;
}
}
return ;
}

Codeforces_825的更多相关文章

随机推荐

  1. 1026 程序运行时间 (15 分)C语言

    题目描述 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock tic ...

  2. 1024 科学计数法 (20 分)C与Java

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部 ...

  3. Java散点

    1.在Java中,所有需要保存在常量池中的数据,长度最大不能超过65535,这当然也包括字符串的定义

  4. kubernetes-dashboard部署

    参考资料: kubernetes官方文档 官方GitHub 创建访问用户 解决chrome无法访问dashboard 官方部署方法如下: kubectl apply -f https://raw.gi ...

  5. Spark学习笔记(二)—— Local模式

    Spark 的运行模式有 Local(也称单节点模式),Standalone(集群模式),Spark on Yarn(运行在Yarn上),Mesos以及K8s等常用模式,本文介绍第一种模式. 1.Lo ...

  6. 虚拟机安装LEDE旁路由实现软路由功能

    如何在虚拟上安装LEDE软路由,接下来我们一步一步操作. 1.首先到https://firmware.koolshare.cn/ 下载虚拟机下专用盘如图标记均可 2.虚拟机创建 选择下载好的文件 保持 ...

  7. elk日志使用

    elasticsearch +log4net.ElasticSearch+kibana(windows) 需要的东西(目前用的5.6版本) 1.先安装jdk和jre 配置java环境       2. ...

  8. 2019牛客暑期多校第二场题解FH

    F.Partition problem 传送门 题意:有2n个人,分两组,每组n个,要求sum(vij)最大值. 题解:n并不大我们可以枚举每个人是在1组还是2组爆搜. 代码: #include &l ...

  9. Netty快速入门(08)ByteBuf组件介绍

    前面的内容对netty进行了介绍,写了一个入门例子.作为一个netty的使用者,我们关注更多的还是业务代码.也就是netty中这两种组件: ChannelHandler和ChannelPipeline ...

  10. python线性数据结构

    1.栈(Stack)(后进先出) 栈的实现: class Stack: def __init__(self): self.items = [] def isEmpty(self): return se ...