Nowcoder 提高组练习赛-R7

  https://www.nowcoder.com/acm/contest/179#question

  中间空了两场,因为实在是太难了...

  第五场的第二题好像还比较可做,是一个最小生成树的结论题,注意到$2^i$可以认为是二进制下的数,即使把比它小的所有$2^x$全加起来也还是比他小,这一点做题的时候可以用一下.

  第六场的第一题是一道很奇怪的题目,给图上的每条边赋一个权值,求从每个点出发的最长路以及整条路径上所有数字组成一个高进制数的最大字典序(注意最长路可能有很多条).这道题首先缩点,如果走到环里了就是无限长,求出最长路,然后建反图.按照最长路的长度降序排序,再更新前面的值,但是这么做只有$60$分,因为只考虑了每个点前一条边的数字大小,如果有两条边的数字是一样的,就成了随机选择,但是沿着这条边接着走时可能就会发现两条路径一优一劣了.所以好像还要根据每个点目前的字典序大小对边排序...?好麻烦啊.

  

  今天的题看起来好像简单一点?

  A:https://www.nowcoder.com/acm/contest/179/A

  题意概述:小清新模拟题.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# include <cmath>
# include <algorithm>
# define R register int
# define ll long long using namespace std; const int dx[]={-,-,-,,,,,};
const int dy[]={-,,,-,,-,,};
const int maxn=;
int n,m,k,r,no,T,x,y,w;
int act[maxn][maxn],ope[maxn][maxn],vis[maxn][maxn]; int main()
{
scanf("%d%d%d",&n,&m,&k);
no=k;
for (R i=;i<=n;++i)
for (R j=;j<=m;++j)
{
scanf("%d",&r);
if(r>) act[i][j]=r;
else act[i][j]=-;
}
for (R i=;i<=n;++i)
for (R j=;j<=m;++j)
scanf("%d",&ope[i][j]);
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&x,&y);
if(ope[x][y]==)
{
printf("-1 -1");
return ;
}
if(vis[x][y])
{
printf("-1 -1");
return ;
}
if(no<&&act[x][y]==-)
{
printf("-1 -1");
return ;
}
if(act[x][y]==-)
{
w+=;
no-=;
}
else no+=act[x][y];
if(no>=k) no=k;
vis[x][y]=true;
for (R d=;d<;++d)
{
int xx=x+dx[d];
int yy=y+dy[d];
if(xx<||xx>n||yy<||yy>m) continue;
ope[xx][yy]=true;
}
}
printf("%d %d",no,w);
return ;
}

A

  B:https://www.nowcoder.com/acm/contest/179/B

  题意概述:每个数字有一种颜色,连到以$1$为根的一棵树上,每个点的父亲必须是它的一个因数,同一颜色且连在一起的算一个联通块,求通过合理的连边能制造的最多联通块。

  看起来像是个很难的题目,但是其实贪心就行,只要能连到颜色不同的父亲上就连,不能连就连到$1$上即可.复杂度$O(N\sqrt{N})$.更合理的做法是对于每一个数字枚举倍数,运用调和级数计算复杂度$O(NlogN)$

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# include <cmath>
# include <algorithm>
# define R register int
# define ll long long using namespace std; const int maxn=;
int n,a[maxn],f[maxn],ans,fa,t; int main()
{
scanf("%d",&n);
ans=;
for (R i=;i<=n;++i)
scanf("%d",&a[i]);
for (R i=;i<=n;++i)
{
fa=;
for (R j=;j*j<=i;++j)
{
if(i%j) continue;
t=j;
if(fa==&&a[t]!=a[i])
f[i]=t,ans++,fa=true;
if(j==) continue;
t=i/j;
if(fa==&&a[t]!=a[i])
f[i]=t,ans++,fa=true;
}
if(!fa) f[i]=;
}
printf("%d",ans);
return ;
}

B

  C:https://www.nowcoder.com/acm/contest/179/C

  题意概述:一个$n$个点$m$条边的无权图,给出多组询问问是否有从$u$到$v$走恰好$l$步的方案数;$n<=100,q<=1000,l<=10^9$

  非常板子的矩阵乘法!然而跑的非常慢,于是首先按照询问的$l$排序,分段进行矩阵乘法.然而...爆零了!为什么?离线做之后一定要记得还原成原来的顺序输出!!!

  改过来也过不了,听说改成倍增+$bitset$就过了.最近牛客网怎么总是出这种有点卡常的题目啊.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <string>
# include <cmath>
# include <algorithm>
# define R register int
# define ll long long using namespace std; const int maxn=;
int n,m,u,v,q,l,t[];
struct mat
{
int a[maxn][maxn];
void init()
{
memset(a,,sizeof(a));
for (R i=;i<=n;++i)
a[i][i]=;
}
}a,ans,y;
struct ask
{
int l,u,v,id;
}s[];
bool cmp (ask a,ask b)
{
return a.l<b.l;
} mat mul (mat a,mat b)
{
mat c;
memset(c.a,,sizeof(c.a));
for (R i=;i<=n;++i)
for (R j=;j<=n;++j)
for (R k=;k<=n;++k)
{
if(a.a[i][k]&&b.a[k][j]) c.a[i][j]=;
if(c.a[i][j]) break;
}
return c;
} mat qui (mat a,int b)
{
mat ans;
ans.init();
while(b)
{
if(b&) ans=mul(ans,a);
a=mul(a,a);
b=b>>;
}
return ans;
} inline char gc()
{
static char now[<<],*S,*T;
if (T==S)
{
T=(S=now)+fread(now,,<<,stdin);
if (T==S) return EOF;
}
return *S++;
}
inline int read()
{
R x=;
register char ch=gc();
while(!isdigit(ch))
ch=gc();
while(isdigit(ch)) x=(x<<)+(x<<)+ch-'',ch=gc();
return x;
} int main()
{
n=read(),m=read();
for (R i=;i<=m;++i)
{
u=read(),v=read();
a.a[u][v]=true;
}
y=a;
q=read();
for (R i=;i<=q;++i)
s[i].l=read(),s[i].u=read(),s[i].v=read(),s[i].id=i;
sort(s+,s++q,cmp);
ans.init();
for (R i=;i<=q;++i)
{
int p=s[i].l-s[i-].l;
if(p)
{
a=qui(y,p);
ans=mul(ans,a);
}
if(ans.a[ s[i].u ][ s[i].v ]) t[ s[i].id ]=;
}
for (R i=;i<=q;++i)
if(t[i]) puts("YES");
else puts("NO");
return ;
}

C

  ---shzr

Nowcoder 提高组练习赛-R7的更多相关文章

  1. Nowcoder 提高组练习赛-R1

    https://www.nowcoder.com/acm/contest/172#question 单人报名300元,五人合报免费,于是就和学弟同学学长们组了一个三世同堂的队伍,高一的学长wzhqwq ...

  2. Nowcoder 提高组练习赛-R3

    https://www.nowcoder.com/acm/contest/174#question 今天的题好难呀,只有94个人有分.然后我就爆零光荣 考到一半发现我们班要上物理课,还要去做物理实验( ...

  3. Nowcoder 提高组练习赛-R2

    https://www.nowcoder.com/acm/contest/173#question T1:https://www.nowcoder.com/acm/contest/173/A 题意概述 ...

  4. nowcoder 提高组模拟赛 选择题 解题报告

    选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...

  5. nowcoder 提高组模拟赛 最长路 解题报告

    最长路 链接: https://www.nowcoder.com/acm/contest/178/A 来源:牛客网 题目描述 有一张 \(n\) 个点 \(m\) 条边的有向图,每条边上都带有一个字符 ...

  6. nowcoder提高组2题解

    T1 化一下试子就ok code #include<cstdio> #include<algorithm> inline long long read() { long lon ...

  7. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  8. 刷题总结——mayan游戏(NOIP2011提高组day2T3)

    题目: 题目背景 NOIP2011提高组 DAY1 试题. 题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

  9. 刷题总结——飞扬的小鸟(NOIP2014提高组)

    题目: 题目背景 NOIP2014 提高组 Day1 试题. 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面 ...

随机推荐

  1. mongdb基本操作和更新操作

    1.创建数据库 use hqj 不会真正的创建db,只有insert之后才会创建2.查看数据库show dbs3.插入文档db.hqj.insert({name:'111'})4.查看所有的文档sho ...

  2. Java Spring学习笔记----Bean的依赖注入(设值注入方式)1

    Spring常用的两种依赖注入方式:一种是设值注入方式,利用Bean的setter方法设置Bean的属性值:另一种是构造注入,通过给Bean的构造方法传递参数来实现Bean的属性赋值: 1.设值注入方 ...

  3. 排序算法(5)--Selection Sorting--选择排序[2]--Heap Sort--堆排序

    1.基本思想 具有n个元素的序列 (h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1) (i=1,2,...,n ...

  4. 排序算法(3)--Insert Sorting--插入排序[3]--Shell Sort--希尔排序

    1.基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 2.实现原理 对于n ...

  5. 微信公众号本地断点调试(frp反向代理或Remote Debugger)

    问题描述: 需要开发微信授权和订阅推送,但是感觉调试不方便,就试着几种方式.因为是用的C#开发,Visual Studio工具自带配套的远程工具 (Remote Debugger).但是感觉不稳定,容 ...

  6. 工作记录(JS向textarea添加固定内容、通过固定字符将字符串分割为数组)

    第一个是在 textarea 输入框中添加固定的内容. 代码如下: <textarea id="text" cols="30" rows="10 ...

  7. SAP FI/CO 基本概念

    每一个SAP从业者都对这些概念不陌生,理解透了这些概念,对SAP的业务体系构架才能有明确地认识. 1.集团(client)的概念:是SAP中的最高等级:每一个集团建立主数据库. 2.公司(Compan ...

  8. 如何使用活字格快速搭建Bug管理系统?

    Bug管理系统是指一种用于添加Bug.修复Bug.测试Bug.删除Bug的一套完整的Bug管理系统. 完整的Bug管理过程包含: 1.测试人员利用Bug管理系统提交发现的bug. 2.测试人员把bug ...

  9. VMware 创建VMware9虚拟机及设置详细教程

    创建VMware9虚拟机及设置详细教程 by:授客 QQ:1033553122 1.点击Create a New Virtual Machine图标按钮,或者file->new virtual ...

  10. IDEA报错:Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. ('crmWatcherService'错误)

    单表插入项目,插入前正常,插入后运行webapplication报错: run: debug: 于webapplication报错: Injection of autowired dependenci ...