题目链接

题目大意:

给一串字符串(只包含0~9),定义一个最优子串的定义:如果该子串同字符种类数大于最最多字符出现数,那么这个子串可以被称为最优子串。

解题思路:

大眼一看这个数据范围他用n^2的算法他不就超时了嘛。确实会超时,不过我们向里面去思考一下,字符因为限制为0~9了,所以子串超过100的时候他一定不是最优子串,所以我们枚举的n^2就变成了100*n了,这样我们呢就可以用朴素算法过了这道题目了。

总结:

遇到问题不要慌,当他数据量很大的时候他就会有两道路去优化

  1. 去寻找更高效的算法,如:n^2 -> nlog(n)
  2. 去进行剪枝优化。

本题AC代码:

#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i <= (k); --i)
#define ll long long
#define sz(a) ((int) (a).size())
#define vi vector< int >
#define me(a, x) memset(a, x, sizeof(a))
#define ull unsigned long long using namespace std; const int N = 1e5 + 7;
int n, m, t;
int a[N];
char s[N];
int st[20]; void Main()
{
cin >> n;
cin >> (s + 1);
L(i, 1, n)
{
a[i] = s[i] -'0';
}
int res = 0; L(i, 1, n)
{
me(st, 0);
int cnt = 0, mx = 0;
for(int j = i; j <= min(n, i + 99); j ++ )
{
if(!st[a[j]])
{
st[a[j]] = 1;
cnt ++;
mx = max(mx, st[a[j]]);
}
else
{
st[a[j]] ++;
mx = max(mx, st[a[j]]);
}
if(cnt >= mx) res ++ ;
}
} cout << res << '\n'; } int main(){
ios :: sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> t;
while(t--) Main();
return 0;
} /* stuff you should look for 你应该寻找的东西
* int overflow, array bounds (int)溢出,数组边界
* special cases (n=1?) 特殊情况(n=1?)
* do smth instead of nothing and stay organized 做一些事情而不是什么也不做,保证效率
* WRITE STUFF DOWN 将东西写下
* DON'T GET STUCK ON ONE APPROACH 不要在一个地方死磕
*/

最新文章

  1. in_array,array_search的使用
  2. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
  3. 一些常用的C++标准函数
  4. 【Android】解析Json数据
  5. MD5签名方法
  6. c++ void,内存操作函数
  7. 在windows下用FTP命令上传文件到Linux
  8. Waterfall———瀑布流布局插件, 类似于 Pinterest、花瓣、发现啦。
  9. LeetCode 链表的插入排序
  10. 基于visual Studio2013解决C语言竞赛题之1065二维排序
  11. 经典算法题每日演练——第十四题 Prim算法
  12. Writing clean code is what you must do in order to call yourself a professional.
  13. leetcode day7
  14. 这家IT教育公司太拼了:毕业生找不到工作就全额退学费!
  15. spring cloud zipkin sleuth与spring boot aop结合后,启动慢
  16. Android自定义圆形图片工具类(CTRL+C加CTRL+V直接使用)
  17. csu1804
  18. 滚动歌词制作 之 ncm格式转mp3
  19. python打包为独立可执行程序
  20. WPF编程,使用WindowChrome实现自定义窗口功能的一种方法。

热门文章

  1. Html飞机大战(二):面向对象绘制背景
  2. class 中的 构造方法、static代码块、私有/公有/静态/实例属性、继承 ( extends、constructor、super()、static、super.prop、#prop、get、set )
  3. 第四章 部署K8s前准备工作
  4. 使用Inno Setup 制作软件安装包详细教程(与开发语言无关)
  5. The 19th Zhejiang Provincial Collegiate Programming Contest
  6. SQL语句中过滤条件放在on、where、having的区别和联系
  7. Elasticsearch:mapping定制
  8. 第六章:Django 综合篇 - 2:核心配置项
  9. 使用Kuboard界面在k8s上部署SpringCloud项目
  10. 简书是如何把用户wo逼疯的