专栏文章
题解:P13394 [GCJ 2010 #1B] Picking Up Chicks
P13394题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio3j2a3
- 此快照首次捕获于
- 2025/12/02 12:46 3 个月前
- 此快照最后确认于
- 2025/12/02 12:46 3 个月前
答题思路
贪心练习题。如果有一只鸡可以在 时刻到达谷仓,也就是 ,则记录它为可以经过的鸡。如果这只鸡前面有不能到达的鸡挡着他,那么对这些鸡全部操作一遍,以确保它可以到达终点。特别的,这一只鸡前面的另一只可以通过的鸡是不需要操作的,因为跟着前面那只鸡也可以到达终点。最后当已经有 只鸡经过终点,就可以输出了。对于代码实现,由于需要看这只鸡前面的无法通过的鸡的数量,所以需要倒序枚举。
代码展示
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int c,x[100];
int v[100];
bool bl[100];
signed main()
{
cin>>c;
for(int T=1;T<=c;T++)
{
int n,k,b,t
int tmp=0,sum=0,ans=0;
//分别表示
//不可能走到谷仓的鸡的数量
//已经有几只鸡到达了
//答案统计
memset(bl,0,sizeof(bl));//多测清空
cin>>n>>k>>b>>t;
for(int i=1;i<=n;i++) cin>>x[i];
for(int i=1;i<=n;i++)
{
cin>>v[i];
if(x[i]+v[i]*t>=b) bl[i]=1;//打标记
}
for(int i=n;i>=1;i--)
{
if(sum>=k) break;//当已经有k只鸡通过,直接跳出循环
if(bl[i]) ans+=tmp,sum++;//如果被标记,前面不可能走到谷仓的鸡全部操作一遍
else tmp++;//没被标记,计数
}
cout<<"Case #"<<T<<": ";
if(sum<k) cout<<"IMPOSSIBLE"<<endl;//无解
else cout<<ans<<endl;
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...