Time of Update: 2018-12-05
不多說和上題差不多,同樣的模板。。好好想想。。#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 200000int max(int a,int b){a=a>b?a:b;return a;}struct point {int x,y;int max,sum;}a[N*3];void tree(int t,int x,int
Time of Update: 2018-12-05
題目大意: 一隻小船在水中行走,想要到達目的地,然後有八個方向,用0 …… 7表示,分別是北,東北,東,東南……,而它在任何一點都有一個方向,而當它的下一步走的方向跟它此刻自己的順風方向相同的時候(即下一步的方向跟它的數字相同),走這一步不需要耗費能量,否則耗費的能量為1個單位能量。然後要求這隻小船到達目的地所需的最小能量。解題思路:
Time of Update: 2018-12-05
本題要求在原字串中添加一些+、-號,使所得的值所給定值相同。這提示到很明顯的搜尋題。注意搜尋的方法。 #include"stdio.h"#include"string.h"__int64 count,m;char a[100];int b[100],k;void dfs(int x,__int64 y){ int i; if(x==k&&y==m) { count++; return ; } __int64
Time of Update: 2018-12-05
#include<stdio.h> #include<string.h>#include<queue>usingnamespace std; int dir[4][2]={-1,0, 1,0, 0,1, 0,-1}; char map[1000][1000]; int visit[1000][1000]; int n,m; structpoint { int x,y,time; friendbool operator<(point
Time of Update: 2018-12-05
這題不利用素數更簡單。。#include"stdio.h"#include"string.h"int map[70000];int main(){ int m,i,j; while(scanf("%d",&m)!=EOF) { j=1; for(i=2;i<=m;) { while(m%i) i++; m=m/i; map[j++]=i; } for(i=1;i<j;i++) { printf("%d",map[i]); if(i<
Time of Update: 2018-12-05
描述:雖然水題,但錯了幾次,才對。。要明白優先隊列的原理。。就很容易掌握了,得心應手。。題意:起點到終點,’X‘處不用時,’ . '用時為1,求到達終點的最小時間。 優點:因為目前狀態的下一個狀態不能確定,所以如果用普通廣搜的話,必須將整個圖遍曆一遍,但是此題的n*m可能為1000*1000,必定逾時。所以考慮用優先隊列。即,每次探查到的點入隊列時,不是直接放到隊尾,放在隊列中合適的位置(此元素前面的元素比它“小”,後面的元素比它“大”),這樣才能保證,首先探查到終點的路徑為所需“最短”路徑。
Time of Update: 2018-12-05
對於本題,應用KM()演算法計算最大權值,但因為要求花費最小,則應將把人到房子的距離取負,其他的距離都是負無窮,則就可以利用KM最後的結果再加上個負號。。應注意的是,n是人的個數,再根據人的座標,計算出每個人到每個房子的距離存入map中。。 #include"stdio.h"#include"string.h"#include"math.h"int map[1000][1000];int sx[1000],sy[1000];int lx[1000],ly[1000];int link[1000]
Time of Update: 2018-12-05
題意:輸入一個n*m的迷宮,和一個T:可以在迷宮中生存的最大時間。S為起點,D為終點。並且,每個格子只能踩一次,且只能維持一秒,然後該塊地板就會塌陷。所以你必須每秒走一步,且到D點時,所用時間為T。用深搜。單用深搜,逾時,所以,後來的剪枝非常重要!!!//這題有2個重要的剪枝要學習 //第一個是奇偶剪枝 ,//第二個是步數剪枝.深搜要返回,用回朔法,深搜時,標記前進,返回時解除標記。#include<stdio.h>#include<math.h>#include<
Time of Update: 2018-12-05
http://acm.hdu.edu.cn/showproblem.php?pid=1242 題意:圖中有多個點r,要求從r到a的最短路。用bfs從a開始搜,每次搜上下左右四個位置,並且入隊列。直到隊列為空白,那麼就不存在路徑。,搜到x,則額外加1,搜到r,直接返回步數加一,否則步數加1.簡單的說一下啊;題中可能有多個r,但是只有一個a,所以我們就從a搜到r;優先隊列只是定義不同,用的時候和普通隊列差不多: 掌握住原理一切esay;; #include<stdio.h>#inclu
Time of Update: 2018-12-05
//注意二分圖中,m對應右邊,牛棚,n對應左邊,牛。//對每頭牛尋找匹配的時候,都要將mark初始化一次。題意:有n頭奶牛和m個牛棚,其中每頭奶牛隻願意進它願意進的牛棚。也許每頭牛隻願進一個棚,也許一個棚只容納一頭牛。現在給定n頭牛和m個牛棚,並且給定每頭牛願意進的牛棚編號,請讓你設計一種牛對棚的方案,使牛——棚的匹配數最大,並輸出這個最大匹配值。思路:其實這題就是求一個二分圖最大匹配。二分圖:一個圖中的點可以分為兩個點集,圖中每條邊的兩端點分屬不同點集,則圖為二分圖。匹配的一般定義:匹配是二分
Time of Update: 2018-12-05
empty() 如果隊列為空白返回真pop() 刪除對頂元素push() 加入一個元素size() 返回優先隊列中擁有的元素個數top() 返回優先隊列對頂元素在預設的優先隊列中,優先順序高的先出隊。在預設的int型中先出隊的為較大的數。使用方法:標頭檔:#include <queue>聲明方式:1、普通方法:priority_queue<int>q;//通過操作,按照元素從大到小的順序出隊2、自訂優先順序:struct cmp{operator bool ()(int
Time of Update: 2018-12-05
#include"stdio.h"#include"string.h"#include"math.h"int a[21],b[21],n,m;int prime(int k)//判斷素數。。{ int i,h; h=int(sqrt(1.0*k)); for(i=2;i<=h;i++) { if(k%i==0) return 0; } return 1;}void dfs(int num)//{ int
Time of Update: 2018-12-05
#include<stdio.h>#include<string.h>#define inf 0x7fffffff//是定義無窮大常量的最好方法。。int map[301][301];int lx[301],ly[301];int sx[301],sy[301];//sx[],sy[]為左\右第i個點是否在匈牙利樹中。。int link[301],n;int find(int k)//匈牙利裡匹配(找增廣路){int
Time of Update: 2018-12-05
線段樹模板題線段樹的題目。向上更新。題意:有N個數[ 1,2,3,,,,,n ],取K個數,每次去第i小的數。思路:建立一個線段樹,樹節點記錄的是節點所表示的區間內剩餘數的個數(初始化時葉子節點的值都為1,然後向上傳遞)。取數時,先找到第i小的數的葉子,值修改為1,然後向上傳遞。 #include"stdio.h"#include"string.h"#include"stdlib.h"struct point{ int x,y; int sum;}a[20000000];void
Time of Update: 2018-12-05
【KM演算法及其具體過程】(1)可行點標:每個點有一個標號,記lx[i]為X方點i的標號,ly[j]為Y方點j的標號。如果對於圖中的任意邊(i, j, W)都有lx[i]+ly[j]>=W,則這一組點標是可行的。特別地,對於lx[i]+ly[j]=W的邊(i, j, W),稱為可行邊; (2)KM 演算法的核心思想就是通過修改某些點的標號(但要滿足點標始終是可行的),不斷增加圖中的可行邊總數,直到圖中存在僅由可行邊組成的完全符合為止,此時這個
Time of Update: 2018-12-05
#include"stdio.h"#include"string.h"char map[20][20];int n,cnt;int judge(int x,int y)//判段此位置是否可以放。。{ int i; if(map[x][y]=='X') return 0; for(i=x-1;i>=0;i--) { if(map[i][y]=='@')//說明已經放過。 return 0; if(map[i][y]=='X') break; } for(i=y-1;i>
Time of Update: 2018-12-05
題意:學生有各自喜愛的課程,所以對於一個課程可能存在多個學生喜歡它,但我們想要沒門課程都有人選。第一個資料,代表測試的個數,接下來是課程p個,學生n個,在接下的p行裡,一次代表課程1,2...p,每行 i
Time of Update: 2018-12-05
技巧在不滿足條件的將距離值為零,然後把距離為零的除外。。#include<stdio.h>#include<algorithm>#include<math.h>using namespace std;int pre[200];struct pointl{ int x,y;}a[200];struct point{ double c; int a,b;}w[20000];int find(int x){ int r=x;
Time of Update: 2018-12-05
動態規劃的狀態有時候比較難,不容易表示出來,需要用一些編碼技術,把狀態壓縮的用簡單的方式表示出來。典型方式:當需要表示一個集合有哪些元素時,往往利用2進位用一個整數表示。 *:一般有個資料 n<16 或者 n<32 這個很可能就是狀態DP的標誌,因為我們要用一個int的二進位來表示這些狀態。要注意好這些資料規模的提示作用。 *:確定了為狀態DP,那麼第一步就是預先處理,求出每行所有可能的狀態了,cnt記錄總的狀態數,stk[]記錄所有的可能狀態。以炮兵陣地為例:
Time of Update: 2018-12-05
次層網域原理以及程式碼TYPE:經典程式碼片段TIME:2002-7-30AUTHOR:揚子URL:N/AHIT:51 DAYHIT:1 WEEKHIT:1 要達到二級名的效果,必須一下條件以及流程: 1、必須有一個頂級網域名稱,而且此網域名稱必須做好泛解析並做好指向。 2、必須有一台獨立的伺服器。泛解析的網域名稱指向該伺服器。 3、在伺服器上的IIS建一個空的主機頭名的web網站。 4、將預設的版面設定為你的二機解析程式(比如:freedns.asp)