求助
查看原帖
求助
732523
ZGC1111楼主2022/11/7 17:38
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<unordered_map>
using namespace std;
const int N = 105;
string s[N],c;
bool bj[N];
int kk = 0;
int h1[N], h2[N], m1[N], m2[N], s1[N], s2[N], t1[N], t2[N];
int main() {
	int num,num1;
	bool istime = false;
	bool ones = true;
	int length = 0;//存多少次时间
	cin >> num;
	num1 = num;
	//cin.ignore();
	getchar();//吃掉换行
	while (getline(cin,c)) {
		s[++kk] = c;
		//特判
		if (c == "#")break;
		//判断c是否是数字编号num加过来的
		int val = 0;
		bool flag = false;
		
		for (int i = 0; i < c.size(); i++) {
			if (c[i] < '0' || c[i]>'9') {
				flag = true;
				break;
			}
			val = val * 10 + c[i] - '0';
		}
		if (!flag) {//是数字但不是编号
			if (val != num)flag = true;
		}
		if (!flag||ones) {//是数字编号或第一次
			num +=1 ;//编号加一
			istime = true;//下一行输入是时间,要准备存储,之后再计算			
		}
		if (istime) {
			if (!ones)
				getline(cin, c), s[++kk] = c;
			bj[kk] = 1;//标记哪次输入
			int sx = 0;//1,2,3,4,5,6,7,8为依次存入哪个数组
			//存入时间
			for (int i = 0; i < c.size(); i++) {
				if (c[i] >= '0' && c[i] <= '9') {
					val = 0;//记录时间
					for (int j = i; j < c.size(); j++) {
						if (c[j] >= '0' && c[j] <= '9') {
							val = val * 10 + c[j] - '0';
						}
						else {
							sx++;
							i = j - 1;
							break;
						}
						if (j == c.size() - 1) {//最后一位数字也要计入,不能忘了
							sx++;
							i = j;
							break;
						}
					}
					if (sx == 1)h1[++length] = val;
					if (sx == 2)m1[length] = val;
					if (sx == 3)s1[length] = val;
					if (sx == 4)t1[length] = val;
					if (sx == 5)h2[length] = val;
					if (sx == 6)m2[length] = val;
					if (sx == 7)s2[length] = val;
					if (sx == 8)t2[length] = val;
				}
			}
			istime = false;
			ones = false;
		}

	}

	int T,TT1,TT2;
	cin >> T;
	for (int i = 1; i <= length; i++) {
		//将时间全部化成毫秒
		TT1 = t1[i] + s1[i] * 1000 + m1[i] * 60000 + h1[i] * 3600000;
		TT2 = t2[i] + s2[i] * 1000 + m2[i] * 60000 + h2[i] * 3600000;
		TT1 += T;
		TT2 += T;
		//将毫秒化成规范时间
		h1[i] = TT1 / 3600000;
		m1[i]=TT1 % 3600000/60000;
		s1[i] = TT1 % 3600000 % 60000/1000;
		t1[i]= TT1 % 3600000 % 60000 % 1000;

		h2[i] = TT2 / 3600000;
		m2[i] = TT2 % 3600000 / 60000;
		s2[i] = TT2 % 3600000 % 60000 / 1000;
		t2[i] = TT2 % 3600000 % 60000 % 1000;
	}
	
	//输出
	int j = 0;
	cout << num1 << endl;
	for (int i = 1; i <= kk; i++) {
		if (bj[i]) {
			//cout << h1[++j] << ":" << m1[j] << ":" << s1[j] << ":" << t1[j];
			printf("%02d:%02d:%02d,%03d", h1[++j], m1[j], s1[j], t1[j]);
			cout << " --> ";
			//cout << h2[j] << ":" << m2[j] << ":" << s2[j] << ":" << t2[j];
			printf("%02d:%02d:%02d,%03d", h2[j], m2[j], s2[j], t2[j]);
			cout << endl;
		}
		else {
			cout << s[i];
			if (s[i] != "#")cout << endl;
		}
	}
    return 0;
}

所有样例及测试数据本地均能过,但就是洛谷ide过不了,调了一下午,没查出来哪里出问题

2022/11/7 17:38
加载中...