蓝桥杯|

矩阵面积交:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include<stdio.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
int main(){
double x1,y1,x2,y2; //矩形1
double x3,y3,x4,y4; //矩形2
double m1,n1; //交集左上角坐标.
double m2,n2; //交集右下角坐标.
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
scanf("%lf%lf%lf%lf",&x3,&y3,&x4,&y4);
m1 = max(min(x1,x2),min(x3,x4));
n1 = max(min(y1,y2),min(y3,y4));
m2 = min(max(x1,x2),max(x3,x4));
n2 = min(max(y1,y2),max(y3,y4));
if(m2>m1 && n2>n1)
printf("%.2f\n",(m2 - m1)*(n2 - n1));
else
printf("0.00\n");
return 0;
}

(贪心算法)

设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间Si和一个结束时间Fi,且Si=Fj或Sj>=Fi时,活动i与活动j相容。活动安排问题就是要在所给的活动集合中选择出最大的相容活动子集合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/贪心算法-活动安排的实现
#include "stdafx.h"
#include "stdio.h"
template<class Type>
void GreedySelector(int n,Type s[],Type f[],bool A[])
{
A[0]=1; //第一个直接选取
int j=0;
for(int i=1;i<n;i++)
{
if(s[i]>=f[j]){A[i]=true;j=i;} //如果第i+1的活动的开始时间大于或等于第i个活动的结束时间,则标记该活动
else A[i]=false;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//初始化数据
int n=3;
int s[3]={1,2,4}; //开始时间
int f[3]={3,3,5}; //结束时间
bool A[3]={0,0,0}; //数组A用于标记是否选择活动,1表示选择,0表示不选择
GreedySelector<int>(n,s,f,A);
for(int i=0;i<n;i++)
{
printf("%d\n",A[i]);
}
}

完美的代价(贪心)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,i,j,k,l,count=0,flag=1,c=-1;
char*a;
scanf("%d",&n);
a=(char*)malloc(n*sizeof(char));
scanf("%s",a);
j=n-1;
for(i=0;i<j;i++)
{
for(k=j;k>=i;k--)
{
if(k==i)
{
if(n%2==0||c!=-1)
{
flag=0;
break;
}
c=1;
count+=n/2-i;
}
else if(a[k]==a[i])
{
for(l=k;l<j;l++)
{
a[l]=a[l+1];
}
a[j]=a[i];
count+=j-k;
j--;
break;
}
}
if(flag==0)
break;
}
if(flag==0)
printf("Impossible");
else
printf("%d\n",count);
return 0;
}
文章目录
  1. 1. 矩阵面积交:
  2. 2. (贪心算法)
  3. 3. 完美的代价(贪心)
|