房间安排
乍一看,觉得类似会场安排 ,仔细一看 不是。艹,总是容易现在一种思维里出不来。只需要先确定每一天需要的房间数目,再输出这些天中 需要房间数目的最大值即可:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int ans[100];
int main()
{
int t,n,num,st,tem;
cin>>t;
while(t--)
{
cin>>n;
memset(ans,0,sizeof(ans));
while(n--)
{
cin>>num>>st>>tem;
for(int i=0;i<tem;i++)
ans[i+st]+=num;
}
cout<<*max_element(ans,ans+199)<<endl;
}
return 0;
}
素数
给出一个数找到距离他最近的一个素数,如果距离相等 输出较大的素数,如果他本身是素数,输出该数。写一个函数判断是否为素数,从该数开始向前,向后遍历;
注意:1 !!!!!!!
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int ans[100];
int isprim(int n)
{
for(int i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int t,n,tem1,st,tem,i;
cin>>t;
while(t--)
{
cin>>n;
if(isprim(n))
{
if(n==1)
cout<<n+1<<endl;
else
cout<<n<<endl;
}
else
{
for(i=n-1;;i--)
if(isprim(i))
break;
tem1=i;
for(i=n+1;;i++)
if(isprim(i))
break;
tem=(n-tem1)>=(i-n)?i:tem1;
cout<<tem<<endl;
}
}
return 0;
}
网络的可靠性
给一个连通图,添加一些边确保在损坏某些路的时候依然能连通,即每个点的度至少为2;找出度为一的点,除以2,即为结果;
code:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int dis[11000];
int main()
{
int n,sum,a,b,i,m;
while(scanf("%d",&n)!=EOF)
{
memset(dis,0,sizeof(dis));
sum=0;
m=n-1;
while(m--)
{
scanf("%d%d",&a,&b);
dis[a]++;
dis[b]++;
}
for(i=1; i<=n; ++i)
if(dis[i]==1)
sum++;
if(sum&1)
printf("%d\n",(sum+1)/2);
else
printf("%d\n",sum/2);
}
return 0;
}
AMAZING AUCTION
最佳竞标价有两个标准:
1.在上限以内,只出现一次的最小竞标价;
2。若无竞标价则选次数最少且出价最低的
code:#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
struct node{
string s;
int doll;
}node[1100];
int money[1100];
int main()
{
int u,n,m,i,j,ans;
while(scanf("%d%d",&u,&m)!=EOF)
{
memset(money,0,sizeof(money));
for(i=0;i<m;i++)
{
cin>>node[i].s>>node[i].doll;
money[node[i].doll]++;//计算出标价的数量
}
int mindoll=10000,flag;
for(i=0;i<=1000;i++)
if(money[i] && money[i]<mindoll)
{
mindoll=money[i];
flag=i;
}
// cout<<"flag= "<<flag<<endl;
for(i=0;i<m;i++)
if(node[i].doll==flag)
break;
cout<<"The winner is "<<node[i].s<<endl<<"The price is "<<flag<<endl;
}
return 0;
}
BUYING FEED
code:贪心,将从每个商店买一磅饲料的单价+路程耗费 作为该店的最终单价,再对新单价进行排序 贪心求最小值
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
struct nodee
{
int pos,f,c,ec;
} node[111];
int cmp(nodee a,nodee b)
{
return a.ec<b.ec;
}
int main()
{
int i,k,e,n,t;
cin>>t;
while(t--)
{
scanf("%d%d%d",&k,&e,&n);
for(i=0;i<n;i++)
{
scanf("%d%d%d",&node[i].pos,&node[i].f,&node[i].c);
node[i].ec=(e-node[i].pos)+node[i].c;
}
sort(node,node+n,cmp);
int count=0,sum=0;
for(i=0; i<n; i++)
{
if(count<k)
{
if(count+node[i].f<=k)
{
sum+=node[i].f*node[i].ec;
count+=node[i].f;
if(count==k)
break;
}
else
{
sum+=(k-count)*node[i].ec;
break;
}
}
}
cout<<sum<<endl;
}
return 0;
}