AtCoder Beginner Contest 313
AtCoder Beginner Contest 313 - AtCoder
A - To Be Saikyo (atcoder.jp)
从\(a_1 \dots a_{n-1}\)找出最大值与\(a_0\)比较即可
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    vector<int> A(n);
    for(auto &i : A) cin >> i;
    int ma = *max_element(A.begin() + 1, A.end());
    cout << max(ma - A[0] + 1, 0ll) << endl;
    return 0;
}
B - Who is Saikyo? (atcoder.jp)
每次将能力更弱的去掉,看最后是否还剩一个最强的
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N,M;
    cin >> N >> M;
    set<int> A;
    for(int i = 1;i <= N;i ++)
        A.insert(i);
    for(int i = 0;i < M;i ++){
        int x,y;
        cin >> x >> y;
        A.erase(y);
    }
    if(A.size() == 1)
        cout << *A.begin() << endl;
    else
        cout << "-1\n";
    return 0;
}
C - Approximate Equalization 2 (atcoder.jp)
因为可以用大的去补小的,所以都往中间靠,要计算小于平均数的差多少到平均数,将这些分配好后,如果还有还有大于平均数+1的,还要继续分配,\(sum\bmod n\)就是计算多出来的,另外那些本身大于平均数的数只要减到比平均数多1即可,不用完全减到和平均数相等
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N;
    cin >> N;
    vector<int> A(N + 1);
    int sum = 0;
    for(int i = 1;i <= N;i ++){
        cin >> A[i];
        sum += A[i];
    }
    int ans = 0,num = 0, tag = sum / N;
    for(int i = 1;i <= N;i ++){
        ans += max(tag - A[i], 0ll);
        num += (A[i] > tag);
    }
    cout << ans + max(sum % N - num,0ll) << endl;
    return 0;
}
D - Odd or Even (atcoder.jp)(交互题)
因为原数组仅由\(0,1\)构成,并且每次询问后\(a_1 + a_2 + \dots +a_k\)的和的奇偶性也是用\(01\)表示,所以我们可以把和当作$a_1 \oplus a_2 \oplus \dots \oplus a_k $的值.
当\(n=4,k=3\)时,我们可以询问1 2 3 ,1 2 4, 1 3 4 ,将三个结果的值异或之后就是\(a_1\)的值.
三个结果异或即:
\(res_1 \oplus res_2 \oplus res_3 = a_1 \oplus a_2 \oplus a_3 \oplus a_1 \oplus a_2 \oplus a_4 \oplus a_1 \oplus a_3 \oplus a_4\)
根据异或的性质,一个数异或自身偶数次等于\(0\),而0异或其他数等于其他数,所以上式的值就等于\(a_1\).
同理,如果再询问2 3 4,结合1 2 3,1 2 4,我们可以得到\(a_2\)的值.
由此我们对前\(k+1\)个数进行询问就能得到前\(k+1\)个数的值,那怎么得到\(k+2\)之后的值呢?
我们可以询问\(3,4 \dots k+1,k+2\)的结果,即\(a_3 \oplus a_4 \dots a_{k+1} \oplus a_{k+2}\)的值,且前面\(a_3 \sim a_{k+1}\)我们都已经知道了,那把前面这个\(res\)去异或上它们不就得到\(a_{k+2}\)的值了吗.
#include <bits/stdc++.h>
using namespace std;
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N, K;
	cin >> N >> K;
	vector<int> ans(N);
	auto solve = [&]() {
		vector<int> T(K + 1);
		vector<int> Q;
		for (int i = 0; i <= K; i ++) {
			Q.clear();
			for (int j = 0; j <= K; j ++)
				if (j != i)
					Q.emplace_back(j);
			cout << '?';
			for (auto j : Q)
				cout << ' ' << j + 1 ;
			cout << endl;
			cin >> T[i];
		}
		for (int i = 0; i <= K; i ++)
			for (int j = 0; j <= K; j ++)
				if (j != i)
					ans[i] ^= T[j];
	};
	solve();
	for (int i = K + 1; i < N; i ++) {
		cout << '?';
		for (int j = i; j > i - K; j--)
			cout << ' ' << j + 1;
		cout << endl;
		cin >> ans[i];
		for (int j = i - 1; j > i - K; j --)
			ans[i] ^= ans[j];
	}
	cout << '!';
	for (auto i : ans)
		cout << ' ' << i;
	cout << endl;
	return 0;
}
AtCoder Beginner Contest 313的更多相关文章
- AtCoder Beginner Contest 100 2018/06/16
		A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ... 
- AtCoder Beginner Contest 052
		没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ... 
- AtCoder Beginner Contest 053 ABCD题
		A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ... 
- AtCoder Beginner Contest 136
		AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ... 
- AtCoder Beginner Contest 137 F
		AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ... 
- AtCoder Beginner Contest 076
		A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ... 
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
		AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ... 
- AtCoder Beginner Contest 064 D - Insertion
		AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ... 
- AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】
		AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ... 
- AtCoder Beginner Contest 075 C bridge【图论求桥】
		AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ... 
随机推荐
- 开箱即用的Live2d
			安装 npm i @tomiaa/live2d 代码 <template> <div ref="live2dContentRef" id="live2d ... 
- 如何搭建私有的ChatGPT服务
			背景 是这样的,我们几个朋友众筹共享一个chatGPT4 Plus账号,且不想多人公用一个账号登录使用web版,想大家各自搞个本地的ChatGPT客户端,共用一个api-key. 我找了一圈,决定使用 ... 
- Pycharm或cmd在Terminal中运行tensorboard、pip等python包
			这个主要是添加python包的路径到环境变量里 因为装了anaconda,所以我们要找的是对应虚拟环境里的包路径,一般是放在anaconda安装路径下的anaconda3\envs\环境名\Scrip ... 
- docker中安装数据库mariadb
			背景 一般情况下,我们直接拉取mysql的镜像即可.但是如果需要在centos的镜像里安装并启动mysql,那么这篇文章将会给你帮助. 既然可以在容器中安装mysql,本教程同样适用于CentOS中. ... 
- Nginx+Fail2ban 实现同一ip在一分钟内连续三次请求同一接口并响应成功时进行封禁
			1. 安装 Fail2Ban 和 Nginx 如果尚未安装 Fail2Ban 和 Nginx,可以使用以下命令进行安装: # CentOS默认的仓库中可能不包含Nginx,所以需要添加EPEL(Ext ... 
- Nacos + Gateway网关搭建微服务
			文章所有代码GtiHub:https://github.com/Tom-shushu/work-study 里面的gateway-server和server1项目 1.Docker 部署 Nacos ... 
- Mac Docker设置国内镜像加速器
			安装docker 点我直达 设置国内加速镜像 { "experimental": false, "features": { "buildkit&quo ... 
- yb课堂 VueCli 4.3搭建yb课堂前端项目架构 《三十二》
			使用VueCli 4.3搭建yb课堂前端项目框架 创建yb课堂Vue项目 vue create ybclass_front 选择feature模式 安装vuex.vue-router,用vscode打 ... 
- Kafka消费端抛出异常Offset commit cannot be completed since the consumer is not part of an active group for auto partition assignment; it is likely that the consumer was kicked out of the group的解决方案
			总结/朱季谦 在一次测试Kafka通过consumer.subscribe()指定偏移量Offset消费过程中,因为设置参数不当,出现了一个异常提示-- [2024-01-04 16:06:32.55 ... 
- Javascript克隆数据
			JS 复制数据 1 浅复制 具体方法 // 数组 Array.prototype.slice // 普通对象 Object.assign 思考 2 深复制 1) function deepClone( ... 
