- 博客(14)
- 收藏
- 关注
原创 裴蜀定理题解
思路:本题可以使用裴蜀定理,对任意x、y,A*x+b*y等于x、y的最小公倍数的倍数。与定理不同的是,本题需要的不是两组数,而是n组。所以我们可以求出全部数的最小公倍数,便可知道S的最小值。代码:#include<bits/stdc++.h>using namespace std;long long gcd(long long a,long long b){return b?gcd(b,a%b):a;}//辗转相除求最小公倍数int main(){int an
2022-05-24 21:12:09 162
原创 裴蜀定理题解
思路:本题可以使用裴蜀定理,对任意x、y,A*x+b*y等于x、y的最小公倍数的倍数。与定理不同的是,本题需要的不是两组数,而是n组。所以我们可以求出全部数的最小公倍数,便可知道S的最小值。代码:#include<bits/stdc++.h>using namespace std;long long gcd(long long a,long long b){return b?gcd(b,a%b):a;}//辗转相除求最小公倍数int main(){int an
2022-05-24 21:06:10 276
原创 裴蜀定理题解
思路:本题可以使用裴蜀定理,对任意x、y,A*x+b*y等于x、y的最小公倍数的倍数。与定理不同的是,本题需要的不是两组数,而是n组。所以我们可以求出全部数的最小公倍数,便可知道S的最小值。代码:#include<bits/stdc++.h>using namespace std;long long gcd(long long a,long long b){return b?gcd(b,a%b):a;}//辗转相除求最小公倍数int main(){int an
2022-05-24 21:01:56 155
原创 忠诚的题解
思路:这是一道求区间最值的题。可以用ST表求解。ST表是数组st[i][j]代表从i开始,2 的j次方个数里的最小值,这样我们就可以得到状态转移方程为st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);代码:#include<bits/stdc++.h>using namespace std;const int N=1e5+5;int n,m;int a[N];int st[N][20];int Lo...
2022-05-22 11:34:02 143
原创 互换奇偶位题解
思路:交换奇偶位,需要先求出奇偶位上的数。接着进行交换并合并。因为计算机是用2进制存储的,所以2进制时间更快。分离时比较简单所以可以用位运算来做。合并:偶数位右移,奇数位左移,进行或运算。代码:#include<iostream>using namespace std;int main(){int n;cin>>n;int m1=n&0xaaaaaaaa;//16进制的101010……偶数位int m2=n&0x555555..
2022-04-23 20:45:28 1086
原创 《彩色弹珠》题解
思路:本题要选择一个区间并要判断弹珠的数量是否符合要求(颜色1的弹珠有k1个,颜色2的弹珠有k2个,...,颜色m的弹珠有km个)。因此要用尺取法来做。先移动右指针,直到满足条件停止,这时移动左指针。找到最小区间长度的值。代码:#include<bits/stdc++.h>using namespace std;const int N=2e5+5;int a[N],k[N],cnt[N],sum=0;bool flag[N];int main(){..
2022-04-17 13:58:26 125
原创 《彩色弹珠》题解
思路:本题要选择一个区间并要判断弹珠的数量是否符合要求(颜色1的弹珠有k1个,颜色2的弹珠有k2个,...,颜色m的弹珠有km个)。因此要用尺取法来做。先移动右指针,直到满足条件停止,这时移动左指针。找到最小区间长度的值。代码:#include<bits/stdc++.h>using namespace std;const int N=2e5+5;int a[N],k[N],cnt[N],sum=0;bool flag[N];int main(){in
2022-04-17 13:57:01 1170
原创 逛画展的题解
思路:因为画家只有2000个,所以可以用哈希来做,记录区域内每个画家有几幅画。先定义l,r代表a,b,不断向右移动,并通过统计新画家的画,减去左边画家的画来计算是否看到了所有画家的画。记录(l-r+1)最少值。输出。代码:#include<bits/stdc++.h>using namespace std;const int N=1e6+5;int n,m;int a[N];int num[2005],cnt;//cnt:统计画家数量int main(){
2022-04-05 19:53:50 1251
原创 地毯的题解
地毯题解思路:设置B,SUM两个二维数组。然后边输入毯子位置一边用函数处理(函数见代码注解)。接下来用二维数组来计算前缀和,并输出。代码:#include <bits/stdc++.h>using namespace std;const int N=1e3+5;int b[N][N],s[N][N];int n,m;void add(int xa,int ya,int xb,int yb){b[xa][ya]+=1;//地毯左上角加一b[xa][yb+
2022-04-03 15:22:48 1064
原创 Karen and coffee
思路:先记录温度前缀和:如果是开头温度,b【l】+1,如果是结尾,b【r】+1。然后用a数组统计前缀和。接着用sum数组记录温度对应的咖啡数量前缀和。最后不断输出要求范围内的咖啡数量。代码:#include<iostream>using namespace std;int sum[200005];Int a[200005],b[200005];int l,r,n,k,q;int main(){cin>>n>>k>>q;f
2022-03-26 19:10:09 396
原创 买T恤题解
思路:先输入T恤正反两面的颜色,因为只有3种颜色,所以可以用哈希来做。在颜色的优先队列中存放价格,便宜的在前面。然后边输入客人需要的颜色,边处理。找到这种颜色对应的队列,如果有一个T恤对应的价格,输出价格,并弹出价格。如果没有输出-1。代码:#include<iostream>#include<queue>using namespace std;struct node{int id,p,a,b;friend bool operator<(no
2022-03-19 19:11:15 99
原创 买T恤题解
思路:先输入T恤正反两面的颜色,因为只有3种颜色,所以可以用哈希来做。在颜色的优先队列中存放价格,便宜的在前面。然后边输入客人需要的颜色,边处理。找到这种颜色对应的队列,如果有一个T恤对应的价格,输出价格,并弹出价格。如果没有输出-1。代码:#include<iostream>#include<queue>using namespace std;struct node{int id,p,a,b;friend bool operator<(no
2022-03-19 19:07:01 983
原创 Consecutive Subsequence
边循环边输入,用map记录,当前长度等于上一个的长度加一。记录最后一个和最大长度。先输出长度,在输出连续的序号。代码:#include<iostream>#include<string>#include<map>using namespace std;map<int,int> sum;int a[2000005];int main(){int n,x,maxl=0,last=0;cin>>n;for(in
2022-03-12 19:03:17 347
原创 P1978《集合》题解
这个k-集合没有两个元素有k倍的关系。要用set来做。不断尝试添加新元素:符合条件就把他放到set中。最后输出set的长度。
2022-03-06 09:29:40 306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人