Pascal & C++——NOIP模拟题——小X分砖块
来源:互联网 发布:刚开的淘宝店怎么做 编辑:程序博客网 时间:2024/06/05 19:34
小X分砖块
问题描述 小X喜欢跟着爸爸跑到建筑工地上去。
这天,小X看到一排砖,每块要么是白色的(0),要么是黑色的(1)。小X想把这排
砖分成若干非空段,使得每段白砖和黑砖块数的比例相同。
当然,小X可以直接把整排砖作为一段,那就太简单了。为了增加难度,小X想知道最
多能分成多少段,例如
100011= 10+ 0011 (即样例1,最多分成2段,比例为1:1);
0001110000000001=0001+11000000+0001 (即样例2,最多分成3段,比例为3:1)。
小X百思不得其解,希望你帮帮他。
输入格式
第一行包含一个整数N。我们将用N行来描述这排砖,初始时这排砖为空。
接下来N行,每行包含用一个空格隔开的两个整数Ki,Ci (Ci只可能是0或1),表示
在上一行描述完后尾部又有了Ki块颜色为Ci的砖。
输出格式
第一行包含一个整数,表示最多能分成的段数。
样例输入1
3
11
30
2 1
样例输出1
2
样例输入2
4
30
3 1
9 0
11
样例输出2
3
数据范围
对于30%的数据,N=1。
对于60%的数据,所有Ki均相等。
对于100%的数据,1≤N≤100000,1≤Ki≤1000000000,砖的总块数不超过1000000000。
#include<cstdio>#include<vector>using namespace std;int main(){freopen("brick.in","r",stdin);freopen("brick.out","w",stdout);int n,ans=0,w,e;scanf("%d",&n);vector <int> a;vector <int> b;long long s[2]={0};int t[2]={0};for(int i=0;i<n;++i){scanf("%d%d",&w,&e);a.push_back(w);b.push_back(e);s[b[i]]+=a[i];}if(!s[0]||!s[1]){printf("%d\n",s[0]+s[1]);return 0;}for(int i=0;i<n;++i){int x=b[i],y=b[i]^1;if(s[y]&&!(s[x]*t[y]%s[y])){int z=s[x]*t[y]/s[y]-t[x];if(z>=1&&z<=a[i]) ++ans;}t[x]+=a[i];}printf("%d\n",ans);return 0;}
varn,ans,i,x,y,z:longint;a,b:array [0..100001] of longint;s,t:array [0..2] of int64;begin assign(input,'brick.in'); assign(output,'brick.out'); reset(input); rewrite(output); read(n); for i:=0 to n-1 do begin read(a[i],b[i]); s[b[i]]:=s[b[i]]+a[i]; end; if (s[0]=0)or(s[1]=0) then begin write(s[0]+s[1]); exit(); end; for i:=0 to n-1 do begin x:=b[i]; if x=1 then y:=0 else y:=1; if (s[y]<>0)and((s[x]*t[y] mod s[y])=0) then begin z:=s[x]*t[y] div s[y]; z:=z-t[x]; if (z>=1)and(z<=a[i]) then ans:=ans+1; end; t[x]:=t[x]+a[i]; end; write(ans); close(input); close(output);end.
阅读全文
0 0
- Pascal & C++——NOIP模拟题——小X分砖块
- [NOIP模拟]小x分砖块
- Pascal & C++——NOIP模拟题——小X学游泳
- [ASDFZ-NOIP2016模拟]小X分砖块
- C++——NOIP模拟题——动态分班
- C++——NOIP模拟题——葫芦
- C++——NOIP模拟题——方阵
- C++——NOIP模拟题——farm
- C++——NOIP模拟题——寻找位置
- C++——NOIP模拟题——病毒
- C++——NOIP模拟题——间谍网络
- C++——NOIP模拟题——减法
- C++——NOIP模拟题——tree
- C++——NOIP模拟题——cheer
- C++——NOIP模拟题——装果子
- C++——NOIP模拟题——零件加工
- C++——NOIP模拟题——种树
- C++——NOIP模拟题——中位数
- Android Studio配置Kotlin开发环境的最简单方式
- Linux内核数据结构之链表list.h
- http协议中各个响应状态200、400等返回值的含义
- MySQL 查看连接数及状态信息
- WCF事物
- Pascal & C++——NOIP模拟题——小X分砖块
- 一个测试程序看懂静态代码块、构造代码块以及构造方法的执行顺序
- 简单理解Socket
- 读书笔记《Effective C++》条款42:了解typename的双重意义
- 当人工智能敲响了门 我们将迎来怎样的世界?/智库2861
- 多线程-多线程方式3的求和案例
- PHP之加载GD库
- initWithFrame、initWithCoder、awakeFromNib 和layoutSubviews
- 智力题--跳格子