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出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
随机推荐
- RMQPOJ3264
Balanced Lineup POJ-3264 DP分析 设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值.(DP的状态) 初状态是F[i,0]=A[i] 状态 ...
- [daily][device][archlinux][trackpoint] 修改指点杆速度/敏捷度
修改指点杆速度,敏捷度: [root@T7 ~]# echo > /sys/devices/platform/i8042/serio1/serio2/sensitivity [root@T7 ~ ...
- keepalived实现高可用
准备: 1.A-centos(192.168.6.177) 端口为9898的服务 2.B-ubuntu(192.168.6.182) 端口为9898的服务 3.keepalived安装包https ...
- js篇-解析url链接里面的参数名和参数值
项目背景是,链接为:https://paladin.pingan.com.cn/jf/?appId=PA00200000000_01_APP&id=123456#/fundRank 要求拿到: ...
- C++的默认构造函数
待看文章:C++ 合成默认构造函数的真相 默认构造函数指不带参数或者所有参数都有缺省值的构造函数!!! 类的默认构造函数可以使得在实例化该类的对象时不用提供参数,但是类也可以不含默认构造函数,这样在实 ...
- sublime设置tab为四个空格
在首选项->设置里: 添加: "tab_size": 4, "translate_tabs_to_spaces": true,
- uvm设计分析——reg
项目中的reg_model一般只有一份,set到reg_sequence上,所以多个sequence并行启动结束的时候,reg model会成为一个共享资源. uvm_reg_field中的volat ...
- java解答:有17个人围成一圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号?
package ttt; import java.util.HashMap; import java.util.Map.Entry; /** * 有17个人围成一圈(编号0~16),从第0号的人开始从 ...
- Spring Cloud配置中心(Config)
Spring Cloud配置中心(Config) Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件.比如:配置中心.Eureka服务发现. 消息总线.熔断机制等. 配置中心在 ...
- Nginx技术研究系列4-Nginx监控-Nginx+Telegraf+Influxb+Grafana
搭建了Nginx集群后,需要继续深入研究的就是日常Nginx监控. Nginx如何监控?相信百度就可以找到:nginx-status 通过Nginx-status,实时获取到Nginx监控数据后,如何 ...