ACM训练日记—4月22日(“今日头条杯”首届湖北省大学程序设计竞赛)

本文主要是介绍ACM训练日记—4月22日(“今日头条杯”首届湖北省大学程序设计竞赛),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       感觉这次练习赛状态真是谜,估计还是因为太菜了,也高估了B题的难度,C题没过是我2了,还是有两道能过的题没做出来。QAQ。

A—Srdce and Triangle


题意:给出角ADB,BDC,ADC,问用边长AD,BD,CD组成一个新三角形的内角分别是多少。

        相当于一道中学几何题,将三角形ADC顺时针旋转60度,连接新D点与旧D点,右下角就能发现一个完全由AD,BD,CD边长组成的三角形,而左下角是个边长为AD的等边三角。剩下的就很明显了。

代码:

double ans[4];
int main()
{
    double j1,j2,j3;
    while(scanf("%lf%lf%lf",&j1,&j2,&j3)!=EOF)
    {
        ans[1]=j1-60;
        ans[2]=360-j1-j2-60;
        ans[3]=180-ans[1]-ans[2];
        sort(ans+1,ans+4);
        if(ans[1]<=0||ans[2]<=0||ans[3]<=0) cout<<-1<<" "<<-1<<" "<<-1<<endl;
        else printf("%.10lf %.10lf %.10lf\n",ans[1],ans[2],ans[3]);
    }
}

B—Salty Fish Go!

题意:就是给你n种速度,一段长为l的路,k个加油站(可以在加油站改变速度),m个宝藏。现在,你所在位置是随机出现,加油站分别在哪也是随机出现,你走的方向也是随机,宝藏位置随机,而且你不知道宝藏在哪(意思就是你随机跑),问这样找完所有宝藏的花费时间数学期望是多少。

        这道题当我看到这么随机的题目时,确实是吓懵了,瞬间把学的概率全还给老师了。其实这题很水,就是因为全随机才简单了。

        因为全部都是随机的,所以就是求一种平均情况。。。还是看代码吧。

代码:

int main()
{
    int V,L,n,m;
    while(~scanf("%d%d%d%d",&V,&L,&n,&m))
    {
        int sum=0;
        for(int i=0;i<V;i++)
        {
            int x;
            scanf("%d",&x);
            sum+=x;
        }
        double v=sum*1.0/V;
        printf("%.12f\n",m*1.0*L/(m+1)/v);//因为加油站随机,所以可以认为m各加油站把l长的路等分为m+1等份,每一份都用平均速度跑,然后m个宝藏
    }
}

C— Who killed Cock Robin

题意:给你一棵树,问这棵树上有多少个子集(子集中的元素必须是连成一片的)。

      其实直接分析每一个结点假如 i 结点有k个子分支(每一个分支有ai个集合),其中第i个结点是一个集合,然后第i各节点到每一个分支子集就有ai个,那么第i个分支到第j个分支有ai*aj个集合,那么i和j和k三个连起来,,,,k个分支通过结点就是a1*a2*...ak个。

     做这道题是推到这步了,可就是没综合出来下面下面这个很明显的公式,我可能是个假的数学系学生。

(a1+1)(a2+1)...(ak+1)。这个公式经常见,组合公式,乘出来你就能发现了。1+a1+a2+...ak+a1a2+a1a3+...aiaj+....a1a2a3..ak。经常见的组合公式。QAQ,不甘心。

代码:

const int maxn = 2e5+10;
const int mod = 1e7+7;
ll ans[maxn];
vector<ll>p[maxn];
ll n;
ll DFS(ll x,ll fa){
    for(int i=0;i<p[x].size();i++){
        ll y=p[x][i];
        if(y==fa){
            continue;
        }
        ans[x]=(ans[x]*(DFS(y,x)+1))%mod;
    }
    return ans[x];
}
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n-1;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        p[x].push_back(y);
        p[y].push_back(x);
    }
    for(int i=1;i<=n;i++){
        ans[i]=1;
    }
    DFS(1,-1);
    ll sum=0;
    for(int i=1;i<=n;i++){
        sum=(sum+ans[i])%mod;
    }
    printf("%lld\n",sum);
}

G—GSS and Simple Math Problem

大数乘法Java写

E—Flower Road

题意:就是给你一个大方阵,依次对里面可以对若干个小方阵进行四块旋转,最后问从(1,1)到(n,n)最短路中最大权值。

     水题,模拟,简单dp。

代码:

int a[1505][1505];
int b[1505][1505];
int dp[1505][1505];
void solve(int x,int y,int l)
{
    int t=l/2;
    for(int i=x;i<=x+t-1;i++)
    {
        for(int j=y;j<=y+t-1;j++)
        {
            b[i][j+t]=a[i][j];
        }
    }
    for(int i=x;i<=x+t-1;i++)
    {
        for(int j=y+t;j<=y+l-1;j++)
        {
            b[i+t][j]=a[i][j];
        }
    }
    for(int i=x+t;i<=x+l-1;i++)
    {
        for(int j=y+t;j<=y+l-1;j++)
        {
            b[i][j-t]=a[i][j];
        }
    }
    for(int i=x+t;i<=x+l-1;i++)
    {
        for(int j=y;j<=y+t-1;j++)
        {
            b[i-t][j]=a[i][j];
        }
    }
    for(int i=x;i<=x+l-1;i++)
    {
        for(int j=y;j<=y+l-1;j++)
        {
            a[i][j]=b[i][j];
        }
    }
}
int main()
{
    int n,m;
    int x,y,l;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&x,&y,&l);
        solve(x,y,2*l);
    }
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j];
        }
    }
    cout<<dp[n][n]<<endl;
}

H—Five Day Couple

     这道题是01字典树的经典应用,在每一个结点维护一个区间,我不是很懂。我交给华哥了。

 其他还有些题没补完,继续加油了!!!

这篇关于ACM训练日记—4月22日(“今日头条杯”首届湖北省大学程序设计竞赛)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606683

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符