2017 Russian Code Cup (RCC 17), Final Round
2017 Russian Code Cup (RCC 17), Final Round
思路:原题转换一下就是找一个b数组,使得b数组任意两个数的差值都和a数组任意两个数的差值相等
根据题目数据范围, 肯定可以构造一个1, 1+d, 1+2d, 1+3d, ... , 1+(n-1)*d的序列
代码:
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head const int N = , M = 1e6 + ;
int a[N];
bool vis[M];
int main() {
int n, T;
scanf("%d", &T);
while(T--) {
scanf("%d", &n);
for (int i = ; i <= n; i++) scanf("%d", &a[i]);
sort(a+, a++n);
bool f = true;
for (int i = ; i <= n; i++) {
if(a[i] == a[i-]) {
f = false;
break;
}
}
if(!f) {
puts("NO");
continue;
}
f = true;
mem(vis, false);
for (int i = ; i <= n; i++) {
for (int j = i+; j <= n; j++) {
vis[a[j] - a[i]] = true;
}
}
for (int i = ; i <= ; i++) {
if(!vis[i]) {
int cnt = ;
for (int j = i+i; j <= ; j += i) {
if(!vis[j]) cnt++;
else break;
}
if(cnt >= n-) {
f = false;
puts("YES");
for (int j = ; j <= n; j ++) printf("%d ", +(j-)*i);
printf("\n");
break;
}
}
}
if(f) puts("NO");
}
return ;
}
思路:对于每一个字符串xy, 如果它删去最前面字母得到的后缀y是某个串的前缀的话,我们把xy -> y
这样就会形成一个内向树森林,然后就是求任意两个相邻点最多选一个的点集的最大大小,这个可以用树形dp实现
然后就是要用字符串hash把字符串映射到数,这道题卡单hash,要用双hash
代码:
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
//#define mp make_pair
#define pb push_back
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);
//head const int N = 1e6 + , base1 = , base2 = ;
const int MOD = 1e9 + ;
string s[N];
bool vis[N];
vector<int> g[N];
vector<pair<ULL, ULL>> vc;
int dp[N][];
int dfs(int u, int o, int st) {
if(~dp[u][st]) return dp[u][st];
if(vis[u]) vis[u] = false;
int ans = ;
if(st) ans = ;
for (int v : g[u]) {
if(v != o) {
if(st == ) ans += dfs(v, u, );
else ans += max(dfs(v, u, ), dfs(v, u, ));
}
}
return dp[u][st] = ans;
}
int main() {
fio;
int T, n;
cin >> T;
while(T--) {
cin >> n;
for (int i = ; i < n; i++) cin >> s[i];
vc.clear();
for (int i = ; i < n; i++) {
ULL pre1 = , pre2 = ;
for (int j = ; j < s[i].size(); j++) {
pre1 = (pre1*base1 + s[i][j]-'a'+) % MOD;
pre2 = pre2*base2 + s[i][j]-'a'+;
vc.pb({pre1, pre2});
}
}
sort(vc.begin(), vc.end());
for (int i = ; i < n; i++) {
ULL pre1 = , nxt1 = , pre2 = , nxt2 = ;
for (int j = ; j < s[i].size(); j++) {
pre1 = (pre1*base1 + s[i][j]-'a'+) % MOD;
pre2 = pre2*base2 + s[i][j]-'a'+;
if(j == ) {
int t = lower_bound(vc.begin(), vc.end(), pair<ULL,ULL>{pre1, pre2}) -vc.begin();
if(!vis[t]) {
vis[t] = true;
}
}
else {
nxt1 = (nxt1*base1 + s[i][j]-'a'+) % MOD;
nxt2 = nxt2*base2 + s[i][j]-'a'+;
int t = lower_bound(vc.begin(), vc.end(), pair<ULL,ULL>{pre1, pre2}) - vc.begin();
if(!vis[t]) {
vis[t] = true;
int tt = lower_bound(vc.begin(), vc.end(), pair<ULL,ULL>{nxt1, nxt2}) - vc.begin();
if(tt != vc.size() && vc[tt] == pair<ULL,ULL>{nxt1, nxt2}) {
g[t].pb(tt);
g[tt].pb(t);
}
}
}
}
}
int up = vc.size();
for (int i = ; i < up; i++) dp[i][] = dp[i][] = -;
int ans = ;
for (int i = ; i < up; i++) {
if(vis[i]) {
ans += max(dfs(i, i, ), dfs(i, i, ));
}
}
cout << ans << endl;
for (int i = ; i < up; i++) g[i].clear(), vis[i] = false;
}
return ;
}
2017 Russian Code Cup (RCC 17), Final Round的更多相关文章
- 2017 Russian Code Cup (RCC 17), Elimination Round D - Acute Triangles
D - Acute Triangles 思路: 极角排序+点积叉积 在一个三角形中,如果它是直角或者顿角三角形,那么直角和顿角只会出现一次 所以直角和顿角三角形的个数等于直角和顿角的个数 所以锐角三角 ...
- 2016 Russian Code Cup (RCC 16), Final Round B - Cactusophobia
B - Cactusophobia 思路: 点双联通分量+最大流 用tarjan求出每个点双联通分量 对于大小大于1的点双联通分量,它就是个环,那么源点和这个环相连, 容量为环的大小减一,这个环和环上 ...
- [Russian Code Cup 2017 - Finals [Unofficial Mirror]]简要题解
来自FallDream的博客,未经允许,请勿转载,谢谢. Div1难度+ACM赛制 和几个大佬组队逛了逛 A.给一个大小为n的集合ai(1<=ai<=1000000),要求你构造一个大小 ...
- CF Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)
1. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort 暴力枚举,水 1.题意:n*m的数组, ...
- 2017中国无人机公开赛 总决赛 CDR Final 竞赛规则
2017中国无人机公开赛总决赛 CDR Final竞赛规则 V2 二〇一七年八月(修订) 一. 竞赛项目描述(一) 无人机绕标竞速赛(专业组)飞行员通过佩戴眼镜或显示屏采用第一视角飞行,使用无线电遥控 ...
- Yandex.Algorithm 2018, final round
Yandex.Algorithm 2018, final round A Smart Vending B LIS vs. LDS C Eat And Walk D Search Engine E Gu ...
- Google Code Jam Africa 2010 Qualification Round Problem B. Reverse Words
Google Code Jam Africa 2010 Qualification Round Problem B. Reverse Words https://code.google.com/cod ...
- IntelliJ IDEA 2017.3.5 安装 lombok-plugin-0.17 失败,通过网络下载总是超时
1.问题: IntelliJ IDEA 2017.3.5 安装 lombok-plugin-0.17 失败,通过网络下载总是超时: 2.原因:IntelliJ IDEA 2017.3.5 目前还不支持 ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
随机推荐
- vs防止编译不能连接生成pdb文件
问题的原因:debug和release版本生成的目标文件名称(Target Name)都一样,所以导致链接失败:
- jquery基础学习之AJAX篇(五)
理解不深,只知道这么用 jquery 中ajax的请求方法 $.ajax({ url:‘http://...’, //请求网址 type:'GET', //请求方法 success:function( ...
- 获取子字符串函数MidStr
MidStr返回指定范围内的字符串.该函数有三个参数.第一个参数为源字符串,第二个参数为起点(下标从1开始),第三个参数为结束点.通过第二.第三个参数则可指定要复制字符串的范围. function M ...
- Python+Django 后台view异步接不到参数问题
因为后台需获取前台的多个ID参数(checkbox) //获取checkbox的每个ID并放到数组内var _items = []; var items = document.getElementsB ...
- linux c生成唯一文件名称
linux c生成唯一文件名称可用mktemp()或mkstemp()函数
- Spring框架源码阅读之Springs-beans(一)容器的基本实现概述(待续)
去年通过实际框架代码的阅读,以及结合<Spring源码深度解析>和<Spring技术内幕>的阅读,对Spring框架内Bean模块有了一个整体性的认识.对此进行的总结性整理和回 ...
- Asp.net 程序连接orcle如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,
本人使用orcale11g 安装orcale 之类以及navicat配置在这里不提,之后会写一篇文章来说明. 到此已经安装和配置navicat访问数据正常,但是运行Asp.net 程序报错 问题如下 ...
- OfficeOpenXml:World、Excel导出导入库
基础库:EPPlus 根据模版:OfficeOpenXml.Entends
- windows----------windows查看端口是否被占用
假如我们需要确定谁占用了我们的80端口在windows命令行窗口下执行: netstat -aon|findstr "80" TCP 127.0.0.1:80 0.0.0.0:0 ...
- The Designer (笛卡尔定理+韦达定理 || 圆的反演)
Nowadays, little haha got a problem from his teacher.His teacher wants to design a big logo for the ...