05 2021 档案
摘要:水题。 struct Fraction { int up,down; bool operator<(const Fraction &W) const { return up * W.down < W.up * down; } }; vector<Fraction> res; int n; int m
阅读全文
摘要:贪心。 对于第个数字,若其不在应在位置,则在中寻找恰好存在与第个数错位的数,交换两个位置上的数;若不存在恰好错位的数,则选择与第个数相等且不在应在位置的数交换。 const int N=1010; int a[N],b[N]; int cnt[4]; i
阅读全文
摘要:暴搜水题~ 。 const int N=30; int need[N]; int feed[20][N]; int res[N]; vector<int> path,ans; int n,m; bool check() { for(int i=1;i<=n;i++) if(res[i] < need
阅读全文
摘要:3577. 选择数字 签到。 int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i],vis[a[i]]=true; cin>>m; for(int i=0;i<m;i++) cin>>b[i],vis[b[i]]=true; for(int i=0;
阅读全文
摘要:数字本身为质数,且其所有前缀数字均为质数。 思路 枚举每一位 首位只能从选取 其余位只能从中选取 int n; bool isprime(int x) { if(x < 2) return false; for(int i=2;i*i<=x;i++) if
阅读全文
摘要:思路一 筛出以内素数 判断素数表中的数是否为回文数 注意点 如果一个回文数的位数是偶数,则它的奇数位上的数字和与偶数位上的数字和必然相等,这样的数能被11整除,不可能是素数(11自己除外)。 由上条性质,素数表只要筛到即可。 USACO上提交居然MLE?遂放弃记录素数表,直接
阅读全文
摘要:思路 将位二进制数转换为十进制数,用long long存储和的结果(不超过位),再将结果转成二进制即可。 void solve(LL n) { for(int i=32;i>=0;i--) { int t=n>>i & 1; if(i == 32 && !t) c
阅读全文
摘要:经典问题,直接暴搜出所有方案即可。 const int N=25; bool vis[N][N][N]; int a,b,c; vector<int> ans; void dfs(int x,int y,int z) { if(vis[x][y][z]) return; vis[x][y][z]=t
阅读全文
摘要:预处理出双平方数集合 枚举双平方数中的一对数作为等差数列的首项和第二项 剪枝: 计算出当前等差数列的末项,last=x+(n-1)*d比双平方数集合中最大的数还要大,则无需判断其是否能构成长度为的等差数列。 如果当前公差比双平方数集合中最大的数还要大,那么比当前公差还要大的公差显然也没有枚举的
阅读全文
摘要:将放置在的棋盘当中,要求当前格子中的数字与其四连通的格子中的数字不相邻。 考虑将当前格子染成黑色,与其四连通的格子染成白色,即下标的格子,当为偶数时染成黑色,为奇数时染成白色,则颜色不同的格子中的数字不能相邻。 按从左至
阅读全文
摘要:统计满足并且的数对的数量。 变形,。 开哈希表,对原数组扫描一遍即可。 const int N=2e5+10; int a[N]; int n; int main() { int T; cin>>T; while(T--) { cin
阅读全文
摘要:货仓选址变形题。 将所有星号聚拢到中间的星号上,总花费最小。 移动每个星号的花费是其与中间星号间的距离并减去二者之间的星号数量。 const int N = 1e6+10; char s[N]; int a[N]; int n; int main() { int T; cin >> T; while
阅读全文
摘要:模拟。 string s,t; int m; int main() { cin>>s>>m; while(m--) { string op; cin>>op; if(op == "COPY") { int l,r; cin>>l>>r; t=s.substr(l,r-l+1); } else if(
阅读全文
摘要:找出所有约数,约数所在的第行存在一个需满足条件: 不超过 不超过。 int n, m; int main() { int T; cin >> T; while(T--) { cin >> n >> m; vector<int> divisor; for(
阅读全文
摘要:零比特填充法。 int main() { int T; cin >> T; while(T--) { string s; cin >> s; int cnt = 0; // 记录连续的1的个数 for(int i = 0; i < s.size(); i++) { if(cnt == 5) { cn
阅读全文
摘要:状态表示: :到达第个格子,所用卡片数量为张,卡片数量为张,卡片数量为张,卡片数量为张时能够获得的分数最大值。 状态转移: \[ f(i,a,b,c,d)=\max \begin{cases} f(i-1,a-1,
阅读全文
摘要:先考虑没有娇姐发功怎么做。 考虑每只糖糖最后能不能存活:第只糖糖能存活的条件是他后面没有比他大的另外一组的糖糖,所以我们只需要从后往前扫描维护当前位置往后每一组糖糖的最大值是多少然后和当前糖糖的能力值比较就行。 现在再来考虑娇姐发功的问题。 娇姐会在第秒使得前个人的能力值+
阅读全文
摘要:思路 通过对样例的模拟,发现答案为相邻两个蓝色石子中间最多的红色石子的数量。 双指针做法: const int N=1e5+10; int a[N],b[N]; int n,m; int main() { int T; cin>>T; while(T--) { cin>>n>>m; for(int
阅读全文
摘要:首先将所有点按纵坐标从小到大排序,纵坐标相同的按横坐标从小到大排序,这样一来,每个点+x方向上最近的点(若存在)在排序后的数组宏一定相邻。 DFS搜索与当前点匹配的点,若当前点已经配对,则搜下一个点;若没有配对,则寻找还没有配对的点与当前点配对。 之后分别以每个点为起点进行DFS判环(每次判环前需要
阅读全文
摘要:贪心。 经典问题。 注意点 不要忘记最后一个区间对最长连续挤奶时间区间的更新。 const int N=5010; PII a[N]; int n; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i].fi>>a[i].se; sort(a,a+n
阅读全文
摘要:按天数模拟。 const int N=110; int month[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31} }; int cnt[7]; int n; bool
阅读全文
摘要:首先破环成链。 之后枚举处断裂的位置,对于每次断裂形成的一串项链,采用双指针分别统计左边颜色连续的珍珠串长度和右边颜色连续的珍珠串长度。 const int N=355; char s[N<<1]; int n; int main() { cin>>n; scanf("%s",s); for(
阅读全文
摘要:设为座山峰高度的最小值,为座山峰高度的最大值。 枚举最终调整后的最低峰的高度为,则最高峰的高度为,对于低于最终最低峰高度的山峰或高于最终最高峰高度的山峰,对他们进行调整。 const int N=1010; int h[N]; int n; in
阅读全文
摘要:最裸的暴力,时间复杂度:。 const int N=110; int a[3],b[3]; int n; bool check(int c[],int a[]) { for(int i=0;i<3;i++) if(abs(a[i]-c[i]) > 2 && abs(a[i]-c[
阅读全文