热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解题思路

简要记录题解思路f:battleCitybfs+优先队列每次入队前进行标记,每次出队都上当前最短的路径bfs+优先队列似乎就是dijkstra算法??codestructEdge{

简要记录题解思路

f:battle City

bfs+优先队列

每次入队前进行标记,每次出队都上当前最短的路径
bfs+优先队列似乎就是dijkstra算法 ??

code

char mp[maxm][maxn];
int vis[maxm][maxn];//记录是否处理过
struct node{
    int x,y;
    int step;
    node(int x_,int y_,int s_):x(x_),y(y_),step(s_){}
};
 bool operator <(node a,node b){
        return a.step>b.step;
    }
int mv[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
//优先队列

int m,n;
int bfs(node begin,int endx,int endy){
    priority_queue que;
    vis[begin.x][begin.y]=1;
    que.push(begin);
    while(!que.empty()){
        node tmp=que.top();
        que.pop();
        //printf("db %d %d step %d\n",tmp.x,tmp.y,tmp.step);
        if(tmp.x==endx&&tmp.y==endy) return tmp.step;
        int tmpx,tmpy,tmps;
        for(int i=0;i<4;i++){
            tmpx=tmp.x+mv[i][0];
            tmpy=tmp.y+mv[i][1];
            if(tmpx<0||tmpx>=m||tmpy<0||tmpy>=n||vis[tmpx][tmpy]||mp[tmpx][tmpy]==&#39;S&#39;||mp[tmpx][tmpy]==&#39;R&#39;) continue;//依旧可能出现相同坐标都在队列中
            else if(mp[tmpx][tmpy]==&#39;B&#39;) tmps=tmp.step+2;
            else tmps=tmp.step+1;
            node t=node(tmpx,tmpy,tmps);
            vis[tmpx][tmpy]=1;
            que.push(t);
            //else if(mp[tmpx][tmpy]==&#39;B&#39;){node t=node(tmpx,tmpy,tmp.step+2);vis[tmpx][tmpy]=1;que.push(t);}
            //else if(mp[tmpx][tmpy]==&#39;E&#39;||mp[tmpx][tmpy]==&#39;T&#39;){node t=node(tmpx,tmpy,tmp.step+1);vis[tmpx][tmpy]=1;que.push(t);}

        }
    }
    return -1;//no find
}
node beg=node(0,0,0);
int endx,endy;
int main(){
    while(scanf("%d %d",&m,&n)&&m!=0){
        //CL(mp,0);
        CL(vis,0);
        /*
        while(!que.empty()){
            que.pop();
        }
        */
        for(int i=0;i

g: 从N个数里找出和为N的倍数

数学题(鸽巢原理)+前缀和

处理前缀和的模N为0和相同的情况

code

void output(int i,int j){
    printf("%d\n",j-i);
    for(int t=i+1;t<=j;t++){
        printf("%d\n",a[t]);
    }
}
int main(){
    scanf("%d",&n);
        //CL(tag,-1);
        bool flag=false;//是否已经找到该组数据答案
        for(int i=1;i<=n;i++){
            scanf("%d",a+i);
            if(flag) continue;
            sum[i]=a[i];
            sum[i]+=sum[i-1];
            int mod=sum[i]%n;
            if(mod==0){
                output(0,i);
                flag=true;
                continue;
            }
            //printf("db %d %d mod %d tag[mod] %d\n",i,sum[i],mod,tag[mod]);
            if(tag[mod]==0){
                tag[mod]=i;
            }
            else{
                output(tag[mod],i);
                flag=true;
            }
        }

    
    return 0;
}

h :判断负环

bellman-ford

bellman-ford算法处理单源最短路(可以有负边),基本操作:
N-1次的松弛,每次松弛时对边 dis[v]=min(dis[v],dis[u]+cost(u,v))
不优化的复杂度O(NE)

code

struct Edge{
    int u,v,w,next;
    //Edge(int u_,int v_,int w_):u(u_),v(v_),w(w_) {}
}es[maxm];//maybe be not need u
int head[maxn];//head[u]链表头,边编号
int dis[maxn];
//init -1
int cnt;
void add(int u,int v,int w){
    es[cnt].u=u;es[cnt].v=v;es[cnt].w=w;
    es[cnt].next=head[u];
    head[u]=cnt;
    cnt++;
}
void bellman(int s){
    //原点s进行bellmanford算法
    CL(dis,0x3f);
    dis[s]=0;// dis0
    //dis1...dis(n-1)
    //dis(n)[j]=min(dis(n-1)[j],dis(n-1)[i]+cost[i][j])
    for(int t=1;t<=n-1;t++){
        //优化之一如果有一次都没更新则停止
        //便利所有边
        for(int j=0;jdis[u]+w) dis[v]=dis[u]+w;//更新
        }

    }
}
bool check(){
    //n-1次后还能更新则存在负环
    for(int j=0;jdis[u]+w) return false;
    }
    return true;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%d %d %d",&n,&m,&W);
        //初始化
        cnt=0;
        CL(head,-1);
        int u,v,w;
        
        for(int i=0;i

I:正方形(找出N个整点构成的正方形个数)

手写hash+简单几何关系

枚举两点,得到正方形的另外两点,hash检索(注意选模,搜索时时搜索自由区域才停)
注意枚举重复情况(4条边都被枚举遍)

code

const int maxn=100007;
struct point{
    int x,y;
    int count;//标志有效位置
}hash[100007];
int n;
int xx[1005],yy[1005];
void tohash(int x,int y){
    int pos=(x*x+y*y+x-y)%maxn;
    while(hash[pos].count!=0){
        pos=(pos+1)%maxn;
    }
    hash[pos].count=1;
    hash[pos].x=x;hash[pos].y=y;


}
int search(int x,int y){
    int pos=(x*x+y*y+x-y)%maxn;
    while(hash[pos].count!=0){
        if(hash[pos].x==x&&hash[pos].y==y) return 1;
        pos=(pos+1)%maxn;
    }
    //printf("db search pos:%d x %d y %d\n",pos,x,y);
    //if(hash[pos].x==x&&hash[pos].y==y) return 1;
    return 0;
}

int main(){
    while(scanf("%d",&n)&&n!=0){
        CL(hash,0);
        int x,y;
        for(int i=0;i>2);

    }
    return 0;

}

j:container

给出三维整点左边,要将这些区域包裹起来的最小表面积

6n-2m ;n是点的个数,m是相接的面
但没找到原题,无法测试

code

struct cell{
    int x,y,z;
}cels[maxn];
int n;
bool checkadj(cell c1,cell c2){
    return (abs(c1.x-c1.x)+abs(c1.y-c2.y)+abs(c1.z-c2.z))<=1;//no same
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        for(int i=0;i

解题思路


推荐阅读
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • LeetCode 102 - 二叉树层次遍历详解
    本文详细解析了LeetCode第102题——二叉树的层次遍历问题,提供了C++语言的实现代码,并对算法的核心思想和具体步骤进行了深入讲解。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • 本文介绍了一个来自AIZU ONLINE JUDGE平台的问题,即清洁机器人2.0。该问题来源于某次编程竞赛,涉及复杂的算法逻辑与实现技巧。 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • Awk是一款功能强大的文本分析与处理工具,尤其在数据解析和报告生成方面表现突出。它通过读取由换行符分隔的记录,并按照指定的字段分隔符来划分和处理这些记录,从而实现复杂的数据操作。 ... [详细]
  • Vue CLI 基础入门指南
    本文详细介绍了 Vue CLI 的基础使用方法,包括环境搭建、项目创建、常见配置及路由管理等内容,适合初学者快速掌握 Vue 开发环境。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
author-avatar
青樽有酒_585_587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有