计蒜客初赛3练习赛

来源:互联网 发布:linux shell编程pdf 编辑:程序博客网 时间:2024/06/10 19:09

计蒜客初赛5之前选了初赛3的题强行练手,确实这道题对思维的要求不低,要求转换思路,价值挺大。初赛5成功晋级后,将未完成的代码补完,完结此次初赛之旅。


 A. 腾讯课堂的物理实验


思路:这题明显是个模拟题,模拟两个小车的位置。不过,一开始准备写个程序专门判断小车位置,考虑到小车方向,时间,并单独处理碰撞和碰墙情况,由于还看存在半点碰撞和位置重合的情况,这样模拟十分复杂。

然而,如果换个思路,由于均为弹性碰撞,根据弹性碰撞性质(不要被题目的胡扯所干扰,大小相等方向相反只是巧合,正常情况应该为两车交换速度),碰后相当于a,b两车交换,而运动状态未发生任何变化,不影响两车之间的距离,因此,单独模拟两车运动,完全可能不用考虑碰撞


#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;int l;int drive(int p,int t,int d){    while(t--)    {        p += d;        if(p==0||p==l)        {            d = d * (-1);        }    }    return p;}int main(){    int ts,tt;    while(scanf("%d%d%d",&l,&ts,&tt)!=EOF)    {        int a = drive(0,tt,1);        int b = drive(l,tt-ts,-1);        //cout << a << "*" << b << endl;        int dis = (a-b);        if(dis<0)        {            dis = dis * (-1);        }        printf("%d\n",dis);    }    return 0;}


 B. 腾讯狼人杀(简单)


思路:这题以狼人杀为背景,长篇描述狼人杀,对于我这种不怎么玩这个游戏的人来说,莫名感到有点方,然而,读完题后才发现这题和狼人杀没有任何关系,只是一个组合匹配问题

注意到这题n仅为20,O(2^n)的复杂度完全没有问题,于是考虑到枚举所有组合方式,并用dfs实现以下就ok了,最后注意一下stl中stack的遍历


#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <stack>using namespace std;const int maxn = 25;int n,m;double maxsum;int w[maxn][maxn];bool p[maxn];stack<int> con;void dfs(int t,int fig){    if(t==n)    {        double money = con.size() * (2 * n - con.size());        double sum = double(fig) / money;        //cout << sum << "*"<<fig<<"*"<<money<<"*" <<maxsum << endl;        if(sum > maxsum)        {            maxsum = sum;        }        return ;    }    if(!p[t])    {        dfs(t+1,fig);    }    stack <int> temp;    while(!con.empty())    {        int i = con.top();        fig += w[i][t];        con.pop();        temp.push(i);    }    while(!temp.empty())    {        int i = temp.top();        temp.pop();        con.push(i);    }    con.push(t);    dfs(t+1,fig);    con.pop();    return ;}int main(){    while(scanf("%d%d",&n,&m)!=EOF)    {        memset(w,0,sizeof(w));        while(!con.empty())        {            con.pop();        }        maxsum = 0;        for(int i=0;i<m;i++)        {            int u,v;            scanf("%d%d",&u,&v);            scanf("%d",&w[u-1][v-1]);            w[v-1][u-1] = w[u-1][v-1];        }        /*for(int i=0;i<n;i++)        {            for(int j=0;j<n;j++)            {                cout << w[i][j]<< " ";            }            cout << endl;        }*/        for(int i=0;i<n;i++)        {            int temp;            scanf("%d",&temp);            if(temp == 1)            {                p[i] = true;            }            else            {                p[i] = false;            }        }        dfs(0,0);        printf("%.4f\n",maxsum);    }    return 0;}




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大网卡网速慢了怎么办 小米路由器无线速度慢怎么办 小米手机无线速度慢怎么办 电脑网卡驱动没了怎么办 电脑显示网卡驱动不正常怎么办 微信别人拒收消息怎么办 电脑无线网卡速度慢怎么办 网吧吃鸡更新慢怎么办 手机号注册不了微信怎么办 小米账号密码忘了怎么办 小米手机账号密码忘了怎么办 华为手机账号密码忘记了怎么办 老年机开不了机怎么办 天谕没有顺网登陆怎么办 苹果密保问题忘了怎么办 密保手机没用了怎么办 qq密保手机没用了怎么办 手机开机按钮坏了怎么办 改了账号游戏角色消失怎么办 华为开机键坏了怎么办 抖音账号已重置怎么办 抖音账号被重置怎么办 吃鸡账号密码忘了怎么办 微信只记得账号忘了手机号怎么办 红米3开机键失灵怎么办 晚自习教室有许多虫子怎么办 泰迪吃草又呕吐怎么办 手机不断收到验证码信息怎么办 樱桃吃多了上火怎么办 过年不想回婆婆家过怎么办 旅行箱提手坏了怎么办 影棚人物后面有影子怎么办 微信运动图标不见了怎么办 逆光拍摄人黑了怎么办 单反镜头刮花了怎么办 股东各50股份不同意退股怎么办 退股没有协议他不愿意退钱怎么办 s7刷机有三星帐号id怎么办 做主播留不住人怎么办 直播间留不住人怎么办 淘宝直播间留不住人怎么办