原创 Ural 1320. Graph Decomposition(並查集,連通分支邊數)

題意:一個圖,每次刪掉相鄰的兩條邊,問能否把全部的邊刪完。 解法:若圖的每個連通分量都有偶數個邊就輸出1,否則輸出0; #include <cstdio> #include <cstring> #include <algorithm>

原创 Ural 1146. Maximum Sum

DP,最大子矩陣和:先按列壓縮爲一維i,如將每一列從左至右遞加至一個一位數組,再用最大連續子序列和來求。 /*最大子矩陣和,先壓縮爲一維再求最大子序列和,時間複雜度O(n^3)*/ #include <cstdio> #inclu

原创 最大連續子序列和

long long maxsequence3(long long a[], int len) { long long maxsum, maxhere; maxsum = maxhere = a[0]; //初始化最大

原创 Sicily 1796. Max's kingdom

注意用到的結構 map<int,vector<int> > ,sort就行了。 #include <iostream> #include <vector> #include <map> #include <algorithm> usin

原创 ural 1725. Sold Out!

題意: 某人坐在影院某排的某個位置,其他位置空。其它人可以選擇從左側或右側入座,經過此人時,跨過他的腳然後入座。問要使所有人入座,別人跨過自己腳的最大次數。當從兩邊入座經過的人相等時,選擇距離最短的一側走。 水題。 #include

原创 ural 1029. Ministry (dp)

Mr. F. wants to get a document be signed by a minister. A minister signs a document only if it is approved by his minis

原创 ural 1586. Threeprime Numbers

題意: 定義這樣一種數:Threeprime,指對於它的任意連續3位上的數字,都構成一個3位的質數。 求對於一個n位數,存在多少個Threeprime數。 讀入一行,一個整數n(3<=n<=10000)。 輸出一行,即總數mod 10^9

原创 ural 1090. In the Army Now

樹狀數組的wiki頁面:http://zh.wikipedia.org/wiki/%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84 題意:給出士兵的身高站位求逆序數,本題中是求某人前面比他矮的人的個數和。 #inc

原创 URAL 1038 Spell Checker

這個題目可以用有限自動機的理論去做,也可以在設定好各個狀態後枚舉可能的情況並跳轉狀態,比如句子已經結束這個狀態設爲0,處於單詞中這個狀態設爲1,在句子中間非單詞部分時這個狀態設爲2,這樣如果處於狀態0但是遇到了小寫字母就算是一個錯誤,處於

原创 ural 1864. Get-Together at Den's (坑爹浮點數)

水題一道,要注意兩點: 1、題目中分配方式沒有說明清楚 2、浮點數下取整的時候要注意,比如4.9999999其實應該是5 #include <iostream> #include <cmath> using namespace std;

原创 1081. Binary Lexicographic Sequence(dp)

題意:給出一個串的長度n,串只有0,1組成,但是不能有兩個相鄰的1。按字典序給串排列,最先肯定是0000,接着是0001,依此類推。給一個數字m,輸出在長度爲n的情況下,第m個排列的串是什麼,如果m大於總排列數,輸出-1 思路: 遞推。

原创 ural 1019 Line Painting (線段樹)

#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define MAX 1000000000 #define N 10010

原创 ural 1207. Median on the Plane(極角排序)

題意是求一堆點中的兩個點,其連接的直線線要能等分所有點。 #include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <stdlib.h>

原创 ural 1078 Segments

給出x軸上的線段的端點座標,一個線段能覆蓋另一個線段(端點不能相同),求出最多的線段覆蓋並且從短到長給出路徑。 #include <cstdio> #include <cstring> using namespace std; int

原创 ural 1087. The Time to Take Stones(博弈)

/*思路是這樣的,f[t]=1表示還剩t個子時先手是能贏的,f[t]=0表示先手會輸,遞推公式是這樣的 f[t] = 1 當且僅當存在某個i,使f[t-k[i]]=0,因爲先手可以直接拿k[i]個。*/ #include <iostr