ACM
清汤芥末面
这个作者很懒,什么都没留下…
展开
-
122. 买卖股票的时机 II
给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。返回 你能获得的 最大 利润 。链接第一个独立做出来的中等难度题,题目想清楚很简单,只要递增就买进卖出,将所有差加起来。刚开始的时候还想子序列问题,但发现每次看邻居就可以。分为两种情况,递增情况每次看邻居满足条件,非递增情况也是。class Solution {public: int原创 2022-02-13 16:43:57 · 65 阅读 · 0 评论 -
P1119 灾后重建
添加链接描述floyd求最短路。#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn=203,INF=0x3f3f3f3f3f3f3f3f;int a[maxn][maxn],t[maxn],n,m;void flo(int cnt){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) a[i]原创 2020-11-21 21:30:45 · 69 阅读 · 0 评论 -
p2384 最短路
添加链接描述乘法最短路#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;const int maxn=1e6+2,INF=0x7f7f7f7f,mod=9987;struct edge{ int to,w; edge(int a,int b) {原创 2020-11-21 20:30:53 · 106 阅读 · 0 评论 -
P1462 通往奥格瑞玛的道路
添加链接描述求最大值的最小值,输出x,每个边不超过x,求x的最小值。对金钱进行二分答案,然后跑一遍最短路,看看是否符合条件。#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn=1e4+5,INF=0x3f3f3f3f3f3f3f3f,mod=1000007;int f[maxn],k[maxn],d[maxn],vis[maxn],n,m,b;struct node{原创 2020-11-13 16:06:19 · 116 阅读 · 0 评论 -
P1144 最短路计数
添加链接描述对于每个点,最短路是固定的,如果是上一个转移过来的+1小于现在的,那么现在的最短路的条数等于上一个点的最短路个数。如果上一个转移过来的+1等于现在的,那么现在最短路+上一个点的最短路,这个题是无向无权的,也可以用bfs,对于已经遍历的点判断给贡献带来了什么。#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn=1e6+3,INF=0x3f3f3f3f3f3f3f3f,mod原创 2020-11-13 14:57:48 · 71 阅读 · 0 评论 -
UVA1395 苗条的生成树 Slim Span
https://www.luogu.com.cn/problem/UVA1395最小生成树,枚举每条边,从这个边开始变量能够生成的最小生成树,统计答案。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;const int maxn=1e3+5,INF=0x3f3f3f3f;int原创 2020-11-06 12:35:33 · 116 阅读 · 0 评论 -
P2619 [国家集训队2]Tree I
添加链接描述二分题,考虑kruskal的过程,让白边变成need条,权值定了的时候,最小生成树是定的,如果现在白边的数量大于need条,那么我们需要整体增加白边的权值,相当于让白边减少,如果多的话相反。至于增加多少,需要二分去判定。这道题细节挺多的,比如可能有权值+mid会导致白边多了,权值+mid+1的时候,白边少了,而题目中说了,保证有解,说明此时有白边的权值等于黑边权值的时候,而且可以相互替代构造最小生成树。这时候处理呢,只要排序的时候将白边放在前面,然后二分的时候统计边数大于need的情况更新答案原创 2020-11-05 19:31:34 · 73 阅读 · 0 评论 -
P1494 [国家集训队]小Z的袜子
添加链接描述区间查询,不涉及到修改,考虑莫队。这个题要注意的一点l==r的时候,这时候gcd会返回0(即a=0,b=0),除数为0造成re。c++有自带的__gcd.#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;const int maxn=5e5+5;struct Q{原创 2020-11-04 09:13:20 · 58 阅读 · 0 评论 -
CF86D Powerful array
添加链接描述就是一个很经典的莫队,但是re了一发,网上看的分块优化可能有为零的情况。int siz=n/sqrt(m*2/3);所以用int siz=sqrt(n);比较保险。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;const int maxn=1e6+5;s原创 2020-11-02 20:40:24 · 73 阅读 · 0 评论 -
P1972 [SDOI2009]HH的项链
添加链接描述刚开始用莫队做的,1e5可以跑,但是加强数据后只能拿44分,代码如下:#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;const int maxn=1e6+5;map<int,int>v;int a[maxn],n,m,pos[maxn];ll re原创 2020-10-31 11:16:34 · 83 阅读 · 0 评论 -
B. Arrays Sum
http://codeforces.com/contest/1408/problem/B题意:要你构造m个b数组,使得每个b数组长度为n,且不同的数字最多为k。解法:第一个b数组可以消去k个不同的数,后面的b数组可以消去(k-1)个数。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std原创 2020-10-17 09:28:28 · 403 阅读 · 0 评论 -
P1908 逆序对
https://www.luogu.com.cn/problem/P1908树状数组。把树状数组看成可以可以修改的前缀和就行,a数组先离散化,因为a是1e9的,a[i]作为树状数组的下标,对于每一个a[i],判断从c[0]到c[a[i]]的和,也就是求和操作。是一个很好的树状数组的题目。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.t原创 2020-10-16 22:01:50 · 84 阅读 · 0 评论 -
D. String Deletion
http://codeforces.com/contest/1430/problem/D题意:给一个1、0组成的字符串,一次操作是随机删除一个数,然后去掉前缀相同的数。题解:可以按照连通块的思路去做,把连续相同的数看做一个连通块,如果开头连通块里的个数为1,那么去掉后面不为1的个数的连通块,如果后面连通块个数全为1,则数量/2,如果开头连通块里个数大于1,那么对答案的贡献为1.之前也是这么想的,但是我去存了坐标,最后搞晕了。#include<bits/stdc++.h>#define l原创 2020-10-16 10:54:43 · 212 阅读 · 0 评论 -
A. Number of Apartments
添加链接描述1.dp来做,存在性问题,判断从1到n可否能由3,5,7组成,存在状态转移。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;const int maxn=1e3+5,INF=0x3f3f3f3f;int dp[maxn],a[maxn],b[maxn],c[maxn]原创 2020-10-14 21:45:33 · 180 阅读 · 0 评论 -
E1. Weights Division (easy version)
http://codeforces.com/contest/1399/problem/E1这个题主要学会如果求每个边走过的次数,和求子树个数非常像,把每个边进行编号,但是也有不同,然后再跑一遍把价值累计起来就行了#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;const int m原创 2020-10-14 15:48:05 · 206 阅读 · 0 评论 -
D. Decrease the Sum of Digits
https://codeforces.com/contest/1409/problem/D贪心,从高位往地位看,越高位的改变需要的代价就越大,前缀和,如果前缀和>=s,停止,从这个地方开始后面所有的数全部变零,得到答案。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;cons原创 2020-10-06 19:30:19 · 127 阅读 · 0 评论 -
C. Bargain
写的很好抽空来看看原创 2020-10-06 08:58:20 · 153 阅读 · 0 评论 -
B. Dubious Cyrpto
https://codeforces.com/contest/1379/problem/B如果m>i,则有两种情况,m%i在范围内或者i-m%i在范围内,m<i,只有i-m%i的情况。 #include<iostream> using namespace std; int main() { int t; cin>>t; while(t--) { int l,r; long l原创 2020-10-05 18:54:35 · 148 阅读 · 0 评论 -
A. Acacius and String
https://codeforces.com/contest/1379/problem/A直接暴力就行,abacaba只能出现一次,然后枚举每个位置,从位置数七个,如果这七个位置有?就放上,其他的?全部放z,遍历一遍判断。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace std;const原创 2020-10-05 13:18:55 · 109 阅读 · 0 评论 -
C. Chocolate Bunny
https://codeforces.com/contest/1407/problem/C交互题对于i,j,如果ai%aj<aj%ai,则aj<ai。每次登都进行两个数的前后的相互询问,都能找出最小值放到该放的地方,这样一共2*n次。剩下最大的就为最大值。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);usi原创 2020-10-04 15:09:35 · 188 阅读 · 1 评论 -
B. Big Vova
添加链接描述思路:暴力,先拿出最大的,然后遍历一遍,再剩下的当中找到和当前值的最大公约数,在循环中更新当前值。#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn=1e3+6;int a[maxn],b[maxn],vis[maxn];int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(){ in原创 2020-10-04 14:21:01 · 35 阅读 · 0 评论 -
C. k-Amazing Numbers
好题一道题意:所有的k长度的字段的公共最小值,没有最小值输出-1,k从1到n。解法:最朴素的做法是n^2,换一种思路,两个相同数之间的距离的最大值不就是我们要找的k吗,不要忘记第一个数和最后一个数是找和最前面和最后面的距离。用这种方法直接找k。#include<bits/stdc++.h>#define ll long long#define ios ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);using namespace原创 2020-10-04 10:43:44 · 213 阅读 · 0 评论