SRM466
250pt:
给出一个数n(n <= 10^10),问至少修改几位能使其变成完全平方数。
思路:
直接枚举平方根,然后统计。
注意枚举时要枚举到比她大。。
1 #line 7 "LotteryCheating.cpp" 2 #include <cstdlib> 3 #include <cctype> 4 #include <cstring> 5 #include <cstdio> 6 #include <cmath> 7 #include <algorithm> 8 #include <vector> 9 #include <string> 10 #include <iostream> 11 #include <sstream> 12 #include <map> 13 #include <set> 14 #include <queue> 15 #include <stack> 16 #include <fstream> 17 #include <numeric> 18 #include <iomanip> 19 #include <bitset> 20 #include <list> 21 #include <stdexcept> 22 #include <functional> 23 #include <utility> 24 #include <ctime> 25 using namespace std; 26 27 #define PB push_back 28 #define MP make_pair 29 30 #define REP(i,n) for(i=0;i<(n);++i) 31 #define FOR(i,l,h) for(i=(l);i<=(h);++i) 32 #define FORD(i,h,l) for(i=(h);i>=(l);--i) 33 34 typedef vector<int> VI; 35 typedef vector<string> VS; 36 typedef vector<double> VD; 37 typedef long long LL; 38 typedef pair<int,int> PII; 39 40 41 class LotteryCheating 42 { 43 public: 44 int bit[20], L = 0; 45 int work(long long x){ 46 int ret = 0; 47 for (int i = 0; i < L + 1; ++i){ 48 if (x % 10 != bit[i]) ++ret; 49 x /= 10; 50 } 51 return ret; 52 } 53 int minimalChange(string ID) 54 { 55 int sz = ID.size(); 56 L = sz; 57 memset(bit, 0, sizeof(bit)); 58 long long n = 0; 59 for (int i = 0; i < sz; ++i) 60 n = n * 10 + ID[i] - 48, bit[sz-i-1] = ID[i] - 48; 61 int ans = 100; 62 for (long long i = 0; i * i <= n * 10; ++i) 63 ans = min(work(i * i), ans); 64 return ans; 65 66 } 67 68 69 };
500pt:
彩票上有N行5列的格子,其中有1-5*N的排列。抽奖会抽出5个数来,如果彩票上一行有超过三个抽出的数则中奖。
View Code
问彩票中奖概率。
思路:
直接枚举中奖的情形,那么有可能是3行 2行,1行。
对于3行,只有可能是3+1+1,
对于2行,4 + 1
对于1行,5
其他全排列即可
1 #line 7 "LotteryPyaterochka.cpp" 2 #include <cstdlib> 3 #include <cctype> 4 #include <cstring> 5 #include <cstdio> 6 #include <cmath> 7 #include <algorithm> 8 #include <vector> 9 #include <string> 10 #include <iostream> 11 #include <sstream> 12 #include <map> 13 #include <set> 14 #include <queue> 15 #include <stack> 16 #include <fstream> 17 #include <numeric> 18 #include <iomanip> 19 #include <bitset> 20 #include <list> 21 #include <stdexcept> 22 #include <functional> 23 #include <utility> 24 #include <ctime> 25 using namespace std; 26 27 #define PB push_back 28 #define MP make_pair 29 30 #define REP(i,n) for(i=0;i<(n);++i) 31 #define FOR(i,l,h) for(i=(l);i<=(h);++i) 32 #define FORD(i,h,l) for(i=(h);i>=(l);--i) 33 34 typedef vector<int> VI; 35 typedef vector<string> VS; 36 typedef vector<double> VD; 37 typedef long long LL; 38 typedef pair<int,int> PII; 39 40 41 class LotteryPyaterochka 42 { 43 public: 44 double C(int n, int m){ 45 double ret = 1.0; 46 for (int i = 1; i <= m; ++i) 47 ret *= (n - i + 1.0) / (i + .0); 48 return ret; 49 } 50 double A(int n, int m){ 51 double ret = 1.0; 52 for (int i = 1; i <= m; ++i) 53 ret *= (n - i + 1.0); 54 return ret; 55 } 56 double chanceToWin(int N) 57 { 58 if (N <= 2) return 1.0; 59 double ans = 0; 60 ans += C(N, 1) * C(N - 1, 2) * C(5, 3) * C(5, 1) * C(5, 1) * A(5, 5); 61 ans += C(N, 1) * C(N - 1, 1) * C(5, 3) * C(5, 2) * A(5, 5); 62 ans += C(N, 1) * C(N - 1, 1) * C(5, 4) * C(5, 1) * A(5, 5); 63 ans += C(N, 1) * A(5, 5); 64 cout << ans << endl; 65 for (int i = 0; i < 5; ++i) 66 ans /= (5 * N - i + .0); 67 return ans; 68 } 69 70 };