noip2014普及组复赛题解_noip2019普及组复赛试题

noip2014普及组复赛题解_noip2019普及组复赛试题NOIP2012普及组解题报告            byRtPYH——————————————————————————————————————前言:作者是一个蒟蒻,如果对本文有建议,欢迎提出!鄙人将虚心接受。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

NOIP2012普及组解题报告
                        by RtPYH
——————————————————————————————————————
前言:作者是一个蒟蒻,如果对本文有建议,欢迎提出!鄙人将虚心接受。
——————————————————————————————————————-

                                                        1.质因数分解
【题目描述】
   给你一个由两个质数相乘得到的正整数n,求较大的质数
【数据范围】
   n小于等于2*10^9
【分析】
   当时有几个同学写TLE了..后来才发现他们读题不仔细:n已经约定为两个质数的乘积。所以我们从2枚举到根号n,只要n%i==0那就输出n/i
   时间复杂度(根号N)
【代码】
#include <iostream>
using namespace std;
#include <cstdio>

int n,i;

int main(){
   freopen("prime.in","r",stdin);
   freopen("prime.out",'w",stdout);
   cin>>n;
   for(i=2;i*i<=n;i++)
     if(n%i==0){cout<<n/i;break;}
   return 0;
}

                                                     
                                                   2.寻宝
【题目描述】
   传说很遥远的藏宝楼顶层藏着诱人的宝藏。 小明历尽千辛万苦终于找到传说中的这个藏
宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书。说明书的内容如下:
藏宝楼共有 N+1 层,最上面一层是顶层, 顶层有一个房间里面藏着宝藏。 除了顶层外,
藏宝楼另有 N 层, 每层 M 个房间,这 M 个房间围成一圈并按逆时针方向依次编号为 0,…,
M-1。其中一些房间有通往上一层的楼梯,每层楼的楼梯设计可能不同。每个房间里有一个
指示牌,指示牌上有一个数字 x, 表示从这个房间开始按逆时针方向选择第 x 个有楼梯的房
间(假定该房间的编号为 k) ,从该房间上楼,上楼后到达上一层的 k 号房间。比如当前房
间的指示牌上写着 2,则按逆时针方向开始尝试,找到第 2 个有楼梯的房间,从该房间上楼。
如果当前房间本身就有楼梯通向上层,该房间作为第一个有楼梯的房间。
寻宝说明书的最后用红色大号字体写着:“寻宝须知:帮助你找到每层上楼房间的指示
牌上的数字(即每层第一个进入的房间内指示牌上的数字)总和为打开宝箱的密钥” 。
请帮助小明算出这个打开宝箱的密钥
【数据范围】
   对于 100%数据,有 0<N≤10000,0<M≤100,0<x≤1,000,000
【分析】
   还是比较容易TLE的题目,关键考察能否读题,分析题目,首先,一般的模拟思路可以得出:
    for(i=1 -) n)
      for(;tot<=i;p++)
      {  if(p的位置有楼梯)tot++;
         p%=m;
      }
    累计答案
    输出
    上述代码时间复杂度O(NX),期望得分50分
    肯定是TLE的,我们发现数据范围有规律:m<=x
    我们又发现,由于是转圈,所以我们并不需要转x圈,只需要转x mod m圈即可,上述代码时间复杂度为:
                    O(NM)
    完了吗?不!我们发现,x mod m有可能为0,所以要特判,如果x mod m=0,那么x=m
    期望得分100分
【代码】
#include <iostream>
#include <cstdio>
using namespace std;


const int MaxN=10010;
const int MaxM=101;
const int Mod=20123;


int build[MaxN][MaxM][2],n,t[MaxN],m;
int ans=0;


int main(){
    freopen("treasure.in","r",stdin);
    freopen("treasure.out","w",stdout);
    scanf("%d %d",&n,&m);
    int tot,i,j,k,ii;
    for(i=1;i<=n;i++)
      for(j=0;j<m;j++)
        {
          scanf("%d %d",&build[i][j][0],&build[i][j][1]);
          if(build[i][j][0]==1)t[i]++;
        }
    scanf("%d",&k);
    for(i=1;i<=n;i++){
      tot=0;
      ans=(ans+build[i][k][1])%Mod;
      ii=build[i][k][1]%t[i];
      if(ii==0)ii=t[i];
      for(;tot<ii;k++){
        k%=m;
        if(build[i][k][0]==1)tot++;
      }
      k=(k-1+m)%m;
    }
    printf("%d",ans);
    return 0;
}

                                                       3.摆花
【题目描述】
   给你n朵花可摆放的盆数以及总共能摆放的盆数,求摆放方案(同种必须相邻)
【数据范围】
   n小于等于100
【分析】
   阶段:背包问题
   状态:f(i,j)表示第i种花摆入容量为j的背包所能得到的方案数
   OK!
【代码】
</pre></div><pre name="code" class="cpp">#include <iostream>using namespace std;#include <cstdio>#include <cstring>const int MaxN=1001;const int Mod=1000007;int a[MaxN],n,m;int f[MaxN][MaxN],k;void init(){	freopen("flower.in","r",stdin);	freopen("flower.out","w",stdout);	scanf("%d %d",&n,&m);	for(int i=1;i<=n;i++)scanf("%d",&a[i]);}void DP(){     int i,j,k;     //f(i,j)表示前i朵花k盆放入容量为j的背包      f[0][0]=1;     for(i=1;i<=n;i++)       for(j=0;j<=m;j++)         for(k=0;k<=j && k<=a[i];k++){           f[i][j]+=f[i-1][j-k];           f[i][j]%=Mod;         }     cout<<f[n][m];}int main(){    init();    DP();    return 0;}		

                                                        4.文化之旅
【题目描述】
   有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一
种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家) 。不
同的国家可能有相同的文化。 不同文化的国家对其他文化的看法不同,有些文化会排斥外来
文化(即如果他学习了某种文化,则他不能到达排斥这种文化的其他国家) 。
现给定各个国家间的地理关系, 各个国家的文化, 每种文化对其他文化的看法, 以及这
位使者游历的起点和终点(在起点和终点也会学习当地的文化),国家间的道路距离,试求
从起点到终点最少需走多少路。
【数据范围】
   n小于等于100
【分析】
   对于求最短路问题,常用的算法有SPFA和Dijkstra以及Bellman_Ford,由于N的范围太小,且有
许多限制,所以采用floyd算法求解
   我们开一个vis数组,vis[i][j]表示国家I和国家J的兼容情况,然后根据这个,来跑一遍floyd
即可出解
   题外话:当时比赛有神牛用搜索外加最优性剪枝AC了,蒟蒻想学习一下,望大牛能评论
【代码】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;

const int MaxN=101; 
const int oo=1<<25;
 
int c[MaxN],a[MaxN][MaxN],d[MaxN][MaxN]; 
int n,kd,m,s,t; 
bool vis[MaxN][MaxN];

int main()
{
    freopen("culture.in","r",stdin);
    freopen("culture.out","w",stdout);
    
    scanf("%d%d%d%d%d",&n,&kd,&m,&s,&t);
    int c1,c2,i,j,k,u,v,cap;
    memset(d,0,sizeof(d));
    memset(vis,false,sizeof(vis));
    for(i=1;i<=n;i++)scanf("%d",&c[i]);
    for(i=1;i<=kd;i++)
      for(j=1;j<=kd;j++)
        scanf("%d",&a[i][j]);
    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
        d[i][j]=oo;
    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
      {
        c1=c[i],c2=c[j];
        if(a[c1][c2]==0)vis[j][i]=true;
      }
    for(i=1;i<=m;i++){
      scanf("%d %d %d",&u,&v,&cap);
      if(vis[u][v] && cap<d[u][v])
        d[u][v]=cap;
      if(vis[v][u] && cap<d[v][u])
        d[v][u]=cap;
    }
    for(k=1;k<=n;k++)
      for(i=1;i<=n;i++)
         for(j=1;j<=n;j++)
           if(vis[i][k]&&vis[k][j]&&d[i][j]>d[i][k]+d[k][j]) 
             d[i][j]=d[i][k]+d[k][j];
    
    if(d[s][t]>=oo)cout<<-1;
    else cout<<d[s][t];
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172074.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Linux top里面%CPU和us%的解释

    Linux top里面%CPU和us%的解释

  • matlab for循环语句实例_matlab如何循环

    matlab for循环语句实例_matlab如何循环MATLABfor循环MATLAB中for循环是一个重复的控制结构,可以有效地写一个循环,只是执行的次数是特定的。MATLABfor循环语法:MATLAB中的for循环的语法如下:forindex=values…endfor循环的值有下述三种形式之一:格式 描述 initval:endval 将索引变量从初始到终值递增1,并重复执行程序语句,直到索引值大于终值。 initval:step:endval

  • ubuntu中使用Deb安装VS Code[通俗易懂]

    ubuntu中使用Deb安装VS Code[通俗易懂]01、进入VSCode下载安装包网址:https://code.visualstudio.com/02、将Windows系统中下载的deb安装包复制到虚拟机ubuntu中03、进入虚拟机ubuntu中,通过cd命令进入到deb安装包目录04、执行deb包安装命令05、安装完成效果图…

  • pycharm python安装教程_python环境安装教程

    pycharm python安装教程_python环境安装教程首先我们来安装python1、首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进入之后如下图,选择图中红色圈中区域进行下载。2、下载完成后如下图所示3、双击exe文件进行安装,如下图,并按照圈中区域进行设置,切记要勾选打钩的框,然后再点击Customizeinstallation进入到下一步:4、对于上图中,可以通过Browse…

  • [C++]-日志记录库SPDLog简介[通俗易懂]

    [C++]-日志记录库SPDLog简介[通俗易懂]文章目录spdlog库日志记录槽sink日志记录器logger输出格式pattern对齐方式截断字符串格式化fmtFormatSpecificationspdlog使用异常处理logger基础用法stdout日志文件日志基本文件循环文件每日文件示例spdlog是一款开源的、快速的日志库。spdlog库spdlog是基于C++11实现的一款纯头文件的日志管理库(git地址:https://github.com/gabime/spdlog,API说明:https://spdlog.docsforge.c

  • AVI视频文件编码格式不受支持0xc00d5212怎么解决?「建议收藏」

    AVI视频文件编码格式不受支持0xc00d5212怎么解决?「建议收藏」AVI视频格式的优点是图像质量好,但最普遍的现象就是高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频。所以我们在进行一些AVI格式的视频播放时,常会出现由于视频编码问题而造成的视频不能播放或即使能够播放,但存在不能调节播放进度和播放时只有声音没有图像等一些莫名其妙的问题。今天来讲讲编码格式不受…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号