zoukankan      html  css  js  c++  java
  • Educational Round 95 (Div. 2) A

    1418A. Buying Torches

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

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

    [1−>12\ 12 − > 23\ 23 − > 34 ]

    可以发现每次加(11),也就是(x − 1)

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

    [1 + ( x − 1 ) ∗ t m p − > k ∗ y + k ]

    这里我为什么要用(− >)而不是$= $呢?

    因为可能不能正好等于$k ∗ y + k $。
    那就取

    [1+(x−1)∗tmp>k∗y+k ]

    (tmp) 的值。

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

    #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) 转换为棒)。 由于第一次交易实际上每次都给我们 (x-1) 个新的摇杆,因此我们需要进行 (frac{ky + k-1}{x-1})个第一次交易(对于不熟悉的人请参考下限和上限功能)。
    有关实现细节,请注意,对于正整数(a)(b)(frac{a}{b}=frac{a+b-1}{b})

    //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;
    	}
    }
    

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    Memcached安装配置及访问
    Nginx 学习
    Python Django之路由系统
    Nginx 反向代理、负载均衡、页面缓存、URL重写以及读写分离
    Python 之Django
    Python 之WEB框架
    Python 之WEB前端插件
    JS 之作用域链和闭包
    Python 前端之JQuery
    对应用程序进行描述说明(权限,平台)
  • 原文地址:https://www.cnblogs.com/RioTian/p/13673305.html
Copyright © 2011-2022 走看看