把问题转换为求区间内1为奇数的区间有多少个
那么直接记录从1开始为奇数和偶数的区间有多少就算出这个了

但是有不合法的就是只有1个1的区间
所以再减一下 重复的再加回来

#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <queue>
#include <cstdio>
#include <map>
#include <set>
#include <utility>
#include <stack>
#include <cstring>
#include <cmath>
#include <vector>
#include <ctime>
#include <bitset>
using namespace std;
#define pb push_back
#define sd(n) scanf("%d",&n)
#define sdd(n,m) scanf("%d%d",&n,&m)
#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define sld(n) scanf("%lld",&n)
#define sldd(n,m) scanf("%lld%lld",&n,&m)
#define slddd(n,m,k) scanf("%lld%lld%lld",&n,&m,&k)
#define sf(n) scanf("%lf",&n)
#define sff(n,m) scanf("%lf%lf",&n,&m)
#define sfff(n,m,k) scanf("%lf%lf%lf",&n,&m,&k)
#define ss(str) scanf("%s",str)
#define ans() printf("%d",ans)
#define ansn() printf("%d\n",ans)
#define anss() printf("%d ",ans)
#define lans() printf("%lld",ans)
#define lanss() printf("%lld ",ans)
#define lansn() printf("%lld\n",ans)
#define fansn() printf("%.6f\n",ans)
#define r0(i,n) for(int i=0;i<(n);++i)
#define r1(i,e) for(int i=1;i<=e;++i)
#define rn(i,e) for(int i=e;i>=1;--i)
#define rsz(i,v) for(int i=0;i<(int)v.size();++i)
#define szz(x) ((int)x.size())
#define mst(abc,bca) memset(abc,bca,sizeof abc)
#define lowbit(a) (a&(-a))
#define all(a) a.begin(),a.end()
#define pii pair<int,int>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define mp make_pair
#define lrt rt<<1
#define rrt rt<<1|1
#define X first
#define Y second
#define PI (acos(-1.0))
#define sqr(a) ((a)*(a))
typedef long long ll;
typedef unsigned long long ull;
const ll mod = 1000000000+7;
const double eps=1e-9;
const int inf=0x3f3f3f3f;
const ll infl = 10000000000000000;
const int maxn=  200000+10;
const int maxm = 40000+10;
//Pretests passed
int in(int &ret)
{char c;int sgn ;if(c=getchar(),c==EOF)return -1;while(c!='-'&&(c<'0'||c>'9'))c=getchar();sgn = (c=='-')?-1:1;ret = (c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9')ret = ret*10+(c-'0');ret *=sgn;return 1;
}char s[maxn];int main()
{
#ifdef LOCALfreopen("input.txt","r",stdin);
//    freopen("output.txt","w",stdout);
#endif // LOCALint t;sd(t);while(t--){int n;sd(n);ss(s+1);ll x[2];ll ans = 0;int now = 0;x[0] = 1;x[1] = 0;r1(i,n){if(s[i]-'0')now^=1;ans += x[now^1];x[now]++;}int last = -1;for(int i=1;i<=n;++i){if(s[i]-'0'){if(last==-1)last = i;else{ans -= i - last ;last = i;}}}if(last!=-1&&last!=n)ans -= n + 1 - last;else if(last==n)--ans;last = -1;for(int i=n;i>=1;--i){if(s[i]-'0'){if(last==-1)last = i;else{ans -= last - i ;last = i;}}}if(last!=-1&&last!=1)ans -= last ;else if(last==1)ans--;r1(i,n)if(s[i]-'0')++ans;lansn();}return 0;
}

2017 ACM Arabella Collegiate Programming Contest A. Sherlock Bones GYM101350A相关推荐

  1. 2017 ACM Arabella Collegiate Programming Contest

    Gym101350A. Sherlock Bones 题目大意: 给定一个长度为 \(n\) 的 \(01\) 序列 \(\{s_n\}\),定义 \(F(i, j)\) 表示序列第 \(i\) 项到 ...

  2. 2017 ACM Arabella Collegiate Programming Contest(solved 9/13, complex 12/13)

    A.Sherlock Bones 题意: 给出长度为n的01串,问f(i,j)=f(j,k),(i<j<k)的i,j,k取值种数.其中f(i,j)表示[i,j]内1的个数, 且s[j]必须 ...

  3. 2017 ACM Arabella Collegiate Programming Contest(solved 11/13)

    省选考前单挑做点ACM练练细节还是很不错的嘛- 福利:http://codeforces.com/gym/101350 先来放上惨不忍睹的virtual participate成绩(中间跑去食堂吃饭于 ...

  4. 2017 ACM Arabella Collegiate Programming Contest div2的题,部分题目写个题解

    F. Monkeying Around   维护点在多少个线段上 http://codeforces.com/gym/101350/problem/F 题意:有m个笑话,每个笑话的区间是[L, R], ...

  5. 2017 ACM Arabella Collegiate Programming Contest G. Snake Rana GYM101350G

    先算一下总的子矩阵个数 总共最多只有20个点 状压一下然后枚举 容斥一下 把求出来的答案减去包含1个点的子矩阵再加上包含2个点的减去3个点的-- #include <iostream> # ...

  6. 【容斥】2017 ACM Arabella Collegiate Programming Contest

    比赛连接 G. Snake Rana Old Macdonald wants to build a new hen house for his hens. He buys a new rectangu ...

  7. 2017 ACM Arabella Collegiate Programming Contest E. Competitive Seagulls GYM101350E

    博弈经典套路 考虑把可选择的操作变成2个相同的 然后跟着对手操作 为奇数的时候选一个奇数把两边留出相同长度的白色 为偶数的时候选一个2把两边留出相同长度的白色 那么只有2 和 3 是不可以的 int ...

  8. 2017 ACM Arabella Collegiate Programming Contest F. Monkeying Around GYM101350F

    对单个点考虑 实际上每个点的结果只被最后的那种操作影响 那么处理一下每个点对应的最后一个操作种类 然后对每个种类都和对应的点都检查一下是否被操作了2次 转化成n个点 m个区间 多少点被覆盖>=2 ...

  9. 脑洞 博弈 E. Competitive Seagulls 2017 ACM Arabella Collegiate Programming Contest

    题目链接:http://codeforces.com/gym/101350/problem/E 题目大意:给你一个长度为n的方格,方格上面都被染色成了白色.每次染色都是选择白色的,假设目前选择的这块白 ...

最新文章

  1. 马斯克欢庆特斯拉年交付50万辆!国产三雄创新高,逼近其1/5
  2. 《CCNP SWITCH 300-115认证考试指南》——第1章 企业园区网络的设计
  3. test_bit、set_bit和clear_bit
  4. 《C++PrimerPlus》阅读笔记 + 源码实践
  5. 【开源项目】C++BASE64图像编解码算法
  6. java怎么将程序保存在桌面_在Java桌面应用程序中保留数据的最佳方法是什么?...
  7. SpringMVC框架搭建( 使用Jar包搭建)
  8. easyui datagrid如何自适应浏览器的宽度和高度
  9. 苹果Ma视频剪辑软件:DaVinci Resolve Studio (达芬奇调色)
  10. 20个编写现代 CSS 代码的建议
  11. 将c语言编译成verilog,是否可以将System Verilog函数编译为C或C?
  12. 半导体PN结的工作原理
  13. 米兔机器人恐龙拼图手册_米兔积木 篇三:我与小米积木有个约会之米兔机器人平衡车版...
  14. Java读取文件夹下的文件并进行处理
  15. 计算机网络 『内部网关协议IGP中的路由信息协议RIP』
  16. 工具推荐——Apt_t00ls
  17. 最热门的十种编程语言,总有一种适合你
  18. 微信小程序 text 标签小技巧
  19. 计算机桌面怎么自定义,电脑怎么换壁纸自定义
  20. Linux之curl 风骚用法

热门文章

  1. Mackevision 发布 2016 年回顾与展望
  2. VMware 虚拟器安装kali镜像
  3. (附源码)计算机毕业设计SSM综合众筹网站
  4. 利用iframe实现局部打印(区域打印)
  5. B-样条曲线——动机 Motivation
  6. supervisor 初探
  7. mysql中sql_mode的那些问题
  8. 微信接入服务器源码,经典论坛程序Discuz! Q 1.0 发布:完全开放源码,原生接入微信...
  9. IT科技行业发展现状,未来发展方向有哪些?
  10. Dubbo 实现原理与源码解析系列 —— 精品合集