Time of Update: 2018-12-05
末位是987654321 可以暴一下 可以看出只有八種情況 大於9位之後每位多輸出個0 比賽的時候題沒看懂#include<cstdio>#include<cstring>#include<algorithm>int main(){ int n; while(scanf("%d",&n) == 1) if(n < 9) puts("0"); else if(n ==
Time of Update: 2018-12-05
dp還是比較容易 關鍵是輸出路徑 ....#include <cstdlib>#include <cstdio>#include <cstring>#define inf 0x7fffffffusing namespace std;int n;struct cc{ int a; int b; void f(int x, int y) { a = x; b = y; }};cc m[105];int
Time of Update: 2018-12-05
計算一個 32 位不帶正負號的整數有多少個位為1Counting out the bits 可以很容易的判斷一個數是不是2的冪次:清除最低的1位(見上面)並且檢查結果是不是0.儘管如此,有的時候需要直到有多少個被設定了,這就相對有點難度 了。 GCC有一個叫做__builtin_popcount的內建函數,它可以精確的計算1的個數。儘管如此,不同於__builtin_ctz,它並沒有被
Time of Update: 2018-12-05
這個......小學生就會的 坑在輸入輸出了 兩個數之間可能不止一個空格....wa了好幾遍啊#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int g[1130][1130],dp[1130][1130];char str[1130];int main(){ int T,W,N; scanf("%d",&T); while(T-
Time of Update: 2018-12-05
題目來源:http://acm.pku.edu.cn/JudgeOnline/problem?id=2524 解題報告: 簡單的並查集的應用吧 方法一: #include <iostream>using namespace std;typedef struct _node{_node* parent;int rank;}node;node **s;void makeSet(int x){s[x]=new
Time of Update: 2018-12-05
簡單的dp 但是一個大數加法 套用了末位大牛的類模板#include <cstdio>#include <cstring>#include <algorithm>#define maxs 10005#define maxn 110using namespace std;char X[maxs], Z[maxn];struct bign{ int len, s[maxn]; bign operator = (const char *num)
Time of Update: 2018-12-05
題目來源:http://acm.pku.edu.cn/JudgeOnline/problem?id=1837 解題報告: 想了很久,還是看了別人的解題報告背包問題的形式吧設f[i][j]代表掛了前i個砝碼時,平衡度為j的方法的個數。顯然,平衡度的範圍為[-25*20*15,25*20*15],即[-7500,7500],但是要使天平保持平衡,一旦平衡度超過3750,或小於-3750,那麼剩下的砝碼無論如何放,天平都無法平衡,所以這種情況可以不用考慮。當然,實際時,由於不允許有負數,所以f[i][
Time of Update: 2018-12-05
POJ推薦50題 1. 標記“難”和“稍難”的題目可以看看,思考一下,不做要求,當然有能力的同學可以直接切掉。 2. 標記為 A and B 的題目是比較相似的題目,建議大家兩個一起做,可以對比總結,且二者算作一個題目。 3. 列表中大約有70個題目。大家選做其中的50道,且每類題目有最低數量限制。 4. 這裡不少題目在 BUPT ACM FTP 上面都有代碼,請大家合理利用資源。 5. 50個題目要求每個題目都要寫總結,養成良好的習慣。 9.
Time of Update: 2018-12-05
題目來源:http://acm.pku.edu.cn/JudgeOnline/problem?id=1159 解題報告:求一個字串中至少添加幾個字元可以使該字串變成迴文串。也是一道簡單的DP,我這裡用了備忘錄的方法,f[i][j]表示要使字串的第i個到第j個間的字串成為迴文串至少需要添加的字元的個數,那麼有兩種情況:第一種,a[i]=a[j],那麼f[i][j]=f[i+1][j-1]第二種,a[i]!=a[j],那麼f[i][j]=min(f[i+1][j],
Time of Update: 2018-12-05
好吧 竟然因為編譯器的問題不過 到底有什麼區別 ???? 可以推出公式Hi = (i-1)H2 +(i-1)(i-2)-(i-2)*H1 因為所有的Hi都要大於零 Hn要最小 即存在Hi=0 即求H2可以達到的最大值 代入公式求出Hn#include <iostream>#include <cstdio>#include <algorithm>#define maxn 10010using namespace std;int main(){
Time of Update: 2018-12-05
可能是九月份來的都是好公司吧,都是來搶牛人的吧,只有筆試沒有面試的我感到異常的失落,我不是很強,又是女生,學校也不是985,211,一點競爭力都沒有,哥哥鼓勵我去霸面,但是我老是提不起勇氣,總是在顧慮什麼。在這個過程中,我發現,有些公司宣講會的時候給你說“我們不限學校,不限學曆,不限男女”,但是他們會在筆試的時候把這些非211
Time of Update: 2018-12-05
題外話:很多年前碰到的一道題了,那時候不會做,今天看《編程之美》的時候看到那篇算字串相似性的題的時候,想到也應該來做一下那時沒做出來的題了,而且計算字串相似性的演算法也正好可以用在那道題上。原題是什麼我已經不記得了,反正就當我做的一道思考題吧: 題目:讀取字串s1和s2,其中s1是正常的單詞,而s2中可能包含'?'和'*'s2中的'?'代表任意一個字元,'*'代表任意n個字元(我這裡假設n>=1),比較s1和s2,檢查他們是否匹配。 演算法思路:比方說,對s1[0,....m],s2[0,
Time of Update: 2018-12-05
題目來源:http://acm.pku.edu.cn/JudgeOnline/problem?id=1007 演算法比較呆,就是首先算出每個字串的逆序字母的個數,然後將個數放入一個multimap中,直接排好序了,然後輸出。 #include <iostream>#include <string>#include <map>#include <algorithm>using namespace std;int main(){int length,
Time of Update: 2018-12-05
《編程之美》給出了一種方法,但是它要為每個節點都儲存一個最長左子樹距離和最長右子樹距離的欄位。我想到了另一種方法,就是為節點編碼,根節點設為0,對於一個節點的左節點,它的編碼是它的父親節點的碼後面加個0,對於一個節點的右節點,它的編碼是它的父親節點的碼後面加個1,如果我們找到了葉子節點,就把為它編的碼存在一個數組中。一次遍曆完畢後,數組中就存在所有葉子節點的編碼了,再將根節點的碼也存在數組中。我們可以根據節點的碼來求出兩個節點間的距離。因為最大距離的兩個節點一定是葉子節點或者葉子節點和根節點,因
Time of Update: 2018-12-05
給定一顆二叉樹,要求按分層遍曆該二叉樹,即從上到下按層次訪問該二叉樹(每一層將單獨輸出一行),每一行要求訪問的順序是從左至右。《編程之美》中有遞迴和非遞迴的解法。遞迴解法的思路是,假設要求訪問二叉樹中第K層的節點,那麼可以把它轉換成訪問以該二叉樹根節點的左右節點為根的兩顆左右子樹的第K-1層的節點。依次遞迴下面程式是輸出第K層的節點 int PrintNodeAtLevel(node *root,int level){ if(root==NULL|| level<0)
Time of Update: 2018-12-05
1. 反轉一個單鏈表例子:1 -> 2 -> 3 ->4-> 5 -> NULL 反轉後變為 5->4->3->2->1->NULL#include <iostream>using namespace std;class node{public:int data;node *next;node(int i,node* n=NULL):data(i),next(n){}~node();};void
Time of Update: 2018-12-05
POJ上的一些水題(可用來練手和增加自信)(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期:一.基本演算法: (1)枚舉. (poj1753,poj2965) (2)貪心(poj1328,poj2109,poj2586) (3)遞迴和分治法. (4)遞推. (5)構造法.(poj3295) (6)類比法.(poj1068,poj2632,poj15
Time of Update: 2018-12-05
今天整理了一下以前學習的知識和做的作業什麼的,把以前上《UNIX環境下的進階編程》課的時候做的作業貼出來,跟大家共用一下哈。#include<unistd.h>#include<time.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<dirent.h>#include<stdlib.h>#include<stdio.
Time of Update: 2018-12-05
給你一串數字,例如"1234567890",按照以下規則加密:1. 將所有的3,6換成42. 將所有的數字加2,如果加2後得到的數字大於9,則替換為9 問題:1. 編寫加密程式2. 編寫解密程式 思考:加密程式很簡單,我這裡就不寫了。寫一下解密程式,解密程式要輸出所有可能的字串組合,數字對應如下:0 - 21 - 32 - 43 - 64 - 65 - 76 - 67 - 98 - 99 -
Time of Update: 2018-12-05
題目來源:http://acm.pku.edu.cn/JudgeOnline/problem?id=1080解題報告:最近模糊的看了一下演算法導論的動態規劃一章,好像理解了,結果做題的時候,發現還是不會做,總是找不到子問題,不知道怎麼設最優子結構,本來想找一道簡單的來做,就找到了1080,結果還是沒思路,看了別人的代碼,才理解了一點,看來還是要多做多練啊。這道題是求兩個字串的相似性,設第一個字串s1[0],s1[1],s1[2],....s1[len1-1], 第二個字串s2[0],s2[1],