Codeforces Round #246 (Div. 2) A,B,C,D

A.水题,输出图形

B.水题

C.概率题

/*
m, n
最大数为k的总数为  k^n - (k-1)^n
所以最大数为k的期望为  (k^n - (k-1)^n) / (m^n)

*/

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n, m;
    int i, j;
    scanf("%d%d", &m, &n);
    double ans = m;
    for(i=1; i<=m-1; ++i)
    {
        double x = i*1.0/m;
        ans = ans - pow(x, n);
    }
    printf("%.12f\n", ans);
    return 0;
}

D. 状态压缩DP

#include<bits/stdc++.h>
using namespace std;

int pri[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
int dp[105][1<<16];
int p[105][1<<16];
int mask[60];  //mask[i]已二进制形式表示是否含有pri[j]
int a[105];

int main()
{
    int n, i, j, k;
    for(i=1; i<60; ++i)
        for(j=0; j<16; ++j)
        if(i%pri[j]==0)
            mask[i] |= 1<<j;
    scanf("%d", &n);
    for(i=1; i<=n; ++i) scanf("%d", &a[i]);
    memset(dp, 0x3f, sizeof dp );
    dp[0][0] = 0;
    for(i=1; i<=n; ++i)
    {
        for(j=0; j< (1<<16); ++j)
        for(k=1; k<60; ++k) if( (mask[k]&j)==0)
        {
            if(dp[i][j|mask[k]]>dp[i-1][j] + abs(a[i]-k))
            {
                dp[i][j|mask[k]] = dp[i-1][j] + abs(a[i]-k);
                p[i][j|mask[k]] = k;
            }
        }
    }

    vector<int> ans;
    for(int i=n, m=min_element(dp[i], dp[i]+(1<<16)) - dp[i]; i>0;
        m ^= mask[p[i][m]], --i)
        ans.push_back(p[i][m]);
    for(i=1; i<=n; ++i)
        printf("%d ", ans[n-i]);
    return 0;
}

Codeforces Round #246 (Div. 2) A,B,C,D,布布扣,bubuko.com

时间: 2025-01-04 10:39:21

Codeforces Round #246 (Div. 2) A,B,C,D的相关文章

Codeforces Round #246 (Div. 2)

A.Choosing Teams 水题 #include <cstdio> #include <cstring> using namespace std; int main() { int n, k, ans, i, x; scanf("%d%d",&n,&k); ans = 0; for(i=0; i<n; ++i) { scanf("%d",&x); if(5-x >= k) ans++; } ans

Codeforces Round #246 (Div. 2) B. Football Kit

题目的意思是求出每个队穿主场衣服和客场衣服的次数 每个队作为主场的次数是n-1,作为客场的次数是n-1 当每个队打主场的时候肯定穿的主场衣服 当每个队打客场时,如果客场与主场的衣服不同,则穿客场衣服   如果客场与主场的衣服相同,则穿主场衣服 则只需要标记主场每种衣服有多少球队,当作为客场时查找与客场颜色相同的主场球队有多少即可 #include <iostream> #include <map> #include <vector> #include <algor

Codeforces Round #246 (Div. 2) D. Prefixes and Suffixe 后缀数组

链接: codeforces.com/contest/432/problem/D 题意: 给你一个字符串,求每一个和前缀匹配的后缀在这个字符串中出现的次数 题解: 先算出lcp,找到sa[i]==0的位置标记为beg,和前缀匹配的后缀一定会出现beg的左边,这个想一想明白了 我们先算出beg左边每一个后缀和beg匹配的长度,beg右边的先放到一个vector中,便于之后二分查找 我们从beg向左遍历,对于每一个dp[i],如果dp[i]==n-sa[i],就可以更新结果了,从i到beg中间的都满

Codeforces Round #246 (Div. 2)(第一次做cf)

早就想做CF,但是在校党,没办法,断网又断电,一天实在忍不住了,就跑着流量做了一次CF 看到A题,看完题就有思路了,然后一把A掉,接着做第二道,看了N久,题意不懂,泪奔啊,然后就没激情再做了, 我的第一次就这样没了...................... 链接:http://codeforces.com/contest/432/problem/A =========================================================================

Codeforces Round #246 (Div. 2) (ABCD详细题解)

比赛链接:http://codeforces.com/contest/432 A. Choosing Teams time limit per test:1 second memory limit per test:256 megabytes The Saratov State University Olympiad Programmers Training Center (SSU OPTC) has n students. For each student you know the numbe

Codeforces Round #246 (Div. 2) A. Choosing Teams

给定n k以及n个人已参加的比赛数,让你判断最少还能参加k次比赛的队伍数,每对3人,每个人最多参加5次比赛 #include <iostream> using namespace std; int main(){ int n,k, cnt = 0; cin >> n >> k; for(int i = 0 ; i < n; ++ i){ int a; cin >> a; if(a+k <= 5) cnt ++; } cout<<cnt

Codeforces Round #279 (Div. 2) ABCD

Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name     A Team Olympiad standard input/output 1 s, 256 MB  x2377 B Queue standard input/output 2 s, 256 MB  x1250 C Hacking Cypher standard input/output 1 s, 256 MB  x740 D Chocolate standard input/

Codeforces Round #428 (Div. 2)

Codeforces Round #428 (Div. 2) A    看懂题目意思就知道做了 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i

Codeforces Round #424 (Div. 2) D. Office Keys(dp)

题目链接:Codeforces Round #424 (Div. 2) D. Office Keys 题意: 在一条轴上有n个人,和m个钥匙,门在s位置. 现在每个人走单位距离需要单位时间. 每个钥匙只能被一个人拿. 求全部的人拿到钥匙并且走到门的最短时间. 题解: 显然没有交叉的情况,因为如果交叉的话可能不是最优解. 然后考虑dp[i][j]表示第i个人拿了第j把钥匙,然后 dp[i][j]=max(val(i,j),min(dp[i-1][i-1~j]))   val(i,j)表示第i个人拿