超时了我能理解,可是1000个样例我都对完了为什么每一个AC
查看原帖
超时了我能理解,可是1000个样例我都对完了为什么每一个AC
591023
ShenHaiCangLong楼主2021/10/24 21:45

超时我能理解,是我的算法不行,我就只靠语法来给我撑着了(本人零基础自学C++一年,算法那个地方看的时候头疼看不下去哈哈哈)

可是我对照这那个有1000个数的样例对了一遍,没发现错误,在洛谷至少得AC一个吧,结果不是WA就是TLE,,,,,,, 上代码吧(我使用类使用的比较顺手,而且我也感觉正则表达式没有错啊)

#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <regex>
using namespace std;
namespace three {
	int severn = 1;
	int n;
	class NetWork;
	class SeverIP;
	ostream& operator<<(ostream& os, SeverIP& s);
	istream& operator>>(istream& is, NetWork& n);
	ostream& operator<<(ostream& os, NetWork& n);
	bool Is_same(NetWork& a);
	class SeverIP {
	public:
		SeverIP() = default;
		SeverIP(string a, int number) :ip(a), number(number) {  }
		string ip;
		int number;
	};
	deque<SeverIP> Sever_IP;
	class NetWork {
	public:
		friend istream& operator>>(istream& is, NetWork& n);
		friend ostream& operator<<(ostream& os, NetWork& n);
		friend bool Is_same(NetWork& a);;
		bool IsSever() const {
			if (_op == "Server") {
				return true;
			}
			return false;
		}
		void IsERROR() {
			string isip = "((([2][5][0-5]|[2][0-4][0-9]|[0-1]?[0-9]?[0-9])\\.){3}([2][5][0-5]|[2][0-4][0-9]|[0-1]?[0-9]?[0-9])([:])([6][5][5][3][0-5]|[6][5][5][0-2][0-9]|[6][5][0-4][0-9][0-9]|[6][0-4][0-9][0-9][0-9]|[0-5]?[0-9]?[0-9]?[0-9]?[0-9]))";
			regex ipPattern(isip);
			smatch res;
			if ((_op == "Server" || _op == "Client") && regex_match(sid, res, ipPattern)) {
				return;
			}
			IS_ERROR = true;
		}
		void Is_continue() {
			for (auto& c : Sever_IP) {
				if (sid == c.ip) {
					number = c.number;
					Clien_OK = true;
					return;
				}
			}
			Clien_FALT = true;
			return;
		}
		void SetNumber(int a) { number = a; }
		int GetNumber()const { return number; }
		string GetSid()const { return sid; }
		string Get_op()const { return _op; }
		bool GetSever_OK()const { return Seve_OK; }
		bool GetClien_OK()const{ return Clien_OK; }
		bool GetIS_ERROR()const { return IS_ERROR; }
		bool GetSever_FAIT()const { return Sever_FALT; }
		bool GetClien_FAIT()const { return Clien_FALT; }
	private:
		bool Seve_OK = false;
		bool Clien_OK = false;
		bool IS_ERROR = false;
		int number = -1;
		string sid;
		bool Sever_FALT = false;
		bool Clien_FALT = false;
		string _op;
	};
	deque<NetWork> sever;
	bool Is_same(NetWork& a) {
		for (auto& c : Sever_IP) {
			if (a.sid == c.ip) {
				a.Sever_FALT = true;
				return true;
			}
		}
		a.Seve_OK = true;
		return false;
	}
	istream& operator>>(istream& is, NetWork& se) {
		cin >> se._op >> se.sid;
		return is;
	}
	ostream& operator<<(ostream& os, NetWork& n) {
		os << n._op << " : " << endl << "sid: " << n.sid << endl << "IS_ERROR: " << n.IS_ERROR << endl << "number: " << n.number << endl << "IS_FALT: " << n.Sever_FALT << endl << "IS_CLIEN_FALT: " << n.Clien_FALT << endl << "IS_CLIEN_OK: " << n.Clien_OK;
		return os;
	}
	ostream& operator<<(ostream& os, SeverIP& s) {
		os << "SeverIP-IP: " << s.ip << '\t' << "SeverIP-number: " << s.number;
		return os;
	}
}
int main() {
	using namespace three;
	cin >> n;
	for (int i = 0; i < n; i++) {
		NetWork temp;
		cin >> temp;
		temp.SetNumber(i + 1);
		temp.IsERROR();
		if (temp.IsSever()) {
			if (!Is_same(temp)) {
				Sever_IP.push_back(SeverIP(temp.GetSid(), temp.GetNumber()));
			}
			sever.push_back(temp);
		}
		else {
			temp.Is_continue();
			sever.push_back(temp);
		}
	}
	for (const auto& c : sever) {
		if (c.GetIS_ERROR()) {
			cout << "ERR" << endl;
		}
		else if (c.GetSever_FAIT() || c.GetClien_FAIT()) {
			cout << "FAIT" << endl;
		}
		else if (c.GetSever_OK()) {
			cout << "OK" << endl;
		}
		else if (c.GetClien_OK()) {
			cout << c.GetNumber() << endl;
		}
	}
	return 0;
}
2021/10/24 21:45
加载中...