題意:給定一個數組 a1, a2, a3, ------ an, (是一個0-n-1的排列)。可以將它轉換為以下形式。每次將前m個數提取出來放至末尾。a1, a2, ..., an-1, an (where m = 0 - the initial seqence)a2, a3, ..., an, a1 (where m = 1)a3, a4, ..., an, a1, a2 (where m = 2)...an, a1, a2, ..., an-1 (where m =
題意:給出一串數列,有兩種操作。Q ( x, y ) 表示輸出數列的第 x -- y 個元素的和。 C(x,y,z) 表示將 x - y 的所有元素均加上 z。題解:線段樹很容易。但是聽說這題可以用樹狀數組解,在網上搜了下,暫且把地址記下來。樹狀數組http://kenby.iteye.com/blog/962159#include <iostream>using namespace std;#define L(u) ( u << 1 )#define R(u) ( u
題意:廣場上有許多的人,現在給你一個邊長為R的正方形,求正方形最多能框住的人,包括邊界。題解:#include <algorithm> #include <iostream> using namespace std; #define N 2010 #define L(u) ( u * 2 ) #define R(u) ( u * 2 + 1 ) #define max(a,b) ( a > b ? a : b ) unsigned int Y[
題意:給你一張圖,圖上有n個人和n座房子,每個人需要回到一所房子,要求路程之和最小。...H.......H.......H....mmmHmmmm...H.......H.......H....題解:其實題目是求最小帶權匹配,怎麼化成求最大帶權匹配呢?方法一可以將每個值取相反數。方法二用上界減去各個值。基本原理 該演算法是通過給每個頂點一個標號(叫做頂標)來把求最大權匹配的問題轉化為求完備匹配的問題的。設頂點Xi的頂標為A[ i ],頂點Yj的頂標為B[ j
題意:將n個村莊串連起來,每兩個村莊之間串連的消耗已經知道。求將所有村莊連在一起所需要的最小消耗。題解:給出兩組代碼。Prim:#include<cstdio>#define MAX 300#define INF 99999999int map[MAX][MAX];int dis[MAX], vis[MAX];int Prim ( int n ){ int i, j, k, m, sum = 0; for ( i = 0; i < n; i++ )
題意:調查一種蟲子的性行為,先假定蟲子裡沒有同性戀。每一次測試輸入N只蟲,然後輸入M個數對( x, y ),表示 x, y 之間有性行為, 最後判斷假設成立與否(即判斷有沒有同性戀)。#include <iostream>using namespace std;#define N 1000005int opp[N], father[N], rank[N];void make_set ( int x ){for ( int i = 0; i <= x; ++i ){father[