小测试整理(含T1 T2)
这次测试规模较小,前两题也较水,但需要整理
T1(Jelly的男♂难题1):
从一个点出发,以四连通的方式扩散,可以走#,不能走o,走过的格子每单位时间会增加1点高度,问扩散完整间屋子需要的时间,以及此时高度的和。
并且(起点格不算高度)
water_lift一看:哇,钻出来一个光头这不s*题吗,
然后爆0了...
这题一看就是喜闻乐见的广搜题,判断由来就是众所周知,当每一步的花费一致并且求最小步数时,用广搜吧.
正确性白书已给出证明,
对于这道题,最小步数很好求,然而看似剩下了一个问题,实际剩下的是2个问题,其中一个可以调一上午(对菜鸡而言,I can do this all day!!!)
第一个问题就是剩下的求高度总和的问题,对于此问题,只需保存下到达每个格子的步数,最后再用最终步数减去该格步数,再求和,即为答案,
公式看起来这个样子:
\(\sum\limits_{i=1}^{n} \ finalstep(代码中的maxn)-step_i+1\)
还有最后一个问题,就是读入,读入搞不好可以调一天...
原因在于你需要读的地图以字符串形式展现,然而每个字符之间有空格...
也就是说在数据读入时要不断处理字符,空格与换行符,(这就很TM糟心了...)
那么考虑这样两种思路:
将非字符(这里指用于表示地图的标点符号)用while语句除去,既然能跳出while循环就说明读到了字符,那么将字符保存...
要么就是不管\(3*7=2147483648%1000\)全部整行读入,然后逐个分析,处理思路如上...
然后最难的问题就完成咧...
至于为什么可以调一上午夸张手法,下一个
其实就是因为其代码实现很容易手残把标记变量或是指针变量(就是用来标记处理字符串位置的东西)写错或者根本来说忽略了细节,或是根本上的读入错误(比如用了gets)会导致山一样的WA
但这样也有好处:
至少我那天上午学会了cmd 的fc(文件比较)...
fc好啊
忘贴代码了:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
struct node{
int x,y;
int step;
node(int _x,int _y,int _step):x(_x),y(_y),step(_step){}
};
queue<node> q;
int n,m;
string aa;
char pos[505][505];
bool vis[505][505];
int stp[505][505];
int sx,sy;
int mx[5]={0,-1,0,1,0};
int my[5]={0,0,1,0,-1};
int main(){
scanf("%d%d",&n,&m);
char ch=getchar();
while(ch!='\n') ch=getchar();
for(int i=1;i<=n;i++){
getline(cin,aa);
int t=0;
int s=0;
while(t<aa.size()){
if(aa[t]=='*'||aa[t]=='#'||aa[t]=='o')
pos[i][++s]=aa[t];
if(pos[i][s]=='*'){
sx=i;
sy=s;
}
t++;
}
}
vis[sx][sy]=1;
q.push(node(sx,sy,0));
int maxn=0;
while(!q.empty()){
node u=q.front();
q.pop();
for(int i=1;i<=4;i++){
int nx=u.x+mx[i];
int ny=u.y+my[i];
if(nx<=0||n<nx) continue;
if(ny<=0||m<ny) continue;
if(pos[nx][ny]=='#'&&!vis[nx][ny]){
vis[nx][ny]=1;
stp[nx][ny]=u.step+1;
maxn=max(stp[nx][ny],maxn);
q.push(node(nx,ny,u.step+1));
}
}
}
int sum=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i==sx&&j==sy)continue;
if(vis[i][j])
sum+=(maxn-stp[i][j]+1);
sum%=19260817;
}
}printf("%d\n%d\n",maxn,sum);
return 0;
}
T2(【音乐会】二重变革):
MD数据范围:
对于20%的数据,\(1\leq n\leq10000\)
对于100%的数据,\(1.5e6\leq n\leq 2e6\ 1\leq X[i] \leq 1e9\)且不保证随机生成
一看把代码贴上去就是T的吗?!
这题真正思路是搞exgcd上去,
证明(黈):
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
int x;
inline int read(){
int x=0;
char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c)){
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
return x;
}
inline int gcd(const int &a,const int &b){
if(b==0) return a;
return gcd(b,a%b);
}
int ans;
int main(){
scanf("%d",&n);
ans=read();
for(int i=2;i<=n;i++){
x=read();
ans=gcd(ans,x);
}
printf("%d",ans*n);
return 0;
}
前两题就这样啦
小测试整理(含T1 T2)的更多相关文章
- DateTime.Compare(t1,t2)比較两个日期大小
DateTime.Compare(t1,t2)比較两个日期大小,排前面的小,排在后面的大,比方:2011-2-1就小于2012-3-2返回值小于零: t1 小于 t2. 返回值等于零 : t1 等于 ...
- java 多线程,T1 T2 T3 顺序执行
一.程序设计 1.抽象公共类PublicThread,具有先前线程属性previousThread.父类为Thread 2.在PublicThread的run()方法中判断previousThread ...
- 三个线程T1,T2,T3.保证顺序执行的三种方法
经常看见面试题:有三个线程T1,T2,T3,有什么方法可以确保它们按顺序执行.今天手写测试了一下,下面贴出目前想到的3种实现方式 说明:这里在线程中我都用到了sleep方法,目的是更容易发现问题.之前 ...
- DateTime.Compare(t1,t2)比较两个日期大小
DateTime.Compare(t1,t2)比较两个日期大小,排前面的小,排在后面的大,比如:2011-2-1就小于2012-3-2返回值小于零: t1 小于 t2. 返回值等于零 : t1 等于 ...
- Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试
文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...
- Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试
CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...
- Action<T1, T2>委托
封装包含两个参数的方法委托,没有返回值. 语法 public delegate void Action<in T1, in T2>( T1 arg1, T2 arg2 ) 类型参数 in ...
- CSS小tip整理
CSS小tip整理 1.利用css在列表靠头和末尾添加箭头: /* 左箭头*/ ol a[rel="prev"]:before { content: "\00AB&quo ...
- 使用Func<T1, T2, TResult>
使用Func<T1, T2, TResult> 委托返回匿名对象 Func<T1, T2, TResult> 委托 封装一个具有两个参数并返回 TResult 参数指定的类 ...
随机推荐
- <Matrix> 311 378
311. Sparse Matrix Multiplication 稀疏矩阵的计算.稀疏矩阵的特点是有大量的0,如果采用暴力算法则比然会有很多无意义的计算. C[ i ][ j ] += A[ i ] ...
- pl/sql中record和%rowtype整理
1. 创建stu表,如下: create table stu(s1 number, s2 number); 2. 定义多维数组, 能用来接受多条返回数据 方式一: type type_name i ...
- 【Sublime Text】sublime修改默认浏览器及使用不同浏览器打开网页的快捷键设置
#第一步:安装SideBarEnhancements插件 下载插件,需要“翻墙”,故提供一下该插件的github地址:https://github.com/titoBouzout/SideBarEnh ...
- IT兄弟连 Java语法教程 数组 数组的使用
数组最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值.访问数组元素都是通过在数组引用变量后紧跟一个方括号([]),方括号里是数组元素的索引值,这样就可以访问数组元素了.访问到数组 ...
- 基于appium的常用元素定位方法
一.元素定位工具 app应用的元素使用的是控件定位,不同于web网页,web网页定位元素通常使用的是F12工具,那么在app当中我们则要借助其它的工具来辅助定位. 1.uiautomatorviewe ...
- ASP.NET ---- Repeater 遍历出省市
Repeater 控件可以数据库中的数据,一条条的查找出,不需要后端在进行遍历输出了, Repeater必须使用的是Itemtemplate,其它的类型模板按需添加,主要记住Itemtemplate ...
- ASP.NET 表单验证
静态脚本 oncilentClick() 静态使用方法 也可以$获取ID动态添加脚本 1.Response.Write(); 2.通过Register方式 3.Attribus方式根据控件ID进行添加 ...
- 实例演示 C# 中 Dictionary<Key, Value> 的检索速度远远大于 hobbyList.Where(c => c.UserId == user.Id)
前言 我们知道,有时候在一些项目中,为了性能,往往会一次性加载很多条记录来进行循环处理(备注:而非列表呈现).比如:从数据库中加载 10000 个用户,并且每个用户包含了 20 个“爱好”,在 Wi ...
- 基于bert的命名实体识别,pytorch实现,支持中文/英文【源学计划】
声明:为了帮助初学者快速入门和上手,开始源学计划,即通过源代码进行学习.该计划收取少量费用,提供有质量保证的源码,以及详细的使用说明. 第一个项目是基于bert的命名实体识别(name entity ...
- Python中字符的编码与解码
1 文本和字节序列 我们都知道字符串,就是由一些字符组成的序列构成串,那么字符又是什么呢?计算机只能识别二进制的东西,那么计算机又为什么会显示我们的汉字,或者是某个字母呢? 由于最早发明使用计算机是美 ...