A1057
#include<cstdio>
#include<cstring>
#include<stack>
#include<iostream>
#include<string>
using namespace std
;
const int maxn
=100010;
const int sqrN
=316;
stack
<int> st
;
int block
[sqrN
];
int table
[maxn
];
void peekMedian(int K
)
{
int sum
=0;
int idx
=0;
while(sum
+block
[idx
]<K
)
{
sum
+=block
[idx
++];
}
int num
=idx
*sqrN
;
while(sum
+table
[num
]<K
)
{
sum
+=table
[num
++];
}
printf("%d\n",num
);
}
void Push(int x
)
{
st
.push(x
);
block
[x
/sqrN
]++;
table
[x
]++;
}
void Pop()
{
int x
=st
.top();
st
.pop();
block
[x
/sqrN
]--;
table
[x
]--;
printf("%d\n",x
);
}
int main()
{
int x
,query
;
memset(block
,0,sizeof(block
));
memset(table
,0,sizeof(table
));
string cmd
;
cin
>> query
;
for(int i
=0; i
<query
; i
++)
{
cin
>> cmd
;
if(cmd
=="Push")
{
scanf("%d",&x
);
Push(x
);
}
else if(cmd
=="Pop")
{
if(st
.empty()==true)
{
printf("Invalid\n");
}
else
{
Pop();
}
}
else
{
if(st
.empty()==true)
{
printf("Invalid\n");
}
else
{
int K
=st
.size();
if(K
%2==1)
K
=(K
+1)/2;
else
K
=K
/2;
peekMedian(K
);
}
}
}
return 0;
}
#include<iostream>
#include<stack>
#include<cstring>
using namespace std
;
#define lowbit(i) ((i)&(-i))
const int maxn
=100004;
stack
<int> s
;
int n
;
int c
[maxn
];
void update(int x
, int v
)
{
for(int i
=x
; i
<maxn
; i
+=lowbit(i
))
{
c
[i
]+=v
;
}
}
int getNum(int x
)
{
int sum
=0;
for(int i
=x
; i
>0; i
-=lowbit(i
))
{
sum
+=c
[i
];
}
return sum
;
}
int PeekMedian()
{
int l
=1,r
=maxn
,k
=(s
.size()+1)/2,mid
;
while(l
<r
)
{
mid
=(l
+r
)/2;
if(getNum(mid
)>=k
)
r
=mid
;
else
l
=mid
+1;
}
cout
<< l
<< endl
;
}
int main()
{
cin
>> n
;
string temp
;
int temp1
;
memset(c
,0,sizeof(c
));
for(int i
=0; i
<n
; i
++)
{
cin
>> temp
;
if(temp
=="Push")
{
cin
>> temp1
;
s
.push(temp1
);
update(temp1
,1);
}
else if(temp
=="Pop")
{
if(s
.empty())
{
cout
<< "Invalid" << endl
;
}
else
{
int x
=s
.top();
cout
<< x
<< endl
;
s
.pop();
update(x
,-1);
}
}
else
{
if(s
.empty())
{
cout
<< "Invalid" << endl
;
}
else
{
PeekMedian();
}
}
}
}
A1105
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std
;
const int maxn
=10004;
int mar
[maxn
][maxn
];
int n
;
int a
[maxn
];
bool cmp(int a
,int b
)
{
return a
>b
;
}
int main()
{
cin
>> n
;
for(int i
=0; i
<n
; i
++)
cin
>> a
[i
];
if(n
==1)
{
cout
<< a
[0] << endl
;
return 0;
}
int m
=(int)ceil(sqrt(1.0*n
));
while(n
%m
!=0)
m
++;
sort(a
,a
+n
,cmp
);
int N
=n
/m
;
int nai
=1,zi
=m
,pi
=1,gu
=N
,i
=1,j
=1;
int num
=0;
while(num
<n
)
{
while(j
<gu
&& num
<n
)
{
mar
[i
][j
]=a
[num
++];
j
++;
}
while(i
<zi
&& num
<n
)
{
mar
[i
][j
]=a
[num
++];
i
++;
}
while(j
>pi
&& num
<n
)
{
mar
[i
][j
]=a
[num
++];
j
--;
}
while(i
>nai
&& num
<n
)
{
mar
[i
][j
]=a
[num
++];
i
--;
}
nai
+=1;
zi
-=1;
pi
+=1;
gu
-=1;
i
++;
j
++;
if(num
==n
-1)
mar
[i
][j
]=a
[num
++];
}
for(int i
=1; i
<=m
; i
++)
{
for(int j
=1; j
<=N
; j
++)
{
if(j
!=1)
cout
<< " ";
cout
<< mar
[i
][j
];
}
cout
<< endl
;
}
return 0;
}
A1017
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std
;
struct node
{
int begintime
;
int servetime
;
};
const int maxn
=10003;
const int INF
=10000000;
vector
<node
> Node
;
int endTime
[maxn
];
int n
,k
;
int vert(int h
, int m
, int s
)
{
return h
*3600+m
*60+s
;
}
bool cmp(node a
, node b
)
{
return a
.begintime
<b
.begintime
;
}
int main()
{
cin
>> n
>> k
;
int temp1
,temp2
,temp3
,temp4
,temp5
,temp6
;
int bankbegin
=vert(8,0,0);
int bankend
=vert(17,0,0);
for(int i
=0; i
<k
; i
++)
endTime
[i
]=bankbegin
;
for(int i
=0; i
<n
; i
++)
{
scanf("%d:%d:%d %d",&temp1
,&temp2
,&temp3
,&temp4
);
temp5
=vert(temp1
,temp2
,temp3
);
if(temp5
>bankend
)
continue;
temp6
=temp4
<=60?temp4
*60:3600;
node temp7
;
temp7
.begintime
=temp5
;
temp7
.servetime
=temp6
;
Node
.push_back(temp7
);
}
sort(Node
.begin(),Node
.end(),cmp
);
int all
=0;
for(int i
=0; i
<Node
.size(); i
++)
{
int idN
=0,MIN
=INF
;
for(int j
=0; j
<k
; j
++)
{
if(endTime
[j
]<MIN
)
{
MIN
=endTime
[j
];
idN
=j
;
}
}
if(endTime
[idN
]<=Node
[i
].begintime
)
{
endTime
[idN
]=Node
[i
].begintime
+Node
[i
].servetime
;
}
else
{
all
+=(endTime
[idN
]-Node
[i
].begintime
);
endTime
[idN
]+=Node
[i
].servetime
;
}
}
printf("%.1f",all
/60.0/Node
.size());
return 0;
}
A1014
#include<cstdio>
#include<queue>
#include<algorithm>
#include<iostream>
using namespace std
;
const int maxn
=1111;
int n
,m
,k
,query
,q
;
int convertTime(int h
,int m
)
{
return h
*60+m
;
}
struct window
{
int endtime
,poptime
;
queue
<int> q
;
}window
[20];
int ans
[maxn
],needTime
[maxn
];
int main()
{
int index
=0;
scanf("%d%d%d%d",&n
,&m
,&k
,&query
);
for(int i
=0; i
<k
; i
++)
{
cin
>> needTime
[i
];
}
for(int i
=0; i
<n
; i
++)
{
window
[i
].poptime
=window
[i
].endtime
=convertTime(8,0);
}
for(int i
=0; i
<min(n
*m
,k
); i
++)
{
window
[index
%n
].q
.push(index
);
window
[index
%n
].endtime
+=needTime
[index
];
if(index
<n
)
window
[index
].poptime
==needTime
[index
];
ans
[index
]=window
[index
%n
].endtime
;
index
++;
}
for(; index
<k
; index
++)
{
int idx
=-1,minpoptime
=1<<30;
for(int i
=0; i
<n
; i
++)
{
if(window
[i
].poptime
<minpoptime
)
{
idx
=i
;
minpoptime
=window
[i
].poptime
;
}
}
window
[idx
].q
.pop();
window
[idx
].q
.push(index
);
window
[idx
].endtime
+=needTime
[index
];
window
[idx
].poptime
+=needTime
[window
[idx
].q
.front()];
ans
[index
]=window
[idx
].endtime
;
}
for(int i
=0; i
<query
; i
++)
{
cin
>> q
;
if(ans
[q
-1]-needTime
[q
-1]>=convertTime(17,0))
{
cout
<< "Sorry" << endl
;
}
else
{
printf("%02d:%02d\n",ans
[q
-1]/60,ans
[q
-1]%60);
}
}
return 0;
}
A1026
#include<iostream>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std
;
const int K
=111;
const int INF
=1000000000;
struct Player
{
int arriveTime
,startTime
,trainTime
;
bool isVIP
;
}newPlayer
;
struct Table
{
int endTime
,numServe
;
bool isVIP
;
}table
[K
];
vector
<Player
> player
;
int convertTime(int h
, int m
, int s
)
{
return h
*3600+m
*60+s
;
}
bool cmpArriveTime(Player a
, Player b
)
{
return a
.arriveTime
<b
.arriveTime
;
}
bool cmpStartTime(Player a
, Player b
)
{
return a
.startTime
<b
.startTime
;
}
int nextVIPPlayer(int VIPi
)
{
VIPi
++;
while(VIPi
<player
.size() && player
[VIPi
].isVIP
==0)
{
VIPi
++;
}
return VIPi
;
}
void allotTable(int pID
, int tID
)
{
if(player
[pID
].arriveTime
<=table
[tID
].endTime
)
{
player
[pID
].startTime
=table
[tID
].endTime
;
}
else
{
player
[pID
].startTime
=player
[pID
].arriveTime
;
}
table
[tID
].endTime
=player
[pID
].startTime
+player
[pID
].trainTime
;
table
[tID
].numServe
++;
}
int main()
{
int n
,k
,m
,VIPtable
;
cin
>> n
;
int stTime
=convertTime(8,0,0);
int edTime
=convertTime(21,0,0);
for(int i
=0; i
<n
; i
++)
{
int h
,m
,s
,trainTime
,isVIP
;
scanf("%d:%d:%d %d %d",&h
,&m
,&s
,&trainTime
,&isVIP
);
newPlayer
.arriveTime
=convertTime(h
,m
,s
);
if(newPlayer
.arriveTime
>=edTime
)
continue;
newPlayer
.startTime
=edTime
;
newPlayer
.trainTime
=trainTime
<=120?trainTime
*60:7200;
newPlayer
.isVIP
=isVIP
;
player
.push_back(newPlayer
);
}
cin
>> k
>> m
;
for(int i
=1; i
<=k
; i
++)
{
table
[i
].endTime
=stTime
;
table
[i
].numServe
=table
[i
].isVIP
=0;
}
for(int i
=0; i
<m
; i
++)
{
cin
>> VIPtable
;
table
[VIPtable
].isVIP
=1;
}
sort(player
.begin(),player
.end(),cmpArriveTime
);
int i
=0,VIPi
=-1;
VIPi
=nextVIPPlayer(VIPi
);
while(i
<player
.size())
{
int idx
=-1,minEndTime
=INF
;
for(int j
=1; j
<=k
; j
++)
{
if(table
[j
].endTime
<minEndTime
)
{
minEndTime
=table
[j
].endTime
;
idx
=j
;
}
}
if(table
[idx
].endTime
>=edTime
)
break;
if(player
[i
].isVIP
==1 && i
<VIPi
)
{
i
++;
continue;
}
if(table
[idx
].isVIP
==1)
{
if(player
[i
].isVIP
==1)
{
allotTable(i
,idx
);
VIPi
=nextVIPPlayer(VIPi
);
i
++;
}
else
{
if(VIPi
<player
.size() && player
[VIPi
].arriveTime
<=table
[idx
].endTime
)
{
allotTable(VIPi
,idx
);
VIPi
=nextVIPPlayer(VIPi
);
}
else
{
allotTable(i
,idx
);
i
++;
}
}
}
else
{
if(player
[i
].isVIP
==0)
{
allotTable(i
,idx
);
i
++;
}
else
{
int VIPidx
=-1,minVIPEndTime
=INF
;
for(int j
=1; j
<=k
; j
++)
{
if(table
[j
].isVIP
==1 && table
[j
].endTime
<minVIPEndTime
)
{
minVIPEndTime
=table
[j
].endTime
;
VIPidx
=j
;
}
}
if(VIPidx
!=-1 && player
[i
].arriveTime
>=table
[VIPidx
].endTime
)
{
allotTable(i
,VIPidx
);
VIPi
=nextVIPPlayer(VIPi
);
i
++;
}
else
{
allotTable(i
,idx
);
VIPi
=nextVIPPlayer(VIPi
);
i
++;
}
}
}
}
sort(player
.begin(),player
.end(),cmpStartTime
);
for(i
=0; i
<player
.size() && player
[i
].startTime
<edTime
; i
++)
{
int t1
=player
[i
].arriveTime
;
int t2
=player
[i
].startTime
;
printf("%02d:%02d:%02d ",t1
/3600,t1
%3600/60,t1
%60);
printf("%02d:%02d:%02d ", t2
/3600,t2
%3600/60,t2
%60);
printf("%.0f\n",round((t2
-t1
)/60.0));
}
for(int i
=1; i
<=k
; i
++)
{
printf("%d",table
[i
].numServe
);
if(i
<k
)
cout
<< " ";
}
return 0;
}
转载请注明原文地址: https://lol.8miu.com/read-23021.html