小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车。具体的,对于小H来说有n个不相交的时间段[a1,b1],[a2,b2]…[an,bn]在装车,对于小W来说有n个不相交的时间段[c1,d1],[c2,d2]…[cn,dn]在装车。其中,一个时间段[s, t]表示的是从时刻s到时刻t这段时间,时长为t-s。
由于他们是好朋友,他们都在广场上装车的时候会聊天,他们想知道他们可以聊多长时间。
输入的第一行包含一个正整数n,表示时间段的数量。
接下来n行每行两个数ai,bi,描述小H的各个装车的时间段。
接下来n行每行两个数ci,di,描述小W的各个装车的时间段。
输出一行,一个正整数,表示两人可以聊多长时间。
4
1 3
5 6
9 13
14 15
2 4
5 7
10 11
13 14
3
对于所有的评测用例,1 ≤ n ≤ 2000, ai < bi < ai+1,ci < di < ci+1,对于所有的i(1 ≤ i ≤ n)有,1 ≤ ai, bi, ci, di ≤ 1000000。
这压根就和买菜没一毛钱关系(吐槽一下)
就是给两个人的时间段,计算这两个人时间段的重合时间,即两个甘特图求重合时间。
注意:题目的[a1,b1],[a2,b2]中的a1,b1,a2,b2指的是时刻,而不是时间,也就是:
则:
小H与小W一人一个数组,初始化都为false,在时间段内则染色成为true;最后统计小H与小W数组中都为true的格子数(一个格子代表1s),即为总重合数(也就是小H与小W的聊天时间)
#include
#include
#include
//染色由false染成true,将arr数组的第a个“|线”到第b个“|线”内的格子置为true
void colour(bool arr[],unsigned long int a,unsigned long int b){
unsigned long int i = 0;
for(i=a;i<b;i++){
arr[i]=true;
}
}
int main(int argc, char *argv[]) {
bool H[1000000];//设置小H数组
bool W[1000000];//设置小W数组
unsigned long int i = 0;
for(i=0;i<1000000;i++){//初始化为false
H[i]=false;
W[i]=false;
}
unsigned long int n = 0;
unsigned long int a = 0;
unsigned long int b = 0;
unsigned long int c = 0;
unsigned long int d = 0;
scanf("%ld",&n);
for(i=0;i<n;i++){
scanf("%ld %ld",&a,&b);
colour(H,a,b);//小H数组染色
}
for(i=0;i<n;i++){//小W数组染色
scanf("%ld %ld",&c,&d);
colour(W,c,d);
}
unsigned long int count = 0;
for(i=0;i<1000000;i++){//统计同为true的数组格子数
if(H[i]&&W[i]){
count++;
}
}
printf("%ld",count);//输出
return 0;
}
提交时间:02-19 15:12 (2019年)
代码长度:780B
编程语言:C
评测结果:正确
得分: 100
时间使用:15ms
空间使用:2.292MB
一、函数创建时的参数中的数组参数声明方式,有如下3种,是等价的:
void function(int arr[10]){
...
}
void function(int arr[],int length){
...
}
void function(int *arr[]){
...
}
二、将数组传递给函数:
int arr[3]={0,1,2};//养成初始化的好习惯
function(arr);
直接传数组名即可,在C语言中实际上,数组名就是一个指向此数组的第一个元素的指针,即:
arr 等价于&(arr[0])
*arr 等价于 arr[0]
延申:
所以才有 从string中取数字的如下操作:
比如:134haha289nihao3
取出为:1342893
void stringToInt(char *str,int *num){
int value = 0;
char *p = str;
while(*p!='\0'){
if(*p>='0'&&*p<='9'){
value = value*10+(*p-'0');
}
p++;
}
*num = vlaue;
}