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. Node.js模拟发起http请求从异步转同步的5种方法

    使用Node.js模拟发起http请求很常用的,但是由于Node模块(原生和第三方库)提供里面的方法都是异步,对于很多场景下应用很麻烦,不如同步来的方便.下面总结了几个常见的库API从异步转同步的几种 ...

  2. LDAP Authentication Handler

    Including the Handler In the pom.xml file for your CAS Maven2 WAR Overlay, add the following depende ...

  3. python的解释器类型

    Python解释器 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规 ...

  4. Python Unittest根据不同测试环境跳过用例详解

    虽然现在用的Katalon,不过这篇Unittest基本的用法讲的还是不错的 转自:https://mp.weixin.qq.com/s/ZcrjOrJ1m-hAj3gXK9TjzQ 本文章会讲述以下 ...

  5. WPF/Silverlight深度解决方案:(九)HLSL自定义渲染特效之完美攻略(下)

    原文:WPF/Silverlight深度解决方案:(九)HLSL自定义渲染特效之完美攻略(下) 本想只用两节来完成关于HLSL自定义渲染相关知识的讲解,鉴于最近非常的多的朋友对此相当感兴趣,想知道最多 ...

  6. 连接池c3p0

    连接池c3p0 C3P0:hibernate和spring使用,有自动回收空闲连接的功能. 使用步骤: 1.导入jar包(c3p0-0.9.1.2.jar) 2.使用api a.硬编码(不推荐) ne ...

  7. oracle限制一个用户空闲时间

    alter system set resource_limit = true; create profile idletime limit idle_time 3; alter user outln ...

  8. 寻找 K8s 1.14 Release 里的“蚌中之珠”

    摘要: K8s 1.14 发布了,Release Note那么长,我们该从何读起? 本文由张磊.心贵.临石.徙远.衷源.浔鸣等同学联合撰写. Kubernetes 1.14.0 Release 已经于 ...

  9. execute和submit的区别与联系

    execute和submit都属于线程池的方法,execute只能提交Runnable类型的任务,而submit既能提交Runnable类型任务也能提交Callable类型任务. execute会直接 ...

  10. @codeforces - 1149D@ Abandoning Roads

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 点 m 条边的无向连通图,每条边的边权为 a 或 ...