牛客小白赛 82 A - D

A.谜题:质数

思路:输出本身即可

void solve()
{
    int n; cin >> n;
    cout << n;
        
}


B.Kevin逛超市 2 (简单版本)

思路:只考虑最后两个数,去最小即可。

void solve()
{
    int n; cin >> n;
    double x;
    int y;
    cin >> x >> y;
    vector<int>a(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    sort(a.begin(), a.end());
    double ans = max(0, a[n - 2] - y) + a[n - 1] * x * 1.0 / 100;
    //cout << fixed << setprecision(9) << min(ans, a[1] - y + a[0] * x / 100) << endl;
    ans = min(ans, max(a[n - 1] - y,0) + a[n - 2] * x / 100);
    
    //int pos = lower_bound(a.begin(), a.end(), y) - a.begin();
    double sum = 0;
    for (int i = 0; i < n - 2; i++) {
        sum += a[i];
    }

    printf("%.13lf\n",sum + ans);
         
}

C.被遗忘的书籍

思路: d p dp dp。找含 t x t txt txt种类的的合法数量不好找,那就找不合法的,用所有可能减去这个不合法的数量就是答案。


ll f[N][3];
ll p[N],ans[N];
void solve()
{
    int n; cin >> n;
    cout << ans[n] << endl;
}
int main()
{
    int _ = 1;
    f[0][0] = 1;
    for (int i = 1; i <= N; i++) {

        f[i][0] = (f[i - 1][1] * 24 + f[i - 1][2] * 25 + f[i - 1][0] * 25) % MOD;
        f[i][1] = (f[i - 1][1] + f[i - 1][0]) % MOD;//选t
        f[i][2] = f[i - 1][1] % MOD;

        ans[i] = (ans[i - 1] * 26 + f[i - 1][2]) % MOD;
    }
    cin >> _;
    while (_--)
        solve();

}

D.Kevin逛超市 2 (困难版本)

思路:折扣券和立减券的使用都是连续的一段,因此,从最大的开始操作,在 a + b a + b a+b 个操作中排序取最大的那几个,用总数减去这优惠金额即可。

void solve()
{
	int n, a, b, x, y;
	cin >> n >> a >> b >> x >> y;
	double sum = 0, cnt = 0;
	vector<int> p(2 * n);
	for (int i = 0; i < n; i++) {
		cin >> p[i];
		sum += p[i];
	}

	sort(p.begin(), p.end(), [](int a, int b) { return a > b; });
	vector<double> vec(a + b);
	for (int i = 0; i < a + b; i++) {
		vec[i] = p[i] * (100 - x) * 1.0 / 100 - min(p[i], y), cnt += min(p[i], y);
	}
	sort(vec.begin(), vec.end(), [](double a, double b) {return a > b; });
	for (int i = 0; i < a; i++) {
		cnt += vec[i];
	}
	cout << fixed << setprecision(12) << sum - cnt << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值