2014工大校赛题目以及解

a,b题不说。

c题思路是每次枚举俩个点,用半径R确定最大的圆(这样的圆有俩个,求圆心手算有点小麻烦),更新最大值,3次方的,100个点,不会超时。

D题是枚举+贪心,所有物品一共只能是N+1种被拿的情况:要么全是用R(该位子是若用右手标记R,若用左手标记L):RRR...RRR,或者第一个物品用L:LRRR...RR,.....依次到LLLLLL..LLL,一个序列来记录每个物品是被左手还是右手拿。枚举所有序列,如LLL...RRR,贪心:那必然是一次L一次R,多出来的需要额外开销能量。如LLLLRR,多2次R,多一次开销qr(先R)。这样是o(n)的算法。

E题,枚举aj,然后向俩边搜索,往右边搜索的时候,若该数是刚刚左边数的倍数,则跳过枚举。详见代码则明。

F题,(CF 126D)不错的题。求任意一个数表示成不同的斐波那契数之和有几种方案。思路:用该数去减不大于它的最大的斐波那契数,得到新的数,然后用该数重复上述过程,直到该数为0,用这种方法得到一种拆分方法。然后巧妙的是:用一个01序列来表示一种拆分:如14=13+1,则表示为100001(1表示取,0,不取,从左向右,1,2,3,5,8,13,...),

那么1可以表示成左边两个1,001 -》110。然后又多少种拆分?下面用动态规划,dp[i][1]:表示该拆分中,从左往右第I个1取有几种方案,DP[I][0],表示不取有几种方案。则: 第i个1若取,则第i-1个1到第i个1之间必取0,所以得到:dp[i][1]=dp[i-1][1]+dp[i-1][0];  若不取,则看第i-1个1与该位之间有几个0,若第I-1个1取,设有K个0,则第I个1必有

k/2种拆分方案,由乘法原理,得:dp[i-1][1]*((id[i]-id[i-1]-1)/2),若i-1个1不取,则又多一个0,则:dp[i-1][0]*((id[i]-id[i-1])/2); 故 :dp[i][0]=dp[i-1][1]*((id[i]-id[i-1]-1)/2)+dp[i-1][0]*((id[i]-id[i-1])/2);(id【i】记录第i个1所在的位子号)

代码详见:

#include<iostream>  //f题
#include<vector>
#include<algorithm>
using namespace std;
long long fib[100];
void got()
{
    fib[1]=fib[0]=1;
    for(int i=2;i<88;i++)
    {
        fib[i]=fib[i-1]+fib[i-2];
    }
}
int dp[88][2];
int main()
{
    got();
    int T;
    cin>>T;
    while(T--)
   {
    long long n;
    cin>>n;
    vector<int>id;   //id【i】记录第i个1所在的位子号
    for(int i=87;i>0&&n!=0;i--)   //获得一种边界拆分
    {
        if(n>=fib[i])
        {
            n=n-fib[i];
            id.push_back(i);
        }
    }
    reverse(id.begin(),id.end());
    dp[0][1]=1; dp[0][0]=(id[0]-1)/2;
    for(int i=1;i<id.size();i++)
    {
        dp[i][1]=dp[i-1][1]+dp[i-1][0];
        dp[i][0]=dp[i-1][1]*((id[i]-id[i-1]-1)/2)+dp[i-1][0]*((id[i]-id[i-1])/2);
    }
    cout<<dp[id.size()-1][1]+dp[id.size()-1][0]<<endl;
   }
    return 0;
}

2014工大校赛题目以及解

时间: 2024-08-01 22:45:04

2014工大校赛题目以及解的相关文章

2015浙工大校赛- Problem I: no2(概率题,贝叶斯公式)

题目链接:http://acm.zjut.edu.cn/onlinejudge/problem.php?cid=1101&pid=8 题面: Problem I: no2 Time Limit: 1 Sec  Memory Limit: 32 MB Submit: 342  Solved: 23 [Submit][Status][Web Board] Description 已知有个市有n人,得了僵尸病的概率是p.你去参加了检测,检查出来是阳性.医生告诉你这次检测,得病的人检测出阳性的概率是r1

2015浙工大校赛-Problem C: 三角—— 费马大定理+勾股数

题目 有一个直角三角形三边为 A,B,C 三个整数.已知 C 为最长边长,求一组B,C,使得B和C最接近. (题目链接) 分析 打表找规律. 或者直接一点的枚举 $C-B$ 的值.(既然枚举 B 不现实,枚举差值是一种很好的思路啊,学习了 %%% 博客) 或者使用费马大定理(的一小部分), 当 $A$ 为奇数时($A > 1$),存在 $C-B = 1$ 的整数解使得 $A^2 + B^2 = C^2$: 当 $A$ 为偶数时 ($A > 2$),存在 $C-B = 2$ 的整数解使得 $A^

2014东北农大校赛--D.Cross the middle (任意两点最短路径 Floyd)

Cross the middle Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 36  Solved: 13 [Submit][Status][Web Board] Description n个点的图,给出任意两点之间的距离,m个询问,每次询问Mid是否可能出现在从Start到End的最短路径上. Input 第一行n,m 接下来是一个n*n的邻接矩阵,w[i][j]表示i到j的距离 接下来m行 每行start,end,mid N,m<=100,

2014东北农大校赛--A. Paint it! (预处理)

1141: A.Paint it! Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 13  Solved: 10 [Submit][Status][Web Board] Description 有一个n*m的棋盘,每个格子只可能是黑和白两种颜色,你可以使用染料将某个格子染成黑色或者白色.求最少需要染多少个格子, 能使当前的棋盘变成类似于国际象棋的棋盘(每个格子临边的四个格子颜色都不与该格子的颜色相同). Input n m(n,m<=100) 接下

2014 ACM广东省赛总结

2014年广东省赛在化工大学城开,5月10日开幕式&热身赛,5月11日正式赛. 热身赛的时候,开幕式说有两小时,于是我们愉快的切题了,像平常组队赛那样很快出了两题,但卡在后面两题切不动了.这时候已经大概过了一小时十分钟了,于是开始各种测试调戏测评机.测的内容有:栈深.全局数组开的大小.dfs深度.TLE显示时间,各种提示错误RE CE PE WA TLE等等.可惜的是最后还没来得及测试PE,这也没办法,因为热身赛提前结束了,过了一小时四十分钟就结束了.以后热身赛可以考虑切完简单题就立刻跑去测试了

HDU 5024 Wang Xifeng&#39;s Little Plot(2014广州网络赛1003)

写了1h的DFS,简直被自己的代码吓哭了..不过起码还是思路清晰,QUQ~ 说一下题意吧: 题意是求一条最长路,最多能经过一次转弯,并且其角度只能为90度. 拿第一个样例来说:(0,1)->(1,2)->[转弯](2,1) ,所以答案是3. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5024 代码如下: #include<iostream> #include<cstdio> #include<cstring>

HDU 5131 Little Zu Chongzhi&#39;s Triangles (状压DP +2014广州现场赛)

题目链接:HDU 5131 Little Zu Chongzhi's Triangles 题意:给出一些线段,在其中选出3根组成三角形,问用这些线段组成的所有三角形的最大面积是多少. 7 3 4 5 3 4 5 90 两个三角形是(3,3,4),(5,5,4). 思路:N最大12,状态压缩,把所有可能组成的三角形存起来.A&B==0则说明A|B状态是有效的. 贪心也能过..为什么? AC代码: #include <stdio.h> #include <string.h> #

HDU 5131 Song Jiang&#39;s rank list (结构体+MAP,2014广州现场赛)

题目链接:HDU 5131 Song Jiang's rank list 题意:对给出的好汉按杀敌数从大到小排序,若相等,按字典序排.M个询问,询问名字输出对应的主排名和次排名.(排序之后)主排名是在该名字前比他杀敌数多的人的个数加1,次排名是该名字前和他杀敌数相等的人的个数加1,(也就是杀敌数相等,但是字典序比他小的人数加1). AC代码: #include <stdio.h> #include <string> #include <map> #include <

2014ACM/ICPC亚洲区鞍山赛区现场赛——题目重现

2014ACM/ICPC亚洲区鞍山赛区现场赛--题目重现 题目链接 5小时内就搞了5题B.C.D.E,I. H题想到要打表搞了,可惜时间不够,后面打出表试了几下过了- - K题过的人也比较多,感觉是个几何旋转+ploya,但是几何实在不行没什么想法 B:这题就是一个大模拟,直接数组去模拟即可,注意细节就能过 C:类似大白上一题红蓝三角形的, 每个数字找一个互质和一个不互质个数,除掉重复就直接除2,然后总的C(n, 3)减去即可,问题在怎么处理一个数字互质和不互质的,其实只要处理出不互质的即可,这