uva 11971 - Polygon(线性规划)

题目连接:uva 11971 - Polygon

题目大意:给定一个长度为N的线段,要求切K刀,分成K+1个线段,问能组成K+1边形的概率。

解题思路:K条线段能组成K边形的条件为任意一条边小于其他所有边的和,因为是求概率,所以和N无关。

根据高中线性规划的知识,以二维为例:

所以有ans=2K?K?12K

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long ll;
const int maxn = 60;

ll gcd (ll a, ll b) {
    return b == 0 ? a : gcd(b, a % b);
}

int main () {
    ll f[maxn];
    f[0] = 1;
    for (int i = 1; i <= 50; i++)
        f[i] = f[i-1] * 2;

    int cas;
    scanf("%d", &cas);
    for (int kcas = 1; kcas <= cas; kcas++) {
        int N, K;
        scanf("%d%d", &N, &K);

        printf("Case #%d: ", kcas);
        if (K == 1)
            printf("0/1\n");
        else {
            ll member = f[K] - K - 1;
            ll d = gcd(member, f[K]);
            printf("%lld/%lld\n", member / d, f[K] / d);
        }

    }
    return 0;
}

uva 11971 - Polygon(线性规划)

时间: 2024-11-06 13:32:26

uva 11971 - Polygon(线性规划)的相关文章

UVA 11971 - Polygon(概率+几何概型)

UVA 11971 - Polygon 题目链接 题意:给一条长为n的线段,要选k个点,分成k + 1段,问这k + 1段能组成k + 1边形的概率 思路:对于n边形而言,n - 1条边的和要大于另外那条边,然后先考虑3边和4边形的情况,根据公式在坐标系中画出来的图,总面积为x,而不满足的面积被分成几块,每块面积为x/2k,然后在观察发现一共是k + 1块,所以符合的面积为x?x?(k+1)/2k,这样一来除以总面积就得到了概率1?(k+1)/2k 代码: #include <cstdio>

Uva 11971 Polygon 想法

多边形的组成条件是最长边不能占边长总和的一半,将木棒想象成圆多砍一刀,然后是简单概率. Polygon Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description U   - Polygon Time Limit: 1 sec Memory Limit: 32 MB John has been given a segment of lenght N, how

UVA 11971 - Polygon 数学概率

                                    Polygon  John has been given a segment of lenght N, however he needs a polygon. In order to create a polygonhe has cut given segment K times at random positions (uniformly distributed cuts). Now he has K + 1much sh

uva 11971 Polygon

https://vjudge.net/problem/UVA-11971 有一根长度为n的木条,随机选k个位置把它们切成k+1段小木条.求这些小木条能组成一个多边形的概率. 将木条看做一个圆,线上切k刀等价于圆上切k+1刀 如果能组成多边形,每一段木条的长度都要<圆周长/2 反过来,如果不能组成多边形,有且仅有一段长度>=圆周长/2 如图所示,第一刀可以随便切,接下来的每一刀都要在第一刀所在的那个半圆上 概率=(1/2)^k 每一个切点处,都可以断开成为线,共有k+1种断法 所以不能构成多边形

UVa 11971 Polygon (数学,转化)

题意:一根长度为n的木条,随机选k个位置将其切成k+1段,问这k+1段能组成k+1条边的多边形的概率. 析:这个题,很明显和 n 是没有任何关系的,因为无论 n 是多少那切多少段都可以,只与切多少段有关.然后我们要转化一下,不能直接做,因为不好做. 转化为一个圆上选 m+1 个点,能不能组成多边形,很容易知道如果一个边大于一半圆的周长,那就组不成多边形.然后位置是随便选的,概率就是1, 然后其他 m-1 个点,就只能放那一半上,每个都有1/2的概率,然后 m 个,就是1/(2^m),然后每个点都

UVa 11971 (概率) Polygon

题意: 有一根绳子,在上面随机选取k个切点,将其切成k+1段,求这些线段能够成k+1边形的概率. 分析: 要构成k+1边形,必须最长的线段小于其他k个线段之和才行. 紫书上给出了一种解法,但是感觉理解得不是太好,所以又去网上找了其他解法. 知乎上有人问过这个问题,而且给出了很多种严格的解法. 最后代码里将(1LL << i)写成(1 << i),这种细节应当注意. 1 #include <cstdio> 2 typedef long long ll; 3 4 ll gc

uva 10498 Happiness(线性规划)

题意:n种食物m个人,已知每种食物的单价,每个人吃每种食物的愉快值,每个人的愉快值上限,求花钱买食物所花钱的最大值: 思路:线性规划:可得标准形式,带入模版: 标准形式即由不等式构成的方程组,松弛形式即由等式构成的方程组: 等式转不等式,用既大于等于又小于等于表示:不等式转等式,用增加一个变量,新增变量大于0来表示: #include <iostream> #include <cstdio> #include <math.h> using namespace std;

uva 11971

#include<bits/stdc++.h> using namespace std; typedef long long ull; ull gcd(ull a,ull b){ if(b == 0) return a; return gcd(b,a%b); } int main(){ ull t,n,k,cnt = 0,temp,a,b,c; cin >> t; while(t--){ cnt++; cin >> n >> k; // scanf(&quo

第10章例题(紫书)

21/21 题目都很基础,有很多题书上讲得比较详细,然后隔得时间有点久,所以具体什么trick都忘了,思路也懒得去回忆,所以将就着放上来了.... 例题10–1 Uva 11582 题意:输入a, b, n让你计算F[a^b]%n;其中这个F[i]是斐波那契数: 题解: 这题是快速幂+找循环节,用什么方法找循环节呢?因为第一个数是0和1,然后当再出现0和1的时候就是出现循环节的时候,然后假如找到了循环节T,然后就有F[n] = F[n % T],预处理找循环节,O(一百万左右),快速幂logn