Educational Round 95 (Div. 2) A - B题题解(A题数据连错3次,搞人心态中)

1418A. Buying Torches

这次A题,真心fo了(导致wa了我两次)
样例出错两次,数据出错一次。
讲一下我的思路吧。

  • 首先先明确至少需要多少个棍。k 个火炬,至少需要ky+k 个棍棍。
  • 其次要想,怎么从1个棍,利用第一条贸易,变成 ky+k个棍。我们可以先通过观察,假设 x=12

1>1212>2323>34

可以发现每次加11,也就是x1

所以,设tmp是贸易一的次数。

1+(x1)tmp>ky+k

这里我为什么要用>而不是=呢?

因为可能不能正好等于ky+k
那就取

1+(x1)tmp>ky+k

tmp 的值。

最后 tmp 再加上 2k 次即可。

#python
for _ in range(int(input())):
    x,y,k=map(int,input().split())
    tmp=(k*y+k-1)//(x-1)
    if tmp*(x-1)<k*y+k-1:
        tmp+=1
    tmp+=k
    print(tmp)
//C++
#include<bits/stdc++.h>
#define ms(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long ll;
const int N = 1e5 + 100;
ll _, n, m, a[N], i, j;
void solve() {
	ll x, y, k;
	cin >> x >> y >> k;
	ll tmp = (k * y + k - 1) / (x - 1);
	if (tmp * (x - 1) < k * y + k - 1)tmp++;
	tmp += k;
	cout << tmp << endl;
}

int main() {
	//freopen("in.txt", "r", stdin);
	ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
	cin >> _; while (_--) solve();
}

再看看一下dalao的数学解法:

由于第二次交易是获取煤炭的唯一方法,因此我们显然需要进行 k 次第二次交易。 那么,我们需要进行多少次首次交易? 我们可以看到,为了最终得到足够的棒和煤,我们需要获得 ky+k 棒(将 ky 转换为煤,将 k 转换为棒)。 由于第一次交易实际上每次都给我们 x1 个新的摇杆,因此我们需要进行 ky+k1x1个第一次交易(对于不熟悉的人请参考下限和上限功能)。
有关实现细节,请注意,对于正整数abab=a+b1b

//C++实现
#include <iostream>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		long long x,y,k;
		cin>>x>>y>>k;
		cout<<((y+1)*k+x-3)/(x-1)+k<<endl;
	}
	return 0;
}

1418B. Negative Prefixes

模拟题,记录可以动的,从大到小排序。

#python
for _ in range(int(input())):
    n=int(input())
    lst=list(map(int,input().split()))
    s=list(map(int,input().split()))
    index=[]
    t=[]
    for i in range(n):
        if s[i]==0:
            index.append(i)
            t.append(lst[i])
    if len(t)==0:
        print(*lst)
        continue
    t.sort(reverse=True)
    for i in range(len(index)):
        lst[index[i]]=t[i]
    print(*lst)
//c++
#include <bits/stdc++.h>
#define ll long long int
using namespace std;
int main()
{
	int t=1;
	cin>>t;
	while(t--){
		int n,i,j=0;
		cin>>n;
		int a[n],b[n];
        vector<int>v;
		for(i=0;i<n;i++)cin>>a[i];
		for(i=0;i<n;i++)cin>>b[i];
		for(i=0;i<n;i++){if(b[i]==0){v.push_back(a[i]);}}
		sort(v.rbegin(),v.rend());
		for(i=0;i<n;i++){if(b[i]==0){a[i]=v[j];j++;}}
		for(i=0;i<n;i++)cout<<a[i]<<" ";
		cout<<endl;
	}
}
posted @   RioTian  阅读(238)  评论(2编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 全程不用写代码,我用AI程序员写了一个飞机大战
点击右上角即可分享
微信分享提示

📖目录