Average(數形結合)
題目連結 https://vjudge.net/problem/UVA-1451
紫書243頁例題,採用數形結合的方法,用deque來維護一個單調結點的佇列,即不包含上凸點的序列,每次都更新結果,記錄最優解。
#include<bits/stdc++.h> using namespace std; const int maxn = 100050; int n, l; char st[maxn]; int s[maxn]; deque<int> que; //a,b對應直線斜率大於c,d對應直線,返回值>0,小於則返回值<0,等於返回0 int check(int a, int b, int c, int d) { return (c - d)*(s[a] - s[b]) - (a - b)*(s[c] - s[d]); } int main() { int t; scanf("%d", &t); while (t--) { scanf("%d%d", &n, &l); scanf("%s", 1 + st); que.clear(); for (int i = 1; i <= n; ++i) { s[i] = s[i - 1] + st[i] - '0'; } int ansl = 0, ansr = l;//ansl記錄左端點的前一位 for (int i = l; i <= n; ++i) { //加入新結點j前,先把形成的上凸點刪掉 int j = i - l; while (que.size() > 1) { int t1 = que[que.size() - 1];//倒數第一個點 int t2 = que[que.size() - 2];//倒數第二個點 if (check(t2, t1, t2, j) > 0) que.pop_back(); else break; } //加入j que.push_back(j); //把不可能是解的開頭若干項去掉 while (que.size() > 1) { if (check(que[0], i, que[1], i) <= 0) que.pop_front(); else break; } //更新結果 int res = check(que[0], i, ansl, ansr); if (res > 0 || 0 == res && i - que[0] < ansr - ansl) { ansl = que[0]; ansr = i; } } printf("%d %d\n", 1 + ansl, ansr); } return 0; }
相關推薦
Average(數形結合)
題目連結 https://vjudge.net/problem/UVA-1451紫書243頁例題,採用數形結合的方法,用deque來維護一個單調結點的佇列,即不包含上凸點的序列,每次都更新結果,記錄最優解。#include<bits/stdc++.h> using
UVa 1451:Average(數形結合)
題意:給定一個長度為n的01串,選一個長度至少為L的連續子串,使得子串中數字的平均值最大。如果有多解,字串長度應儘量小;如果仍有多解,起點編號儘量小。序列中的字元編號為1~n,因此[1,n]就
HDU3045 Picnic Cows (斜率DP優化)(數形結合)
滿足 -s 坐標軸 明顯 spl 信息 更新 cow 常數 轉自PomeCat: “DP的斜率優化——對不必要的狀態量進行拋棄,對不優的狀態量進行擱置,使得在常數時間內找到最優解成為可能。斜率優化依靠的是數形結合的思想,通過將每個階段和狀態的答案反映在坐標系上尋找解答的單調
101190E Expect to Wait(數形結合 , 二分, 查分)
題意: 告訴你n 個操作過程, + 代表 在t 時刻來了k 個車, - 代表在t 時刻 來了k 個人, 每個人都要開走車, 沒車的話 一直在佇列裡等, 告訴你每一天開始有多少輛車, 求所有人的等待時間總和, 如果有人拿不到車就輸出 inf。 思路: 數形結合的思想。
error: expected declaration specifiers or '...' before xxx(xxx是函數形參)
... 編譯 exp 定義 包含 情況 搜索 .... make 在使用帶參有返回值的函數指針做參數時,編譯出現下面情況 …………………… error: expected declaration specifiers or ‘...‘ before ‘FunType‘
動態規劃(數形)
最長公共子序列問題 Time Limit: 1000ms Memory limit: 65536K 有疑問?點這裡^_^ 題目描述 給定兩個序列X= 輸入 輸入資料有多
UVA 1451 Average 數形結合+單調佇列 *
#include <bits/stdc++.h> using namespace std; #define REP(i,a,b) for(int i=a;i<=(int)(b);
使用不帶頭結點的循環鏈表實現隊列(數據結構)
center ios string first family lis out pop 一個隊列 我使用類模版來完畢循環鏈表實現隊列的操作。首先定義一個結點類node用來保存結點信息,然後定義隊列類Queue。接下來我們思考:要完畢隊列的4個基本操作即 1.推斷隊列是否為
Head first java chapter 16 集合與泛型(數據結構)
技術分享 rst image 結構 logs ges nbsp alt log Head first java chapter 16 集合與泛型(數據結構)
Entity Framework(三):使用特性(數據註解)創建表結構
int32 概念 ann 應該 etime max 繼承 兩個 width 一、理解Code First及其約定和配置 傳統設計應用的方式都是由下而上的,即我們習慣優先考慮數據庫,然後使用這個以數據為中心的方法在數據之上構建應用程序。這種方法非常適合於數據密集的應用或者
樹與二叉樹(數據結構)
二叉樹 n+1 -s 不能 完美性 -1 平衡二叉樹 編號 大於 (1)樹的基本性質 1.樹中的結點數等於所有結點的度數+1。 2.樹中結點的最大度數稱為樹的度。 3.度為m的樹中第i層上至多有mi-1個結點。 4.高度為h的m叉樹至多有(mh-1)/(m-1)個結點。
Code First Migrations更新數據庫結構(數據遷移)
ply 示例 文件夾 就會 class .com loss ati user 背景 code first起初當修改model後,要持久化至數據庫中時,總要把原數據庫給刪除掉再創建(DropCreateDatabaseIfModelChanges),此時就會產生一個問題,當
Byte Of Python(數據結構)
元組 麻煩 emp 對象 鍵值 style color index mut 數據結構 數據結構(Data Structure)基本上人如其名——它們只是一種結構,能夠將一些數據聚合在一起。換句話說,它們是用來存儲一系列相關數據的集合。 Python中有四種內置的數據結構——
數據庫復習總結(16)-case關鍵字(數據透視)
isp b- event sub 多行 none 創建 pre group case語法: 練習1:將性別的0、1顯示為男、女 select * from StudentInfo --case:對結果集中的列進行判斷 --例1:顯示學生信息,性別以"男
實戰(數組操作)
class alt emp turn arrays boolean xtend oid AD class Arr{ private int data[]; private int foot; public Arr(int len){ if (len>0) {
Fortify漏洞之Access Control: Database(數據越權)
AR 授權 ase statement 後臺 實施 代碼 parameter AS 繼續對Fortify的漏洞進行總結,本篇主要針對 Access Control: Database(數據越權)的漏洞進行總結,如下: 1、Access Control: Database
(數據結構)順序存儲的線性表
計算機 ear func 可行性 cat 特性 一對一 輸出 code ---恢復內容開始--- 推薦一本學習書籍:程傑的《大話數據結構》。 既然是數據結構,那什麽是數據結構呢?這裏補充一些基本術語和概念。 數據結構: 是一門研究非數值計算的程序設計問題中的操作對象,以及它
shell編程連接postgres數據庫(數據備份)
數據 postgre ima img 分享 開始 數據庫 com 數據備份 第一步:通過xshell或者其他工具連接到linux服務, 第二步:創建一個腳本:touch se.sh 第三步:輸入i,代表開始輸入內容 輸入以下命令: 腳本如下:(sql語句可以是任何復雜的
7.DataAnnotations(數據註解)【Code-First 系列】
分享 image first .data length info ima 系列 .net 轉自https://www.cnblogs.com/caofangsheng/p/5023639.html 關於註解的相關學習網頁 http://www.entityframework
51node 1134 最長遞增子序列 (數據結構)
賦值 log 寫法 數字 name 內存 遞增 max scan 題意: 最長遞增子序列 思路: 普通的$O(n^2)$的會超時。。 然後在網上找到了另一種不是dp的寫法,膜拜一下,自己寫了一下解釋 來自:https://blog.csdn.net/Adusts/artic