C++的问题
C++算法的问题
C++的问题 见图片
C++算法的问题
C++算法的问题
// ConsoleApplication13.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <malloc.h>
using namespace std;
int main()
{
int n = 0, m = 0;
int min = 1;
int count = 0;
int loc,len,flag,flag2;
cin >> n;
cin >> m;
int* l =new int[n];
int* r = new int[n];
int* pos = new int[n+2];
for (int i = 0; i < n+2; i++)
{
*(pos+i) = 0;
}
for (int i = 0; i < n; i++)
{
cin >> *(l+i);
cin >> *(r+i);
for (int j = *(l+i); j <= *(r+i); j++)
{
*(pos+j) = 1;
}
}
*(pos+0) = 1;
*(pos+n + 1) = 1;
while (true)
{
flag = 1;
flag2 = 1;
len = 0;
loc = 0;
for (int i = 0; i < n; i++)
{
if (*(pos+*(l+i)-1) == 0 && *(pos+*(r+i)+1) == 0)
{
l[i]--;
r[i]++;
pos[l[i]] = 1;
pos[r[i]] = 1;
count++;
flag = 0;
flag2 = 0;
break;
}
else if (*(pos + *(l + i) - 1) == 0 || *(pos + *(r + i) + 1) == 0)
{
if (*(r+i)-*(l+i)>len)
{
loc = i;
len = *(r+i) - *(l+i);
}
flag2 = 0;
}
}
if (flag)
{
(*(l+loc))--;
(*(r+loc))++;
count++;
*(pos+*(l+loc)) = 1;
*(pos+*(r+loc)) = 1;
}
if (flag2)
{
break;
}
}
cout << count;
}
这里只需要找到断点在哪里就行了。
这题的思路是 给定一个数组,给所有的数组值初始化为0,然后给给定区间进行设置为1.
最后将断点拉伸就行了。
涉及到最小次数,那么需要找到是否能够凑一次拉两个空格。
直接上代码
#include <iostream>
#include <malloc.h>
using namespace std;
int main()
{
int n = 0, m = 0;
int min = 1;
int count = 0;
int loc,len,flag,flag2;
cin >> n;
cin >> m;
int* l =new int[n];
int* r = new int[n];
int* pos = new int[n+2];
for (int i = 0; i < n+2; i++)
{
*(pos+i) = 0;
}
for (int i = 0; i < n; i++)
{
cin >> *(l+i);
cin >> *(r+i);
for (int j = *(l+i); j <= *(r+i); j++)
{
*(pos+j) = 1;
}
}
*(pos+0) = 1;
*(pos+n + 1) = 1;
while (true)
{
flag = 1;
flag2 = 1;
len = 0;
loc = 0;
for (int i = 0; i < n; i++)
{
if (*(pos+*(l+i)-1) == 0 && *(pos+*(r+i)+1) == 0)
{
l[i]--;
r[i]++;
pos[l[i]] = 1;
pos[r[i]] = 1;
count++;
flag = 0;
flag2 = 0;
break;
}
else if (*(pos + *(l + i) - 1) == 0 || *(pos + *(r + i) + 1) == 0)
{
if (*(r+i)-*(l+i)>len)
{
loc = i;
len = *(r+i) - *(l+i);
}
flag2 = 0;
}
}
if (flag)
{
(*(l+loc))--;
(*(r+loc))++;
count++;
*(pos+*(l+loc)) = 1;
*(pos+*(r+loc)) = 1;
}
if (flag2)
{
break;
}
}
cout << count;
}