HYVS799 @ 2024-08-02 18:27:37
#include <iostream>
using namespace std;
int main()
{
int l, m;
cin >> l;
cin >> m;
int s[100][2];
for (int i = 0; i < m; i++)
{
cin >> s[i][0];
cin >> s[i][1];
}
for (int i = 0; i < m - 1; i++)
for(int j=0;j<m-1-i;j++)
if (s[j][0] > s[j + 1][0])
{
int a[2];
for (int k = 0; k < 2; k++)
{
a[k] = s[j][k];
s[j][k] = s[j + 1][k];
s[j + 1][k] = a[k];
}
}
int sum = 0,b=0;
for(int i=0;i<m;i++)
{
int c = i;
while (s[i][1] > s[i + 1][0])
{ if (i >= m - 1)
break;
i++;
}
b = s[i][1] - s[c][0]+1;
sum += b;
}
sum = l + 1 - sum;
cout <<sum;
}
by haimingbei @ 2024-08-02 18:32:13
@HYVS799
#include<bits/stdc++.h>
using namespace std;
int l,m,s=0,str[10005];
int main(){
cin>>l>>m;
for(int i=0;i<=l;i++)str[i]=0;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
for(int j=u;j<=v;j++){
if(str[j]==0)str[j]=1;
}
}
for(int i=0;i<=l;i++){
if(str[i]==0)s++;
}
cout<<s;
return 0;
}
by aomiks @ 2024-08-02 20:36:23
用二维数组要排序然后区域计算
#include <iostream>
using namespace std;
void sortFirstColumn(int arr[][2], int m) {
for (int i = 0; i < m - 1; i++) {
for (int j = 0; j < m - i - 1; j++) {
if (arr[j][0] > arr[j + 1][0]) {
swap(arr[j][0], arr[j + 1][0]);
swap(arr[j][1], arr[j + 1][1]);
}
}
}
}
int main()
{
int l,m,s=0,ss=0;
cin>>l>>m;
int a[m][2];
for(int i= 0; i<m; i++)
{
for(int j=0; j<2; j++)
{
cin>>a[i][j];
}
}
sortFirstColumn(a,m);
s= l+1; //总数
for(int i=0; i<m; i++)
{
if(i!=m-1 && a[i+1][0]<=a[i][1]) //有重叠
{
a[i+1][0]= a[i][0];
a[i+1][1]= max(a[i][1],a[i+1][1]);
}
else //无重叠
{
ss+= a[i][1]-a[i][0]+1;
}
}
cout<<s-ss;
return 0;
}