Time of Update: 2018-12-03
貪心的策略:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=26467給龍建個優先隊列, 按他的價值從小到大。每遇到一個princess,如果在Q中的個數大於這個princess所需要的龍,就pop。因為肯定不會取已經pop了的龍。 然後輸出就行了。以下是董事的代碼:#include <queue>#include <cstdio>#include <cstring>#include
Time of Update: 2018-12-03
/* binbit.c -- using bit operations to display binary */#include <stdio.h>char * itobs(int, char *);void show_bstr(const char *);int main(void){ char bin_str[8 * sizeof(int) + 1]; int number; puts("Enter integers and see them in
Time of Update: 2018-12-03
題意:一個人在原點(0,0)抓金子,每塊金子有一個獲得需要的時間t和價值v。而且有的金子可能在一條直線上,那隻能先抓近的,再抓遠的。求在給定時間T下,所能獲得的最大價值。http://acm.hdu.edu.cn/showproblem.php?pid=4341這題可以轉化為分組的背包問題。分組的背包問題詳解見背包九講。先將所有點按照斜率排序,斜率相同按照距離排序。然後進行分組,將斜率相同的分進同一個組。比如有5個點1,2,3,4,5,6.1斜率小,2,3斜率相同,4,5,6斜率相同。那分三組(
Time of Update: 2018-12-03
題解:資料結構題,利用離線加樹狀數組統計答案 我們考慮這個問題的弱化版:給你N個數,求一個區間內不同的數字有多少個,這個問題可以通過記錄每個權值上次出現的位置,在O(N lgN)的時間內得到解決,具體的做法是將查詢按右端點排序,從左向右枚舉i,維護一個樹狀數組,其第k位表示k到i不同的數字有多少個,我們考慮將第i個數字加入,這時候,會樹狀數組中發生改變的僅僅是last[v] +
Time of Update: 2018-12-03
http://acm.hdu.edu.cn/showproblem.php?pid=4342#include <cstdio>#include <cmath>typedef __int64 LL;LL n, sum, num;int T;LL getnum(){ num = ((2 * n + 1) + sqrt(4 * n + 1)) / 2; for(LL i = num; i >= 1; i --){ if(i - (LL)sqrt(
Time of Update: 2018-12-03
Description給定N(N<=100000)個區間(左閉右開)和M(M<=100000)個詢問[l, r],問所有滿足[s,t)包含于于[l,
Time of Update: 2018-12-03
1. ****************************************************************************************************************************************struct A{//8 A(); ~A(); int m1; int m2;}a;A::A(){};A::~A(){};struct B {//8 B(); ~B(); int m1; char m2;
Time of Update: 2018-12-03
http://acm.hdu.edu.cn/showproblem.php?pid=4344注意選的間隔長度 L 必須小於繩子長度 N, 又要大於 1, 所以 1 是斷然不能取的;然後,如果 N 是素數的話,答案應該是 0 0 ; 如果 N 恰好等於某個素數 p 的 i 次方(i > 1),那麼對於這個素數因子,長度只能取到 pi-1.#include <cstdio>#include <cstring>#include
Time of Update: 2018-12-03
轉自冷香:http://blog.sina.com.cn/s/blog_7270d7f901017l3o.html敘說下題意:就是說給你一些詢問,問一個圖中,已知s、t,在你已知s、t的情況下,你可能在那些點停留(題目是問你不可能在哪裡停留)。 首先比如說:http://acm.hdu.edu.cn/showproblem.php?pid=4338很簡單就是將的環給縮成點,再隨便搞搞就好。但是再一畫,會發現有些情況很麻煩,比如:突然覺得這樣很蛋疼,中間那個算那個連通集合呢。。然後使用雙連通
Time of Update: 2018-12-03
找一定範圍內的末尾9最多的數,很神啊(先找0最多的,一減,o)。之前那裡加一,最後減一。#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <cmath>#include <algorithm>typedef __int64 ll;using namespace std;//枚舉行不?__int64 p,d;int
Time of Update: 2018-12-03
轉自:點擊開啟連結最長子序列可以說是剛接觸動態規劃的人經常遇見也不得不解決的問題,最常見的有兩種,一種是最長公用子序列(LCS),還有一個是最長上升子序列(LIS)。今天我就總結下這兩個的做法。一:最長公用子序列(LCS) 題目描述:給你兩個數組,可以是數位,也可以是字串,我們假設是數位!舉個例子: X = 1, 5, 6, 4, 1, 3, 7 Y = 1, 1, 6, 8, 3, 4,
Time of Update: 2018-12-03
世事還是如此無常,關鍵是要有平常心!http://www.cnblogs.com/Booble/archive/2010/10/10/1847163.html詳細耐心的解說,包您一看就懂,假一罰十!以下是poj1177求多個矩形邊緣周長的代碼以及注釋: 吐槽:WA了很久很久,原因是因為什麼呢? maxn定義得太小了。 人家的座標是 [-10000,10000],即使離散化,應該也有很多個點。 對於我容易錯的地方:R > m
Time of Update: 2018-12-03
/* zippo2.c -- zippo info via a pointer variable */#include <stdio.h>int main(void){ int zippo[4][2] = { {2,4}, {6,8}, {1,3}, {5, 7} }; int (*pz)[2]; pz = zippo; printf(" pz = %p, pz + 1 = %p\n", pz,
Time of Update: 2018-12-03
題意:http://www.codeforces.com/problemset/problem/223/B母串, 子串。 母串中的任意一個字母‘A’的前面都必須出現過子串'A'前面出現過的字母, 後面也是。 問, 對於每個母串中的字母是否成立?解: 我理解的是標記母串對應子串中最早能出現的位置為1, 最晚能出現的位置為-1。如果母串中有個字母在最左的字母之後仍為0(這個字母的計數為0)的話, 那麼就說明這個字母不行。#include <cstdio>#include
Time of Update: 2018-12-03
題意:http://acm.hdu.edu.cn/showproblem.php?pid=4301給你一個2*n的巧克力,每一小塊巧克力都長得不同,將其分成k塊巧克力有多少種分法。解:dp[i][j][0]表示已經分完i行,分成了j份,第i行的兩個方格連在一起有多少種分法。dp[i][j][1]表示已經分完i行,分成了j份,第i行的兩個方格不連在一起有多少種分法。然後就是代碼裡面的狀態轉移方程。做題過程:以前看題的時候還以為是枚舉就過呢。原來是dp,怪不得不會。
Time of Update: 2018-12-03
自動變數具有代碼塊範圍、空串連和自動儲存時期。它們是局部的,為定義它們的代碼塊(通常是一個函數)所私人。寄存器變數與自動變數具有相同的屬性,但編譯器可能使用速度更快的記憶體或寄存器來儲存它們。無法擷取一個寄存器變數的地址。具有靜態儲存時期的變數可能具有外部連結、內部連結或空串連。當變數在檔案的所有函數之外聲明時,它是一個具有檔案範圍的外部變數,具有外部連結和靜態儲存時期。如果在這樣的聲明中再加上關鍵字static,將獲得一個具有靜態儲存時期、檔案範圍和內部連結的變數。如果在一個函數內使用關鍵字s
Time of Update: 2018-12-03
http://acm.hdu.edu.cn/showproblem.php?pid=4340題意:題意:兩個人進攻n個城市的國家,這n個城市構成一棵樹,可以任意選擇一個點開始,攻擊已被自己攻擊過的點的相鄰點,時間可以減半,兩個人的攻擊時間不一這個狀態要求這個連通塊有一個入口嘛顯然題中給圖的是一顆樹。問題可以抽象成對樹的每個點都染色,有兩中顏色可以選擇。我們可以知道,如果某一個連通的點集染的是同一種顏色,則這個集合中只要而且必須有一個點取完整的費用,其他的點都只需要對應費用的一半。狀態:dp[i]
Time of Update: 2018-12-03
傳說,這是dfs,其實就是暴搜 + 不暴搜的剪枝。 如我們的n == 21; 那麼,我們從個位元1開始搜, 1 * 1 == 1, 9 * 9 == 81,他們的個位元都是1,那麼,1和9可以作為我們找的那個數的個位元。 然後我們就記憶一下這個我們找到的東西,放在ans裡面。 下面我們開始搜第二位,設搜的是ab的a(其中,我們的b是已經記憶下來的個位)。 ab * ab % 100 = 21; 那麼,我們的2 是不是就由(b * b / 10 +
Time of Update: 2018-12-03
#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>#include <cstring>using namespace std;const int N = 100005;const double MAX = 10e100, eps = 0.00001;typedef struct TagPoint{double x;double y;int
Time of Update: 2018-12-03
http://acm.hdu.edu.cn/showproblem.php?pid=4373哎,多校的題。感覺是個很簡單的數學問題,但是比賽的時候腫麼都想不出來。今天決心把它給做了。哎,原來以為是一道簡單數學題呢,還用到Lucas,還用到中國剩餘定理啊,哎。。。於是我就去研究研究了一下中國剩餘定理。終於懂了。參見黑書p230頁。怎麼描述中國剩餘定理的解法呢,我想想。對於兩個數m,n(m和n互質),滿足x = a1 (mod m)和 x= a2 (mod n)的x為:n * (n關於模m的逆元 *