Noip2019暑期训练1

2024-02-17 11:10
文章标签 训练 暑期 noip2019

本文主要是介绍Noip2019暑期训练1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

题目名称

时空定位

棋子移动

高精度乘法

数独游戏

存盘文件名

location

piece

mul

sudoku

输入文件名

location.in

piece.in

mul.in

sudoku.in

输出文件名

location. out

piece.out

mul.out

sudoku.out

时限

1s

1s

1s

1s

内存限制

64MB

64MB

64MB

64MB

1  时空定位(location)

【题目描述】

张琪曼已经确定了李旭琳在一个长为20千米,宽为2千米的空间,她要在横中心线上放置半径为Ri的定位装置,每个定位装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的物体被定位,这有充足的定位装置i1<i<600)个,并且一定能把空间全部覆盖,你要做的是:选择尽量少的定位装置,把整个空间全部覆盖。

【输入格式】

第一行m表示有m组测试数据。

每一组测试数据的第一行有一个整数数nn表示共有n个定位装置,随后的一行,有n个实数RiRi表示该定位装置能覆盖的圆的半径。

【输出格式】

输出所用装置的个数。

【输入样例】

2

5

2 3.2 4 4.5 6

10

1 2 3 1 2 1.2 3 1.1 1 2

【输出样例】

2

5


 

这道题就是肥肠简单的贪心,来看我的AC代码吧:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 double a[601];
 4 int main()
 5 {
 6     //freopen("location.in","r",stdin);
 7     //freopen("location.out","w",stdout);
 8     int m,n,ans;cin>>m;
 9     for(int i=0;i<m;i++)
10     {
11         double l=20;ans=0;
12         cin>>n;
13         for(int j=0;j<n;j++)cin>>a[j];
14         sort(a,a+n);
15         for(int j=n-1;j>=0;j--)
16         {
17             ans++;
18             double x=sqrt(a[j]*a[j]-1);
19             l-=2*x;
20             if(l<=0)break;
21         }
22         cout<<ans<<endl;
23     }
24     return 0;
25 }

 

2 棋子移动(piece

 问题描述

魔法世界的历史上曾经出现过一位赫赫有名的不败战神陈庆之,陈庆之以棋道悟兵法,一生身经数百战,没有一场败绩,而且没有一场不是在绝对的劣势中大胜敌军。

受此影响,魔法世界开始流行一种叫棋子移动的游戏,即有2N个棋子(N≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,例如当N=4时,棋子排列情况为:

〇〇〇〇●●●●

移动棋子的规则是:每次必须同时移动相邻两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置.每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。例如当N=4时,最终排列情况为:

试求出移动步骤。

【输入格式】

一个整数,即N

【输出格式】

输出移动步骤,每一步操作占一行。

【输入样例】

4

【输出样例】

4,5-->9,10

8,9-->4,5

2,3-->8,9

7,8-->2,3

1,2-->7,8


 

分治算法经典例题啦(~ ̄▽ ̄)~ 把所有情况都转化成n=4的情况就可以啦

上代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int k;
 4 void move(int j)
 5 {
 6     printf("%d,%d-->%d,%d\n",j,j+1,k,k+1);
 7     k=j;
 8 }
 9 void mv(int n)
10 {
11     if(n==4)
12     {
13         move(4);move(8);move(2);move(7);move(1);
14     }
15     else 
16     {
17         move(n);move(2*n-1);mv(n-1);
18     }
19 }
20 int main()
21 {
22     //freopen("piece.in","r",stdin);
23     //freopen("piece.out","w",stdout);
24     int n;cin>>n;k=2*n+1;
25     mv(n);
26     return 0;
27 }

 

3  高精度乘法mul

【题目描述】

     输入两个整数,求它们的乘积并输出。

【输入格式】

   两行,每行表示一个非负整数(不超过5000位)

输出格式】

   两数的乘积。

【输入样例】

99

101

【输出样例】

    9999


 

高精运算肥肠重要,所以这些模板就算是背也要背下来哇!

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[5001],b[5001],c[10010];
 4 void init(int x[])
 5 {
 6     string s;
 7     cin>>s;
 8     x[0]=s.length();
 9     for(int i=0;i<x[0];i++)x[x[0]-i]=s[i]-'0';
10     while(x[x[0]]==0&&x[0]>1)x[0]--;
11 }
12 int main()
13 {
14     //freopen("mul.in","r",stdin);
15     //freopen("mul.out","w",stdout);
16     init(a);init(b);
17     int x=0;
18     for(int i=1;i<=a[0];i++)
19     {
20         x=0;
21         for(int j=1;j<=b[0];j++)
22         {
23             c[i+j-1]=c[i+j-1]+x+a[i]*b[j];
24             x=c[i+j-1]/10;
25             c[i+j-1]%=10;
26         }
27         if(x)c[i+b[0]]=x;
28     }
29     c[0]=a[0]+b[0];
30     while(c[c[0]]==0&&c[0]>1)c[0]--;
31     for(int i=c[0];i>=1;i--)cout<<c[i];
32     return 0;
33 }

 

4  数独游戏(sudoku)

 【问题描述】

    “我陪你玩这个数独游戏已经整整三天了,你到底什么时候给我上古神器?”修罗王忍不住问。

“这人生啊,急也好,慢也好,目标总能达到,何不让自己静下心来,慢慢欣赏一下沿途的风景?”上古神器的守护者悠悠道。

修罗王悻悻道:“如果玩这个没有赌注的话,我还真信你的话了,就三天工夫,你都把我的魔法石赢去一大半了。”

已知9×9的方阵,有些格子填有1~9的数字,有的格子则是空白。你的任务是完成这个方阵,使得每一行、每一列以及每一个小九宫格中的数字都刚好是1~9。

如图所示,该例子中左图是开始时的方阵状态,右图为完成后的样子。

 

【输入格式】

99列的方阵状态,0代表空格。

【输出格式】

输出完成后的方阵状态,每一个小九宫格以空格分隔。行为三个空格,列为一个空格。

【输入样例】

0 6 0 1 0 4 0 5 0

0 0 8 3 0 5 6 0 0

2 0 0 0 0 0 0 0 1

8 0 0 4 0 7 0 0 6

0 0 6 0 0 0 3 0 0

7 0 0 9 0 1 0 0 4

5 0 0 0 0 0 0 0 2

0 0 7 2 0 6 9 0 0

0 4 0 5 0 8 0 7 0

【输出样例】

9 6 3   1 7 4   2 5 8

1 7 8   3 2 5   6 4 9

2 5 4   6 8 9   7 3 1

 

8 2 1   4 3 7   5 9 6

4 9 6   8 5 2   3 1 7

7 3 5   9 6 1   8 2 4

 

5 8 9   7 1 3   4 6 2

3 1 7   2 4 6   9 8 5

6 4 2   5 9 8   1 7 3


 

这道题的输出格式很重要滴!至于算法思想就是深搜嘛。其实我写的是比较暴力粗糙的,其实明明可以进行剪枝的...不过反正我AC啦!

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct node{
 4     int shu,jn;
 5 }a[10][10];
 6 struct kong{
 7     int xx,yy;
 8 }ko[82];
 9 int h[10][10],l[10][10],jiu[10][10],m;
10 void print()
11 {
12     for(int i=1;i<=9;i++)
13     {
14         if(i==4||i==7)cout<<endl;
15         for(int j=1;j<=9;j++)
16         {
17             if(j==4||j==7)cout<<"  ";
18             cout<<a[i][j].shu<<" ";
19         }
20         cout<<endl;
21     }
22 }
23 void search(int n)
24 {
25     int x=ko[n].xx,y=ko[n].yy;
26     if(n==m+1)
27     {
28         print();exit(0);
29     }
30     if(x&&y)
31         for(int i=1;i<=9;i++)
32         {
33             if(h[x][i]==0&&l[y][i]==0&&jiu[a[x][y].jn][i]==0)
34             {
35                 ko[n].xx=0;
36                 ko[n].yy=0;
37                 a[x][y].shu=i;
38                 h[x][i]=1;
39                 l[y][i]=1;
40                 jiu[a[x][y].jn][i]=1;
41                 search(n+1);
42                 ko[n].xx=x;
43                 ko[n].yy=y;
44                 a[x][y].shu=0;
45                 h[x][i]=0;
46                 l[y][i]=0;
47                 jiu[a[x][y].jn][i]=0;
48             }
49         }
50     else search(n+1);
51 }
52 int main()
53 {
54     //freopen("sudoku.in","r",stdin);
55     //freopen("sudoku.out","w",stdout);
56     int x=1,k=0,n=1;
57     for(int i=1;i<=9;i++)
58     {
59         if(i==1||i==4||i==7)x=i;
60         else x-=2;
61         for(int j=1;j<=9;j++)
62         {
63             if(j==4||j==7)x++;
64             cin>>a[i][j].shu;
65             a[i][j].jn=x;
66             if(a[i][j].shu)
67             {
68                 h[i][a[i][j].shu]=1;
69                 l[j][a[i][j].shu]=1;
70                 jiu[a[i][j].jn][a[i][j].shu]=1;
71             }
72             else
73             {
74                 m++;
75                 ko[m].xx=i;
76                 ko[m].yy=j;
77             }
78         }
79     }
80     search(1);
81     return 0;
82 }

 

转载于:https://www.cnblogs.com/ljy-endl/p/11287549.html

这篇关于Noip2019暑期训练1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

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

暑期学习总结

iOS学习 前言无限轮播图换头像网络请求按钮的configuration属性总结 前言 经过暑期培训,完成了五个项目的仿写,在项目中将零散的内容经过实践学习,有了不少收获,因此来总结一下比较重要的内容。 无限轮播图 这是写项目的第一个难点,在很多项目中都有使用,越写越熟练。 原理为制造两个假页,在首和尾分别制作最后一页和第一页的假页,当移动到假页时,使用取消动画的方式跳到

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

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

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

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

多云架构下大模型训练的存储稳定性探索

一、多云架构与大模型训练的融合 (一)多云架构的优势与挑战 多云架构为大模型训练带来了诸多优势。首先,资源灵活性显著提高,不同的云平台可以提供不同类型的计算资源和存储服务,满足大模型训练在不同阶段的需求。例如,某些云平台可能在 GPU 计算资源上具有优势,而另一些则在存储成本或性能上表现出色,企业可以根据实际情况进行选择和组合。其次,扩展性得以增强,当大模型的规模不断扩大时,单一云平

神经网络训练不起来怎么办(零)| General Guidance

摘要:模型性能不理想时,如何判断 Model Bias, Optimization, Overfitting 等问题,并以此着手优化模型。在这个分析过程中,我们可以对Function Set,模型弹性有直观的理解。关键词:模型性能,Model Bias, Optimization, Overfitting。 零,领域背景 如果我们的模型表现较差,那么我们往往需要根据 Training l

如何创建训练数据集

在 HuggingFace 上创建数据集非常方便,创建完成之后,通过 API 可以方便的下载并使用数据集,在 Google Colab 上进行模型调优,下载数据集速度非常快,本文通过 Dataset 库创建一个简单的训练数据集。 首先安装数据集依赖 HuggingFace datasetshuggingface_hub 创建数据集 替换为自己的 HuggingFace API key

【YOLO 系列】基于YOLOV8的智能花卉分类检测系统【python源码+Pyqt5界面+数据集+训练代码】

前言: 花朵作为自然界中的重要组成部分,不仅在生态学上具有重要意义,也在园艺、农业以及艺术领域中占有一席之地。随着图像识别技术的发展,自动化的花朵分类对于植物研究、生物多样性保护以及园艺爱好者来说变得越发重要。为了提高花朵分类的效率和准确性,我们启动了基于YOLO V8的花朵分类智能识别系统项目。该项目利用深度学习技术,通过分析花朵图像,自动识别并分类不同种类的花朵,为用户提供一个高效的花朵识别

深度学习与大模型第3课:线性回归模型的构建与训练

文章目录 使用Python实现线性回归:从基础到scikit-learn1. 环境准备2. 数据准备和可视化3. 使用numpy实现线性回归4. 使用模型进行预测5. 可视化预测结果6. 使用scikit-learn实现线性回归7. 梯度下降法8. 随机梯度下降和小批量梯度下降9. 比较不同的梯度下降方法总结 使用Python实现线性回归:从基础到scikit-learn 线性