目錄
一、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