原创 USACO 2.1.3 Sorting A Three-Valued Sequence

題意大致是說把一個僅含1,2,3的數列排成不減序。先確定有多少個1,多少個2,多少個3。 然後把處於原屬於2的位置的1和處於原屬於1位置的2互換。 接下來對(1,3)、(2,3)照樣操作。 在對(1,2)、(1,3)操作時,如果1不夠,

原创 HDOJ1027 Ignatius and the Princess II

這道題有多種做法。數學編碼、康託展開、STL庫等。下面的代碼選用的是數學編碼。 原理:6個數的全排列共有6!=720種。 如果確定一個1,則其後的5個數有5!=120種。 第一個數可以取1,2,……,6.將它們從小到大編碼爲0~5. 假定

原创 USACO 2.1.5 Hamming Code

水題。DFS暴搜即可。 注意題目要求輸出十個數換行。 /* ID:szwjcch971 LANG:C++ TASK:hamming */ #include "stdio.h" #include "string.h" int pw2m1[

原创 Codeforces 2A

#include "stdio.h" #include "string.h" struct person{ char name[40]; int score; int getscore; }; int main(){ person

原创 HDOJ1017 A Mathematical Curiosity

此題表述過於隱晦。。話說出題人的語文(英語)是體育老師教的?- - 但此題仍不失爲水題。。 枚舉即可。 另外,最後一個輸出模塊最後不需要空行。 時間:78毫秒 #include "stdio.h" int main(){ int N,

原创 Codeforces 7A

一、用O(1)的遍歷16條行、列,判斷是否全黑做,注意盤面全黑時只需8次而不是16次。 二、BFS(時間複雜度大概介於 O(nlogn)和O(n^2)之間,空間複雜度。。。) #include "stdio.h" #include "st

原创 HDOJ1027

#include "stdio.h" int main(){ unsigned char is_used[1002]; int n,m,i,j,Count,c; int jiecheng[12]={1,1,2,6,24,120,72

原创 HDOJ1018 Big Numbers

不得不說,數據太水。。 利用一個數的位數=floor(log10(這個數))+1。 時間:968毫秒 #include "stdio.h" #include "math.h" int main(){ double count; in

原创 Codeforces 6A

三角形存在性定理。(說實話題目太繞。。那個degenerate查了半天楞是沒弄明白。。後來一猜居然猜對了- -) #include "stdio.h" int judge(int x,int y,int z){ if(x+

原创 Codeforces 5A

<span style="font-size:18px;">#include "stdio.h" #include "string.h" int find_char(char s[200],char ch){ int i,len; l

原创 USACO 2.1.2 Ordered Fractions

先窮舉所有分數,然後排序即可。 注意題目要求的是最簡分數。所以1/2和3/6是一樣的,應注意去重。 /* ID:szwjcch971 LANG:C++ TASK:frac1 */ #include "stdio.h" #include

原创 HDOJ1029 Ignatius and his princess IV

水題。。類似桶排的思路- - #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=500000;

原创 USACO 2.1.4 Healthy Hosteins

WA,TLE了九次- - 苯渣會說一開始我都是用DFS,BFS,排序後剪枝的DFS,排序後剪枝的BFS…… 但這不是有序的排列問題(1,2,3和1,3,2等價)!所以DFS,BFS就平白無故 多出平均n!/1.5倍時間了 解決之道是用二

原创 HDOJ1019 Least Common Multiple

大體思路是先求出1,2個數的LCM2,再求LCM2和第3個數的LCM=LCM3,以此類推。 需要注意n=1的情況。 注意題中給的數據範圍,爲防溢出lcm=a/gcd(a,b)*b 而不是 lcm=a*b/gcd(a,b)(除非你用long

原创 Codeforces 8A

#include "stdio.h" #include "string.h" char s[100008],s1[107],s2[107]; void twist(int n){ int i; char temp;