| Problem Id | Title | |
| Problem A | A+B | |
| Problem B | 统计字数 | |
| Problem C | 生日计算 | |
| Problem D | 冬瓜的寒假之旅 |
Problem A略)
Problem B
B题目就是一个统计字符的简单模拟,纵向记录横向输出就可。先for一圈遍历遍最大的个数可确定高度。
1 /****************************************/ 2 /***** Desgard_Duan *****/ 3 /****************************************/ 4 //#pragma commentlinker, "/STACK:102400000,102400000") 5 #define _CRT_SECURE_NO_WARNINGS 6 #include <iostream> 7 #include <cstdio> 8 #include <cstdlib> 9 #include <cstring> 10 #include <string> 11 #include <algorithm> 12 #include <stack> 13 #include <map> 14 #include <queue> 15 #include <vector> 16 #include <set> 17 #include <functional> 18 #include <cmath> 19 #include <numeric> 20 21 using namespace std; 22 23 vector<string> ans; 24 int let[26]; 25 26 int main ) { 27 string text = "", in; 28 for int i = 0 ; i < 4; ++ i) { 29 getlinecin, in); 30 text += in; 31 } 32 //cout << text << endl; 33 memset let, 0, sizeof let)); 34 int Max = 0; 35 for int i = 0; i < text.size); ++ i) { 36 if isalphatext[i])) { 37 let[text[i] - 'A'] ++; 38 Max = max Max, let[text[i] - 'A']); 39 } 40 } 41 for int i = 1; i <= Max; ++ i) { 42 string text_line = ""; 43 for int j = 0 ; j < 26; ++ j) { 44 if i > Max - let[j]) { 45 text_line += "*"; 46 } else { 47 text_line += " "; 48 } 49 if j != 25) text_line += " "; 50 } 51 cout << text_line << endl; 52 } 53 puts"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"); 54 return 0; 55 }
Problem C
考虑闰年的2月29日生日就可,其他没有什么坑。
1 /****************************************/ 2 /***** Desgard_Duan *****/ 3 /****************************************/ 4 //#pragma commentlinker, "/STACK:102400000,102400000") 5 #define _CRT_SECURE_NO_WARNINGS 6 #include <iostream> 7 #include <cstdio> 8 #include <cstdlib> 9 #include <cstring> 10 #include <string> 11 #include <algorithm> 12 #include <stack> 13 #include <map> 14 #include <queue> 15 #include <vector> 16 #include <set> 17 #include <functional> 18 #include <cmath> 19 #include <numeric> 20 21 using namespace std; 22 23 int judge int x ) { 24 if x % 400 == 0 || x % 4 == 0 && x % 100 != 0 ) ) 25 return 1; 26 return 0; 27 } 28 int main) { 29 int y, m, d, t; 30 whilescanf "%d", &t ) != EOF) { 31 while t-- ) { 32 scanf "%d-%d-%d", &y, &m, &d ); 33 int sum = 0; 34 if judge y ) && m == 2 && d == 29 && !judge y + 30 ) ) { 35 puts "-1" ); 36 continue; 37 } 38 for int i = 0; i <= 30; ++i ) 39 ifjudge y + i )) 40 sum ++; 41 if judge y + 30 ) && m <= 2 && d < 28 ) 42 --sum; 43 if judge y ) && m >= 3 ) 44 --sum; 45 printf "%d ", sum + 30 * 365 ); 46 } 47 } 48 return 0; 49 }
Problem D
主要考察枚举法。即全排列。在数据量不大的情况下,即可将TSP问题的所有情况全部列出,寻求最佳值。
另外可以学习一下next_permutation函数的用法,白书中也有介绍。
1 #include <cstring> 2 #include <iostream> 3 #include <cstdlib> 4 #include <cctype> 5 #include <cstdio> 6 #include <cmath> 7 #include <algorithm> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <queue> 12 13 using namespace std; 14 15 int per[10]; 16 17 struct point { 18 double x, y; 19 } p[10]; 20 21 double dispoint a, point b) { 22 return sqrta.x - b.x) * a.x - b.x) + a.y - b.y) * a.y - b.y)); 23 } 24 25 int main) { 26 //freopen"in.txt","r",stdin); 27 //freopen"out.txt","w",stdout); 28 int T, n, cas = 1; 29 double ans; 30 bool f; 31 scanf"%d", &T); 32 whileT--) { 33 f = true; 34 scanf"%d", &n); 35 forint i = 1; i <= n; ++i) { 36 scanf"%lf%lf", &p[i].x, &p[i].y); 37 } 38 forint i = 1; i <= n; ++i) { 39 per[i - 1] = i; 40 } 41 do { 42 point tmp; 43 tmp.x = 0; 44 tmp.y = 0; 45 double sum = distmp, p[per[0]]); 46 forint i = 1; i < n; ++i) { 47 sum += disp[per[i]], p[per[i - 1]]); 48 } 49 sum += distmp, p[per[n - 1]]); 50 iff) { 51 ans = sum; 52 f = false; 53 } else 54 ans = minans, sum); 55 } whilenext_permutationper, per + n)); 56 printf"Case #%d: %.2lf ", cas++, ans); 57 } 58 return 0; 59 }

