首页 > 其他分享 >20241031总结

20241031总结

时间:2024-11-01 21:45:48浏览次数:1  
标签:总结 read register int while && 20241031 getchar

dream

首先朴素的 \(dp\) 很好想,前缀和优化也很简单,接下来考虑如何继续优化。

我们发现反转操作相当于把一个序列变成环反转后再移动几格,于是我们只需要知道 \(1\) 位置的变换就能知道其它位置数的变换。

#include<iostream>
#define int long long

using namespace std;

inline int read(){register int x = 0, f = 1;register char c = getchar();while (c < '0' || c > '9'){if (c == '-') f = -1;c = getchar();}while (c >= '0' && c <= '9'){x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return x * f;}

const int N = 5e3 + 10, mod = 1e9 + 7;
int c, n, m, q;
int a[N], pos[N], l[N], r[N], dp[N][N];
int t[N];
void solve(){
    dp[0][1] = 1;
    for (int i = 1; i <= m; i++){
        for (int j = 1; j <= n; j++) t[j] = (t[j - 1] + dp[i - 1][j]) % mod;
        for (int j = 1; j <= n; j++){
            if (j <= r[i]) dp[i][j] = (dp[i][j] + (t[r[i] - j + 1] - t[max(l[i] - j + 1, 1ll) - 1] + mod) % mod) % mod;
            if (j >= l[i] + 1) dp[i][j] = (dp[i][j] + (t[n - j + min(r[i], j - 1) + 1] - t[n - j + l[i]] + mod) % mod) % mod;
        }
    }
}

signed main(){
    freopen("dream.in", "r", stdin);
    freopen("dream.out", "w", stdout);
    c = read(), n = read(), m = read(), q = read();
    for (int i = 1; i <= n; i++) a[i] = read(), pos[a[i]] = i;
    for (int i = 1; i <= m; i++) l[i] = read(), r[i] = read();
    solve();
    while (q--){
        int p = read(), v = pos[read()];
        if (m & 1){
            cout << dp[m][((p + v - 2) % n + n) % n + 1] << '\n';
        }else{
            cout << dp[m][((p - v) % n + n) % n + 1] << '\n';
        }
    }
    return 0;
}

puppet

不会。

wind

不会。

firefly

线段树暴力 \(35pts\)。

#include<iostream>

using namespace std;

inline int read(){register int x = 0, f = 1;register char c = getchar();while (c < '0' || c > '9'){if (c == '-') f = -1;c = getchar();}while (c >= '0' && c <= '9'){x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return x * f;}

const int N = 1e6 + 10;
int c, n, m, q;
struct node{
    int l, r;
}p[N];
struct tree{
    int sum, tag;
}t[N << 2];
void pushup(int now){
    t[now].sum = t[now << 1].sum + t[now << 1 | 1].sum;
}
void pushdown(int now, int l, int r){
    int mid = (l + r) >> 1;
    if (t[now].tag)
        t[now << 1].sum = (mid - l + 1), t[now << 1 | 1].sum = (r - mid), t[now << 1].tag = t[now].tag, t[now << 1 | 1].tag = t[now].tag;
}
void modify(int now, int l, int r, int x, int y, int k){
    if (x <= l && r <= y){
        t[now].sum = k * (r - l + 1);
        t[now].tag = k;
        return;
    }
    pushdown(now, l, r);
    int mid = (l + r) >> 1;
    if (x <= mid && t[now << 1].sum < (mid - l + 1)) modify(now << 1, l, mid, x, y, k);
    if (mid + 1 <= y && t[now << 1 | 1].sum < (r - mid)) modify(now << 1 | 1, mid + 1, r, x, y, k);
    pushup(now);
}
void solve(){
    int L = read(), R = read();
    for (int i = 1; i <= m; i++)
        if (p[i].l >= L && p[i].r <= R)
            modify(1, 1, n, p[i].l, p[i].r, 1);
    cout << t[1].sum << '\n';
    for (int i = 1; i <= (n << 2); i++) t[i].sum = t[i].tag = 0;
}

int main(){
    freopen("firefly.in", "r", stdin);
    freopen("firefly.out", "w", stdout);
    c = read(), n = read(), m = read(), q = read();
    for (int i = 1; i <= m; i++) p[i].l = read(), p[i].r = read();
    while (q--) solve();
    return 0;
}

标签:总结,read,register,int,while,&&,20241031,getchar
From: https://www.cnblogs.com/bryceyyds/p/18521313

相关文章

  • 2024-2025-1 20241310 《计算机基础与程序设计》第6周学习总结
    2024-2025-120241310《计算机基础与程序设计》第6周学习总结作业信息这个作业属于哪个课程[2024-2025-1-计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)这个作业要求在哪里2024-2025-1计算机基础与程序设计第一周作业这个作业的......
  • String学习总结
    定义与初始化字面量定义:可以直接使用双引号来定义一个字符串,例如Stringstr="Hello";。这种方式创建的字符串对象存储在字符串常量池中。如果多个字符串字面量相同,它们会指向字符串常量池中的同一个对象,以节省内存。使用new关键字定义:也可以通过new关键字来创建字符串对象,如......
  • CSP-S2024赛后总结
    $\color{#f39c11}A.决斗$赛时:题目要求游戏结束后剩余怪兽尽可能少,所以我们要将每个怪兽的价值充分发挥。很容易想到一种贪心:用第二小的数先打第一小的,再用第三小的打第二小,……以此类推。这样就能保证能被打掉的都消灭了。双指针维护即可。最后把每一种怪兽剩余的数量......
  • 2024.11.1总结
    本文于github博客同步更新。OI相关:A:分为两种情况处理:\(u\)到\(lca\)和\(lca\)到\(v\)。我的做法是先树剖,将每条链单独拿出来拉出来,根据\(a_i\)和\(b_i\)连边,正反各建一棵树,维护一下\(k\)级祖先。然后从\(u\)到\(v\)的时候每次根据从dfs序由小到大还是由......
  • 2024-11-1校内模拟赛总结
    前言:从下了早读一直打到吃午饭,\(4h\)左右的时间,\(IOI\)赛制,\(6\)道\(ABC203\)、\(204\)的\(CDE\)题,\(318\)分。赛时:T1:水,直接模拟即可。\(100\)分。T2:中位数二分答案,有点难,但之前写过,也是直接拿下了啊。100分。T3:也是模拟,但是我开\(map\)存的是\(pair<int,int>......
  • MyBatis与Mybatis-plus的学习总结 及 两者的区别 我的学习笔记
    MyBatis与Mybatis-plus的学习总结及两者的区别超详细样例很多我的学习笔记一、MyBatis1.MyBatis简介2.MybatisX插件3.Mapper代理开发4.配置文件完成CRUD5.注解完成CRUD6.动态SQL二、MyBatis-plus1.MyBatis-plus快速入门2.条件构造器WrapperAbstractWrapperQueryWra......
  • 代码源10.31 总结
    T1想写个\(n^2\)dp,\(dp_{i,j}\)表示Alice有\(i\)个数,Bob有\(j\)个数,想了快一个小时,还是不会,然后推样例,把情况全部列出来,发现样例有前3个是3个连续的0,所以<=6的数不会出现在第4位及以后,然后就发现每一段连续的1或0都可以单独考虑,想,发现从小到大给两人分数的话,要想某一段......
  • dp专题总结 - AtCoder DP Contest
    dp专题总结题单:this w......
  • AMF学习总结(一)--开篇
    1前言从业10年,写的文章很少,惭愧,现在想把自己所学所思总结一下,碎片的知识要整理成体系才有价值2基础定义2.1AS3ActionScript通常简称为AS,它是Flash平台的语言。AS编写的程序,最终可以编译成SWF、SWC。SWF就是我们常说的Flash动画。但是现在SWF已经不仅仅是动画,而是R......
  • Java-SE-泛型编程-总结/java
    泛型一、泛型的定义和使用类定义:在定义一个泛型类时,需要在类名后加上<T>,以指示这是一个泛型类。例如:publicclassPair<T>{...}方法定义:在定义泛型方法时,需要在返回类型前加上<T>,这样编译器才会知道这是一个泛型方法。例如:public<T>Tadd(Pair<T>p){...}......