CCF-CSP认证 202104-3 DHCP服务器
原题目链接
求大佬解答为什么出现了如下图所示的问题(看了很久,数组已经开得很大了)
70分代码已给出
#include<bits/stdc++.h>
using namespace std;
int N,Tdef,Tmax,Tmin;
string H;
struct IP
{
int state;//0未分配 1待分配 2占用 3过期
string host;//占用者
int time;//过期时间
} ip[100000];
int main()
{
cin>>N>>Tdef>>Tmax>>Tmin;
cin>>H;
int n;
cin>>n;
for(int i=1; i<=N; i++)
{
ip[i].state=0;
ip[i].host=' ';
ip[i].time=0;
}
while(n--)
{
int t;
string shost,rhost,message;
int nip,endt;
cin>>t>>shost>>rhost>>message>>nip>>endt;
for(int i=1; i<=N; i++)
{
if(ip[i].state==1&&ip[i].time<=t)
{
ip[i].state=0;
ip[i].host=" ";
ip[i].time=0;
}
else if(ip[i].state==2&&ip[i].time<=t)
{
ip[i].state=3;
ip[i].time=0;
}
}
if((rhost==H)||(rhost=="*")||(message=="REQ"))
{
if(message!="DIS"&&message!="REQ")
continue;
if((rhost=="*"&&message!="DIS")||(rhost==H&&message=="DIS"))
continue;
if(message=="DIS")
{
int k=-1;
int j;
for(j=1; j<=N; j++)
if(ip[j].host==shost)
k=j;
if(k==-1)
{
for(int i=1; i<=N; i++)
if(ip[i].state==0)
{
k=i;
break;
}
}
if(k==-1)
{
for(int i=1; i<=N; i++)
if(ip[i].state==3)
{
k=i;
break;
}
}
if(k==-1)
continue;
else
{
ip[k].state=1;
ip[k].host=shost;
if(endt==0)
ip[k].time=t+Tdef;
else if(endt<=Tmax+t&&endt>=Tmin+t)
ip[k].time=endt;
else if(endt>Tmax+t)
ip[k].time=t+Tmax;
else if(endt<Tmin+t)
ip[k].time=t+Tmin;
}
cout<<H<<" "<<ip[k].host<<" OFR "<<k<<" "<<ip[k].time<<endl;
}
if(message=="REQ")
{
if(rhost!=H)
{
int func;
for(func=1; func<=N; func++)
if(ip[func].host==shost)
break;
if(func!=N+1)
{
if(ip[func].state==1)
{
ip[func].state=0;
ip[func].host=" ";
ip[func].time=0;
}
}
continue;
}
if(nip<=N&&nip>=1&&ip[nip].host!=shost)
{
cout<<H<<" "<<shost<<" NAK "<<nip<<" "<<0<<endl;
continue;
}
ip[nip].state=2;
ip[nip].host=shost;
if(endt==0)
ip[nip].time=t+Tdef;
else if(endt<=Tmax+t&&endt>=Tmin+t)
ip[nip].time=endt;
else if(endt>Tmax+t)
ip[nip].time=Tmax+t;
else if(endt<Tmin+t)
ip[nip].time=Tmin+t;
cout<<H<<" "<<ip[nip].host<<" ACK "<<nip<<" "<<ip[nip].time<<endl;
}
}
}
return 0;
}