被B、L卡死,菜枯
A. Absolutely Flat
如果凳子腿长度都相等,那么直接是可以的
否则可以将腿的长度排个序,垫最短的腿看现在所有凳子腿是否等长
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[5];
int main() {
::sync_with_stdio(false);
iosint b;
bool flag=false;
for(int i=1;i<=4;i++)
>>a[i];
cin>>b;
cinfor(int i=1;i<=3;i++)
{
if(a[i+1]!=a[i])
{
=true;
flagbreak;
}
}
if(!flag)
<<1<<'\n';
coutelse
{
(a+1,a+1+4);
sort[1]+=b;
abool flag1=false;
for(int i=1;i<=3;i++)
{
if(a[i+1]!=a[i])
{
=true;
flag1break;
}
}
if(!flag1)
<<1<<'\n';
coutelse
<<0<<'\n';
cout}
return 0;
}
C. Computer Network
看完题之后给我一种哈夫曼编码的感觉.
尝试用贪心,把延迟最小的接在离终端近的地方.
接完第一层之后再新接入计算机需要接在到根节点路径长最短的节点上面,易证这是最优的.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=105;
int d[N];
int a[N][N];
int deep[N];
int lat[N][N];
int main() {
::sync_with_stdio(false);
iosint n,k;
>>n>>k;
cinint tmp=n;
for(int i=1;i<=n;i++)
>>d[i];
cin(d+1,d+1+n);
sortfor(int i=1;i<=k;i++)
{
[i][1]=d[i];
a[i][1]=d[i];
lat[i]++;
deep}
-=k;
tmpint t=k+1;
while(tmp--)
{
int j=1,m=1e9;
for(int i=1;i<=k;i++)
{
if(lat[i][deep[i]]<m)
{
=i;
j=lat[i][deep[i]];
m}
}
[j]++;
deep[j][deep[j]]=d[t];
a[j][deep[j]]=lat[j][deep[j]-1]+d[t];
lat++;
t}
/*for(int i=1;i<=k;i++)
{
for(int j=1;j<=deep[i];j++)
cout<<lat[i][j]<<' ';
cout<<'\n';
}*/
int sum=0;
for(int i=1;i<=k;i++)
{
for(int j=1;j<=deep[i];j++)
+=lat[i][j];
sum}
<<sum<<'\n';
coutreturn 0;
}
N. New Time
题面
记个数,纯纯签到题
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);
iosint h0,m0;
char ch;
>>h0>>ch>>m0;
cinint h,m;
>>h>>ch>>m;
cinint ans=0;
if(m0<m)
+=m-m0;
anselse if(m0>m)
{
+=60-m0+m;
ans=(h0+1)%24;
h0}
if(h0<h)
+=h-h0;
anselse if(h0>h)
{
+=24-h0+h;
ans}
<<ans<<'\n';
coutreturn 0;
}