今天在做题的时候遇到了一些我不太能解决的困难,请大家们帮我解决一下
#include
using namespace std;
struct NODE {
int X1,X2,Y1,Y2;//X coordinate and y coordinate
int width,lengh;//The length and width of a rectangle
};
int cnt=0;
struct NODE a[1024];
int n;//numbers of the coordinates
int main(int args,char **argc) {
scanf("%d",&n);//input n
for(int i=0;iscanf("%d %d %d %d",&a[i].X1,&a[i].Y1,&a[i].X2,&a[i].Y2);//input the coordinates
a[i].width=a[i].Y2-a[i].Y1;// Rectangular width
a[i].lengh=a[i].X2-a[i].X1;//Rectangular length
cnt+=a[i].lengh*a[i].width;
}
printf("%d",cnt);
return 0;
}
#if 0
input
2
2 2 9 5
6 1 12 9
output
60
#endif
估计是要考虑矩形重叠的部分,只涂一次
我个人建议,因为数据量不大,可以考虑定义一个500x500的数组,初始化为0,然后把所有输出的区域都标记为1
最后统计所有为1的有多少。
在直接插入排序的提高版, 我们知道直接插入排序在直接插入排序在基本有序和待排序的记录个数较少时,效率较高。
基本思想:
先将整个待排序纪录序列分割成若干子序列,分别进行直接插入排序,待整个序列中的纪录“基本有序”时,再对全体记录进行一次直接插入排序。
//希尔排序
void ShellSort(Sqlist &L, int dlat[] ,int t){ //dlat[]增量序列
// 按增量序列dlta[0...t-1]对顺序表L作希尔排序
for(k=0; k<t;++k) //t趟
ShellInsert(L,Dlta[k]); //一趟增量为dlta[k]的插入排序
}//ShellSort
void ShellInsert(SqList &L, int dk){
for(i=dk+1;i <= L.length; ++i){
if(r[i].key < r[i-dk].key){
r[0] = r[i];
for(j=i-dk; j>0 &&(r[0].key < r[j].key); j = j-dk)
r[j+dk] = r[j];
r[j+dk] = r[0];
}
}
}
希尔排序算法效率与增量序列的取值有关
时间复杂度是n和d的函数:O(n²)~O(1.6n¹˙²⁵)
空间复杂度为O(1)
是一种不稳定的排序方法