1.腾讯课堂的物理实验:

思路:

所实话这道题要是代码能力强的上来就应该能做出来了,思路很快想出来了。就说一句话就够了:“两个小球相撞后沿相反方向走,就可以看成是两个小球互相瞅了一眼,谁都不理谁,擦肩而过。”但是就那几行代码就写乱了,浪费了好长时间。思路比较重要,这个代码很烂不要在意。

代码:

#include<iostream>
#include<string.h>
#include<stdio.h> 
using namespace std;

int t,l,n;

int main()
{
    cin>>l>>t>>n;
    int x=n%(2*l);
    if(x>l)x=2*l-x;
    int y=(n-t)%(2*l);
    if(y>l)y=2*l-y;
    y=l-y;
    if(x-y>0)cout<<x-y;
    else cout<<y-x;
}

2.腾讯狼人杀(简单)

分析:

也没什么好说的,数据很小,只有20个人,暴力枚举, 220 种组合方式,在剪枝掉不可能出现的方式,也就是必须选择的村民没被选中的情况。我是在dfs的过程中的每一层,都保持对总战斗力sum动态维护;而不是每一次组合方式确定之后再单独算一遍这种组合方式的性价比。如果那样算应该会超时我猜。

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;
int map[30][30]={0};
int vis[30]={0};
int in[30]={0};
int n,m;
int a,b,w;
int sum=0;
int chose=0; 
double best=0;
void dfs(int x)//决定第x个是不是选 
{
    if(x==n+1)
    {
        double o=(double)(sum)/(double)(chose*(2*n-chose));
        //cout<<o<<" "<<chose<<in[1]<<endl;
        if(best<o)best=o;
        return;
    }
    for(int i=0;i<=1;i++)
    {
        if(vis[x]==1&&i==0)continue;
        in[x]=i;
        if(in[x]==1)
        {
            for(int i=1;i<x;i++)
            {
                if(in[i]==1)sum+=map[i][x];
            }
            chose++;
        }
        dfs(x+1);
        if(in[x]==1)
        {
            for(int i=1;i<x;i++)
            {
                if(in[i]==1)sum-=map[i][x];
            }
            in[x]=0;
            chose--;
        }
    }
}


int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&w);
        map[a][b]=w;
        map[b][a]=w;
    }
    int k=0;//有k个可供选择的人 
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a);
        if(a==1)
        {
            //k++;
            vis[i]=1;
        }
    }
    dfs(1);
    printf("%.4lf",best);
}

总结:

一共四道题,前两道都不难,后两道一点思路都没有。这次自认为失误很大,第一题写个O(1)复杂度的代码都墨迹了好长时间。等我过了的时候,已经有200多人过了。然后就下楼去拿笔,再回来。然后才开始写第二题,一开始实在是不想用暴力枚举,因为如果能想到第三道题也就是数据规模更大的答案,那么这一道也就相当于可以直接 ac 了。但是发现并没有什么没思路,就只好重新老老实实的暴力枚举第二道了。过了第二道之后,2个小时的比赛还有一个多小时,但是后面两道实在是不会了。因为没有罚时,做出第二道之后,排名稳定在103名直到比赛结束。
xcx xcx xcx xcx
上面一行的四个“xcx”字符串很有纪念意义,因为他们是我在比赛结束前的最后一分钟打出来的,没错,比赛没结束我就开始写这篇博客了,我写到这里比赛刚结束。

好了,比赛结束,排名103,入围复赛~

因为六场比赛,第一场临时有事情,第一道做完就没做第二道;第二场有社团培训所以我没有做,都没有进前200。
复赛一共1200人,如果和期末复习不冲突的话,就好好打一打,我就想要复赛前四百名的那个“限量版复赛纪念 T 恤”。本次:第四题2人 ac,第三题4人 ac ,第二题223人 ac。还是要靠做题速度,另外尽量不要有罚时。
关于34题的题解:我没仔细读,但是他提到应该是用一个叫“我没听说过”的算法来解决的。

学习目标:
1.最大密度子图(上文中的那个算法)
2.胡伯涛的论文《最小割模型在信息学竞赛中的应用》。(以前多次被提到,包括这次,应该很专业)