2020ICPC银川(A E G J K)

2023-10-04 04:54
文章标签 2020icpc 银川

本文主要是介绍2020ICPC银川(A E G J K),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2020ICPC银川(A E G J K)

2020ICPC银川

A. Best Player(模拟)

在某一维方向上无法区分的点显然另两维坐标相同 , 那么在当前维度上能区分的点个数就是本质不同的另两维坐标组成的点对的个数 , 用set维护一下即可。

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int INF = 9e18;
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;int n;set<PII> x , y , z;signed main(){cin >> n;for(int i = 1 ; i <= n ; i ++) {int a , b , c;cin >> a >> b >> c;x.insert({b , c});y.insert({a , c});z.insert({a , b});}int res = max({x.size() , y.size() , z.size()});if(x.size() == res) {cout << "X";} else if(y.size() == res) {cout << "Y";} else {cout << "Z";}return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);

E. Isomerism(模拟)

根据题意模拟一下即可

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int INF = 9e18;
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;map<string , int>mp;
string s[5];
int t;signed main(){mp["-F"] = 8;mp["-Cl"] = 7;mp["-Br"] = 6;mp["-I"] = 5;mp["-CH3"] = 4;mp["-CH2CH3"] = 3;mp["-CH2CH2CH3"] = 2;mp["-H"] = 1;cin >> t;while(t --) {for(int i = 1 ; i <= 4; i ++ ){cin >> s[i];}if(s[1] == s[3] || s[2] == s[4]) {cout << "None\n";} else if(s[1] == s[2] || s[3] == s[4]) {cout << "Cis\n";} else if(s[1] == s[4] || s[2] == s[3]) {cout << "Trans\n";} else {int tag1 = 0 , tag2 = 0;if(max(mp[s[1]] , mp[s[3]]) == mp[s[1]]) tag1 = 1;else tag1 = 2;if(max(mp[s[2]] , mp[s[4]]) == mp[s[2]]) tag2 = 1;else tag2 = 2;if(tag1 == tag2) {cout << "Zasamman\n";} else {cout << "Entgegen\n";}}	}return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);

G. Photograph(链表 + 模拟)

观察操作 , 我们不难想到用链表模拟插入操作 , 然后边插入边计算贡献 , 但是这样需要维护插入的位置 , 复杂度 nqlogn , 显然不能接受 , 考虑逆过程 , 即删除操作 , 删除操作并不需要维护插入位置 , 边删除边计数 , 复杂度 nq , 直接模拟即可。

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int INF = 9e18;
const int N = 1e5 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;int n , q;
int cnt[N] , h[N] , pos[N];
int nex_num(int x){ return (x + 1) % n; }
int cal(int x){ return x * x; }
int need[N];signed main(){cin >> n >> q;for(int i = 0 ; i < n ; i ++) cin >> h[i];for(int i = 0 ; i < n ; i ++) cin >> pos[i] , pos[i] -= 1;vector<int> pre(n + 2) , nex(n + 2) , pree(n + 2) , nexx(n + 2);/*n ... 1 - n - 1 ... n + 1*/pre[0] = n;//[0 - n - 1] -1 nnex[n] = 0;nex[n - 1] = n + 1;pre[n + 1] = n - 1;for(int i = 1 ; i <= n - 1 ; i ++) {pre[i] = i - 1;nex[i - 1] = i;}for(int i = 2 ; i <= q + 1 ; i ++) cin >> cnt[i];int prex = 0 , lans = 0;for(int i = 1 ; i <= q + 1 ; i ++) {int now = (prex + lans + cnt[i]) % n;prex = now;for(int j = now , cnt = 1 ; cnt <= n ; j = nex_num(j) , cnt += 1) {need[cnt] = pos[j];}pree = pre;nexx = nex;int res = 0 , ans = 0;for(int j = 1 ; j < n ; j ++) res += cal(h[j] - h[j - 1]);for(int j = n ; j >= 1 ; j --) {ans += res;int now = need[j];if(pree[now] != n)                       res -= cal(h[now] - h[pree[now]]);if(nexx[now] != n + 1)                   res -= cal(h[now] - h[nexx[now]]);if(pree[now] != n && nexx[now] != n + 1) res += cal(h[pree[now]] - h[nexx[now]]);nexx[pree[now]] = nexx[now];pree[nexx[now]] = pree[now];}cout << ans << "\n";lans = ans;}return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);

J. Let’s Play Jigsaw Puzzles!(二维链表)

根据题意 , 维护一个二维链表即可。

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int INF = 9e18;
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;int m , l[N] , r[N] , u[N] , d[N];
int a , b , c , dd;
//上 下 左 右signed main(){IOScin >> m;for(int i = 1 ; i <= m * m ; i ++) {cin >> a >> b >> c >> dd;u[i] = a;if(a != -1) d[a] = i;d[i] = b;if(b != -1) u[b] = i;l[i] = c;if(c != -1) r[c] = i;r[i] = dd;if(dd != -1) l[dd] = i;}int pos = 0;for(int i = 1 ; i <= m * m ; i ++) {if(u[i] == -1 && l[i] == -1) pos = i;}for(int i = pos ; i != -1 ; i = d[i]) {for(int j = i , k = 1 ; j != -1 && k <= m ; j = r[j] , k ++) {if(k != m) cout << j << " ";else cout << j ;}cout << "\n";}return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);

K. Browser Games(字典树)

大意:对于前 i 个字符串找出一个最小的前缀集,使得前 i 个字符串都能在前缀集中找到前缀但是后 n - i 个字符串无法在前缀集中找到前缀 , 求对于每一个 i 的最小前缀集大小。

思路:对于字符串的前缀问题 , 考虑字典树 , 我们先建立字典树 , 然后对于出现的所有前缀全部计数。对于第 i 个前缀 , 考虑把第 i 个字符串所对应的前缀计数全部删除 , 那么现在树中的非 0 位置就是不能出现在前缀集中的前缀 , 0 的位置就是可以出现在前缀集中的前缀 , 对于所有可以出现在前缀集部分的前缀 , 用最小的前缀代表即可让前缀集最小 。 最小前缀的位置即删除前缀时遇到的第一个 0 的位置 , 这时考虑当前节点子树的贡献由原来的 x 变成现在的 1 , 所以我们需要维护每一个节点所在子树的贡献然后 O1 的实现转移。

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//#define int long long
//const int INF = 9e18;
const int N = 2e6 + 5e5;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;
int tree[N][28] , cnt[N] , siz[N] , idx , n , fa[N];
string s;int get(char c) {if(c >= 'a' && c <= 'z') return c - 'a';if(c == '.') return 26;return 27;
}void insert(string s){int now = 0 , n = s.size();for(int i = 0 ; i < n ; i ++){int c = get(s[i]);if(!tree[now][c]) tree[now][c] = ++ idx;fa[tree[now][c]] = now;now = tree[now][c];//每一个now代表一个从根到当前节点的不同的前缀cnt[now] += 1;}
}
void query(string s , int& res){bool tag = 0;int now = 0 , n = s.size();for(int i = 0 ; i < n ; i ++){int c = get(s[i]);now = tree[now][c];cnt[now] -= 1;if(!cnt[now] && !tag) {res = res - siz[now] + 1;int val = siz[now];while(fa[now]) siz[fa[now]] += (1 - val) , now = fa[now]; break;}}
}signed main(){IOScin >> n;vector<string>ve;for(int i = 1 ; i <= n ; i ++) {cin >> s;insert(s);ve.push_back(s);}int res = 0;for(int i = 0 ; i < n ; i ++) {query(ve[i] , res);cout << res << "\n";}return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);

这篇关于2020ICPC银川(A E G J K)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1319

相关文章

银川招聘外包尽在邦芒 助力企业迅速锁定优秀人才

银川邦芒人力提供的招聘外包服务,是企业将招聘、甄选工作委托给专业的第三方外包公司的明智选择。我们凭借在人才资源、评价工具和流程管理方面的深厚优势,为企业高效完成招聘工作。这一方式不仅提升招聘质量,更能缩短填补职位空缺的时间,改善行政流程,管理核心业务指标,并显著削减总体成本。 批量招聘服务: 我们特别推出批量招聘服务,专为基层岗位设计,旨在最短时间内为企业找到最多、最合适的人才,满足企业招

2020ICPC南京站补题题解

菜鸡只写银牌以下的题 这场铜牌4题,银牌5~6题 K Co-prime Permutation 题意: 构造一个n长的1到n不重复序列p,其中 p i p_i pi​和 i i i互质的个数有k个 思路: 已知: n n n和 n − 1 n-1 n−1互质,1和任何数互质,任何数和它本身不互质 k要是奇数,1不变,后面的 k − 1 2 \frac{k-1}{2} 2k−1​对数,两两换

银川劳务派遣尽在邦芒 为企业量身定制用工解决方案

银川邦芒人力作为一家拥有专业劳务派遣经营资质的机构,致力于为企业提供全方位的劳务派遣服务。我们与劳动者签订正式的劳动合同,然后将他们派遣至用工企业,用工企业则按照协议向我们支付相应的服务费用。通过这种用工形式,我们旨在帮助企业降低劳动争议风险,优化人力资源管理,使其能够更加专注于核心业务的发展,从而提升企业的核心竞争力。 劳务派遣服务方案: 1、完全派遣:我们全面负责员工的招聘、培训、绩效

银川人力资源外包找邦芒 助您轻松节约人力成本

银川邦芒人力专注于为企业提供劳务派遣、劳务外包、人力外包业务,致力于为您解决公司人员岗位整体或部分外包需求。我们深知人力资源外包对于优化企业人力成本、降低公司经营风险的重要性。 人力资源外包,作为一种先进的企业管理模式,旨在帮助企业将人力资源管理工作的一部分或全部交由专业机构处理,使企业能够更专注于核心业务的发展。我们提供一站式服务,涵盖员工招聘、培训、薪酬管理、福利计划、员工关系管理等各个

银川服务外包有邦芒 值得信赖的专业人力资源管理伙伴

银川邦芒致力于为企业提供全方位的服务外包解决方案,助力企业优化业务流程、降低成本、提高效率,并在激烈的市场竞争中脱颖而出。我们专注于将您的非核心业务外包给专业团队,让您能够更专注于核心业务的发展,同时享受高效、低风险的运营环境。 银川邦芒的服务外包范围广泛,涵盖了信息技术外包、业务流程外包、生产外包以及人力外包等多种形式。我们凭借深厚的行业经验和专业技能,能够根据您的具体需求,提供量身定制的

银川人才派遣尽在邦芒 企业用工问题的专业解决者

人才派遣服务在当下企业中已成为一种高效且灵活的用工模式,银川邦芒人力所推出的人才派遣服务尤其受到众多企业和员工的青睐。人才派遣的优势显著,它能迅速满足企业的人才需求,帮助企业缩短招聘周期,确保业务的顺利推进。 当企业面临业务量激增,急需增加人手时,银川邦芒人力的人才派遣服务便能及时为企业找到适合的人才,确保业务不受影响。这种服务模式不仅高效,而且能帮助企业节省大量的人力物力成本。邦芒人力凭借

2019 ICPC银川 F Function!(数学分块+推公式)

思路: 思路来自https://blog.csdn.net/qq_43590432/article/details/103396063 在 a ≤ sqrt(n)的时候可以分块的计算,a > sqrt(n)的时候,后面的log变成了1,之后的部分推完公式直接O(1)算出来。 #include <cstdio>#include <cstring>#include <algorithm>#i

2019 ICPC银川区域赛 Girls Band Party(分组背包)

You are currently playing a game called “Garupa”. In an event of the game, you are trying to get more event points. You have nn cards, each with its own name, color, and power. When you play the game,

2019ICPC 银川区域赛 Base62(进制转换 java)

As we already know, base64 is a common binary-to-text encoding scheme. Here we define a special series of positional systems that represent numbers using a base (a.k.a. radix) of 22 to 6262. The symbo

2020ICPC·小米 网络选拔赛第二场 Determinant(行列式)

题意: 按照题目规则组成的矩阵,求行列式值。 思路: 流下了不会线代的泪水,虽然最后推出来了,但是签到题那么久不应该。 按照行列式的性质可以有如下变化 1 2 3 4 5 + x 6 7 8 9 \begin{matrix} 1 & 2 & 3 \\ 4 & 5+x & 6 \\ 7 & 8 & 9 \end{matrix} 147​25+x8​369​ => 1 2 3 4 5