Time of Update: 2018-12-05
/*顯然,如果A,B在直線的同一側,則min(PA+PB)=dis(A,B),否則,求出B關於直線的對稱點B`,min(PA+PB)=dis(A,B`)*/#include<iostream>#include<cmath>#include<cstdio>using namespace std;int main(){ int c; double k,x1,y1,x2,y2,x3,y3,x,y,dis,t,a,b; cin>>c;
Time of Update: 2018-12-05
/*很典型的題了,求最長上升子序列就不贅述了現在要得到不重複利用元素,可以構造幾個這樣長度的序列和同類型的求幾條最短路類似,Maxlen[i]表示到i的最長序列長度Maxlen[i]=1的連源點Maxlen[i]=maxlen的連匯點(maxlen為最長序列的長度)對Maxlen[i]=Maxlen[j]+1(1<=j<i)連一條j到i的邊所有邊邊權為1,得到的最大流就是可以構造的最大個數*/#include <cstdio>#include
Time of Update: 2018-12-05
<pre name="code" class="cpp">/*轉自:http://blog.csdn.net/zxy_snow/article/details/6682926*/#include <queue>#include <stack>#include <math.h>#include <stdio.h>#include <stdlib.h>#include <iostream>#include
Time of Update: 2018-12-05
/**********************************************題目大意:給出一個旋律,用n個數字[1,88]表示其音符,求它的最長的主題長度;一個旋律的主題是一段至少出現過兩次的不重疊音樂片段;重複出現也包括一段音樂全體加上某個數後再次出現(如1 2 3 4 5和5 6 7 8
Time of Update: 2018-12-05
/******************************************************題目大意:弱菜英語又是渣渣,題意是對著測試資料連猜帶蒙出來的;在一個有向圖中,要求頂點1到其他的所有頂點往返的總共的最小花費;另外給出的資料量略大,頂點數和邊數都是1000000的範圍;演算法分析:這是一個最短路徑問題;由於資料範圍很大,用鄰接矩陣和dijkstra很可能逾時超記憶體,所以採用鄰接表建圖;在這個單向圖中,求的是從第一個頂點到其他所有頂點的最短路徑和其他所有頂點到第一個頂點
Time of Update: 2018-12-05
#include <vector>#include <map>#include <set>#include <deque>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include
Time of Update: 2018-12-05
/*************************************************題目大意:有一塊h*w的矩形廣告板,要往上面貼廣告;然後給n個1*wi的廣告,要求把廣告貼上去;而且要求廣告要盡量往上貼並且盡量靠左;求第n個廣告的所在的位置,不能貼則為-1;演算法思想:利用線段樹可以求區間的最大值;將位置即h用來建樹(h<=n,大了沒有意義);樹中儲存的為該位置還擁有的空間;若左子樹的最大值大於他,就查詢左子樹,否則查詢右子樹;**********************
Time of Update: 2018-12-05
/****************************************************題目大意:John的農場裡N塊地,地之間有M條路,W個蟲洞;蟲洞是一條單向路,會在你離開之前把你傳送到目的地;就是當你過去的時候時間會倒退T秒(可以理解為負權邊),要求會不會在從某塊地出發後又回來,看到了離開之前的自己;即看圖中有沒有負權環,有的話就輸出YES,沒有的話就輸出NO;演算法思想:求圖中是否有負權環,Bellman_Ford演算法或者SPFA演算法都可以;如果有負權環,的話Joh
Time of Update: 2018-12-05
/*取對數後得ln(x)/x=(1+ln(y))/(e*y)顯然右邊是常數作圖可知道ln(x)/x在x>=1範圍先增後減,極值在x=e處對於任意一個y!=1,都有左右兩個解,二分解決就是了……*/#include<iostream>#include<cmath>#include<cstdio>using namespace std;const double ee=2.718281828459;const double eps=1e-7;int main(
Time of Update: 2018-12-05
/*******************************************題目大意:有n個小孩在玩遊戲,每個小孩手上都有一個數字;第k個小孩先出去,然後給出手上的數值x;大於0的話就是從他左邊開始數的第x個小孩;否則就是從右邊數的第-x個小孩接著出列;直到所有小孩出列;第p個出列的小孩,將拿到f(p)個糖果;f(p)表示p的正因子個數;現在要求得到最多糖果的小孩;演算法分析:對於任何正整數x,其約數的個數記做g(x).例如g(1)=1,g(6)=4;如果某個正整數x滿足:對於任意i
Time of Update: 2018-12-05
/**************************************************題目地址:http://acm.whu.edu.cn/land/problem/detail?problem_id=1463題目大意:有三個一樣的背包,每個背包都能裝體積為m的物品;有n個不可拆卸的物品,求三個背包能否裝完這n個物品;演算法思想:DP背包問題;dp[i][j][k][l]表示前i個物品,第一個背封裝了j,第二個背封裝了k,第三個背封裝了l;狀態轉移方程為:dp[j][k][l]=
Time of Update: 2018-12-05
/**********************************************題目大意:0 a b將區間[a,b]所有數全部變成01 a b將區間[a,b]所有數全部變成12 a b將區間[a,b]中所有數0 1互換,0變1,1變03 a b輸出區間[a,b]中1的個數4 a b輸出區間[a,b]中最長連續1的個數演算法分析:涉及到線段樹的多種操作;0,1兩種操作可以合并到一起寫;0,1互換即線段樹的異或操作;查詢區間最長連續1個數的過程中;maxl=[l,m]上最長連續1個數;
Time of Update: 2018-12-05
/**********************************************題目地址:http://acm.whu.edu.cn/land/problem/detail?problem_id=1461題目大意:定義的一個求ch值的函數(見下面注釋部分);即求樹中根結點的ch值的方法,要你想辦法幫他實現這個程式;演算法思想:先一條鏈的情況:設第一個點的值是a,第二個是b,第三個是c...那麼有:ch[1]=ach[2]=a+bch[3]=max(2a+c,a+b+c)ch[4]=
Time of Update: 2018-12-05
/******************************************資料結構:Splay_Tree,伸展樹;性質:伸展樹是二叉尋找樹的一種改進;與二叉尋找樹一樣,伸展樹也具有有序性;即伸展樹中的每一個節點x都滿足:該節點左子樹中的每一個元素都小於x;而其右子樹中的每一個元素都大於x;與普通二叉尋找樹不同的是,伸展樹可以自我調整;特點:伸展樹並不是嚴格意義上的平衡樹;也還是極有可能退化成線性結構,但伸展操作能使它的每一次操作近似(logn);伸展操作:伸展操作和平衡樹的保持平衡是
Time of Update: 2018-12-05
/**********************************************題目大意:有一個旅館,有N個房間排成一排;現在有兩種操作:第一是有a個顧客要入住連續的a個房間;要求輸出最小的左端點的位置,不能滿足就輸出0;第二是將以a開始,長度為b的連續房間清空;1 a: 詢問是不是有連續長度為a的空房間,有的話住進最左邊;2 a b:
Time of Update: 2018-12-05
/********************************************題目大意:n只貓,m個操作;0 a b 合并兩個貓所在的集合;1 k
Time of Update: 2018-12-05
/***********************************************題目地址:http://codeforces.com/problemset/problem/46/D題目大意:有一條長度為L的街道,有N個操作,操作有兩種:(1)"1 a",表示有一輛長度為a的車開進來想找停車位;停車位必須滿足與它前面的車距離至少為b,與後面的車距離至少為f;如果能找到這樣的停車位;輸出這輛車的起始位置(且這個位置最小),否則輸出-1;(2)"2
Time of Update: 2018-12-05
/*****************************************************題目大意:Y和M要在KFC約會,地圖上有多個KFC,求在哪個KFC兩人所走總距離最短;演算法思想:兩個人到同一點的和最短,分別以兩個人為起點,BFS遍曆整個圖;計算出到每個KFC的最短距離,然後枚舉所有的KFC,求出最小的代價即可;******************************************************/#include<iostream>#
Time of Update: 2018-12-05
/**************************************題目大意:一條直線上的有n個頂點;(1)D x 破壞頂點x;(2)Q x 表示查詢以x所在的最長的連續的點的個數,包括頂點x本身;(3)R 修複上一次被破壞的點;演算法思想:線段樹,求最大連續區間,操作類似於pku3667;ls 記錄區間左端點開始的最大連續個數,rs 記錄區間右端點開始的最大的連續個數,ms 表示該區間最大的連續點的個數。**************************************
Time of Update: 2018-12-05
/******************************************************題目大意:看著比英文還蛋疼的中文題;每個物品看成一個節點,酋長的允諾也看作一個物品,且始終為第一個結點;如果一個物品加上金幣可以交換另一個物品,則這兩個節點之間有邊,權值為金幣數,求所有節點中到第一個節點的最短路;演算法分析:最短路問題,不過因為存在著等級的差異所以需要枚舉;即對冒險者的等級進行枚舉,也就是說冒險者只能和在他等級以上的人進行交易;這樣枚舉的好處是能夠把所有的情況都考慮進去