Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <string>
- #include <set>
- #include <map>
- #include <queue>
- #include <bitset>
- #include <intrin.h>
- #include <nmmintrin.h>
- #include <stdio.h>
- #include <chrono>
- #include <stack>
- #include <ctime>
- #include <iomanip>
- #include <cmath>
- #include <unordered_map>
- #include <functional>
- #define f(n) for(ll i=0;i<n;i++)
- #define mp make_pair
- #define pii pair<int,int>
- #define all(x) x.begin(),x.end()
- #define rall(x) x.rbegin(),x.rend()
- using namespace std;
- typedef long long ll;
- #define INF 2e9
- #define LINF 2e18
- #define MOD 1000000007
- #define MOD9 998244353
- #define eps 0.000001
- #define pi 3.1415926535
- #define yes "YES"
- #define no "NO"
- void maksakovsky() {
- cin.sync_with_stdio(false); cout.tie(0); cin.tie(nullptr);
- cout.precision(14); cout << fixed;
- }
- int k;
- ll check_pob(ll mask) {
- ll res = 0;
- int a[4][7];
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 7; j++) {
- a[i][j] = ((mask & 1) == 1);
- mask >>= 1;
- }
- }
- int count = 0;
- while (count < k) {
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 7; j++) {
- if (a[i][j] == 0)continue;
- int cnt = 0;
- for (int p = 0; p < 7; p++) {
- if (a[i][p] == 1)cnt++;
- }
- if (cnt <= 2) {
- for (int p = 0; p < 7; p++) {
- if (a[i][p] == 1)a[i][p] = 0;
- }
- }
- cnt = 0;
- for (int p = 0; p < 4; p++) {
- if (a[p][j] == 1)cnt++;
- }
- if (cnt <= 1) {
- for (int p = 0; p < 4; p++) {
- if (a[p][j] == 1)a[p][j] = 0;
- }
- }
- }
- }
- count++;
- }
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 5; j++) {
- if (a[i][j] == 1)res++;
- }
- }
- return res;
- }
- int main() {
- maksakovsky();
- ll n = 1 << 28;
- map<int, double>mMat;
- map<int, double>mVer;
- mVer[24] = 1.0;
- mMat[24] = 12.83956043956044;
- mVer[23] = 1.0;
- mMat[23] = 12.27838827838828;
- mVer[22] = 1.0;
- mMat[22] = 11.70007166746297;
- mVer[21] = 1.0;
- mMat[21] = 11.09854819093949;
- mVer[20] = 1.0;
- mMat[20] = 10.46547655243307;
- mVer[19] = 1.0;
- mMat[19] = 9.78923250662381;
- mVer[18] = 1.0;
- mMat[18] = 9.05411064907632;
- mVer[17] = 1.0;
- mMat[17] = 8.23983663171306;
- mVer[16] = 1.0;
- mMat[16] = 7.31877401550305;
- mVer[15] = 1.0;
- mMat[15] = 6.24139472722728;
- mVer[14] = 1.0;
- mMat[14] = 4.90650940009871;
- mVer[13] = 0.74833759590793;
- mMat[13] = 3.11006816914409;
- mVer[12] = 0.45497582240078;
- mMat[12] = 1.69522172537383;
- mVer[11] = 0.24032153963504;
- mMat[11] = 0.83445444715468;
- mVer[10] = 0.11187637686494;
- mMat[10] = 0.37179639582386;
- mVer[9] = 0.04544441066180;
- mMat[9] = 0.14753724536333;
- mVer[9] = 0.01540488497010;
- mMat[9] = 0.04958809306635;
- cin >> k;
- if (k >= 9 && k <= 24) {
- cout << mVer[k] << " " << mMat[k];
- return 0;
- }
- ll ans = 0, obh = 0;
- double ver = 0;
- for (ll mask = 32; mask < n; mask++) {
- if (__popcnt(mask) == k) {
- ll cur = check_pob(mask);
- ans += cur;
- ver += (cur > 0);
- obh++;
- }
- }
- double mat = (double)ans / (double)obh;
- ver /= (double)obh;
- cout << ver << " " << mat;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement