前端Vue基本语法

news2024/9/24 5:32:23

尤雨溪

文章目录

  • 前言
  • MVVM框架
  • 认识Vue
  • 文本渲染指令 v-text
  • 属性绑定指令:
    • title属性动态绑定
    • class属性动态绑定
    • style属性动态绑定
  • 事件绑定 @事件名
  • 条件渲染指令
    • v-if
    • v-if和v-show
    • v-else和v-else-if
  • 循环遍历指令


前言

提示:这里可以添加本文要记录的大概内容:

学习前端Vue框架有以下几个原因:

  1. Vue是一种轻量级前端框架,易于学习和使用;
  2. Vue具有完善的文档和社区支持,可以轻松地找到解决问题的方法;
  3. Vue使用组件化的编程方式,可以帮助你更好地管理和组织代码;
  4. Vue具有丰富的生态系统,包括大量的第三方组件和插件,可以帮助你更快速地开发应用程序;
  5. Vue在移动端开发中有很好的表现,可以帮助你快速构建响应式的用户界面;
  6. Vue在大型项目中的性能表现也很好,可以满足高要求的开发需求。

Vue开发核心的关注点:数据的变化
简化DOM编程


提示:以下是本篇文章正文内容,下面案例可供参考

MVVM框架

在这里插入图片描述

认识Vue

vue.js的在线引用地址(vue 官方引入地址):

<script src="https://unpkg.com/vue@next"></script>

以下是使用Vue.js写一个简单的"Hello World"应用程序的示例:

  1. 引入Vue.js文件
  2. 创建vue实例对象,需要传入配置对象(最重要的:data)
  3. 将创建的vue实例对象,挂载到视图中某个标记上(vm.mount(‘#xxx’) CSS语法)
  4. 最大的div内使用插值语法

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- 4.输入框的数据改变,同步到title(指明h1内容就是title内容)插值语法 -->
        <h1>{{title}}</h1>
    </div>
</body>
<!-- 1.引入vue js文件(这里可以替换成网页) -->
<script src="./js/vue3.js"></script>

<script>
    // 2.创建vue实例对象,需要传入配置对象
    // 配置对象中需要指定若干个配置项 data代表数据配置项
    let vm = Vue.createApp({
        data() {
            return {
                title: 'Hello World'
            }
        },
    })

    // 3.将创建的vue实例对象,挂载到视图中某个标记上
    vm.mount('#app')
    // css选择器思想
</script>
</html>

输出效果:
在这里插入图片描述
上面是单项绑定,下面是双向绑定

<body>
    <div id="app">
        <!-- 4.输入框的数据改变,同步到title(指明h1内容就是title内容)插值语法 -->
        <h1>{{title}}</h1>
        <input type="text" v-model="title">
    </div>
</body>

输出效果:
在这里插入图片描述
在输入框内更改内容,上面h1内容也会随之改变
在这里插入图片描述

文本渲染指令 v-text

v-text指令:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <div v-text="x">
        </div>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                x: '<h1>xxx</h1>'
            }
        },
    })
    vm.mount('#app')
</script>
</html>

输出效果:
把里面内容当做纯文本写出
在这里插入图片描述
把v-text改成插值语法:

<body>
    <div id="app">
        <div>
            {{x}}
        </div>
    </div>
</body>

效果一样
在这里插入图片描述
v-text 修改innerText属性 v-html修改innerHtml 属性
v-text 等同于{{插值语法}}

属性绑定指令:

它可以动态地绑定一个属性的值。
可以将一个组件的class属性绑定到Vue实例中的一个数据属性上,以实现动态的样式控制

title属性动态绑定

和class和style属性绑定类似,通过v-bind指令,我们可以将元素的title属性与Vue实例中的数据属性绑定起来,实现动态绑定,当绑定的数据属性发生变化时,title属性的值也会随之动态更新,从而实现动态绑定

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <a :href="address">跳转</a>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                address:'https://rej177.blog.csdn.net/article/details/131444680'
            }
        },
    })

    vm.mount('#app')
</script>
</html>

输出结果
在这里插入图片描述

class属性动态绑定

可以将一个或多个class类名与Vue实例中的数据属性进行绑定,当数据属性的值发生变化时,class类名也会随之动态更新

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .one{
            color: aqua;
        }
        .two{
            color: yellowgreen;
        }
        .three{
            font-size: 50px;
        }
    </style>
</head>
<body>
    <div id="app">
        <p :class="className">杰瑞</p>
        <p :class="[className,className1]">汤姆</p>
        <p :class="{one: flag}">斯派克</p>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                className: 'two',
                // 改成one变成湖绿色
                // className: 'one',
                // 多个属性配置中间加逗号分割
                className1: 'three',
                flag: true,
                // true生效,false不生效
            }
        },
    })

    vm.mount('#app')
</script>
</html>

输出效果:
在这里插入图片描述

style属性动态绑定

可以将一个或多个样式属性与Vue实例中的数据属性进行绑定,当数据属性的值发生变化时,样式属性也会随之动态更新

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p :style="{textAlign: a,backgroundColor: b}">二哈喇子!</p>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                a: 'center',
                b: 'pink'
            }
        },
    })

    vm.mount('#app')
</script>
</html>

输出效果:
在这里插入图片描述

事件绑定 @事件名

Vue中事件执行的函数,必须编写在methods配置项中

methods函数体中想要访问data配置项中配置的数据,必须加this.前缀

【示例代码】:

模拟购物车的加减数据
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- Vue开发两个最基本的最重要的配置项是 data 和 methods  -->
    <!-- Vue开发核心的关注点:数据的变化 -->
    <div id="app">
        <button @click="minus">-</button>
        {{num}}
        <button @click="plus">+</button>
        <!-- 事件绑定是 v-on事件名 简写成:@事件名 -->
        <div @click="b" style="width: 200px;height: 200px;border: 1px solid red;">
            <div @click.stop="a" style="width: 50px;height: 50px;background-color: yellow;"></div>
        </div>
    </div>
</body>
<script src="../js/vue3.js"></script>
<script>
    let vm = Vue.createApp({
        data() {
            return {
                num: 1
            }
        },
        // Vue中事件执行的函数,必须编写在methods配置项中
        methods: {
            // methods中定义的函数,function可以省略
            plus: function (event) {
                event.preventDefault()
                // methods函数体中想要访问data配置项中配置的数据,必须加this.前缀
                this.num++
            },
            minus: function (event) {
                event.preventDefault()
                if (this.num > 0) {
                    this.num--
                }
            },
            a: function () {
                console.log('点击子标记')
            },
            b: function () {
                console.log('点击父标记');
            }
        },
    })
    vm.mount('#app')

</script>

</html>

输出效果:
在这里插入图片描述

上述代码是一个基本的 Vue 应用,实现了一个计数器和一个嵌套的 div 元素,其中包含一个子元素。下面是代码的详细解释:

这段代码是一个基本的 HTML + Vue.js 页面,它包含了一个加减按钮和一个反弹的黄色小方块。

这个页面的主要步骤如下:

  1. 在页面头部使用<script>标签引入 Vue.js 库。

  2. 在页面的<body>标签中添加一个<div>标签,它有一个 ID 属性值为“app”。

  3. 在这个<div>标签中添加两个按钮,分别是“+”和“-”,并绑定对应的事件处理函数 plus 和 minus。

  4. 在这个<div>标签中添加一个反弹的黄色小方块,它有一个父元素和一个子元素。我们可以通过给这两个元素绑定鼠标点击事件来观察事件冒泡和阻止冒泡的效果。

  5. 在标签底部使用<script>标签定义一个 Vue 实例 vm,并在实例中定义 data 属性和 methods 方法。

  6. data 属性中只有一个数值类型变量 num,表示当前数值。

  7. methods 方法中包含了四个函数 plus、minus、a 和 b,分别用于增加数值、减少数值、输出点击子标记和输出点击父标记。

  8. 使用 vm.mount 方法将 Vue 实例挂载到页面中的 app 元素上。

当用户在页面上点击加减按钮或小方块时,Vue 实例会执行对应的函数来改变数据,并将改变后的数据重新渲染到页面上。同时也能看到事件冒泡和阻止冒泡的效果。

条件渲染指令

条件渲染指令是指在前端框架(如Vue、React等)中,根据条件判断是否渲染DOM节点的指令。在Vue中,条件渲染指令包括v-if和v-show两种:

v-if

v-if指令会根据表达式的值(true或false)来添加或删除DOM节点,如果值为false,则节点会从DOM中删除;如果值为true,则节点会添加到DOM中。
该指令的优点是可以节省DOM节点的渲染,但缺点是在条件切换时会重新渲染整个节点。

【示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <div v-if="isShow">条件渲染</div>
    <div v-if="price<=800">价格太贵了,买不起</div>
  </div>
</body>
<script src="../js/vue3.js"></script>
<script>
  let vm = Vue.createApp({
    data() {
      return {
        // 显示的值为true时会显示出来
        isShow: true,
        // 默认不显示,只有price<=800时会显示
        price: 900
      }
    },
  })
  vm.mount('#app')
</script>
</html>

v-if和v-show

v-ifv-show 区别:

  1. v-if是真正的条件渲染,隐藏的实现是直接将标记动态删除掉
  2. v-show是通过修改标记的display样式来控制标记的显示隐藏
  3. v-show效率高,如果某个标记需要频繁的切换显示隐藏状态,建议使用v-show

【示例代码v-if】:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <div v-if="flag">hello world</div>
    <button @click="change">切换</button>
  </div>
</body>
<script src="../js/vue3.js"></script>
<script>
  let vm = Vue.createApp({
    data() {
      return {
        flag: true
      }
    },
    methods: {
      change(){
        this.flag=!this.flag
      }
    },
  })
  vm.mount('#app')
</script>
</html>

请添加图片描述
【示例代码v-show】:
把第十行的<div v-if="flag">hello world</div>换成v-show
请添加图片描述

v-else和v-else-if

该示例中还引入了Vue 3的JS文件vue3.js,并在HTML的尾部使用vm.mount挂载Vue实例到<div id="app">处,从而使得Vue能够监视和响应数据的变化,实现动态更新页面内容

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <div v-if="type==1">A</div>
    <div v-else-if="type==1">B</div>
    <div v-else>C</div>
  </div>
</body>
<script src="../js/vue3.js"></script>
<script>
  let vm = Vue.createApp({
    data() {
      return {
        type: 1
      }
    },
  })
  vm.mount('#app')
</script>
</html>

如果type等于1,则显示文本“A”;
如果type不等于1,但等于1的话,则显示文本“B”;
如果type既不等于1也不等于2,则显示文本“C”。

循环遍历指令

在 Vue 中,可以使用 v-for 指令来循环遍历数组或对象,并生成相应的元素。

<div v-for="(item, index) in items">
  {{ index }} - {{ item }}
</div>

其中,items 是要遍历的数组或对象,item 表示当前循环的元素,index 表示当前元素的索引。

如果是数组,index 就是当前元素的下标;
如果是对象,index 就是当前元素的键名。

除了数组和对象,还可以循环遍历数字,例如:

<div v-for="i in 5">
  {{ i }}
</div>

上述代码会生成 5 个 div 元素,分别显示数字 1 到 5。

【循环遍历指令示例代码】:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <ul>
      <li v-for="game in arr">{{game}}</li>
    </ul>
  </div>
</body>
<script src="../js/vue3.js"></script>
<script>
  let vm = Vue.createApp({
    data() {
      return {
        arr: ['我的世界','英雄联盟','CS:GO']
      }
    },
  })
  vm.mount('#app')
</script>
</html>

输出效果:
在这里插入图片描述
【例】Vue商品列表删除操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>商品列表</title>
    <style>
        table{
            width: 100%;
            border-collapse: collapse;
            border: 1px solid #298cce;
            margin-top: 20px;
        }
        th, td{
            padding: 10px;
            text-align: center;
            border: 1px solid #298cce;
        }
        th{
            background-color: #f2f2f2;
        }
        tr:nth-child(even){
            background-color: #f2f2f2;
        }
        button{
            background-color: #298cce;
            color: #fff;
            border: none;
            padding: 6px 10px;
            cursor: pointer;
        }
    </style>
</head>
<body>
   <div id="app">
        <table>
            <caption><h2>商品列表</h2></caption>
            <thead>
                <tr>
                    <th>序号</th>
                    <th>品牌</th>
                    <th>型号</th>
                    <th>成色</th>
                    <th>售后服务</th>
                    <th>连接方式</th>
                    <th>套餐类型</th>
                    <th>价格</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <tr v-for="(goods, index) in goods">
                    <td>{{index+1}}</td>
                    <td>{{goods.brand}}</td>
                    <td>{{goods.model}}</td>
                    <td>{{goods.fineness}}</td>
                    <td>{{goods.after}}</td>
                    <td>{{goods.connection}}</td>
                    <td>{{goods.type}}</td>
                    <td>{{goods.price}}</td>
                    <td><button @click="del(index)">删除</button></td>
                </tr>
            </tbody>
        </table>
   </div> 
</body>
<script src="../js/vue3.js"></script>
<!-- 代替vue.js网页 -->
<script>
    let vm = Vue.createApp({
        data() {
            return {
                goods: [
                    {
                        brand: 'OPES',
                        model: 1.0,
                        fineness: '全新',
                        after: '一年质保',
                        connection: '有线/无线',
                        type: '基础版',
                        price: '500',
                    },
                    {
                        brand: 'OPES',
                        model: 1.0,
                        fineness: '全新',
                        after: '两年质保',
                        connection: '有线/无线',
                        type: '进阶版',
                        price: '600'
                    },
                    {
                        brand: 'OPES',
                        model: 1.0,
                        fineness: '全新',
                        after: '一年质保',
                        connection: '无线',
                        type: '战损版',
                        price: '500'
                    },
                    {
                        brand: 'OPES',
                        model: 1.0,
                        fineness: '全新',
                        after: '两年质保',
                        connection: '有线/无线',
                        type: '高级版',
                        price: '700'
                    },
                ]
            }
        },
        methods: {
            del(i){
                this.goods.splice(i,1)
            }
        },
    })
    vm.mount('#app')
</script>
</html>

输出效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 Python 实现【获取最大软件版本号】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、补充说明五、解题思路六、Python算法源码七、效果展示1、输入2、输出 一、题目描述 Maven版本号定义&#xff0c;<主版本>.<次版本><增量版本>-<里程碑版本> 举例3.1.4-beta 其中&#xff0c;主版本和次…

华为OD机试真题 Python 实现【货币单位换算】【2023Q1 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出3、思路分析4、输入5、输出6、思路分析 一、题目描述 记账本上记录了若干条多国货币金额&#xff0c;需要转换成人民币分 (fen)&#xff0c;汇总后输出每行记录一条金额&a…

红色通信史(三):在战火中成长

上一期我们说到&#xff0c;苏区红军因为第五次反围剿失败&#xff0c;被迫进行战略转移&#xff0c;开始了史无前例的长征。 ▉ 粉碎分裂阴谋&#xff0c;确保长征胜利 在长征的过程中&#xff0c;前有堵截&#xff0c;后有追兵&#xff0c;红军历经艰难险阻&#xff0c;不断与…

Qt Quick系列(7)—Model-View

&#x1f680;作者&#xff1a;CAccept &#x1f382;专栏&#xff1a;Qt Quick 文章目录 前言内置视图ViewRepeaterListViewGridView 代理delegate总结 前言 在QML中&#xff0c;model和view由delegate连接&#xff0c;他们的关系如下&#x1f447; 1、delegate 属性&#…

Vue3+Vite配置环境变量模式切换开发与生产环境的接口域名

.env.development # .env.production VITE_APP_TITLEhttp://172.16.1.115:8096 .env.production # .env.production VITE_APP_TITLEhttps://172.16.1.119:8097在接口文件中使用配置的地址 import Axios from axios const instanceAxios.create({baseURL:import.meta.env.VITE_A…

如何建立一个企业网站

建立一个企业网站的方法 1、好。如果你的网站将专注于你已经有了一个不错的主意&#xff0c;请跳过此步骤。如果不是&#xff0c;这里有一些事情来帮助你找出答案。首先&#xff0c;要明白&#xff0c;有几十亿人在互联网上&#xff0c;一个健康的比例有自己的网站。如果你限制…

实验八 文件系统-实验部分

目录 一、知识点 1. ucore文件系统设计目标--设计理念和含义 ​​​​1.1. 通用文件系统访问接口层&#xff1a; 1.2. 文件系统抽象层&#xff1a; 1.3. Simple FS 文件系统实现层&#xff1a; 1.4. 外设接口层&#xff1a; 2. ucore文件系统架构总体设计 2.1. ucore文件…

wifi 7主要性能提升

提升1&#xff1a;更快。接近4倍的速率提升&#xff0c;高达36Gbps 提升2&#xff1a;低延迟。单用户低延迟提升80%&#xff0c;多用户低延迟提升25%。 wifi7的主要改变&#xff1a; 改变1&#xff1a;6GHz 320MHz 改变2&#xff1a;4096 QAM 改变3&#xff1a;MLO & M…

有关STL关联/非关联容器/优先级队列的按序初始化

1.对于map/unorderedmap这种&#xff0c;比如想要按照second去排序&#xff0c;思路一&#xff0c;转换成vector这种线性容器&#xff0c;然后利用sort函数&#xff0c;自定义第三个参数去做想要的排序 总之就得转换成别的去做&#xff0c;不能在初始化的时候用自定义的函数或…

JLINK驱动、接线、接口模式、硬件都没问题,JLINK仍然读不到芯片的解决办法

今天遇到一个奇葩的问题&#xff0c;JINK驱动、接线、模式设置&#xff0c;硬件啥都没有问题&#xff0c;就是JINK连不到芯片&#xff0c;读不到芯片。自己平时都是用SWD模式&#xff0c;然后直接JLINK的GND 、SWDIO、SWCLK直接接上&#xff0c;一般我不会接VCC&#xff0c;应该…

Leetcode 75算法题( 下)(使用C++实现)

目录 回溯 17. 电话号码的字母组合 216. 组合总和 III 动态规划 - 一维 1137. 第 N 个泰波那契数 746. 使用最小花费爬楼梯 198. 打家劫舍 790. 多米诺和托米诺平铺 动态规划 - 多维 62. 不同路径 1143. 最长公共子序列 714. 买卖股票的最佳时机含手续费 72. 编辑距…

提升前端GIS开发技能:深入了解5个热门地图框架

前言 地理信息系统&#xff08;GIS&#xff09;已经成为现代应用开发中不可或缺的一部分&#xff0c;尤其在前端开发中。随着Web技术的快速发展&#xff0c;许多强大而灵活的GIS框架涌现出来&#xff0c;为开发人员提供了丰富的工具和功能&#xff0c;使他们能够创建交互式、高…

强大易用的开源建站工具Halo

最近无意间看到别人的博客外观非常美观&#xff0c;便萌生了偷师学艺的想法…所以就看到看了Halo这个开源的建站项目,其实使用起来非常简单&#xff0c;但是想要做一个类似的开源建站工具&#xff0c;谈何容易 访问官网 https://halo.run/ 使用docker部署 搜索镜像halo do…

OpenAI接口代理设置

国内使用OpenAI接口&#xff0c;需要设置代理&#xff0c;代理的设置有两种方法&#xff0c;局部的方法和全局的方法&#xff0c;推荐局部设置的方法&#xff0c;它不会影响你使用gradio/flask等框架&#xff0c;如果使用全局设置&#xff0c;会影响gradio/flask等的使用。 局部…

Tree树形控件做权限时,保持选项联动的同时,解决数据无法回显的问题

项目需求&#xff1a; 要求树形控件要有父子联动&#xff0c;也就是选择父级选项&#xff0c;子级也要选中&#xff0c;那么check-strictly属性就不能设置死,我的是 :check-strictlycheckStrictly,在data中赋值有变量。我之前设置check-strictly&#xff0c;就没了联动效果&…

HR必读的四本书籍推荐

作为一名人力资源管理者&#xff0c;除了在实际工作中积累经验&#xff0c;还需要不断地学习和进修&#xff0c;以应对日益变化的企业管理挑战。但是&#xff0c;在人力资源管理这个领域&#xff0c;有太多的书籍、课程和文章可供选择&#xff0c;这让人不免有些困惑。因此&…

《横向领导力》

在介绍《横向领导力》之前&#xff0c;有必要先推荐另一本同类书籍——《经理人参阅&#xff1a;领导力提升》。这本书来自经理人参阅ManagerReads&#xff0c;涵盖了领导力的许多概念和技能&#xff0c;对于想要全面提升领导力的人员来说是非常有价值的。不过&#xff0c;对于…

9.pixi.js编写的塔防游戏(类似保卫萝卜)-群炮弹发射逻辑

游戏说明 一个用pixi.js编写的h5塔防游戏&#xff0c;可以用electron打包为exe&#xff0c;支持移动端&#xff0c;也可以用webview控件打包为app在移动端使用 环境说明 cnpm6.2.0 npm6.14.13 node12.22.7 npminstall3.28.0 yarn1.22.10 npm config list electron_mirr…

MATLAB 投资问题

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

【子序列+状压DP】ABC308 E MEX

这应该算是很套路的题&#xff0c;照理说是要做出来的 E - MEX (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;三元组很容易让我们联想到枚举中间那个元素&#xff0c;但是在这道题中不是这么搞的 可以注意到&#xff0c;题目是要我们统计所有子序列&qu…