当前位置: 首页 > news >正文

建设银行网站 查余额查询/新闻稿撰写

建设银行网站 查余额查询,新闻稿撰写,上海网站备案审核时间,漳州市网站建设这也是2011年百度之星的一道题。 这题我就是乱搞搞过的,打代码之前自己心里也没底,不知道能不能过的。 我的做法很简单,就是按时间顺序依次构造能杀死的僵尸血量,找到第k小的。构造的方法也很暴力:对t时刻,…

这也是2011年百度之星的一道题。

这题我就是乱搞搞过的,打代码之前自己心里也没底,不知道能不能过的。

我的做法很简单,就是按时间顺序依次构造能杀死的僵尸血量,找到第k小的。构造的方法也很暴力:对t时刻,第i个武器新构造出来的血量,就是用ai+t*bi依次去加之前时刻构造出来的血量。所以解题的关键就在于不断地对这个方法进行剪枝与优化。

第一个优化是,t只用从1到k,而不用再往后,很好理解。

第二,考虑如何存储已经产生的血量。我是用了一个set保存所有的血量,然后每一次循环时把set中的内容导出到一个数组里。往set里插入数据和查找数据都是log n的,所以把数据导出到数组里复杂度为n*log(n)。这里又可以加入一个优化,每次导出到数组里的元素只用前K个。

第三个优化,如果当t时刻,所有的ai+bi*t都比当前的结果大,则可以结束。

这样打完之后,自己测了几组数据,很快出结果,但是交上去依然超时。于是自己构造了几组变态数据,一测,发现瓶颈依然在set那里,因为对于大型的测试数据,后来的时刻产生的大量血量值都是以前出现过的,如果用hash来判断血量值是否出现过,就能把这里的复杂度从log(n)降到O(1),因为这里是瓶颈,所以效果很明显。果然,加上以后就过了。

代码如下:

/** bjfu1099* Author    : ben*/
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <string>
#include <vector>
#include <deque>
#include <list>
#include <functional>
#include <numeric>
#include <cctype>
using namespace std;
#ifdef ON_LOCAL_DEBUG
#else
#endif
typedef long long LL;
const int maxn = 11;
int N, K;
int a[maxn], b[maxn];
int buf[51000];
set<int> S;const int maxh = 1000007;
bool hash[maxh];
int hval[maxh];void hash_insert(int num) {int k = num % maxh;while (hash[k] && hval[k] != num) {k = (k + 1) % maxh;}if (!hash[k]) {hash[k] = true;hval[k] = num;}
}bool hash_find(int num) {int k = num % maxh;while (hash[k] && hval[k] != num) {k = (k + 1) % maxh;}return hash[k];
}int work() {bool hasnew = true;S.insert(0);hash_insert(0);int offset, I;for (int t = 1; t <= K; t++) {if (hasnew) {I = 0;set<int>::iterator it = S.begin();while (it != S.end() && I <= K) {buf[I++] = *(it++);}hasnew = false;}offset = (I > K) ? buf[K] : 0x7fffffff;
//        printf("t = %d, offset = %d, I = %d\n", t, offset, I);bool flag = false;for (int i = 0; i < N; i++) {a[i] += b[i];if (a[i] > offset) {continue;}for (int j = 0; j < I; j++) {int p = a[i] + buf[j];if (p < offset) {flag = true;if (!hash_find(p)) {//对于大型的测试数据,后面的插入太多重复,用hash能降掉这里的logn的复杂度
//                    if (S.count(p) <= 0) {hasnew = true;S.insert(p);hash_insert(p);}} else {break;;}}}if (!flag) {break;}}return buf[K];
}int main() {
#ifdef ON_LOCAL_DEBUGfreopen("data.in", "r", stdin);
#endifmemset(hash, false, sizeof(hash));scanf("%d%d", &N, &K);for (int i = 0; i < N; i++) {scanf("%d%d", &a[i], &b[i]);}printf("%d\n", work());return 0;
}

 

转载于:https://www.cnblogs.com/moonbay/p/4156322.html

http://www.lbrq.cn/news/967807.html

相关文章:

  • 现代化专业群建设专题网站护理专业/百度我的订单app
  • 坪地做网站/seo排名哪家有名
  • 广州口碑好的网站建设定制/崇左网站建设
  • 香港网站域名查询/站长工具 忘忧草
  • 零食天堂 专做零食推荐的网站/百度seo收录软件
  • 番禺哪里有做网站的公司/手机刷网站排名软件
  • 网片生产厂家/百度网站优化
  • wordpress登陆页面404/360优化大师app
  • 做网站需要什么图片/铁岭网站seo
  • 网站开发成本包括/windows优化大师提供的
  • 企业设计网站公司哪家好/网络营销事件
  • 做淘宝图的素材搜索网站/天天seo伪原创工具
  • 做设计的网站定制/苏州seo整站优化
  • 网站优化快速排名软件/2345网址导航是什么浏览器
  • 招聘页面设计/官网seo怎么做
  • 企业简介模板word/北京seo网站开发
  • 天津企业网站建设开发维护/sem是指什么
  • 技术支持海安网站建设/百度搜索资源平台官网
  • 企业可以备案几个网站/地推的60种方法
  • 专做韩国代购的网站/百度快速优化软件
  • 长春网长春关键词排名站设计/推广软文案例
  • 网站如何做ip签名图片/外贸建站与推广
  • 如何建设废品网站/常见的网络营销手段
  • 郉台网站建设/竞价推广怎么做
  • 企业网站建设需要的手续/新手学百度竞价要多久
  • pc端网站/长沙本地推广
  • 卖汽车的网站怎么做的/软件开发一般需要多少钱
  • 精品网站建设费用 真好磐石网络/营销策划书模板
  • 朱子网站建设/网站搜索引擎推广
  • 网站模板软件/域名查询官网
  • 产品经理如何绘制流程图
  • React Native 基础tabBar和自定义tabBar - bottom-tabs
  • Vue3入门-计算属性+监听器
  • ros2 标定相机
  • 高光谱相机(Hyperspectral Camera)
  • FATFS文件系统原理及其移植详解