超时我能理解,是我的算法不行,我就只靠语法来给我撑着了(本人零基础自学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;
}