目录
一、201706-1 打酱油
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int sum=0;
int p;
cin>>n;
p=n/10;
sum=p;
while(p>2)
{
if(p/5)
{
sum+=2*(p/5);
p-=p/5*5;
}
else if(p/3)
{
sum+=p/3;
p-=p/3*3;
}
}
cout<<sum;
return 0;
}
二、201706-2 公共钥匙盒
思路:
因为钥匙借还时间不冲突,所以可以把开始时间和结束时间分开存储。对借的时间从小到大排序,还的时间也排序,对钥匙的标记判断钥匙是否借还。
对于同一把钥匙还钥匙的时间肯定比借钥匙的时间晚,所以判断结束的条件就是还完最后一把钥匙。
按照时间顺序对借还的钥匙一起排序,进行操作,操作如下:
当借钥匙的的时候查找一下钥匙的位置,然后把那个位置置空
当还钥匙的时候,从左向右找空位置,找到了就放回去。
AC代码
#include <bits/stdc++.h>
using namespace std;
struct DATA
{
int w;
int s;
};
struct DATA1
{
int w;
int c;
};
bool cmp(DATA a,DATA b)
{
return a.s<b.s||(a.s==b.s&&a.w<b.w);
}
bool cmp1(DATA1 a,DATA1 b)
{
return a.c<b.c||(a.c==b.c&&a.w<b.w);
}
int main()
{
int n,k;
int w,s,c;
vector<DATA> sta(0);
vector<DATA1> sta1(0);
DATA data;
DATA1 data1;
int a[1005]={0};//表示钥匙的位置, 0代表没有
cin>>n>>k;
for(int i=0;i<n;i++)
{
a[i]=i+1;//初始化钥匙的位置
}
for(int i=0;i<k;i++)
{
cin>>w>>s>>c;
data.w=w;
data.s=s;
data1.w=w;
data1.c=c+s;
sta.push_back(data);
sta1.push_back(data1);
}
sort(sta.begin(),sta.end(),cmp);
sort(sta1.begin(),sta1.end(),cmp1);
vector<DATA>::iterator it=sta.begin();
vector<DATA1>::iterator it1=sta1.begin();
while(it1!=sta1.end())
{
if(it==sta.end())
{
for(int i=0;i<n;i++)
{
if(a[i]==0)//送回钥匙
{
a[i]=it1->w;
it1++; //继续下个那要是
break;
}
}
}
else if(it->s < it1->c) //判断拿走的时间 早于 送还的时间
{
for(int i=0;i<n;i++)
{
if(a[i]==it->w)
{
a[i]=0;//把钥匙拿走
it++; //继续下个那要是
break;
}
}
}
else if(it->s >= it1->c)//判断拿走的时间 等于 送还的时间
{
for(int i=0;i<n;i++)
{
if(a[i]==0)//先送回钥匙
{
a[i]=it1->w;//吧钥匙拿走
it1++; //继续下个那要是
break;
}
}
}
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
3
4
5