HGOI7.15集训题解

题解 为什么只有7.15的题解没有14号的呢..因为14号难得放天假啊..为什么要把这么美好的日子拿来做题呢!当然应该出去走走拍拍风景和好看的小姐姐了。今天的题比较水,做的事14年的真题(当年好像一等线500?)首测275.比较一般。第一题——生活大爆炸版石头剪刀布(rps)【题目描述】告诉你两个人在玩石头剪刀布,并引入了两种新的方式。然后给你张胜负表,告诉你赢得得一分...
摘要由CSDN通过智能技术生成

题解

为什么只有7.15的题解没有14号的呢..因为14号难得放天假啊..为什么要把这么美好的日子拿来做题呢!当然应该出去走走拍拍风景和好看的小姐姐了。今天的题比较水,做的事14年的真题(当年好像一等线500?)首测275.比较一般。


第一题——生活大爆炸版石头剪刀布(rps)

【题目描述】

  • 告诉你两个人在玩石头剪刀布,并引入了两种新的方式。然后给你张胜负表,告诉你赢得得一分,平局和输的不得分。每人出拳有一个固定周期,一共进行n轮。求最终两个人的得分。

这里写图片描述

  • 表中的输入顺序分别用12345表示。

  • 这个真的是水题。先根据两个人的出拳建立表(5X5),然后再线性模拟就好了。算法复杂度是 O(n) O ( n )
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
void fff(){
    freopen("rps.in","r",stdin);
    freopen("rps.out","w",stdout);
}
int mp[5][5]={
    0,0,1,1,0,
    1,0,0,1,0,
    0,1,0,0,1,
    0,0,1,0,1,
    1,1,0,0,0
};
int n,na,nb,sa=0,sb=0;
int a[250],b[250];
int main(){
    fff();
    scanf("%d%d%d",&n,&na,&nb);
    for (int i=1;i<=na;i++) scanf("%d",&a[i]);
    for (int i=1;i<=nb;i++) scanf("%d",&b[i]);
    int i=1,j=1;
    while (n>0){
        n--;
        sa+=mp[a[i]][b[j]];
        sb+=mp[b[j]][a[i]];
        i++;
        j++;
        if(i==(na+1)) i=1;
        if(j==(nb+1)) j=1;
    }
    cout<<sa<<' '<<sb;
    return 0;
}

【题目描述】

  • 给你一棵树,树上有点权,相邻点之间距离为1。求任意两点之间距离为2的乘积之和与乘积的最大值。

  • 稍微有点难想。由于两点之间是相差为2的,则对于每一个点,在总的sum之间是增加所有孩子与父亲的乘积和所有孩子之间的乘积之和。最大值也可以找出第一大的孩子和第二大的孩子进行乘积维护。
  • 那么这一点在dfs时就可以进行操作了。
  • 而对于每两个孩子之间的乘积求和则可以利用数学上的多项和平方后展开求出。 (a+b+c)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值