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)的物体被定位,这有充足的定位装置i(1<i<600)个,并且一定能把空间全部覆盖,你要做的是:选择尽量少的定位装置,把整个空间全部覆盖。
【输入格式】
第一行m表示有m组测试数据。
每一组测试数据的第一行有一个整数数n,n表示共有n个定位装置,随后的一行,有n个实数Ri,Ri表示该定位装置能覆盖的圆的半径。
【输出格式】
输出所用装置的个数。
【输入样例】
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代码吧:
#include<bits/stdc++.h>
using namespace std;
double a[];
int main()
{
//freopen("location.in","r",stdin);
//freopen("location.out","w",stdout);
int m,n,ans;cin>>m;
for(int i=;i<m;i++)
{
double l=;ans=;
cin>>n;
for(int j=;j<n;j++)cin>>a[j];
sort(a,a+n);
for(int j=n-;j>=;j--)
{
ans++;
double x=sqrt(a[j]*a[j]-);
l-=*x;
if(l<=)break;
}
cout<<ans<<endl;
}
return ;
}
题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的情况就可以啦
上代码:
#include<bits/stdc++.h>
using namespace std;
int k;
void move(int j)
{
printf("%d,%d-->%d,%d\n",j,j+,k,k+);
k=j;
}
void mv(int n)
{
if(n==)
{
move();move();move();move();move();
}
else
{
move(n);move(*n-);mv(n-);
}
}
int main()
{
//freopen("piece.in","r",stdin);
//freopen("piece.out","w",stdout);
int n;cin>>n;k=*n+;
mv(n);
return ;
}
题3 高精度乘法(mul)
【题目描述】
输入两个整数,求它们的乘积并输出。
【输入格式】
两行,每行表示一个非负整数(不超过5000位)
【输出格式】
两数的乘积。
【输入样例】
99
101
【输出样例】
9999
高精运算肥肠重要,所以这些模板就算是背也要背下来哇!
#include<bits/stdc++.h>
using namespace std;
int a[],b[],c[];
void init(int x[])
{
string s;
cin>>s;
x[]=s.length();
for(int i=;i<x[];i++)x[x[]-i]=s[i]-'';
while(x[x[]]==&&x[]>)x[]--;
}
int main()
{
//freopen("mul.in","r",stdin);
//freopen("mul.out","w",stdout);
init(a);init(b);
int x=;
for(int i=;i<=a[];i++)
{
x=;
for(int j=;j<=b[];j++)
{
c[i+j-]=c[i+j-]+x+a[i]*b[j];
x=c[i+j-]/;
c[i+j-]%=;
}
if(x)c[i+b[]]=x;
}
c[]=a[]+b[];
while(c[c[]]==&&c[]>)c[]--;
for(int i=c[];i>=;i--)cout<<c[i];
return ;
}
题4 数独游戏(sudoku)
【问题描述】
“我陪你玩这个数独游戏已经整整三天了,你到底什么时候给我上古神器?”修罗王忍不住问。
“这人生啊,急也好,慢也好,目标总能达到,何不让自己静下心来,慢慢欣赏一下沿途的风景?”上古神器的守护者悠悠道。
修罗王悻悻道:“如果玩这个没有赌注的话,我还真信你的话了,就三天工夫,你都把我的魔法石赢去一大半了。”
已知9×9的方阵,有些格子填有1~9的数字,有的格子则是空白。你的任务是完成这个方阵,使得每一行、每一列以及每一个小九宫格中的数字都刚好是1~9。
如图所示,该例子中左图是开始时的方阵状态,右图为完成后的样子。
【输入格式】
9行9列的方阵状态,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啦!
#include<bits/stdc++.h>
using namespace std;
struct node{
int shu,jn;
}a[][];
struct kong{
int xx,yy;
}ko[];
int h[][],l[][],jiu[][],m;
void print()
{
for(int i=;i<=;i++)
{
if(i==||i==)cout<<endl;
for(int j=;j<=;j++)
{
if(j==||j==)cout<<" ";
cout<<a[i][j].shu<<" ";
}
cout<<endl;
}
}
void search(int n)
{
int x=ko[n].xx,y=ko[n].yy;
if(n==m+)
{
print();exit();
}
if(x&&y)
for(int i=;i<=;i++)
{
if(h[x][i]==&&l[y][i]==&&jiu[a[x][y].jn][i]==)
{
ko[n].xx=;
ko[n].yy=;
a[x][y].shu=i;
h[x][i]=;
l[y][i]=;
jiu[a[x][y].jn][i]=;
search(n+);
ko[n].xx=x;
ko[n].yy=y;
a[x][y].shu=;
h[x][i]=;
l[y][i]=;
jiu[a[x][y].jn][i]=;
}
}
else search(n+);
}
int main()
{
//freopen("sudoku.in","r",stdin);
//freopen("sudoku.out","w",stdout);
int x=,k=,n=;
for(int i=;i<=;i++)
{
if(i==||i==||i==)x=i;
else x-=;
for(int j=;j<=;j++)
{
if(j==||j==)x++;
cin>>a[i][j].shu;
a[i][j].jn=x;
if(a[i][j].shu)
{
h[i][a[i][j].shu]=;
l[j][a[i][j].shu]=;
jiu[a[i][j].jn][a[i][j].shu]=;
}
else
{
m++;
ko[m].xx=i;
ko[m].yy=j;
}
}
}
search();
return ;
}
Noip2019暑期训练1的更多相关文章
- Noip2019暑期训练2 反思
经过两次测试,通过深刻的反思,我主要发现了以下易犯错误: 1.做题目时过于追求速度,导致好几处代码都出现手误打错的现象!而且,千万不要图快.图方便就复制粘贴,非常容易出错!(例如T3-party中直接 ...
- Noip2019暑期训练2
题目名称 骑士遍历 和谐俱乐部 农场派对 对称二叉树 存盘文件名 knight Beautiful party tree 输入文件名 knight.in Beautiful.in party.in ...
- [小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10
[小结] 中山纪念中学2018暑期训练小结(划掉)(颓废记)-Day10 各位看众朋友们,你们好,今天是2018年08月14日,星期二,农历七月初四,欢迎阅看今天的颓废联编节目 最近发生的灵异事件有 ...
- ACM暑期训练总结
ACM暑期集训总结报告 不知不觉,ACM暑期集训已经过去了一个月了(其实我还差几天才够一个月,因为最后几天要回家办助学贷款,所以没坚持到最后,当了个逃兵.....[汗])也到了结束的时候.在这一个月中 ...
- 「暑期训练」「基础DP」 Common Subsequence (POJ-1458)
题意与分析 很简单:求最长公共子序列. 注意子序列与子串的差别:一个不连续一个连续.一份比较好的参考资料见:https://segmentfault.com/a/1190000002641054 状态 ...
- 牛客网2018暑期训练 第三场 a题
#include <bits/stdc++.h> using namespace std; vector<int> path; ; short dp[maxn][maxn][m ...
- CSU-ACM2018暑期训练7-贪心
A:合并果子(贪心+优先队列) B:HDU 1789 Doing Homework again(非常经典的贪心) C:11572 - Unique Snowflakes(贪心,两指针滑动保存子段最大长 ...
- 「暑期训练」「基础DP」免费馅饼(HDU-1176)
题意与分析 中文题就不讲题意了.我是真的菜,菜出声. 不妨思考一下,限制了我们决策的有哪些因素?一,所在的位置:二,所在的时间.还有吗?没有了,所以设dp[i][j]" role=" ...
- 7/31 CSU-ACM2018暑期训练7-贪心
比赛链接 A-CSU - 1588 现在有n堆果子,第i堆有ai个果子.现在要把这些果子合并成一堆,每次合并的代价是两堆果子的总果子数.求合并所有果子的最小代价. Input 第一行包含一个整数T(T ...
随机推荐
- 3.使用 Code First 迁移更新数据库
1.更新 SeedData 类,使它提供新列的值. 示例更改如下所示,但可能需要对每个 new Movie 块做出此更改. context.Movie.AddRange( new Movie { Ti ...
- C# vb .net实现玻璃桌子效果滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的玻璃桌子效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...
- Tomcat组件梳理—Service组件
Tomcat组件梳理-Service组件 1.组件定义 Tomcat中只有一个Server,一个Server可以用多个Service,一个Service可以有多个Connector和一个Contain ...
- Deployment.spec.selector.matchLables实验解释
原文:https://cloud.tencent.com/developer/article/1394657 Deployment.spec.selector.matchLables实验解释 作者: ...
- SpringBoot中yml配置文件
1.yml配置文件书写格式 格式是在普通配置文件中以“.”分割的属性名称,该为“: ”和换行. 例子: //普通格式 spring.datasource.driver-class-name=com.m ...
- 一个简单实现的string类
为了复习c++知识,简单的实现一个string类,类名为CMyString 环境说明:windows 7 64位 和 CentOS Linux release 7.6.1810 (Core) 开发工具 ...
- k8s--yml文件3
- mysql修改字符集问题
mysql字符集问题: 本文主要解决mysql7以下问题:mysql7在默认安装后,关于数据库,表默认保存字符格式为latin1: 可以通过命令:查询当前mysql的编码设置: show variab ...
- union的使用
将多条select语句的结果,合并到一起,称为联合查询 使用union关键字 场景: 获取数据的条件,出现逻辑冲突,或者很难在一个逻辑内表示,就可以拆成多个逻辑,分别实现,最后将结果合并到一起 sel ...
- SpringBoot2.x服务器端主动推送技术
一.服务端推送常用技术介绍 服务端主流推送技术:websocket.SSE等 1.客户端轮询:ajax定时拉取后台数据 js setInterval定时函数 + ajax异步加载 定时向服务 ...