Time of Update: 2013-11-08
題意:有一棵樹, 節點表示城市, 每個城市有一個人. 人們要旅行到其他城市. 相當於一個置換. 求總的路程最大值.思路:ans = Σ (每條路長 l )*(經過這條路的最大次數 f )f = 2 * 這條邊左邊節點數和右邊節點數最小值k. (這樣左邊的每一個點一定能夠對應右邊的某個點)這個k可以dfs 求得.但是直接dfs 會爆棧...需要將其改為非遞迴...#include <stdio.h>#include
Time of Update: 2013-11-08
#include<stdio.h>#include<stdlib.h>int system(const char *string);#define maxsize 2000typedef struct{int row;int col;int data;}triple;typedef struct{triple data[maxsize];int m,n,len;}matrix;typedef struct{int row;int col;float
Time of Update: 2013-11-08
1.Thread.join()如果在一個進程,如main中調用另一個thread的join()函數會導致main函數阻塞,直至thread執行完畢。public class JoinTest {public static void main(String[] args) {System.out.println("main starts.");Thread thread = new Thread(new Runnable() {public void run()
Time of Update: 2013-11-08
提要 Linux中進程間的通訊機制主要有:管道FIFO,訊號量,訊息,共用記憶體區,通訊端。程式員在使用中可以根據不同的需求進行選擇。管道 管道是由核心管理的一個緩衝區,相當於我們放入記憶體中的一個紙條。管道的一端串連一個進程的輸出。這個進程會向管道中放入資訊。管道的另一端串連一個進程的輸入,這個進程取出被放入管道的資訊。一個緩衝區不需要很大,它被設計成為環形的資料結構,以便管道可以被迴圈利用。
Time of Update: 2013-11-08
#include <stdio.h>#include <string.h>#define min(a,b) (a)<(b)?(a):(b)const int N = 70000;const int M = 30;const int MAX = 1 << 30;int x[M], y[M], g[M][M];;int n, m, dp[N], tmp;void init() {memset(dp, -1, sizeof(dp));memset(g, 0,
Time of Update: 2013-11-08
很久很久以前,系windows平台下,用C語言寫過一款貪食蛇遊戲,cmd介面,用kbhit()函數實現非阻塞輸入#!/usr/bin/python# -*- coding: utf-8 -*-""" python non blocking input"""__author__ = 'Zagfai'__version__= '2013-09-13'import sysimport selectfrom
Time of Update: 2013-11-08
剛剛在windows 上安裝了python ,想print 字串,但是一直報錯 (python 3.3 .2版本)>>> print helloSyntaxError: invalid syntax>>> print 'hello'SyntaxError: invalid syntax>>> print "hello"SyntaxError: invalid syntax>>> print
Time of Update: 2013-11-08
1)標頭檔中extern"C"聲明C函數,樣本如下://LamSemaphore.h#ifndef LAMSEMAPHORE_H#define LAMSEMAPHORE_H#include <Global.h>extern "C"{//C函式宣告 void* produce(void*); void* consume(void *);}class
Time of Update: 2013-11-08
今天應公司要求,實現一個轉盤旋轉演算法, 網上找了很多資料,再根據實際效果構造出了一個演算法,其實原理很簡單,下面我就來做一下總結:希望對遇到此類問題的朋友有所協助或啟發。首先:轉盤旋轉分幾個階段:加速,減速,停止到指定位置。 當然旋轉當然與角度與弧度有關,弧度在這裡我就不介紹了,當然是用旋轉角度來轉換的,公式為:角度/180 * PI &
Time of Update: 2013-11-08
交換排序是一類藉助“交換”進行排序的方法,其主要思想是:在待排序序列中選兩個記錄,將它們的關鍵碼進行比較,如果反序則交換它們。冒泡排序:是交換排序中最簡單的排序方法,其基本思想是:兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序記錄為止。 具體的排序過程: (1)將整個待排序的記錄序列劃分成有序區和無序區,初始時有序區為空白,無序區包括整個待排序的記錄。
Time of Update: 2013-11-08
#include <cstdio>#include <cmath>double min(double x,double y){ return x>y?y:x;}struct node{ double x,y,z; double r,s,t; double R;};node v[35];void cal(double x1,double y1,double z1,double x2,double y2,double z2,int cur){
Time of Update: 2013-11-08
應用程式管理概述http://msdn.microsoft.com/zh-cn/library/ms743714.aspxApplication 元素必須包含 x:Class 特性。產生應用程式時,標記檔案中如果存在x:Class,則 MSBuild 將建立一個從Application 派生的partial 類,並且該類的名稱由 x:Class 特性指定。在程式碼後置中,該類必須是 partial 類,其名稱由標記中的x:Class
Time of Update: 2013-11-08
.net 原則上禁止跨線程訪問控制項,因為這樣可能造成錯誤的發生,有一種方法是禁止編譯器對跨線程訪問作檢查,Control.CheckForIllegalCrossThreadCalls = false;可以實現訪問,但是出不出錯不敢保證C#跨線程訪問控制項執行階段錯誤。使用MethodInvoker即可解決:原代碼: private void&nbs
Time of Update: 2013-11-08
// [10/7/2013 qingezha] 求出1…n之間的所有親和數。//所謂親和數,即存在數a和數b,a的所有真因子之和等於b,b的所有真因子之和等於a,則稱a和b為一對親和數。//例如220的真因子為:1、2、4、5、10、11、20、22、44、55、110,和為284;而284的真因子為:1、2、4、71、142,和正好為220。故220和284是一對親和數。//現在設j 的真因子和為sum[j],那麼j 可以被所有的因子整除的和為sum[j] ,其中可以整除就是關鍵void
Time of Update: 2013-11-08
#include <iostream>#include <string>class BasicClassic{public: virtual void Print() = 0;};class DerivedClassic1 : public BasicClassic{public: DerivedClassic1() {} virtual void Print() { std::cout <<
Time of Update: 2013-11-08
這個是個高效的演算法,時間複雜度為 O(logn)原理:a的n次方:#include<iostream>#include<cmath>using namespace std;double PowerWithUnisgnedExponent(double base ,unsigned int exponent){if(exponent == 0)return 1;if(exponent == 1)return base;double result =
Time of Update: 2013-11-08
題意:T個測試資料n個模版母串 問:模版,在母串或翻轉母串中出現的個數注意模版會重複( 一樣的單詞可能重複出現 ) #include <stdio.h>#include <string.h>#include <queue>using namespace std;inline int Max(int a,int b){return a>b?a:b;}inline int Min(int a,int b){return
Time of Update: 2013-11-08
*ip = 1; //第一個指令 *ip = 2; //第二個指令 以上程式compiler可能做最佳化而成: int *ip = ...; *ip = 2; 結果第一個指令丟失。如果用volatile, compiler就不允許做任何的最佳化,從而保證程式的原意: volatile int *ip = ...; *ip = 1; *ip = 2; 即使你要compiler做最佳化,它也不會把兩次付
Time of Update: 2013-11-08
Total Submission(s): 36010 Accepted Submission(s): 15665//之前自己想太複雜。。真的很簡單。。。#include<stdio.h>int main(){ int a=2,n,m,i,j; while(scanf("%d%d",&n,&m)!=EOF) { a=2; j=0; for(i=0
Time of Update: 2013-11-08
題意:略。思路:直接二分,因為假設現在在點mid .那麼求出[l , mid]的和,如果是奇數,那麼那個點肯定在前面的區間,也就是mid = r - 1 ,如果是偶數,則證明在後面的區間,mid = l + 1 。然後更新答案即可。這種解法很容易想到,但是一直T,理論上複雜度完全可以過,一直很不解。然後發現,二分過程中mid = l + r >> 1 。這個l + r 可能會爆int ,所以mid 值就是負數了,就一直T。把mid 改成mid =