摘要:
##因为只有选择而且问的是先手 先手只有两个情况:赢1或者平局0 当长度为2时候 字符串相等的时候就平局 不然就先手肯定选到赢的情况 如果先手选择i 而且当(i+1,j-1)是赢的情况的时候就肯定赢 而且当(i+2,j)是赢的情况的时候就肯定赢 要么当(i+1,j-1)是平的情况的时候后手选择j 而 阅读全文
摘要:
两个数组 需要让元素相等 每次操作让a变成她的数位 如1000->4 因为两次操作可以变成1 首先让一个数组变成2然后再是其他的 首先踢出相同元素 然后看着差不多就变成len扔进去 注意multiset排序 可以查不同元素 erase() 传入一个下标 find() 找到这个值出现的第一个位置 #i 阅读全文
摘要:
void gauss() { // 转化成上三角矩阵 for (int r = 1, c = 1; c <= n; c ++, r ++ )//枚举行 { // 找主元 一列里面找绝对值最大 int t = r; for (int i = r + 1; i <= n; i ++ ) if (fabs 阅读全文
摘要:
给出一个数组 每个数组的值代表一个集合 相邻的两个集合不能重合 问集合中的最大数是多少 线段树维护这个区间的相邻数的最大值 因为相邻的条件所以边界需要特判 #include<bits/stdc++.h> using namespace std; #define int long long #defi 阅读全文
摘要:
给一棵树 看能不能往上跳k步 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <queue> #include <map> #include <vector> #includ 阅读全文
摘要:
##给定一张n个点 m条边的无向图,点有点权。需要进行n次操作,每次操作,选择一个点a,并移除该点以及与该点相连的所有边,其代价是与点a直接相连的所有点权和。问所有操作的代价的最大值的最小值是多少。 暴力 + 根堆 #include <bits/stdc++.h> using namespace s 阅读全文
摘要:
##连续的子序列的m个数 使得第i个数*a[i] 最终得到的值最大 https://atcoder.jp/contests/abc267/tasks/abc267_c 前缀和 + 滑动窗口 转移之间相差一个前缀和 和 a[m]*m vector<LL> a(n + 1, 0); LL ans = - 阅读全文
摘要:
开放寻址法 int find(int x){ int t =(x % N + N) % N;/正数负数都存到里面 找个位置给他 while(h[t] != null && h[t] != x){//如果这个位置有值 但是不是那个位置 就找下个位置 t++; if(t==N) t=0;//到了尽头回去 阅读全文
摘要:
##https://www.acwing.com/problem/content/4613/ 可以进行操作 选择一行中的两个整数并交换它们。此操作,每行最多只能执行一次。 选择列表中的两列并交换它们。此操作,最多只能执行一次。 能否使得最终列表中每一行的 m 个整数都能按照 1,2,…,m 的顺序排 阅读全文
摘要:
#include<queue> #include<cstdio> #include<cstring> #define N 500005 using namespace std; struct edge{ int to,val,next; } e[N]; int m,n,p,s,cnt,g[N],u[ 阅读全文
