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. Linux平台的SVN服务器的配置及搭建

    https://jingyan.baidu.com/article/54b6b9c08b35382d593b477c.html 一.安装SVN   1 在Linux平台上,SVN的软件包名称是subv ...

  2. Statement对象

    Statement 对象 创建 Statement 对象 在你准备使用 Statement 对象执行 SQL 语句之前,你需要使用 Connection 对象的 createStatement() 方 ...

  3. OpenLayers图层

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  4. Django学习之路由分发和反向解析

    原 Django学习之路由分发和反向解析 2018年07月12日 14:04:55 huangql517 阅读数 519 1>路由分发 我们之前学习的路由配置都是在项目的全局控制文件(项目名称目 ...

  5. 介绍vue项目中的axios请求(get和post)

    一.先安装axios依赖,还有qs依赖 npm install axios --save npm install qs --save qs依赖包用post请求需要用到的 插入一个知识点: npm in ...

  6. POJ3614 [USACO07NOV]防晒霜Sunscreen

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9333   Accepted: 3264 Descrip ...

  7. 【水滴石穿】ReactNativeDemo

    这个博主他的功底算是特别棒的了,能够把一些基础的例子,通过精巧的方式布局在一个小的demo里面 很值得我学习 放上博主的链接:https://github.com/jianiuqi/ReactNati ...

  8. 【JZOJ4895】【NOIP2016提高A组集训第16场11.15】三部曲

    =v= 因为外来的入侵,国王决定在某些城市加派士兵.所有城市初始士兵数量为0.当城市 被加派了k名士兵时.城市i的所有子城市需要被加派k+1名士兵.这些子城市的所有子城市需要被加派k+2名士兵.以此类 ...

  9. Kubernetes1.3新特性:支持GPU

    (一)  背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写.电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫" ...

  10. 应用中弹出 WiFi 提示框的方法

    如果 iOS 程序中用到了 WiFi,想有 WiFi 提示,只需要在 .plist 文件中加入如下 Key/Value 即可: 键名:ApplicationusesWi-Fi 值:YES 键名:SBU ...