C The Number Of Good Substrings

我原来的基本思路也是这样,但是写的不够好

注意算前缀和的时候,字符串起始最好从1开始。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<bitset> using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = 2e5+10;
string s;
int lst[maxn]; int main(){
ios::sync_with_stdio(false);
int _;
cin>>_;
while(_--){
cin>>s;
int pos = 0;
int len = s.length();
s = '#'+s;
for(int i=1; i<=len; i++){
if(s[i] == '1'){
lst[i] = pos;
pos = i;
}
}
int ans = 0;
for(int i=1; i<=len; i++){
int num = 0;
if(s[i] == '1')
//最多移动18次
for(int j=i; j<=len; j++){
num = num*2+s[j]-'0';
if(num>j-lst[i]) break;
//cout<<i<<" "<<lst[i]+1<<" "<<j<<endl;
ans ++;
}
}
}
cout<<ans<<endl;
} return 0;
}

D 有向图的环问题 Coloring Edges

给有向图的每一条边染色,使得不存在一个环,使得所有的边的颜色相同。

问最少的颜色数。

答案最大为2,然后判断是否存在有向环就可以了。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<bitset> using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
const int inf = 0x3f3f3f3f;
const int maxn = 5000+10;
struct Edge{
int v, id;
};
vector<Edge> G[maxn];
int n, m;
int res = 1;
int col[maxn];
int vis[maxn]; void dfs(int u){
vis[u] = 1;
for(int i=0; i<G[u].size(); i++){
int v = G[u][i].v;
int id = G[u][i].id;
if(vis[v] == 0) dfs(v);
else if(vis[v] == 1) {
res=2;
col[id]=2;
}
}
vis[u] = 2;
} int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
int u, v;
for(int i=1; i<=m; i++){
cin>>u>>v;
G[u].push_back(Edge{v, i});
col[i] = 1;
}
for(int i=1; i<=n; i++){
if(!vis[i]) dfs(i);
}
cout<<res<<endl;
for(int i=1; i<m; i++) cout<<col[i]<<" ";
cout<<col[m]<<endl; return 0;
}

E 线段树 Sum Queries?

维护每一个数的每一位

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<bitset> using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
#define pb(x) push_back(x)
#define cls(x, val) memset(x, val, sizeof(x))
#define fi first
#define se second
#define mp(x, y) make_pair(x, y)
#define inc(i, l, r) for(int i=l; i<=r; i++)
#define lc (rt<<1)
#define rc (rt<<1|1)
const int inf = 0x3f3f3f3f;
const int maxn = 2e5+10; int n, m, k; struct node{
int val[9][2]; void init(){memset(val,0x3f,sizeof(val));} void get(int x){
init();
int t=x;
for(int i=0;i<9;i++){
//若某一位有两个不为0,则一定unbalance.
if(t%10) val[i][0]=x;
t/=10;
}
} void print(){
for(int i=0;i<9;i++){
printf("%d: %d %d\n",i,val[i][0],val[i][1]);
}
printf("\n");
}
};
//只要有两个数,某一位上面的模数不为0,则一定是unblanced. void merge(node &b, node& c){
for(int i=0;i<9;i++){
for(int j=0;j<2;j++){
int t=b.val[i][j];
for(int k=0;k<2;k++){
if(t < c.val[i][k]) swap(t,c.val[i][k]);
}
}
}
} int a[maxn]; node tree[4*maxn]; void pushup(int rt, int l, int r){
if(l == r){ tree[rt].get(a[l]);
return ;
}
else{
memcpy(tree[rt].val,tree[lc].val,sizeof(tree[lc].val));
merge(tree[rc],tree[rt]);
}
} void build(int rt, int l, int r){
if(l < r){
int M = l + (r - l)/2;
build(lc,l,M); build(rc,M+1,r);
}
pushup(rt, l, r);
} void update(int rt ,int l, int r, int pos){
if(l < r){
int M = l + (r - l)/2;
if(pos<=M) update(lc,l,M,pos);
else update(rc,M+1,r,pos);
}
pushup(rt,l,r);
} node e; int ql, qr; void query(int rt, int l, int r){
if(ql <= l && qr >= r){
//cout<<233<<endl;
//tree[rt].print();
merge(tree[rt],e);
return;
}
else{
int M = l + (r - l)/2;
if(ql<=M) query(lc,l,M);
if(qr>=M+1) query(rc,M+1,r);
}
} int main(){
while(~scanf("%d%d", &n, &m)){
for(int i=1;i<=n;i++) scanf("%d",&a[i]); build(1,1,n);
while(m--){
int op; scanf("%d",&op);
if(op==1){
int pos; scanf("%d",&pos);
scanf("%d",&a[pos]);
update(1,1,n,pos);
}
else{
scanf("%d %d",&ql,&qr);
e.init(); query(1,1,n);
//e.print();
int ans = -1;
for(int i=0;i<9;i++){
if(e.val[i][1] == inf) continue;
int t = e.val[i][0] + e.val[i][1];
if(ans == -1 || ans > t) ans = t;
}
printf("%d\n",ans);
}
}
}
return 0;
}

随机推荐

  1. hdu 4512 (LCIS)

    好久没写解题报告了,最近几周好忙...感觉是我进大学以来最忙的一段时间了,要给新生准备下周三比赛的题目,下周五要去南京赛区,回来之后马上就要期中考试了...不想挂科   额,很早之前就看过关于LCIS ...

  2. 关于如何在部署环境修改process.env & 本地测试

    前言 最近在搞一些监控的东西, 需要根据不同的环境上报到不同的地址,中间遇到了一些问题,在这里简单总结分享下. 关于process.env 假如你对process.env 相关的概念还不熟悉, 请移步 ...

  3. 计算机网络 5.6-5.8 TCP/UDP

    来看看传输层的位置 要点: 传输层是为两个应用进程提供端到端的通信 传输层的复用和分用 传输层与应用层就是端口 (传输层的应用访问点 TSP) 传输层与网络层之间就是协议字段(网络层的 NTSP) 端 ...

  4. 基于docker的php调用基于docker的mysql数据库的方法

    1:建立基于docker的mysql,参考 Mac上将brew安装的MySql改用Docker执行 2:建立基于docker�php image 在当前目录,建立Dockerfile,内容如下 FRO ...

  5. MaxCompute 助力衣二三构建智能化运营工具

    摘要:本文由衣二三CTO程异丁为大家讲解了如何基于MaxCompute构建智能化运营工具.衣二三作为亚洲最大的共享时装平台,MaxCompute是如何帮助它解决数据提取速度慢.数据口径差异等问题呢?程 ...

  6. The 16th UESTC Programming Contest Final 游记

    心情不好来写博客. 为了满足ykk想要气球的愿望,NicoDafaGood.Achen和我成功去神大耍了一圈. 因为队名一开始是LargeDumpling应援会,然后队名被和谐,变成了学校的名字,顿时 ...

  7. NodeJs的简介及安装

    首先 分享一下NodeJs的应用场景吧: Web聊天室(IM):Express + Socket.io socket.io一个是基于Nodejs架构体系的,支持websocket的协议用于时时通信的一 ...

  8. Directx11教程(57) 环境映射

    原文:Directx11教程(57) 环境映射       建好skydome后,如果我们想让其中的某个物体,比如那个球体来映射出周围环境的蓝天白云(不包括自己附近的物体),该怎么做呢?此时可以把这个 ...

  9. CSS实现导航栏底部动态滚动条效果

    预习了CSS3部分的新知识,想着在不使用JS的情况下实现导航栏滚动条效果,如下: 实现滚动条效果,其实就是在<li></li>标签中让<span>元素的宽度由0变化 ...

  10. iOS 避免循环导入及自定义控件delegate和protocol的相互引用的问题

    在OC中一般来说ClassA同ClassB想要避免重复import的话两种方案 1. 若ClassA.h 头文件中已经导入了ClassB,即#import "ClassB.h" , ...