夏令营回来后就不知道怎么回事,状态一直不好==

为了让自己不要太颓废,开个坑在noip前把一本通的好题都刷一遍。

如果想要noip拿省一的话,就要开始好好努力了。加油!

为了节省时间,一些比较简单的东西就不再赘述了。

 

第一部分 基础算法

第 1 章 贪心算法

#10000 「一本通 1.1 例 1」活动安排

按右端点排序。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <queue>
 7 #include <map>
 8 #define ll long long 
 9 #define ull unsigned long long
10 #define out(a) printf("%d ",a)
11 #define writeln printf("\n")
12 const int N=1e5+50;
13 using namespace std;
14 typedef int array[N];
15 int n;
16 int now=0,ans=0;
17 int read()
18 {
19     int s=0,t=1; char c;
20     while (c<'0'||c>'9'){if (c=='-') t=-1; c=getchar();}
21     while (c>='0'&&c<='9'){s=s*10+c-'0'; c=getchar();}
22     return s*t;
23 }
24 ll readl()
25 {
26     ll s=0,t=1; char c;
27     while (c<'0'||c>'9'){if (c=='-') t=-1; c=getchar();}
28     while (c>='0'&&c<='9'){s=s*10+c-'0'; c=getchar();}
29     return s*t;
30 }
31 struct node
32 {
33     int l,r;
34 }a[N];
35 bool cmp(node a,node b)
36 {
37     return a.r==b.r?a.l<b.l:a.r<b.r;
38 }
39 int main()
40 {
41     n=read();
42     for (int i=1;i<=n;i++)
43       a[i].l=read(),a[i].r=read();
44     sort(a+1,a+n+1,cmp); 
45     for (int i=1;i<=n;i++)
46       if (now<=a[i].l) now=a[i].r,ans++;
47     out(ans);
48     return 0;
49 }
View Code

#10001 「一本通 1.1 例 2」种树

按右端点排序,在区间的末尾种树,若当前区间前面一部分种了一些,在区间末尾补上足够数量。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <queue>
 7 #include <map>
 8 #define ll long long
 9 #define out(a) printf("%d",a)
10 #define writeln printf("\n")
11 const int N=1e5+50;
12 const int mod=1e9+7;
13 using namespace std;
14 int n,h;
15 int cnt=0,ans=0;
16 bool vis[N];
17 struct node
18 {
19     int l,r,t;
20 }a[N];
21 int read()
22 {
23     int s=0,t=1; char c;
24     while (c<'0'||c>'9'){if (c=='-') t=-1; c=getchar();}
25     while (c>='0'&&c<='9'){s=s*10+c-'0'; c=getchar();}
26     return s*t;
27 }
28 ll readl()
29 {
30     ll s=0,t=1; char c;
31     while (c<'0'||c>'9'){if (c=='-') t=-1; c=getchar();}
32     while (c>='0'&&c<='9'){s=s*10+c-'0'; c=getchar();}
33     return s*t;
34 }
35 bool cmp(node a,node b)
36 {
37     return a.r==b.r?a.l<b.l:a.r<b.r;
38 }
39 int main()
40 {
41     n=read();
42     h=read();
43     for (int i=1;i<=h;i++)
44       a[i].l=read(),a[i].r=read(),a[i].t=read();
45     memset(vis,false,sizeof(vis));
46     sort(a+1,a+h+1,cmp); 
47     for (int i=1;i<=h;i++){
48       cnt=0;
49       for (int j=a[i].l;j<=a[i].r;j++)
50         if (vis[j]) cnt++;
51         if (cnt>=a[i].t) continue;
52       for (int j=a[i].r;j>=a[i].l;j--){
53         if (!vis[j]) {
54           vis[j]=true;
55           ans++; cnt++;
56           if (cnt>=a[i].t) break;
57           }
58         }
59     }
60       out(ans);
61     return 0;
62 }
View Code

#10005 「一本通 1.1 练习 1」数列极差

开一个大根堆和一个小根堆维护一下。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <queue>
 7 #include <map>
 8 #define ll long long
 9 #define out(a) printf("%d",a)
10 #define writeln printf("\n")
11 const int N=1e5+50;
12 const int mod=1e9+7;
13 using namespace std;
14 int n,x;
15 int a,b;
16 priority_queue<int>q_mi;
17 priority_queue<int,vector<int>,greater<int> >q_mx;
18 int read()
19 {
20     int s=0,t=1; char c;
21     while (c<'0'||c>'9'){if (c=='-') t=-1; c=getchar();}
22     while (c>='0'&&c<='9'){s=s*10+c-'0'; c=getchar();}
23     return s*t;
24 }
25 ll readl()
26 {
27     ll s=0,t=1; char c;
28     while (c<'0'||c>'9'){if (c=='-') t=-1; c=getchar();}
29     while (c>='0'&&c<='9'){s=s*10+c-'0'; c=getchar();}
30     return s*t;
31 }
32 int main()
33 {
34     n=read();
35     for (int i=1;i<=n+1;i++){
36       x=read();
37       if (i>n) break;
38       q_mx.push(x),q_mi.push(x);
39     }
40     while (q_mx.size()>1){
41       a=q_mx.top(); q_mx.pop(); 
42       b=q_mx.top(); q_mx.pop();
43       q_mx.push(a*b+1);
44     }
45     while (q_mi.size()>1){
46       a=q_mi.top(); q_mi.pop(); 
47       b=q_mi.top(); q_mi.pop();
48       q_mi.push(a*b+1);
49     }
50     out(q_mx.top()-q_mi.top());
51     return 0;
52 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-19
  • 2021-10-17
  • 2021-12-13
  • 2021-06-08
  • 2021-09-08
  • 2022-02-10
猜你喜欢
  • 2021-08-28
  • 2022-12-23
  • 2022-12-23
  • 2021-10-11
相关资源
相似解决方案