solve 6/11

补题:

A.迷宫

Code:zz

Thinking:zz kk

把每个节点的深度都处理出来,同一深度的点的冲突度为 (x-1),x为同层次点数减一。

然后冲突度不断下传(冲突度为3,则最多下传3层)

最后答案就是最后一层的深度加上冲突度。

#include<bits/stdc++.h>
#define CLR(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=;
int n,m;
int a[maxn];
bool vis[maxn];
ll ans[maxn],No[maxn];
struct egde{
int to,Next;
}e[maxn<<];
struct node{
int u;
ll time;
};
int head[maxn],tot;
void init(){
CLR(head,-),tot=;
CLR(vis,);
CLR(ans,);
CLR(No,);
}
void addv(int u,int v){
e[++tot].to=v;
e[tot].Next=head[u];
head[u]=tot;
}
void bfs(){
queue<node >q;
q.push({,});
vis[] = true;
ans[] = ;
if(a[])
{
No[]++;
}
while(!q.empty())
{
node s=q.front();
q.pop();
int u=s.u;
ll time=s.time;
for(int i=head[u];i!=-;i=e[i].Next)
{
int v=e[i].to;
if(!vis[v])
{
vis[v] = true;
q.push({v,time + });
ans[v] = time + + ;
if(a[v])
{
No[time + + ]++;
}
}
}
}
}
int main(){
while(cin>>n)
{
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
init();
for(int i=;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
addv(u,v),addv(v,u);
}
bfs();
ll aans = ,mm = ;
for(int i = ;i <= n;i++)
{
if(a[i])
{
mm = max(mm,ans[i]);
}
}
for(int i = ;i <= n;i++)
{
if(mm == i)
{
break;
}
No[i + ] += max((ll),No[i] - );
}
printf("%lld\n",No[mm] - + mm - );
}
}

C.斐波那契数列

Code:pai爷  zz  kk

Thinking:pai爷  zz  kk

根据式子观察得,这个式子就是斐波那契数列丢掉自己二进制的低位1的前缀和,也就是 fib n - lowbit(fib n),所以暴力打表把减掉的这部分打出来,找规律,然后矩阵快速幂求斐波那契数列前n项和,减一减。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<map>
using namespace std;
typedef long long ll;
const int p=;
const int mod = ;
ll f[],sum[],r;
int t;
void mul(ll f[], ll a[][])
{
ll c[];
memset(c, , sizeof(c));
for (int j = ; j < ; j++)
for (int k = ; k < ; k++)
c[j] = (c[j] + (long long)f[k] * a[k][j]%mod) % mod;
memcpy(f, c, sizeof(c));
}
void mulself(ll a[][])
{
ll c[][];
memset(c, , sizeof(c));
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
for (int k = ; k < ; k++)
c[i][j] = (c[i][j] + (long long)a[i][k] * a[k][j]%mod) % mod;
memcpy(a, c, sizeof(c));
}
ll quickm(ll n){//求第n项和
ll f[] = { ,, };
ll tep=n-;
ll a[][] = { {,,},{,,},{,,} };
for (; tep; tep >>= )
{
if (tep & ) mul(f, a);
mulself(a);
}
return f[];
} ll solve(ll x,int w)
{
if(x==) return ;
if(x==) return ;
if(x==) return ;
if(x==) return ;
if(x==) return ;
if(x==) return ;
if(x==) return ;
for(int i=w;i>=;i--)
if(x>=1ll**f[i])
{
return (sum[i]+solve(x-*f[i],i-))%p;
}
}
int main()
{
f[]=;sum[]=;
for(int i=;i<=;i++)
{
f[i]=f[i-]*;
sum[i]=(sum[i-]*%p+f[i]*%p)%p;
}
scanf("%d",&t);
while(t--)
{
scanf("%lld",&r);
ll ans=solve(r,);
//printf("%lld\n",ans);
printf("%lld\n",(quickm(r)-ans+p)%p);
}
}

D 二次函数

待补题 初中数学

E 线性探查法

Code:kk

Thinking:kk

先把每个b[ i ]的余数求出来,余数等于i的说明没有冲突,不等于i的,假设偏移量为px,说明他的前px项都在他前面,所以就得到拓扑序,由于要字典序最小,所以用优先队列求拓扑序列。

div2暴力建边即可,div1要线段树优化建边?待学习。

#include<bits/stdc++.h>
#include<unordered_map>
#define CLR(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=;
int n;
ll a[maxn],b[maxn],m[maxn];
int dg[maxn]; struct egde{
int to,Next;
}e[maxn*maxn];
int head[maxn],tot;
void init(){
CLR(head,-),tot=;
}
void addv(int u,int v){
e[++tot].to=v;
e[tot].Next=head[u];
head[u]=tot;
}
struct node{
int pos;
ll val;
friend bool operator <(const node &a,const node &b){
return a.val>b.val;
}
};
priority_queue<node >q;
void Top(){
int top=;
while(!q.empty()){
node s=q.top();
q.pop();
a[++top]=s.val;
for(int i=head[s.pos];i!=-;i=e[i].Next)
{
int pos=e[i].to;
dg[pos]--;
if(dg[pos]==)
{
q.push({pos,b[pos]});
}
}
}
}
int main(){
while(cin>>n)
{
init();
for(int i=;i<n;i++)
{
scanf("%lld",&b[i]);
m[i]=b[i]%n;
}
for(int i=;i<n;i++)
{
if(m[i]==i)
{
q.push({i,b[i]});
}else{
int px=(i-m[i]+n)%n;
while(px>)
{
addv((i-px+n)%n,i);
dg[i]++;
px--;
}
}
}
Top();
for(int i=;i<=n;i++)
{
printf("%lld%c",a[i],(i<n)?' ':'\n');
}
}
}

F 逆序对!

Code:pai爷

Thinking:pai爷

0(n*n)枚举每个数对有贡献的答案为不相同的最高位。

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int p=;
int n,m,x,f[][];
int sum,ans=,chu,yu,a,b;
int main()
{
// freopen("1.txt","r",stdin);
// freopen("1.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&x);
int l=;
while(x>)
{
f[i][++l]=x%;
x/=;
}
f[i][]=l;
}
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
int k;
for(k=max(f[j][],f[i][]);k>=;k--)
if(f[i][k]!=f[j][k]) break; chu=m/(<<(k-));yu=m%(<<(k-));
a=(chu-chu/)*(<<(k-))-;b=chu/*(<<(k-)); sum=yu+;
//printf("chu=%d yu=%d a=%d b=%d sum=%d k=%d\n",chu,yu,a,b,sum,k);
if(chu%==) a+=sum,b=m-a;
else b+=sum,a=m-b;
if(f[i][k]==) ans=(ans+b)%p;
else ans=(ans+a)%p;
ans=(ans+p)%p;
//printf("%d\n",ans);
}
printf("%d\n",ans);
}

G 抢红包机器人

Code:zz

Thinking:zz

暴力枚举每个人是机器人的情况,再dfs查找出所有的机器人,选取机器人最少的情况。

//#pragma comment(linker, "/STACK:102400000,102400000")
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<math.h>
#include<cmath>
#include<time.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<algorithm>
#include<numeric>
#include<stack>
#include<bitset>
#include<unordered_map>
const int maxn = 0x3f3f3f3f;
const double EI = 2.71828182845904523536028747135266249775724709369995957496696762772407663035354594571382178525166427;
const double PI = 3.141592653589793238462643383279;
using namespace std;
struct s
{
int k;
int c[];
}z[];
vector<int>ve[];
int vis[];
unordered_map<int,int>mp[];
inline void dfs(int pos)
{
int si,i;
si = ve[pos].size();
for(i = ;i < si;i++)
{
if(!vis[ve[pos][i]])
{
vis[ve[pos][i]] = ;
dfs(ve[pos][i]);
}
}
}
int main(void)
{
//ios::sync_with_stdio(false);
int n,m,i,j,ans,mi,l;
while(~scanf("%d %d",&n,&m))
{
for(i = ;i <= n;i++)
{
ve[i].clear();
mp[i].clear();
}
for(i = ;i < m;i++)
{
scanf("%d",&z[i].k);
for(j = ;j < z[i].k;j++)
{
scanf("%d",&z[i].c[j]);
}
}
for(i = ;i < m;i++)
{
for(j = z[i].k - ;j >= ;j--)
{
for(l = j - ;l >= ;l--)
{
if(!mp[z[i].c[j]][z[i].c[l]])
{
mp[z[i].c[j]][z[i].c[l]] = ;
ve[z[i].c[j]].push_back(z[i].c[l]);
}
}
}
}
ans = ;
for(i = ;i <= n;i++)
{
memset(vis,,sizeof(vis));
vis[i] = ;
dfs(i);
mi = ;
for(j = ;j <= n;j++)
{
if(vis[j])
{
mi++;
}
}
ans = min(ans,mi);
}
printf("%d\n",ans);
}
return ;
}

H 同构

求补图,然后dp?待补

J 强壮的排列

Code:pai爷

Thinking:pai爷

暴力打表?待补


赛后总结

kk:今天是演员的一天,演队友演自己,开局A题就想错了思路,然后一直想错,两小时才把A题这水题做了,然后E题基本读完题意,稍微写写就得到正解了,结果建边数组少开了,re一发,给队友写个矩阵快速幂的板子,没注意数据范围,long long写成了int,tle一发。影帝影帝,以后演技要好一些,要注意细节。

pai爷:模数复制粘贴错误找了一个小时的bug而且还wa了三发。找规律速度不够快。

zz:这场比赛演技越来越好了,水题想了好多假算法,而且wa以后才发现。找规律的题贡献了一个表。

2019 CCPC-Wannafly Winter Camp Day7(Div2, onsite)的更多相关文章

  1. CCPC-Wannafly Winter Camp Day7 (Div2, onsite)

    Replay Dup4: 啥都不会? 只能看着两位聚聚A题? X: 模拟题不会写, 日常摔锅 u, v分不清, 日常演员 又是自己没理清楚就抢键盘上机导致送了一万个罚时, 日常背锅 A:迷宫 Solv ...

  2. 2020 CCPC Wannafly Winter Camp Day1 C. 染色图

    2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...

  3. 2019 CCPC-Wannafly Winter Camp Day1 (Div2, onsite)

    solve:4/11 补题:6/11 A 机器人 补题:zz 这是一道分类讨论的题目,有一个规律就是如果必须要从第一个区到第二个区,那么最多转区两次(1到2一次,2到1一次),然后分类讨论即可,只要细 ...

  4. 2019 CCPC-Wannafly Winter Camp Day2(Div2, onsite)

    solve 4/11 A Erase Numbers II Code:KK Thinking :KK 用ans表示当前最优答案,maxx表示遍历到的最大数字,一开始ans肯定等于a[ 1 ]+a[ 2 ...

  5. 2019 CCPC-Wannafly Winter Camp Day3(Div2, onsite)

    solve 4/11 补题:5/11 A 二十四点* Code:pai爷  zz Thinking :pai爷 打表找规律,1张牌 10个不可能的 2张牌有 43 种不可能的 3张牌 有74 种不可能 ...

  6. 2019 CCPC-Wannafly Winter Camp Day4(Div2, onsite)

    slove 6/11 A.夺宝奇兵 Code:zz Thinking:zz 贪心即可.这条路线里,点n1和点n2肯定是相连的,接下来,点(n-1)1和点(n-1)2分别是和n1和点n2相连的,一共有两 ...

  7. 2019 CCPC-Wannafly Winter Camp Day5(Div2, onsite)

    solve 5/11 补题:7/11 A Cactus Draw Code:zz Thinking :zz 题意:要在n*n的网格内画上一棵节点数为n树,使得没有边相交. 很好想的构造题,因为网格有n ...

  8. CCPC Wannafly Winter Camp Div2 部分题解

    Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...

  9. CCPC-Wannafly Winter Camp Day5 (Div2, onsite) Sorting(线段树)

    题目链接 题意 对序列进行三种操作: 1.区间求和. 2.将区间小于等于$x$的数不改变相对顺序的前提下放到$x$左边,用同样规则将比$x$大的放到右边. 3.将区间大于$x$的数不改变相对顺序的前提 ...

随机推荐

  1. HTTP 499状态码 nginx下499错误详解-乾颐堂

    日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499.发送字节数是0. 老是有用户反映网站系统时好时坏,因为线上的产 ...

  2. Web测试-day

    昨天太忙忘了写博客,今天补上: 这两天完成的工作: 我们组选定了博客园和CSDN作为对比,进行Web测试. 胡俊辉--找到了10个网页的bug,并完成了bug记录文档,并且对CSDN和博客园进行功能分 ...

  3. 手把手教你看KEGG通路图!

    手把手教你看KEGG通路图! 亲爱的小伙伴们,是不是正关注代谢通路研究?或者你正面对数据,绞尽脑汁?小编当然不能让亲们这么辛苦,今天就跟大家分享KEGG代谢通路图的正确解读方法,还在迷糊中的小伙伴赶紧 ...

  4. myisam,innodb和memory的区别

    1.myisam,innodb和memory的区别如下: 2:InnoDB存储引擎2.1:InnoDB具有事务,回滚,崩溃修复能力和多版本并发的事务安全2.2:关于InnoDB的auto_increm ...

  5. [ASP.NET MVC 小牛之路]03 - Razor语法(转)

    出处:http://www.cnblogs.com/willick/p/3224144.html Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠< ...

  6. Thinkphp 导出csv 先存储在服务器,然后输出链接下载

    public function exportQiandao() { // header("Content-type:text/html;charset=gb2312"); ini_ ...

  7. 用word2013发布csdn博客

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  8. unittest测试框架详谈及实操(五)

    测试报告——生成HTML格式的测试报告 前面的实例输出的所有测试结果都是以命令行日志的方式展示,不止于难看,但也不适合直接把那样的测试结果截图发给相关人员,尤其是领导.这时需要更加友好的测试结果,既能 ...

  9. Autoconf 中文手册

    Autoconf Autoconf Creating Automatic Configuration Scripts Edition 2.13, for Autoconf version 2.13 D ...

  10. redis整理の安全认证

    设置客户端连接后进行任何其他指定前需要使用的密码. tips:因为 redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进 行 150K 次的密码尝试,这意味着你需要指定非常 ...