HDU 3700 Cat 징 그 러 운 시 뮬 레이 션 문제
2865 단어 struct
【 머리말 】
마침내 또 하나의 징 그 러 운 시 뮬 레이 션 문 제 를 풀 었 다.
아무래도 HDU 징 그 러 운 문제 가 많은 것 같 습 니 다.
[사고방식]
한 번 스 캔 하고 b 보다 시간 대가 있 으 면 No 를 출력 합 니 다.시간 대 는 겹 치지 않 는 다.그 러 니까 시간 대별 로 정렬 해.
간격 이 a 보다 크 면 먼저 쉰다.휴식 시간 대 를 기록 하 다.
그렇지 않 으 면 다음 시간 을 현재 시간 대로 합 친다.
동시에 현재 시간 대가 b 보다 큰 지 여 부 를 판단 하면 출력 No 입 니 다.
만약 에 마지막 시간 대의 끝 시간 과 첫 번 째 시간의 시작 시간의 간격 이 a 보다 크 면 분할 할 수 있다 는 것 을 의미한다.
그렇지 않 으 면 현재 시간 대 를 첫 번 째 시간 대 앞 에 연결 할 수 있 는 지 확인 해 야 합 니 다.
휴식 시간 대 에 밤 을 넘 기 면 바로 출력 합 니 다. 예 를 들 어 23: 00 - 1: 00 (두 단락 으로 나 누 어 쓸 필요 가 없습니다).
휴식 시간 이 없 으 면 No 를 출력 해 야 합 니 다.
【 코드 】
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 20;
const int day = 24*60;
struct node
{
int s;
int e;
}pt[maxn+5];
vector<node>v;
bool cmp(const node &a, const node &b)
{
return a.s<b.s;
}
void show(node temp)
{
printf("%d%d:%d%d-%d%d:%d%d
", temp.s/600, temp.s/60%10, temp.s%60/10, temp.s%10, temp.e/600, temp.e/60%10, temp.e%60/10, temp.e%10);
}
int main()
{
int a, b;
int n;
int i;
bool fail;
char str[20];
node temp, x;
while(scanf("%d %d", &a, &b)!=EOF)
{
a *= 60;
b *= 60;
scanf("%d", &n);
for (i=1; i<=n; i++)
{
scanf("%s", str);
pt[i].s = (str[0]-'0')*600+(str[1]-'0')*60+(str[3]-'0')*10+(str[4]-'0');
pt[i].e = (str[6]-'0')*600+(str[7]-'0')*60+(str[9]-'0')*10+(str[10]-'0');
if (pt[i].e<pt[i].s) pt[i].e += day;
}
sort(pt+1, pt+n+1, cmp);
v.clear();
fail = false;
for (i=1; i<=n; i++)
{
if (pt[i].e-pt[i].s+1>b)
{
fail = true;
break;
}
}
if (!fail)
{
temp.s = pt[1].s;
temp.e = pt[1].e;
for (i=1; i<n; i++)
{
if (pt[i+1].s-1-temp.e>=a)
{
x.s = temp.e+1;
x.e = pt[i+1].s-1;
if (x.s!=x.e) v.push_back(x);
temp.s = pt[i+1].s;
temp.e = pt[i+1].e;
}
else
{
temp.e = pt[i+1].e;
if (temp.e-temp.s+1>b)
{
fail = true;
break;
}
}
}
}
if (!fail)
{
if (pt[1].s+day-1-temp.e>=a)
{
x.s = (temp.e+1)%day;
x.e = (pt[1].s-1+day)%day;
if (x.s!=x.e) v.push_back(x);
}
else if (v.size()>0 && (v[1].s-1+day)%day-temp.s+1<=b)
{
}
else fail = true;
}
if (fail || v.size()==0)
printf("No
");
else
{
printf("Yes
%d
", v.size());
sort(v.begin(), v.end(), cmp);
for (i=0; i<v.size(); i++)
show(v[i]);
}
}
return 0;
}
【 코드 】더러 운 시 뮬 레이 션 문 제 를 계속 찾 아 봐...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ruby의 구조체 클래스은 접근자 메서드가 있는 속성 모음입니다. 클래스를 명시적으로 작성할 필요 없이. Struct 클래스는 구성원 및 해당 값 집합을 포함하는 새 하위 클래스를 생성합니다. 각 멤버에 대해 #attr_accessor 와...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.