ABC339

D

在一个N*N的平面中有一些墙,还放置了两个棋子
每次操作只能将两个棋子同时上下左右移动,如果棋子被墙挡住就不能动
问最少需要几步能将两个棋子走到一起


bfs

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <unordered_map>
#include <algorithm>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;


int n;
char s[70][70];

struct Item {
    int r0, c0, r1, c1;
};
int f[61][61][61][61];

int dir[4][2] = {
    {0, 1}, {-1, 0}, {0, -1}, {1, 0}
};


int main(){
    //freopen("in.txt", "r", stdin);
    cin >> n;
    for (int i = 0; i < 70; ++i) {
        for (int j = 0; j < 70; ++j) {
            s[i][j] = '#';
        }
    }
    vector<pii> temp;
    for (int i = 1; i <= n; ++i) {
        string t;
        cin >> t;
        for (int j = 1; j <= n; ++j) {
            s[i][j] = t[j - 1];
            if (s[i][j] == 'P') {
                temp.push_back({ i, j });
            }
        }
    }
    memset(f, 0x3f, sizeof(f));
    queue<Item> qu;
    auto [r0, c0] = temp[0];
    auto [r1, c1] = temp[1];
    if (r0 > r1) {
        swap(r0, r1);
        swap(c0, c1);
    }
    qu.push(Item{ r0, c0, r1, c1 });
    f[r0][c0][r1][c1] = 0;
    int ans = -1;
    while (qu.size()) {
        auto [r0, c0, r1, c1] = qu.front();
        qu.pop();
        if (r0 == r1 && c0 == c1) {
            ans = f[r0][c0][r1][c1];
            break;
        }
        for (auto d : dir) {
            int nr0 = r0 + d[0], nc0 = c0 + d[1];
            int nr1 = r1 + d[0], nc1 = c1 + d[1];
            if (s[nr0][nc0] == '#') {
                nr0 = r0, nc0 = c0;
            }
            if (s[nr1][nc1] == '#') {
                nr1 = r1, nc1 = c1;
            }
            if (nr0 > nr1) {
                swap(nr0, nr1);
                swap(nc0, nc1);
            }
            int val = f[r0][c0][r1][c1] + 1;
            if (f[nr0][nc0][nr1][nc1] > val) {
                f[nr0][nc0][nr1][nc1] = val;
                qu.push(Item({ nr0, nc0, nr1, nc1 }));
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}

E

给定一个数列AAA
获取长度最长的子序列,其中相邻两项的差绝对值不得大于d


这个题有Ai<=500000A_i<=500000Ai<=500000的限制,所以好做一点,直接上线段树
对于每个AiA_iAi,求Ai−dA_i-dAidAi+dA_i+dAi+d范围内的最大答案再加1
如果没有数据限制,问题规模也不是特别大,把Ai,Ai−d,Ai+dA_i,A_i-d,A_i+dAi,Aid,Ai+d这些点离散化就可以了。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <unordered_map>
#include <algorithm>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

#define lu (u * 2)
#define ru (u * 2 + 1)
const int N = 500005;
int a[N];
int f[N];
int n, d;

struct SegTree {
    struct Node {
        int l, r, mx;
    } tr[N << 2];

    void up(int u) {
        tr[u].mx = max(tr[lu].mx, tr[ru].mx);
    }

public:
    void build(int l, int r, int u) {
        tr[u] = { l, r, 0 };
        if (l == r)
            return;
        int mi = (l + r) / 2;
        build(l, mi, lu);
        build(mi + 1, r, ru);
    }

    void update(int pos, int u, int val) {
        if (tr[u].l == tr[u].r) {
            tr[u].mx = val;
            return;
        }
        int mi = (tr[u].l + tr[u].r) / 2;
        if (pos <= mi)
            update(pos, lu, val);
        else
            update(pos, ru, val);
        up(u);
    }

    int query(int l, int r, int u) {
        if (l <= tr[u].l && tr[u].r <= r) {
            return tr[u].mx;
        }
        int mi = (tr[u].l + tr[u].r) / 2;
        int rt = 0;
        if (l <= mi) {
            rt = max(rt, query(l, r, lu));
        }
        if (r > mi) {
            rt = max(rt, query(l, r, ru));
        }
        return rt;
    }
} st;


int main(){
    //freopen("in.txt", "r", stdin);
    cin >> n >> d;
    st.build(1, 500000, 1);
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        int l = max(1, a[i] - d), r = min(500000, a[i] + d);
        f[i] = st.query(l, r, 1) + 1;
        st.update(a[i], 1, f[i]);
        ans = max(ans, f[i]);
    }
    printf("%d\n", ans);
    return 0;
}

F

N个超级大数Ai<101000A_i<10^{1000}Ai<101000
Ai∗Ak=AjA_i*A_k=A_jAiAk=Aj的tuple数


随机化题,思路是bloom filter的方法,知道这个方法就不难
如果两个大质数还是wa,那就再来一个filter

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <unordered_map>
#include <algorithm>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

int n;
ll a[1001], b[1001];
ll p0 = 10000019;
ll p1 = 99999989;
map<pll, int> h;


int main() {
    //freopen("in.txt", "r", stdin);
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        string s;
        cin >> s;
        int m = s.length();
        ll t = 0;
        for (int j = 0; j < m; ++j) {
            t = t * 10 + s[j] - '0';
            t %= p0;
        }
        a[i] = t;
        t = 0;
        for (int j = 0; j < m; ++j) {
            t = t * 10 + s[j] - '0';
            t %= p1;
        }
        b[i] = t;
        h[{a[i], b[i]}] ++;
    }
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            ll v0 = a[i] * a[j] % p0, v1 = b[i] * b[j] % p1;
            if (h.count({ v0, v1 })) {
                ans += h[{v0, v1}];
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}
wxh@wxh-dt:~/tplink/PLATFORM/sdk/qca$ git log commit 80982cf786635821dc72e76bec45156d652786a7 (HEAD -> SPF_11.3_CS-vine4_1204_wifi_stable) Author: ousuixin <ousuixin@tp-link.com.hk> Date: Tue Jan 14 22:10:51 2025 -0800 【问题】5.15 MDNS Responder 暂时回退到repeater模式提测,655-wall驱动提交(2/2) [参考提交]:http://gerrit.ep.tp-link.com/c/SMB/EAP/SMB_QCA_SDK/+/185505 【原因】 【解决】 (cherry picked from commit 4362609700cb3f5ea48eeedcd899d78387c17194) (cherry picked from commit c6499e1d9d3fcefcf9380fa2272bb47fb76b0458) Change-Id: I11a2e2b9e34c70e8bb58bbbafb47b0aa84413bde commit 4b1de879d43529591812178df90896c62154e7c4 Author: yeshenjie <yeshenjie@tp-link.com.hk> Date: Tue Apr 15 20:01:23 2025 -0700 [问题]: 1、修复firmware recovery的一处对空指针操作的问题 2、修改hostapd的编译方式,使其每次均会替换。 [参考提交]:http://gerrit.ep.tp-link.com/c/SMB/EAP/SMB_QCA_SDK/+/178676 [原因]: 固件签名校验完成之后,用于存放校验结果的指针实际为空指针 [解决]: 单独申请一块buffer用来存放校验结果 Change-Id: I9f92c9e93ed57fe7352d6e6afe48aaa02262fb4d commit 04b571f35753d2f2600441c387b24477e339a963 Author: yeshenjie <yeshenjie@tp-link.com.hk> Date: Mon Apr 7 02:41:38 2025 -0700 [问题]:补充uboot recovery mode新VI优化提交,解决编译问题。 [参考提交]:http://gerrit.ep.tp-link.com/c/SMB/EAP/SMB_QCA_SDK/+/176653 [原因]: [解决]: (cherry picked from commit 32caae9a113255213aa21fb7de7740a86562bccc) Change-Id: I02edea9b17f245c7fddd60888f6f37419252a249 commit 004d4dce3c7289592ab4b6830a1334a5abc61951 Author: tanlei <tanlei@tp-link.com.hk> Date: Fri Aug 15 17:20:26 2025 +0800 [问题]: 解决客户端使用公有psk接入后触发重连使用pmksa缓存接入,此时portal无法生效的问题 [参考提交]:http://gerrit.ep.tp-link.com/c/SMB/EAP/SMB_QCA_SDK/+/210807 [原因]: [解决]: 在pmksa中加入ppsk_need_portal的缓存,在客户端使用缓存接入后,重新将该值段赋值为sta info Change-Id: Ie138fe8cea95a9f83e198d5a1d9cdd6e05e8d4dc commit 1a2560d2d980cdb5cb70fc7de01cc342173408e7 Author: yeshenjie <yeshenjie@tp-link.com.hk> Date: Mon Jul 14 00:56:09 2025 -0700 [问题]:缓解Bug 1081367 - 【准出测试】【UX】两台655-wall在controller上mesh组网,mesh AP状态由adopting-provisioning-disconnected-adopting - provisioning - c onfiguring - connected变化才正常收养,整个收养过程约持续4分钟,对比EAP725-Wall则无该问题 [参考提交]:http://gerrit.ep.tp-link.com/c/SMB/EAP/SMB_QCA_SDK/+/201834 [原因]: 该改动由SPF11.3移植而来,在SPF11.4上并不适配。原代码在560行处已对ieee80211_ic_enh_ind_rpt_is_set做判断,此处无需多余判断。 我需要更改这个提交的文件然后保存到这个提交里,怎么改 commit 004d4dce3c7289592ab4b6830a1334a5abc61951 Author: tanlei <tanlei@tp-link.com.hk> Date: Fri Aug 15 17:20:26 2025 +0800 [问题]: 解决客户端使用公有psk接入后触发重连使用pmksa缓存接入,此时portal无法生效的问题 [参考提交]:http://gerrit.ep.tp-link.com/c/SMB/EAP/SMB_QCA_SDK/+/210807 [原因]: [解决]: 在pmksa中加入ppsk_need_portal的缓存,在客户端使用缓存接入后,重新将该值段赋值为sta info Change-Id: Ie138fe8cea95a9f83e198d5a1d9cdd6e05e8d4dc
12-06
<think>### 更改特定提交的方法 要修改提交 `004d4dce3c7289592ab4b6830a1334a5abc61951` 的文件内容,需使用交互式变基(interactive rebase)。以下是具体步骤: #### 步骤 1:启动交互式变基 ```bash # 确认目标提交的上一个提交的哈希(此处以示例中前一个提交 04b571f 为例) git rebase -i 04b571f35753d2f2600441c387b24477e339a963 ``` 或直接指定提交前的哈希: ```bash git rebase -i 004d4dce3c7289592ab4b6830a1334a5abc61951^ ``` #### 步骤 2:在编辑器中修改命令 在打开的变基列表中: 1. 找到目标提交行(如 `pick 004d4dce [问题]: 解决...`) 2. 将行首的 `pick` 改为 `edit` 3. 保存并退出编辑器 #### 步骤 3:修改文件 变基停在目标提交时: ```bash # 编辑需要修改的文件(例如:修改 portal_handler.c) vim path/to/file.c ``` #### 步骤 4:暂存更改并修改提交 ```bash # 添加修改后的文件 git add path/to/file.c # 修改提交(保留原提交信息) git commit --amend # 在编辑器中确认或修改提交信息(如需要) # 保存退出后继续变基 ``` #### 步骤 5:完成变基 ```bash git rebase --continue ``` #### 注意事项 - **强制推送**:如果提交已推送到远程分支,需强制推送(**谨慎操作**): ```bash git push --force origin SPF_11.3_CS-vine4_1204_wifi_stable ``` - **冲突处理**:若后续提交有依赖,变基时可能需解决冲突。 §§相关问题§§ 1. 交互式变基中如何修改多个历史提交的文件内容? 2. `git commit --amend` 和 `git rebase -i` 修改提交的区别是什么? 3. 强制推送(git push --force)可能造成什么风险?如何安全覆盖远程分支? 4. 如何在不改变提交时间的情况下修改历史提交的 Change-Id? 5. 若修改的提交已被其他分支合并,如何避免代码冲突? </think> ### 修改特定提交的方法 要修改提交 `004d4dce3c7289592ab4b6830a1334a5abc61951` 的文件内容,需要使用 **交互式 rebase** 操作。以下是具体步骤: #### 操作步骤: 1. **启动交互式 rebase**(定位到目标提交的前一个提交): ```bash git rebase -i 04b571f35753d2f2600441c387b24477e339a963 ``` 或使用提交哈希缩写: ```bash git rebase -i 04b571f ``` 2. **在编辑器中修改命令**: - 找到目标提交行:`pick 004d4dce [问题]: 解决客户端...` - 将行首的 `pick` 改为 `edit`(或 `e`) - 保存并关闭编辑器 3. **修改文件内容**: ```bash # 此时 Git 会停在目标提交 # 编辑需要修改的文件(使用任意编辑器) vim 文件路径/文件名 ``` 4. **暂存更改并更新提交**: ```bash git add 修改的文件 git commit --amend # 更新当前提交 ``` 5. **完成 rebase**: ```bash git rebase --continue ``` #### 注意事项: - **强制推送**:修改历史提交后需强制推送到远程分支: ```bash git push --force origin SPF_11.3_CS-vine4_1204_wifi_stable ``` - **Change-Id 处理**: - 如果使用 Gerrit,`Change-Id` 必须保持不变 - 在 `git commit --amend` 时**不要修改**提交信息中的 `Change-Id` 行 - **风险提示**:修改公共历史可能影响其他协作者,确保分支未与他人共享 #### 替代方案(仅修改文件不改变提交信息): ```bash # 1. 创建新提交修复文件 git checkout 004d4dce -- 文件路径 # 提取原文件 vim 文件路径 # 修改文件 git commit -m "修复: 补充004d4dce提交的修改" # 2. 使用 git replace(临时修改) git replace 004d4dce 新提交哈希 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值