A - Hanzo vs. Genji

留坑。

B - Fraction

水。

 #include <bits/stdc++.h>
using namespace std; inline int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
} int t, n;
int a[], b[]; int main()
{
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
scanf("%d", &n);
for (int i = ; i <= n; ++i) scanf("%d", a + i);
for (int i = ; i <= n; ++i) scanf("%d", b + i);
int p = b[n], q = a[n];
for (int i = n - ; i >= ; --i)
{
int tq = a[i] * q + p;
int tp = b[i] * q;
p = tp, q = tq;
int Gcd = gcd(p, q); p /= Gcd, q /= Gcd;
}
int Gcd = gcd(p, q); p /= Gcd, q /= Gcd;
printf("Case #%d: %d %d\n", kase, p, q);
}
return ;
}

C - Rotate String

留坑。

D - Triangle

水。

 #include <bits/stdc++.h>
using namespace std; int fic[]; int t, n; int main()
{
fic[] = fic[] = ;
for (int i = ; i <= ; ++i) fic[i] = fic[i - ] + fic[i - ];
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
scanf("%d", &n);
int pos = upper_bound(fic + , fic + , n) - fic;
printf("Case #%d: %d\n", kase, n - pos + );
}
return ;
}

E - The Fastest Runner Ms. Zhang

留坑。

F - Harmonic Value Description

题意:有一个1-n的全排列,定义一个值$\sum_{i = 1}^{i = n - 1} gcd(p_i, p_{i + 1})$ 求这个值第k大的数列

思路:首先相邻的奇数的gcd为1,相邻的偶数的gcd为2

分类讨论:k=1输出原序列

k为偶数,将k和2*k提前输出在按照原序列输出,提供的贡献就是k-1

k为奇数,将3开始的k-1个奇数提前,其他按照原序列输出,每个奇数的提前会导致左右的偶数产生贡献为2

 #include<bits/stdc++.h>

 using namespace std;

 #define N 10010

 int n, k;
int arr[N];
int vis[N]; int main()
{
int t;
scanf("%d",&t);
for(int cas = ; cas <= t; ++cas)
{
scanf("%d %d",&n, &k);
printf("Case #%d:", cas);
memset(vis, , sizeof vis);
if(k == )
{
for(int i = ; i <= n; ++i) arr[i] = i;
}
else if(k % == )
{
arr[] = k;
arr[] = * k;
int cnt = ;
for(int i = ; i <= n; ++i)
{
if(i == k || i == * k) continue;
arr[cnt++] = i;
}
}
else
{
int cnt = ;
int num = ;
for(int i = ; i < k; ++i)
{
arr[cnt++] = num;
vis[num] = ;
num += ;
}
for(int i = ; i <= n; ++i)
{
if(vis[i]) continue;
arr[cnt++] = i;
}
}
for(int i = ; i <= n; ++i) printf(" %d", arr[i]);
printf("\n");
}
return ;
}

G - Instability

题意:有n个点,m条边,求有多少个点的子集,使得这个子集中点的个数$>= 3$  并且这个子集中存在三个点互相可达,或者互相不可达

思路:根据拉姆齐定理,当点数$>= 6$ 的时候,必然存在这种情况,对于点数3, 4, 5 直接暴力求解

 #include <bits/stdc++.h>
using namespace std; #define ll long long const ll MOD = (ll)1e9 + ; ll fac[], inv[]; inline ll qpow(ll base, ll n)
{
ll res = ;
while (n)
{
if (n & ) res = res * base % MOD;
base = base * base % MOD;
n >>= ;
}
return res;
} inline void Fac_Init()
{
fac[] = ;
for (int i = ; i < ; ++i)
fac[i] = fac[i - ] * i % MOD;
inv[] = qpow(fac[], MOD - );
for (int i = ; i >= ; --i)
inv[i] = inv[i + ] * (i + ) % MOD;
} inline ll C(int a, int b)
{
if (b > a) return ;
if (b == ) return ;
return fac[a] * inv[b] % MOD * inv[a - b] % MOD;
} //ll C[55][55];
//
//void I() {
// for (int i = 0; i < 55; i++) C[i][0] = 1;
// for (int i = 1; i < 55; i++) {
// for (int j = 1; j <= i; j++) {
// C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % MOD;
// }
// }
//} int t, n, m;
bool G[][];
int a[]; inline bool ok(int sz)
{
for (int i = ; i < sz; ++i)
for (int j = i + ; j < sz; ++j)
for (int k = j + ; k < sz; ++k)
{
if (G[a[i]][a[j]] && G[a[j]][a[k]] && G[a[i]][a[k]]) return true;
if (!G[a[i]][a[j]] && !G[a[j]][a[k]] && !G[a[i]][a[k]]) return true;
}
return false;
} inline ll work()
{
ll res = ;
for (a[] = ; a[] <= n; ++a[])
for (a[] = a[] + ; a[] <= n; ++a[])
for (a[] = a[] + ; a[] <= n; ++a[])
{
if (ok()) res = (res + ) >= MOD ? (res + - MOD) : (res + );
for (a[] = a[] + ; a[] <= n; ++a[])
{
if (ok()) res = (res + ) >= MOD ? (res + - MOD) : (res + );
for (a[] = a[] + ; a[] <= n; ++a[])
if (ok()) res = (res + ) >= MOD ? (res + - MOD) : (res + );
}
}
return res;
} inline void Run()
{
Fac_Init();
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
printf("Case #%d: ", kase);
scanf("%d%d", &n, &m);
memset(G, , sizeof G);
for (int i = , u, v; i <= m; ++i)
{
scanf("%d%d", &u, &v);
G[u][v] = G[v][u] = ;
}
ll ans = ;
if (n >= )
{
for (int i = ; i <= n; ++i)
ans = (ans + C(n, i)) % MOD;
}
ans = (ans + work()) % MOD;
printf("%lld\n", ans);
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}

H - Sequence I

题意:给出$arr[]$和$brr[]$ 给出p 求有多少个q  满足 $a_q, a_{q + p}, a_{q + 2p}.....a_{q + (m - 1)p}$ 和$brr[]$ 能够匹配上

思路:多次KMP  注意求nx数组的时候,要用模板中的第一个,不知道为啥。

 #include<bits/stdc++.h>

 using namespace std;

 #define N 1000010

 int arr[N];
int brr[N]; int n, m, p; inline void preKMP(int x[], int m, int kmpNext[])
{
int i, j;
j = kmpNext[] = -;
i = ;
while(i < m)
{
while(- != j && x[i] != x[j]) j = kmpNext[j];
kmpNext[++i] = ++j;
}
} int nxt[N]; int KMP_count(int x[], int m, int y[], int n)
{
preKMP(x, m, nxt);
int ans = ;
for(int k = ; k < p; ++k)
{
int i = k, j = ;
while(i < n)
{
while(j != - && y[i] != x[j]) j = nxt[j];
i += p;j++;
if(j >= m)
{
ans++;
j = nxt[j];
}
}
}
return ans;
} int main()
{
int t;
scanf("%d", &t);
for(int cas = ; cas <= t; ++cas)
{
scanf("%d %d %d",&n, &m, &p);
for(int i = ; i < n; ++i) scanf("%d", arr + i);
for(int i = ; i < m; ++i) scanf("%d", brr + i);
int ans = KMP_count(brr, m, arr, n);
printf("Case #%d: %d\n", cas, ans);
}
return ;
}

I - Sequence II

题意:给出一个$arr[]$ ,每次询问给出l, r  求这个区间内第一次出现的数中,第K个数的下标

思路:裸的主席树

 #include <bits/stdc++.h>
using namespace std; #define N 200010
#define M N * 50 int t, n, q, ans;
int vis[N], arr[N];
int T[N], L[M], R[M], C[M], tot; inline int build(int l, int r)
{
int root = tot++;
C[root] = ;
if (l < r)
{
int mid = (l + r) >> ;
L[root] = build(l, mid);
R[root] = build(mid + , r);
}
return root;
} inline int update(int root, int pos, int val)
{
int newroot = tot++, tmp = newroot;
C[newroot] = C[root] + val;
int l = , r = n;
while (l < r)
{
int mid = (l + r) >> ;
if (pos <= mid)
{
L[newroot] = tot++, R[newroot] = R[root];
newroot = L[newroot], root = L[root];
r = mid;
}
else
{
L[newroot] = L[root], R[newroot] = tot++;
newroot = R[newroot], root = R[root];
l = mid + ;
}
C[newroot] = C[root] + val;
}
return tmp;
} inline int query(int root, int pos)
{
int l = , r = n;
int res = ;
while (l < r)
{
int mid = (l + r) >> ;
if (pos <= mid)
{
root = L[root];
r = mid;
}
else
{
res += C[L[root]];
root = R[root];
l = mid + ;
}
}
return res + C[root];
} inline int query2(int root, int k)
{
int l = , r = n;
int res = ;
while (l < r)
{
int mid = (l + r) >> ;
if (C[L[root]] >= k)
{
root = L[root];
r = mid;
}
else
{
k -= C[L[root]];
root = R[root];
l = mid + ;
}
}
return l; } int main()
{
scanf("%d", &t);
for (int kase = ; kase <= t; ++kase)
{
printf("Case #%d:", kase);
scanf("%d%d", &n, &q); tot = ;
for (int i = ; i <= n; ++i) scanf("%d", arr + i);
T[n + ] = build(, n);
memset(vis, , sizeof vis);
for (int i = n; i >= ; --i)
{
if (vis[arr[i]] == )
{
T[i] = update(T[i + ], i, );
}
else
{
T[i] = update(T[i + ], vis[arr[i]], -);
T[i] = update(T[i], i, );
}
vis[arr[i]] = i;
}
ans = ;
for (int i = , l, r; i <= q; ++i)
{
scanf("%d%d", &l, &r);
l = (l + ans) % n + ;
r = (r + ans) % n + ;
if (l > r) swap(l, r);
if (l == r)
{
printf(" %d", l);
ans = l;
continue;
}
int k = query(T[l], r); k = (k + ) / ;
ans = query2(T[l], k);
printf(" %d", ans);
}
puts("");
}
return ;
}

J - Ugly Problem

题意:给出一个数,求这个数能够被多少个回文数相加得到,个数不能超过50,输出这些数

思路:如果是10000 这样的数,那么就取9999  否则 就是  位数减半的前一位-1然后右半部分回文得到回文数

 #include<bits/stdc++.h>

 using namespace std;

 int main() {
int t;
char st[];
int a[],b[],ans[][];
int x,y;
int i,j,k,len,cnt,kase;
scanf("%d",&t);
kase=;
while (t--) {
printf("Case #%d:\n",++kase);
scanf("%s",st);
len=strlen(st);
for (i=;i<len;++i)
a[len-i]=st[i]-;
x=len;
cnt=;
while (x>) {
cnt++;
k=x/+;
memset(b,,sizeof b);
while (k<=x) {
if (a[k]==) b[k]=;
else
{
b[k]=a[k]-;
k++;
break;
}
k++;
}
while (k<=x) {
b[k]=a[k];
k++;
}
y=x;
for (i=;i<=x/;++i)
b[i]=b[y-i+];
if (b[y]==) {b[]=; y--;}
ans[cnt][]=y;
for (i=y;i>=;--i) {
ans[cnt][i]=b[i];
//printf("%d",b[i]);
a[i]=a[i]-b[i];
}
//printf("\n");
for (i=;i<=x;++i)
if (a[i]<) {
a[i]=a[i]+;
a[i+]--;
}
while (a[x]==) --x;
}
if (a[]!=) {cnt++; ans[cnt][]=; ans[cnt][]=a[];}
printf("%d\n",cnt);
for (i=;i<=cnt;++i) {
for (j=ans[i][];j>=;--j) printf("%d",ans[i][j]);
printf("\n");
}
}
return ;
}

K - Binary Indexed Tree

留坑。

2016 CCPC 长春 Solution的更多相关文章

  1. 2016 CCPC长春重现赛

    1.2016中国大学生程序设计竞赛(长春)-重现赛 2.总结:会做的太少,应变能力也不行,或者说猜题目的能力不行 02  水 04  HDU 5914  Triangle 1.题意:1~n,n个数,问 ...

  2. 2016 CCPC 东北地区重现赛

    1. 2016 CCPC 东北地区重现赛 2.总结:弱渣,只做出01.03.05水题 08   HDU5929 Basic Data Structure    模拟,双端队列 1.题意:模拟一个栈的操 ...

  3. HDU 5923 Prediction(2016 CCPC东北地区大学生程序设计竞赛 Problem B,并查集)

    题目链接  2016 CCPC东北地区大学生程序设计竞赛 B题 题意  给定一个无向图和一棵树,树上的每个结点对应无向图中的一条边,现在给出$q$个询问, 每次选定树中的一个点集,然后真正被选上的是这 ...

  4. 2016 ccpc 网络选拔赛 F. Robots

    Robots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  5. 2016 CCPC 长春站现场赛总结(流水账= =)

    总的来说在写这篇总结的时候心情还是愉悦的,因为第一次参加区域赛就越过铜直接拿了个银~开心之情无法用语言形容啊233= =... 从杭州坐火车到长春,去的时候24个小时,回来32个小时,在路上就花了2天 ...

  6. 2016 CCPC 合肥赛区 平行四边形//打铁记录..... 背锅还是我在行 此处@ctr 233

    也希望自己记住这些题并不是真的很难很难... 平行四边形... 这个题要两个直线上的两个点和给出点中的两个点组成的平行四边形面积最大. 确定两个点后,发现线上的点随之确定.那么我们解出线上的点 然后求 ...

  7. 2016 CCPC 杭州站 小结

    5题倒数第一,铜……(我就知道我们很稳!!!哼!! 这一次心态完全爆炸 开场我就没有按照平时的顺序读题 然后zr的A题wa 我F题T xl说B是一个最小生成树,又说是最小树形图,不会写 K题完全没思路 ...

  8. HDU 5918 SequenceI (2016 CCPC长春站 KMP模版变形)

    这个题目的数据应该是比较弱的,赛场上的时候我们暴力也过了,而且我的kmp居然比暴力还要慢-- 这个变形并不难,跳着选数,把漏掉的位置补上就可以了. 代码如下: #include<iostream ...

  9. 2016 ccpc 杭州赛区的总结

    毕竟是在杭电比的,和之前大连的icpc不同,杭电毕竟是隔壁学校,来回吃住全都是在自家寝室,方便! 不过说到方便也是有点不方便,室友都喜欢玩游戏,即使我昨晚9.30就睡觉了,仍然是凌晨一点才睡着,233 ...

随机推荐

  1. 在(MRv1)中JobTracker工作方式

    在 Hadoop MapReduce 中,JobTracker 具有两种不同的职责: 管理集群中的计算资源,这涉及到维护活动节点列表.可用和占用的 map 和 reduce slots 列表,以及依据 ...

  2. kafka中配置细节

    今天遇到kafka发送消息的时候,一直报Kafka“Failed to send messages after 3 tries”错误,根据网上找问题,修改各种配置参数,各种重启,还是解决不了问题. 郁 ...

  3. 第六篇:GPU 并行优化的几种典型策略

    前言 如何对现有的程序进行并行优化,是 GPU 并行编程技术最为关注的实际问题.本文将提供几种优化的思路,为程序并行优化指明道路方向. 优化前准备 首先,要明确优化的目标 - 是要将程序提速 2 倍? ...

  4. 宏(define)与常量(const)

    http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=402470669&idx=1&sn=e34db91190d8d46f ...

  5. webpack之跨域

    前后端分离开发中,本地前端开发调用接口会有跨域问题,一般有以下几种解决方法: 直接启动服务端项目,再将项目中的资源url指向到前端服务中的静态资源地址,好处在于因为始终在服务端的环境中进行资源调试,不 ...

  6. 内网安全监控和预警平台架构设想(OSSIM)

    内网安全监控和预警平台架构设想 需求简介 内网安全监控和预警平台是内网安全建设的物质基础,是所有甲方安全建设的必备武器库,无论是应急响应和追踪溯源,还是预知告警.自我清查:做下来总的体会是几个问题永远 ...

  7. 【BZOJ2137】submultiple 高斯消元求伯努利数

    [BZOJ2137]submultiple Description 设函数g(N)表示N的约数个数.现在给出一个数M,求出所有M的约数x的g(x)的K次方和. Input 第一行输入N,K.N表示M由 ...

  8. 【BZOJ4523】[Cqoi2016]路由表 Trie树模拟

    [BZOJ4523][Cqoi2016]路由表 Description 路由表查找是路由器在转发IP报文时的重要环节.通常路由表中的表项由目的地址.掩码.下一跳(Next Hop)地址和其他辅助信息组 ...

  9. {Repeater控件} Repeater控件的用法流程及实例

    一.Repeater控件的用法流程及实例: 1.首先建立一个网站,新建一个网页index.aspx. 2.添加或者建立APP_Data数据文件,然后将用到的数据库文件放到APP_Data文件夹中. 3 ...

  10. gradle下的第一个SpringMVC应用

    新建gradle project 缺少了很多文件夹和文件,我们自己补充,补充完的目录如下: HelloController: package controller; import javax.serv ...