Atcoder ABC382

C

在回转寿司店里面有n个标为 A i A_i Ai人和m个标为 B j B_j Bj寿司。
每个寿司依次从1 2 3 … n人面前经过,当 B j ≥ A i B_j \geq A_i BjAi时i人就拿走寿司。
问:每个寿司被谁吃了?


对寿司进行排序,依次从1 2 3 … n人来看每个人怎么拿。
排序之后会发现,每个人一定会把最前面的那些满足条件的寿司拿走。然后下一个人接着拿。因此可以用一个指针指向当前拿到的寿司位置。

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

int n, m;
const int N = 200020;
struct Item {
   
   
	int x, i;
} b[N];
int a[N];
int ans[N];


int main(){
   
   
    //freopen("in.txt", "r", stdin);
    cin >> n >> m;
    for (int i = 1; i <= n; ++ i) {
   
   
		cin >> a[i];
	}
	for (int i = 1; i <= m; ++ i) {
   
   
		int t;
		cin >> t;
		b[i] = {
   
   t, i};
	}
	sort(b + 1, b + m + 1, [&](Item x, Item y){
   
   
		return x.x > y.x;
	});
	memset(ans, -1, sizeof(ans));
	int j = 0;
	for(int i = 1; i <= n; ++ i) {
   
   
		while(j + 1 <= m && b[j + 1].x >= a[i]) {
   
   
			ans[b[j + 1].i] = i;
			++ j;
		}
	}
	for (int i = 1; i <= m; ++ i) {
   
   
		printf("%d\n", ans[i]);
	}
    return 0;
}

D

搜索数列。写的时候注意剪枝。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;


vector<vi> ans;
int n, m;
int path[12];


void go(int pos, int cur) {
   
   
    if (cur > m)
        return;
    path[pos] = cur;
    if (pos == n - 1) {
   
   
        vi temp(path, path + n);
        ans.push_back(temp);
        return;
    }
    int lmt = cur + (n - pos - 1) * 10;
    if (lmt > m)
        return;
    
    for (int i = 10; i <= 20; ++i) {
   
   
        go(pos + 1, cur + i);
    }
}


int main(){
   
   
    //freopen("in.txt", "r", stdin);
    cin >> n >> m;
    for (int a0 = 1; a0 <= min(m, 20); ++a0) {
   
   
        go(0, a0);
    }
    printf("%d\n", ans.size());
    for (auto vi : ans) {
   
   
        for (int x : vi) {
   
   
            printf("%d ", x);
        }
        printf("\n");
    }
    return 0;
}

E

有无数个包,每个包里面都有N张卡片,每张卡片是稀有卡的概率是 p i p_i p

关于 AtCoder Beginner Contest 387 的信息如下: ### 关于 AtCoder Beginner Contest 387 AtCoder Beginner Contest (ABC) 是一项面向编程爱好者的定期在线竞赛活动。对于 ABC387,该赛事通常会在周末举行,并持续大约100分钟,在此期间参赛者需解决一系列算法挑战问题。 #### 比赛详情 - **举办平台**: AtCoder Online Judge System[^2] - **比赛时间长度**: 大约为1小时40分钟 - **难度级别**: 初学者友好型,适合那些刚开始接触竞争性程序设计的人群参与 - **题目数量**: 一般情况下会提供四到六道不同难度级别的题目供选手解答 #### 题目概览 虽然具体细节可能因官方发布而有所变化,但可以预期的是,这些题目将会覆盖基础的数据结构、字符串处理以及简单图论等方面的知识点。每一道题目的描述都会清晰给出输入输出格式说明及样例测试数据以便理解需求并验证解决方案的有效性。 为了获取最准确的比赛时间和确切的题目列表,请访问 [AtCoder 官方网站](https://atcoder.jp/) 并查看最新的公告板或直接导航至对应编号的具体页面来获得更新的信息。 ```python import requests from bs4 import BeautifulSoup def get_contest_info(contest_id): url = f"https://atcoder.jp/contests/{contest_id}" response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') title_element = soup.find('title') problem_list_elements = soup.select('.panel.panel-default a[href^="/contests/{}/tasks"]'.format(contest_id)) contest_title = title_element.string.strip() if title_element else "Contest Title Not Found" problems = [element['href'].split('/')[-1] for element in problem_list_elements] return { "name": contest_title, "problems": problems } else: raise Exception(f"Failed to fetch data from {url}") abc_387_details = get_contest_info("abc387") print(abc_387_details) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值