• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > Codeforces 842A. Kirill And The Game (暴力算法比较)

Codeforces 842A. Kirill And The Game (暴力算法比较)

作者:白河夜船,日暮途远 字体:[增加 减小] 来源:互联网 时间:2017-08-30

白河夜船,日暮途远通过本文主要向大家介绍了codeforces等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

求是否存在两个整数a,b满足l<=a<=r, x<=b<=y使得k*b=a;

 

这道题刚开始判断范围,结果被hack了.
发现乘出来的范围不是连续的,据说很多人疯狂hack,不是暴力做法的都被hack了.
纯暴力会t,可以先判断范围剪枝一下.

代码用时:5分钟

#include <bits/stdc++.h>
using namespace std;
int main(void)
{
    long long l,r,x,y,k;
    cin >>l>>r>>x>>y>>k;
    long long pl=k*x,pr=k*y;
    if(pl>r||pr<l)
    {
        printf("no\n");
    }
    else
    {
        for(long long i=x;i<=y;i++)
        {
            long long p=i*k;
            for(long long j=l;j<=r;j++)
            {
                if(j==p)
                {
                    printf("yes\n");
                    return 0;
                }
            }           
        }
        printf("no\n");
    }
    return 0;
}

有两个点需要注意:一个是变量的运算结果会存在变量的类型里,比如

int a=1e7,b=1e7;
long long c=a*b;    

经测试,此时c的值并不是1e14,而是相当于溢出了

另一个是一个优化技巧.

for(int i=l;i<=r;i++)
for(int j=x;j<=y;j++)
if(j*k==i) /* do something */;
for(int i=x;i<=y;i++)
{
    int p=i*k;
    for(int j=l;j<=r;j++)
    {
        if(j==p) /* do something */;
    }           
}

两份代码效率天差地别,原因在于第一个中,循环顺序实际上是可交换的,交换后就会发现,做了大量的重复操作 j*k.
以后多加注意.

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28关于C语言指针赋值的问题详解
  • 2017-05-28解析C语言中结构体struct的对齐问题
  • 2017-05-28浅析c++ 宏 #val 在unicode下的使用
  • 2017-05-28最小生成树算法C语言代码实例
  • 2017-05-28C++二进制翻转实例分析
  • 2017-05-28C++中回调函数(CallBack)的用法分析
  • 2022-04-30C语言fgets和fputs函数的用法详解(以字符串的形式读写文件)
  • 2017-05-28c++中容器之总结篇
  • 2017-05-28C++多字节字符与宽字节字符相互转换
  • 2017-05-28C++中sting类的简单实现方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • VC++创建msi文件的方法
    • GCC 编译c程序的方法及过程解析
    • 图的邻接表存储表示示例讲解
    • C++中COM组件初始化方法实例分析
    • C++之CNoTrackObject类和new delete操作符的重载实例
    • C++中的哈希容器unordered_map使用示例
    • C++条件语句和条件运算符的使用方法讲解
    • C语言中计算二叉树的宽度的两种方式
    • 深入理解链表的各类操作详解
    • C实现与 uint64_t 相同功能的类

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有