小测试整理(含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;
}

前两题就这样啦

原文地址:https://www.cnblogs.com/648-233/p/11105672.html

时间: 2024-11-02 17:16:09

小测试整理(含T1 T2)的相关文章

[Python]threading local 线程局部变量小测试

概念 有个概念叫做线程局部变量,一般我们对多线程中的全局变量都会加锁处理,这种变量是共享变量,每个线程都可以读写变量,为了保持同步我们会做枷锁处理.但是有些变量初始化以后,我们只想让他们在每个线程中一直存在,相当于一个线程内的共享变量,线程之间又是隔离的.python threading模块中就提供了这么一个类,叫做local. 多线程中共享变量和局部变量的区别我画两个小图,简单描述下(作图能力一般,请见谅,概念性的东西大家可以google下,很多好文章) 全局变量 线程局部变量 对比: 下面是

微信小程序-整理各种小程序源码和资料免费下载

微信小程序整理下载 [小程序源码]微信小程序-车源宝微信版 [小程序源码]小程序-微赞社区(论坛demo) [小程序源码]微信小程序-收支账单 [小程序工具]微信小程序-日历 [小程序源码]小程序-在线聊天功能 [小程序源码]微信小程序-大好商城(新增功能天气查询和2048游戏) [小程序源码]微信小程序-查询号码归属地 [小程序源码]微信小程序-备忘录2 [小程序源码]微信小程序-QQ音乐 [小程序源码]小程序-货币汇率 [小程序源码]微信小程序-大学图书馆 [小程序源码]小程序-积分商城 [

[工具]小测试和学习项目清单化框架

下载:Personal_Study_Assistant.zip 背景 实际中,我们可能要经常会对一些API或小核心代码不太确定,于是写一些小测试代码,如正则表达式测试.时间久了,这些小项目散落得到处都是,查找和整理起来都比较费时间. “工欲善其事,必先利其器”,下面让我们来解决一下这个问题吧. 程序的思路是: 1所有的测试文件统一归类存放于不同的Project; 2Project启动时,自动生成所有测试代码的清单,通过输入清单序号选择对应的测试来执行,不用更改Program的Main方法. (目

DateTime.Compare(t1,t2)比较两个日期大小

DateTime.Compare(t1,t2)比较两个日期大小,排前面的小,排在后面的大,比如:2011-2-1就小于2012-3-2返回值小于零:  t1 小于 t2. 返回值等于零 : t1 等于 t2. 返回值大于零:  t1 大于 t2. 如: [c-sharp] view plain copy using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace C

C# Tuple&lt;T1,T2....T&gt;元组的使用

1) 先说组元:一个数据结构,由通过逗号分割的,用于传递给一个程序或者操作系统的一系列值的组合. NET Framework 直接支持一至七元素的元组 Tuple<T1> Tuple<T1, T2> Tuple<T1, T2, T3> Tuple<T1, T2, T3, T4> Tuple<T1, T2, T3, T4, T5> Tuple<T1, T2, T3, T4, T5, T6> Tuple<T1, T2, T3, T4

struts2 返回页面数据小测试

用户通过查询,后台得到查询数据,那么struts2这么把查询的数据,在页面显示?做个小测试. 创建项目 导入jar包(如果不知道导入哪些jar,参考前面章节)测试jar包为2.5 配置web.xml 写测试 项目结构图 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&qu

[UNet]通过一个小测试了解Command和ClientRpc的功能

作者只是业余时间接触Unity 2个月的新人一枚,如有不对的地方,请各位大神指正! Unity 5.以后使用了新的网络模块UNet(其实我接触的晚压根没用过老的- -!),但是在使用过程中确实关于UNet的资料和讨论挺少的,于是自己做了个小项目测试了Command和ClientRpc两个命令. 首先我们看看官方给出的定义: Commands Commands are sent from player objects on the client to player objects on the s

Python下实现文件中的全文搜索小测试

username = 'test' password = '123456' while True: user_str = raw_input("Please input your name>>") pass_str = raw_input("Please input your password>>") if username != user_str or password != pass_str: print "Sorry,You 

[Gevent]gevent 网络抓取小测试

早就听说gevent基于事件的异步处理能力 效率多么高,一直在项目中也很少用到,今天先来没事就学习了些简单的用法. 有个官方的教程写的很不错 中文版的地址为:http://xlambda.com/gevent-tutorial/ 学习gevent很不错的资料. 具体的理论这里不怎么说了,只是有些了解,具体的原理还不能解释的很清楚.不过协程这种概念在golang里面很多. 写了一个访问网络,使用同步操作,gevent 和 多线程对比的例子. #!/usr/bin/python # -*- codi