【...】
今天比赛有点简单hhh有点开心
【A:出题】
【题解】
显然,有解的充要条件为 6*m≤n≤9*m 。若有解,优先把m道题分给分值为7 8 9的题,那么什么时候分给6呢,当然是连7都不够小的时候咯,想想鸡兔同笼问题,就明白了。
【代码】
typedef long long ll;
int main()
{
ll n,m; cin>>n>>m;
if(n>=6*m&&n<=9*m)
{
if(7*m-n>0) printf("%lld\n",7*m-n);
else printf("0\n");
}
else puts("jgzjgzjgz");
return 0;
}
【B:煤气灶】
【题解】
等差数列求和..上限都给了,直接二分就行。避免爆long long于是我直接都定义long long了哈哈啊哈。
【代码】
typedef long long ll;
ll n,m,d,x;
int check(ll x)
{
if(((n+n+d*(x-1))*x/2)>=m) return 1;
return 0;
}
int main()
{
cin>>n>>m>>d>>x;
ll l=1,r=x;
ll a=n-d,ans;
while(l<=r)
{
ll mid=(l+r)/2;
if(check(mid))
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
cout<<ans<<endl;
return 0;
}
【C:项链】
【题解】
排个序优先染最喜欢即bi较大的颜色即可,注意可能染不完所有的珠子。
【代码】
typedef long long ll;
struct p{
ll a,b;
}f[100010];
bool cmp(p x,p y)
{
return x.b>y.b;
}
int main()
{
int n,m; cin>>n>>m;
for(int i=0;i<m;i++) cin>>f[i].a;
for(int i=0;i<m;i++) cin>>f[i].b;
sort(f,f+m,cmp);
ll ans=0;
int pos=0;
while(n&&pos<m)
{
if(n>=f[pos].a) n-=f[pos].a,ans+=f[pos].a*f[pos].b;
else ans+=f[pos].b*n,n=0;
pos++;
//cout<<n<<endl;
}
cout<<ans<<endl;
return 0;
}
【D:美食】
【题解】
从前往后模拟(贪心?)即可,注意食物大小可能为0。不能优先预处理把a[i]吃成a[i]%2,因为会出现1 2 1的情况。
【代码】
typedef long long ll;
const int maxn=1e5+5;
const int inf=0x3f3f3f3f;
int main()
{
int n; ll a[maxn];
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
ll ans=a[0]/2;a[0]=a[0]%2;
for(int i=1;i<n;i++)
if(a[i-1]==1&&a[i]) ans+=(1+(a[i]-1)/2),a[i]=(a[i]-1)%2;
else ans+=a[i]/2,a[i]=a[i]%2;
cout<<ans<<endl;
return 0;
}