c 【NOIP2017GDKOI模拟1.12】
来源:互联网 发布:山东大学继续网络教育 编辑:程序博客网 时间:2024/04/27 20:08
样例输入:
100110100
5
11
101
010
10
00
样例输出:
1
3
4
5
2
数据范围:
思路
比赛时没有注意到所有询问串的长度总和不超过二十万这个条件,然后就只想到暴力。。。。
解法
1.据说有根号级别的解法?%%%%
2.由于询问串的长度总共不超过二十万,那么复杂度会远小于理论复杂度。。。。。
我们先把一部分答案存下来(这里我存了长度300的,300~400应该都行)。
设f[i][j]表示字符串长度为i的区间1的个数有j个的数量,预处理出来。
对于每一个询问,如果询问串的长度<=300,直接输出即可。大于就暴力。 事实证明,跑的似乎比根号的要快。。。。
代码
#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;const int maxn=305,len=2*1e5+5;int f[maxn][maxn],q,ans,sum[len];char ch[len],c;int main(){ freopen("c.in","r",stdin); freopen("c.out","w",stdout); scanf("%s",ch+1); int tot=strlen(ch+1); fo(i,1,tot) { sum[i]=sum[i-1]; if (ch[i]=='1') ++sum[i]; int pre=max(i-300,1); fo(j,pre,i) f[i-j+1][sum[i]-sum[j-1]]++; } scanf("%d",&q); fo(o,1,q){ ans=0; int lenn=0,num=0; c=getchar(); while (c!='0'&&c!='1') c=getchar(); while (c=='1'||c=='0'){ ++lenn; if (c=='1') ++num; c=getchar(); } if (lenn<=300) printf("%d\n",f[lenn][num]); else { fo(i,lenn,tot) if (sum[i]-sum[i-lenn]==num) ++ans; printf("%lld\n",ans); } }}
0 0
- c 【NOIP2017GDKOI模拟1.12】
- 【JZOJ4936】【NOIP2017GDKOI模拟1.12】c
- JZOJ 4936【NOIP2017GDKOI模拟1.12】c
- JZOJ 4936 【NOIP2017GDKOI模拟1.12】c
- a 【NOIP2017GDKOI模拟1.12】
- b 【NOIP2017GDKOI模拟1.12】
- 【JZOJ4935】【NOIP2017GDKOI模拟1.12】b
- 【JZOJ4934】【NOIP2017GDKOI模拟1.12】a
- 【JZOJ4934】 【NOIP2017GDKOI模拟1.12】a
- 【JZOJ4935】【NOIP2017GDKOI模拟1.12】b
- 【NOIP2017GDKOI】c
- JZOJ 4934 【NOIP2017GDKOI模拟1.12】a
- JZOJ 4935【NOIP2017GDKOI模拟1.12】b
- 【NOIP2017GDKOI】a
- 【NOIP2017GDKOI】b
- C 模拟词法分析
- .NET (c#) 模拟 Cookie
- C++模拟反射
- PID为4的系统进程占用80端口解决方法
- Sublime 插件实现。
- Mac mysql tar格式 安装
- MongoEngine中文参考
- C代码在GCC编译器下不需要函数前置声明
- c 【NOIP2017GDKOI模拟1.12】
- 连接池的基本实现
- 搜集的 jetson. tx1 优点
- java服务器获得客户端IP地址
- TypeScript学习笔记之 接口(Interface)
- 17 - 03 - 22 图解HTTP(26)
- 传说中的Q_PROPERTY怎么使用
- echarts3 series.data数据格式备忘
- 使用jquery.qrcode生成二维码