精华内容
下载资源
问答
  • 题意: 输入正整数n和k(范围均为1e9),求∑(k mod i),i从1~n 解法: 首先这道题直接暴力亲测会超时。 之后我们写几组数据之后可以发现当k/i...我们从左到右依次枚举每一项i(核心思想是减少i的枚举个数),...

    题意:

    输入正整数n和k(范围均为1e9),求∑(k mod i),i从1~n

    解法:

    首先这道题直接暴力亲测会超时。

    之后我们写几组数据之后可以发现当k/i的商相同的时候他们的余数成一个等差数列,而且数列首相是q,公差是p,项的个数是余数/商。

    具体写法网上面有分情况讨论的,但是较为繁琐,这里LRJ的板子感觉写法就很精炼。

    我们从左到右依次枚举每一项i(核心思想是减少i的枚举个数),计算出k除以这个数的商和余数, 如果这个商是0,说明此时的i已经大于k;如果不为0(即大于0),即来计算等差的数列的值。

    如果k%i==0,则项的个数为0,计算和之后为0,其他情况就很正常了。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 typedef long long ll;
     5 ll series_sum(int p, int d, int n) { return (ll)(2 * p - n*d)*(n + 1) / 2; }
     6 int main() {
     7     int n, k;
     8     while (scanf("%d%d", &n, &k) != EOF) {
     9         ll ans = 0, i = 1;
    10         while (i <= n) {
    11             int p = k / i, q = k%i;
    12             int cnt = n - i;
    13             if (p > 0)cnt = min(cnt, q / p);//计算项的个数,避免超出n的范围
    14             ans += series_sum(q, p, cnt);
    15             i += cnt + 1;
    16         }
    17         printf("%lld\n", ans);
    18     }
    19     return 0;
    20 }

     

    转载于:https://www.cnblogs.com/romaLzhih/p/9515216.html

    展开全文
  • Swift enum枚举

    2018-01-18 08:05:42
    最近在看Alamofire源码,但是Alamofire中使用了大量的枚举,这货打开方式跟OC不一样,所以从简单的枚举整理开始 ...//关联值类型写法 Int 代表枚举类型 关联值类型可为 Int , String ,Boole...

    最近在看Alamofire的源码,但是Alamofire中使用了大量的枚举,这货打开的方式跟OC不一样,所以从简单的枚举整理开始

    1.普通写法

    enum Direction {
        case east
        case west
        case south
        case north
    }
    
    //关联值类型写法 Int 代表枚举值的类型 关联值类型可为 Int , String ,Boolen
    enum Direction : Int {
        case east
        case west
        case south
        case north
    }
    
    复制代码

    2.简单写法

    enum Direction {
        case east, west,south, north
    }
    
    //如果关联值类型为Int,这枚举默认值分别为 0 1 2 3  如果指定第一个为具体数值后面一次+1
    enum Direction : Int {
        case east = 1, west,south, north
    }
    
    //如果关联值类型为String 在没有指定的情况下 默认为当前case的名称
    enum Direction : String {
        case east , west,south, north
    }
    
    //如下可指定枚举的具体值
    enum Direction : String {
        case east = "zhangsan", west = "lisi" ,south = "wangwu", north = "zhaoliu"
    }
    复制代码

    3.初始化

    let dire1 = Direction.north
    //错误写法
    let dire2 = Direction()
    
    //指定关联值类型   rawValue为初始值,rawValue必须存在
    let dire3 = Direction.init(rawValue: "zhangsan")
    let dire4 = Direction.init(rawValue: 1)
    
    复制代码

    4.枚举嵌套

    enum Direction : Int {
        
        enum vertical : Int {
            case top,middle,bottom
        }
        
        enum horizontal {
            case left ,middle , bottom
        }
        
        case east
        case west
        case south
        case north
        
    }
    
    let dire1 = Direction.init(rawValue: 1)
    
    print(dire1!)//west
    
    
    let dire2 = Direction.horizontal.left
    
    print(dire2)//left
    
    let dire3 = Direction.vertical.init(rawValue: 0)
    
    print(dire3!)//top
    复制代码

    5.包含枚举

    
    class ViewController: UIViewController {
        
        enum Human {
            case man, woman
        }
        
        let human : Human?  = .man
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            
        }
    }
    
    
    
    struct World {
        enum Human {
            case man, woman
        }
        
        var human : Human?
        
        var plants : String
    }
    复制代码

    6.关联值

    //number作为标签可以不写
     enum Fruit {
            case Apple(number : Int)
            case banana( number: Int)
        }
        func buyFruit(type: Fruit) {
        }
    //调用  语义明了  买水果(苹果10个)
     buyFruit(type: .Apple(number: 10))
    
    //这样也可以
     let fruit = Fruit.Apple(number: 10)
      buyFruit(type: fruit)
    复制代码

    7.枚举中使用方法,静态方法,属性(这些都是为了枚举服务)

    
    enum Direction  {
        
        enum vertical : Int {
            case top,middle,bottom
        }
        
        enum horizontal {
            case left ,middle , bottom
        }
        
        case east
        case west
        case south
        case north( distance : Int)//参数
        
        //方法
        func goLong(distance : Int) -> String  {
    
            switch self {
            case .east:
                return "east:\(distance)"
            default:
                return "back"
            }
        }
        
        static func directioned(type : Int) ->Direction{//类似类方法
            switch type {
            case 0:
                return .east
            case 1:
                return .west
            case 2:
                return .south
            
            default:
                return .east
            }
        }
        
        //属性
        var trueDirection : Bool {
            switch self {
            case .east:
                return true
            default:
                return false
            }
        }
        
    }
    
    let dire = Direction.east
    
    print(dire)
    
    print(dire.goLong(distance: 1000))
    
    print(dire.trueDirection)
    
    复制代码
    展开全文
  • 实际项目中我们经常碰到需要使用...这种写法带来一些弊端。 一旦分支多太多,逻辑复杂,会导致代码十分冗长,增加阅读难度。 如果需要增加或减少分支,需要改动if…elseif,增大因代码改动而出错风险。 例如: ...

    实际项目中我们经常碰到需要使用if…else…if的分支判断这种情况。
    这种写法带来一些弊端。
    一旦分支多太多,逻辑复杂,会导致代码十分冗长,增加阅读难度。
    如果需要增加或减少分支,需要改动if…elseif,增大因代码改动而出错的风险。

    例如:
    在这里插入图片描述

    注:实际项目中的订单状态远远不止这些,小编只是模拟一个if…else…if 这样的一个场景

    解决的方法是,可以通过策略模式+工厂模式,巧妙地利用反射机制和枚举类的valueof方法,规避掉if…else…if写法带来的弊端。下面我们通过一个订单状态这个实际例子来理解这种做法。

    案例
    状态策略接口

    /**
     * 状态策略接口
     *
     * @author gblfy
     * @date 2021-01-31
     */
    public interface StatusStrategy {
        void status();
    }
    

    未支付状态

    /**
     * 未支付状态
     *
     * @author gblfy
     * @date 2021-01-31
     */
    public class UnpaidStatus implements StatusStrategy {
        @Override
        public void status() {
            System.out.println("未支付状态");
        }
    }
    

    未发货状态

    /**
     * 未发货状态
     *
     * @author gblfy
     * @date 2021-01-31
     */
    public class UnshippedStatus implements StatusStrategy {
        @Override
        public void status() {
            System.out.println("未发货状态");
        }
    }
    

    已发货状态

    /**
     * 已发货状态
     *
     * @author gblfy
     * @date 2021-01-31
     */
    public class ShippedStatus implements StatusStrategy {
        @Override
        public void status() {
            System.out.println("已发货状态");
        }
    }
    

    确认收货状态

    /**
     * 确认收货状态
     *
     * @author gblfy
     * @date 2021-01-31
     */
    public class ConfirmReceiptStatus implements StatusStrategy {
        @Override
        public void status() {
            System.out.println("确认收货状态");
        }
    }
    

    已评价状态

    /**
     * 已评价状态
     *
     * @author gblfy
     * @date 2021-01-31
     */
    public class AlreadyEvaluatedStatus implements StatusStrategy {
        @Override
        public void status() {
            System.out.println("已评价");
        }
    }
    

    状态枚举类

    /**
     * 状态枚举类【如果需要增删状态类型,只需要在StatusEnum类添加或删除对应的枚举,而不是增删if…else if…】
     *
     * @author gblfy
     * @date 2021-01-31
     */
    public enum StatusEnum {
    
        /**
         * 未支付状态
         */
        UNPAIDSTATUS("com.gblfy.dca.task.UnpaidStatus"),
        /**
         * 未发货状态
         */
        UNSHIPPEDSTATUS("com.gblfy.dca.task.UnshippedStatus"),
        /**
         * 已发货状态
         */
        SHIPPEDSTATUS("com.gblfy.dca.task.ShippedStatus"),
        /**
         * 确认收货状态
         */
        CONFIRMRECEIPTSTATUS("com.gblfy.dca.task.ConfirmReceiptStatus"),
        /**
         * 已评价状态
         */
        ALREADYEVALUATEDSTATUS("com.gblfy.dca.task.AlreadyEvaluatedStatus");
    
        StatusEnum(String className) {
            this.setClassName(className);
        }
    
        private String className;
    
        public String getClassName() {
            return className;
        }
    
        public void setClassName(String className) {
            this.className = className;
        }
    }
    
    

    状态工厂类

    /**
     * 状态工厂类
     *
     * @author gblfy
     * @date 2021-01-31
     */
    public class StatusFactory {
        /**
         * 该工厂类提供静态方法,巧妙地利用反射机制和枚举类的valueof方法,返回具体策略实例。
         * @param strategyType 策略类型
         * @return
         * @throws Exception
         */
        public static StatusStrategy getStrategy(String strategyType) throws Exception {
            String className = StatusEnum.valueOf(strategyType).getClassName();
            return (StatusStrategy) Class.forName(className).newInstance();
        }
    }
    
    

    测试类

    public class Demo {
    
        public static void main(String[] args) throws Exception {
    
            String statusStrategyParam = "UNPAIDSTATUS";//未支付状态
            StatusStrategy strategy = StatusFactory.getStrategy(statusStrategyParam);
            strategy.status();
    
            statusStrategyParam = "UNSHIPPEDSTATUS";//未发货状态
            strategy = StatusFactory.getStrategy(statusStrategyParam);
            strategy.status();
    
            statusStrategyParam = "SHIPPEDSTATUS";//已发货状态
            strategy = StatusFactory.getStrategy(statusStrategyParam);
            strategy.status();
    
            statusStrategyParam = "CONFIRMRECEIPTSTATUS";//确认收货状态
            strategy = StatusFactory.getStrategy(statusStrategyParam);
            strategy.status();
    
            statusStrategyParam = "ALREADYEVALUATEDSTATUS";//已评价状态
            strategy = StatusFactory.getStrategy(statusStrategyParam);
            strategy.status();
        }
    }
    
    

    控制调输出

    未支付状态
    未发货状态
    已发货状态
    确认收货状态
    已评价
    

    总结

                if…else if…的缺点
    

    1.多分支和复杂度高的逻辑会使代码冗长,难以理解和维护。

    2.增删分支需要改动if…else if结构,增大代码出错风险。

                策略模式+工厂模式的优点
    

    1.对应的分支处理分成不同策略类来实现,使代码易于读懂和维护

    2.扩展性好,增加分支只需要增加对应的策略实现类和枚举。

    展开全文
  • 直接枚举就好。。但是错了好几次,因为没有枚举完qwq 枚举两段区间 1 和0的个数,求最小值就行。数据很小,,, 必须 枚举到 左右段有空空的 两种...错误的写法 #include using namespace std; int main() {

    https://hihocoder.com/contest/hiho164/problems
    直接枚举就好。。但是错了好几次,因为没有枚举完qwq
    枚举两段区间 1 和0的个数,求最小值就行。数据量很小,,,
    这里写图片描述
    必须 枚举到 左右段有空空的 两种情况qwq
    错误的写法
    这里写图片描述

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {    int t;
         char a[1005];
         bool vis[2];
         scanf("%d",&t);
         while(t--){
              scanf("%s",a);
              //cout<<a<<endl;
              for(int i=0;i<2;i++) vis[i]=false;
              int len=strlen(a);
              int ans=1e8+8;
              for(int i=0;i<len;i++){
                  int sum1=0,sum0=0;
                  if(!vis[a[i]-'0']){
                  vis[a[i]-'0']=true;
                  //cout<<a[i]<<endl;
                  }
                  for(int j=0;j<i;j++){
                     if(a[j]=='1')
                        sum1++;
                  }
                  for(int j=i+1;j<len;j++){
                     if(a[j]=='0')
                        sum0++;
                  }
                  ans=min(ans,sum1+sum0);
              }
    
              printf("%d\n",ans);
         }
    
    
        return 0;
    }
    展开全文
  • 可以使用type关键字简化写法 ...字面量的用处:在枚举中,经常会遇到一些常量值,字面量是一种简单的方法来处理一种情形,下面的Directions有四个方向,下面的towWhere会把这四种类型限定在里面。其.
  • 按照01背包的写法 将主件和附件看作同一个物品 处理时计算只买主件、买主件和第一个附件、买主件和第二个附件、买主件和两个附件四种情况进行转移 转移枚举容量时这四种情况并行操作就不会相互造成贡献 不同物品之间...
  • 目录 一、闭包(Closure) 1.1、闭包相关的问题 1.2、理解闭包 二、对象 2.1、对象常量(字面) 2.2、取值 2.3、枚举(遍历) 2.4、更新与添加 2.5、对象的原型 ...3.5.4、各种IIFE的写法 3.5.5、参数
  • 文档输入输出框,采用CodeMirror轻级文本编辑器代替原版textarea输入框,支持编辑器语法高亮,代码格式化,代码折叠… 自动捕获前端代码实现,连接口数据预处理逻辑都能显示,支持枚举值提示等。 接口字段...
  • UVA 11205

    2014-11-27 17:54:40
    但是枚举好像效率很低,但是算一算就知道15个灯泡有2^15种组合方式,枚举量也就3W左右,每次需要判断100+99+……+1次,数量级是10^3,总的算下来一次数据是10^7,这样的效率应该也够了,看了下别人的写法也是直接...
  • Android 开发学习 - Kotlin 前言 - 最近版本上线后手上没有什么工作就下来看看 ...以下代码的写法存在多种,这里只列举其一 单利 java 单例模式 & Kotlin 单例模式 枚举 java 枚举 & Kotlin 枚举 ...
  • 没有字面量的写法 新的数据类型,typeof返回的是symbol 每次去调用Symbol函数得到的符号永远不会相等,不管符号描述是否相同 符号可以作为对象的属性名使用,这种属性名叫符号属性 可以通过设计,让外面无法访问到 ...
  • 单例模式有8种写法单例模式介绍单例8种写法饿汉式2种懒汉式3种双重检查1种静态内部类1种枚举1种 单例模式介绍 所谓单例模式,就是采用一定方式,保证在整个系统中,对于某个类只有一个对象存在,且该类只提供一个...
  • 这道题主要是要学习下这个树形dp的写法。 我一开始的想法是全部转移完再来统计贡献。然而,这就造成一个麻烦。 我们要统计的贡献是树中是权值和为3的倍数的路径个数。如果按照暴力思想,肯定是枚举两个点之后check这...
  • if-else省略处理策略

    2020-09-07 15:10:38
    同意类似接口很多,那么这个时候一般都是采用if-else来处理的,判断不同接口调用不同方法,那么看起来都太low了,可以采用spring提供的反射来处理这个问题,可采用策略模式和简单的工厂模式来减少if-else的写法,...
  • 题目大意:有c头牛,选择n头上大学,c头牛分别对应自己成绩...我们既然想得到中位数尽量高,枚举中位数是必不可少,但是本题数据不小。枚举是要有技巧我们既然要中位数,那么也就是说 前N/2+自己+后N/2补...
  • 一、Qt Creator 安装和hello world 程序编写(原创) 1.首先到Qt 官方网站上下载Qt Creator,这里我们下载windows 版。 下载地址:http://qt.nokia.com/downloads 如下图我们下载:Download Qt SDK for ...
  • 题意:很简单,就是求最大值并且记录选择了哪些。 方法1: dfs 记录路径。...这样dfs写法是很经典是搜索方式。 #include &lt;bits/stdc++.h&gt; using namespace std; const int maxn...
  • 单例模式详解

    2021-01-04 22:07:52
    1.前言 单例模式应该是用得最多的设计模式之一,如果你的应用有个类很消耗资源 那么我们没有理由让他们不断创建 2. 定义 确保一个类只有一个实例,而且自行实例化,并向系统提供这个实例。...5.多种单例的写法和优缺点
  • 数据少可以用枚举,数据不多不少也能用静态(数据源是数据库写法就麻烦),也能直接放到jvm内存里,不过这样对于分布式系统不友好,所以主流都是redis里。 不过spring跟redis都需要等待spring加载完毕后进行...
  • 单例几种写法? 懒汉、饿汉、枚举、double check 、内部类。 饿汉式:不管用不用,都先赋值。优点:线程安全、逻辑简单、空间换时间;缺点:如果这种写法被大量使用,导致内存开销增加。 懒汉式:即用即赋值,不...
  • int完整写法为integer, 为了增加程序可读性,可把整型说明符用typedef定义为: typedef int INTEGER 这以后就可用INTEGER来代替int作整型变量类型说明了。 例如: INTEGER a,b;它等效于: int a,b; 用typedef...
  • 该说说优点了,比如注解式 起手, 导出,可以无侵入代码,可以侵入代码写法, 侵入代码写法,可以明确校验字段,字段转换 有dataHandle 作者自己定义了一套 对应类型转化 formatter 机制 比如时间 --》dataformat 比如...
  • 解题思路 ...这里提一下完全背包的写法。其实这个题有点特殊,顺序不同的组合也要算一组,所以枚举的顺序必须是 for(int j=1;j<=target;j++) for(int i=0;i<n;i++) 倘若没有顺序要求即(1,2,1)和(...
  • hdu 2602

    2012-10-25 12:09:14
    简单01背包,但这道题要卡你骨头重量为0数据,因为重量为0就...但按普通那么写同学就悲剧了 我这里提供以下这种写法 这是要把容量从0枚举而已,而且要把上一次状态继承下来 代码: #include #include #in
  • 语法是如此级,而原语又如此富有表达力,以至于根本可以认为 API使用不须负 法开销。我们可以在标准库中,如拆分器、组合器和执行器,中发现例子。从这点上看,Scal 一种支持内嵌域特化:embedded ...
  • UVALive 3942 字典树+dp

    2014-03-12 21:51:00
    其实主要是想学一下字典树的写法,但这个题目又涉及到了DP;这个题目要求某些单词组成一个长子串的各种组合总数,数据大,单纯枚举复杂度高,首先肯定是要把各个单词给建成字典树,但是之后该怎么推一时没想到。...

空空如也

空空如也

1 2
收藏数 36
精华内容 14
关键字:

枚举量的写法