zoukankan      html  css  js  c++  java
  • Codeforces Round #326 (Div. 2)

    贪心 A - Duff and Meat

    题意:卖肉问题,当天的价格便宜可以将以后的肉买了,问最少花费多少钱

    分析:差点就做不出来了,维护一个动态的前缀最小值,如果当前的价格便宜则更新最小值,当天的肉用最小值买。

    #include <cstdio>
    
    const int N = 1e5 + 10;
    int a[N], p[N];
    
    int main(void)	{
    	int n;	scanf ("%d", &n);
    	int ans = 0, mn = 111;
    	for (int i=1; i<=n; ++i)	{
    		scanf ("%d%d", &a[i], &p[i]);
    		if (p[i] < mn)	mn = p[i];
    		ans += a[i] * mn;
    	}
    	printf ("%d
    ", ans);
    
    	return 0;
    }
    

      

    水+约数枚举 B - Duff in Love

    暴力枚举一下就可以了

    #include <cstdio>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    typedef long long ll;
    
    void divisor(ll n, vector<ll> &ret)	{
    	ret.clear ();
    	for (ll i=1; i*i<=n; ++i)	{
    		if (n % i == 0)	{
    			ret.push_back (i);
    			if (n / i != i)	ret.push_back (n / i);
    		}
    	}
    	ret.push_back (n);
    	sort (ret.begin (), ret.end ());
    }
    
    int main(void)	{
    	ll n;	scanf ("%I64d", &n);
    	if (n == 1)	{
    		puts ("1");	return 0;
    	}
    	vector<ll> div;
    	divisor (n, div);
    	for (int i=div.size ()-1; i>=0; --i)	{
            ll x = div[i];
            if (sqrt (x) * sqrt (x) == x)	continue;
            bool flag = true;
            for (ll j=2; j*j<=x; ++j)	{
    			ll y = j * j;
    			if (x % y == 0)	{
    				flag = false;	break;
    			}
            }
            if (flag)	{
    			printf ("%I64d
    ", x);	return 0;
            }
    	}
    
    	return 0;
    }

      

    水 C - Duff and Weight Lifting

    题意:1024游戏

    分析:考虑两个两个进位,如果是奇数的多一个步骤,在最后统计要累加的步骤数

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    const int N = 1e6 + 10;
    const int INF = 0x3f3f3f3f;
    int cnt[N];
    int w[N];
    
    int main(void)	{
    	int n;	scanf ("%d", &n);
    	int mx = -1, mn = INF;
    	for (int i=1; i<=n; ++i)	{
    		scanf ("%d", &w[i]);
    		if (mx < w[i])	mx = w[i];
    		if (mn > w[i])	mn = w[i];
    		cnt[w[i]]++;
    	}
        int ans = 0, pre = 0;
        for (int i=mn; i<=mx; ++i)	{
    		if (i == mn)	{
    			pre = cnt[i] / 2;
    			if (cnt[i] & 1)	ans++;
    		}
    		else	{
    			cnt[i] += pre;
    			pre = cnt[i] / 2;
    			if (cnt[i] & 1)	ans++;
    		}
        }
        while (pre)	{
    		if (pre & 1)	ans++;
    		pre >>= 1;
        }
        printf ("%d
    ", ans);
    
    	return 0;
    }
    

      

    编译人生,运行世界!
  • 相关阅读:
    React在componentDidMount里面发送请求
    React 术语词汇表
    React里受控与非受控组件
    React和Vue等框架什么时候操作DOM
    【LeetCode】79. Word Search
    【LeetCode】91. Decode Ways
    【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
    【LeetCode】1. Two Sum
    【LeetCode】141. Linked List Cycle (2 solutions)
    【LeetCode】120. Triangle (3 solutions)
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4895134.html
Copyright © 2011-2022 走看看