热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:Wannafly挑战赛27

本文由编程笔记#小编为大家整理,主要介绍了Wannafly挑战赛27相关的知识,希望对你有一定的参考价值。Wannafly挑战赛27
本文由编程笔记#小编为大家整理,主要介绍了Wannafly挑战赛27相关的知识,希望对你有一定的参考价值。


Wannafly挑战赛27

  我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了.

  由于某一场比赛打了一半就咕咕咕了,现在$Rating$已经降得很低了,干脆打一场碰碰运气好了.

  差六名就抽到我发奖品了,就当攒点$rp$给联赛好了.

  T1:http://www.nowcoder.com/acm/contest/215/A

  题意概述:给出长度为$n$的序列, 求有多少对数对 $(i,j)(1<=i

  这次的签到题还是很简单的,$N^2$暴力实在是太假了,但是可以发现数据范围内的完全平方数并不是很多,开一个桶记录之前出现过数的次数,每读入一个数就枚举范围内所有完全平方数进行判断即可.(注意数组下标不能为负)


  技术分享图片技术分享图片

1 # include
2 # include <iostream>
3 # include
4 # include
5 # include <string>
6 # include
7 # define R register int
8 # define ll long long
9
10 using namespace std;
11
12 const int maxn=100005;
13 int n;
14 int a[maxn];
15 int h,t[maxn+5];
16 ll q[maxn],ans;
17
18 int main()
19 {
20 scanf("%d",&n);
21 ll i=0;
22 while (1)
23 {
24 q[++h]=i*i;
25 i++;
26 if(i*i>=200005) break;
27 }
28 for (R i=1;i<=n;++i)
29 {
30 scanf("%d",&a[i]);
31 for (R j=1;j<=h;++j)
32 {
33 if(a[i]>q[j]) continue;
34 if(q[j]-a[i]<=maxn) ans+=t[ q[j]-a[i] ];
35 }
36 t[ a[i] ]++;
37 }
38 printf("%lld",ans);
39 return 0;
40 }


灰魔法师

 

  T2:http://www.nowcoder.com/acm/contest/215/B

  题意概述:给定一棵仙人掌,求最少用多少颜色可以对其染色,一条边连接的两个点不能染相同的染色.$n<=10^5,m<=2 imes 10^5$

  仙人掌?图的色数?我记得这不是一个$NP$完全问题吗?

  技术分享图片

  然而...一个图必须至少使用$n$种颜色才能染色的一个条件是至少存在$n$个点构成一张完全图,对于仙人掌来说,最多出现一个$3$个点构成的环使得色数为$3$,大于等于$4$的情况根本不存在。

  判断答案是否为$1$:没有边答案就是$1$;

  判断答案是否为$2$:黑白染色判断即可.  

  判断答案是否为$3$:找三元环看起来非常麻烦,虽然传说中有一种$O(Msqrt{N})$的做法,但是...不是$1$又不是$2$不就是三了吗?


  技术分享图片技术分享图片

1 # include
2 # include
3 # include
4 # include
5 # include <string>
6 # include
7 # define R register int
8
9 using namespace std;
10
11 const int maxn=100005;
12 const int maxm=200005;
13 int n,m,x,y,h,f;
14 int firs[maxn],vis[maxn];
15 struct edge
16 {
17 int too,nex;
18 }g[maxm<<1];
19
20 void add (int x,int y)
21 {
22 g[++h].too=y;
23 g[h].nex=firs[x];
24 firs[x]=h;
25 }
26
27 void dfs (int x)
28 {
29 int j;
30 for (R i=firs[x];i;i=g[i].nex)
31 {
32 j=g[i].too;
33 if(vis[j]&&vis[j]==vis[x]) f=1;
34 if(vis[j]) continue;
35 if(vis[x]==1) vis[j]=2;
36 if(vis[x]==2) vis[j]=1;
37 dfs(j);
38 }
39 }
40
41 int main()
42 {
43 scanf("%d%d",&n,&m);
44 if(m==0)
45 {
46 printf("1");
47 return 0;
48 }
49 for (R i=1;i<=m;++i)
50 {
51 scanf("%d%d",&x,&y);
52 add(x,y);
53 add(y,x);
54 }
55 vis[1]=1;
56 dfs(1);
57 if(f) printf("3");
58 else printf("2");
59 return 0;
60 }


紫魔法师

  

  T3:http://www.nowcoder.com/acm/contest/215/C

  题意概述:将一棵树删去一些边使得每个联通块的大小$<=k$的方案数.$k<=n<=2000$

  看上去像是个树形$dp$,$dp[i][j]$表示以$i$为根的子树中保留$i$,根处的联通块大小为$j$的方案数,慢慢转移就好.

  当然不行啦!慢慢转移就$TLE$了!你需要的是快快转移.

  $asuldb$和$zutter$两位大佬一同表示树上背包的复杂度是$O(NK)$,我还以为我记错了,直到我造了一棵扫帚树...

  现在的复杂度是$O(TLE)$,但是听说牛客的机器能跑$10^{10}$,就开始了漫长的卡常之旅,首先肯定是一些最简单的$register,inline$,转移的时候只转移到子树大小(扫帚树就是专门卡这个的),后来加上了这个:


  技术分享图片技术分享图片

1 inline char gc()
2 {
3 static char now[1<<22],*S,*T;
4 if (T==S)
5 {
6 T=(S=now)+fread(now,1,1<<22,stdin);
7 if (T==S) return EOF;
8 }
9 return *S++;
10 }
11 inline int read()
12 {
13 R x=0;
14 register char ch=gc();
15 while(!isdigit(ch))
16 ch=gc();
17 while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-0,ch=gc();
18 return x;
19 }


神仙快读

  这个:


  技术分享图片技术分享图片

1 inline int ad (int a,int b)
2 {
3 a+=b;
4 if(a>=mod) a-=mod;
5 return a;
6 }


加法取模优化

  把所有的$long$ $long$换成$int$;

  如果乘法中有一项已经是$0$就不乘了;

  然而结果依然是:

  技术分享图片

  正当大家纷纷退出卡常大赛的时候,我突然想起之前看$pks$的博客中提到的毒瘤优化,试了一下发现在本机编译都过不了,但是尝试了一下"自测",发现牛客网能编译这个!于是就愉快的过掉了这道题.下面是我已经看不大懂的代码.


  技术分享图片技术分享图片

1 #pragma GCC diagnostic error "-std=c++14"
2 #pragma GCC target("avx")
3 #pragma GCC optimize(3)
4 #pragma GCC optimize("Ofast")
5 #pragma GCC optimize("inline")
6 #pragma GCC optimize("-fgcse")
7 #pragma GCC optimize("-fgcse-lm")
8 #pragma GCC optimize("-fipa-sra")
9 #pragma GCC optimize("-ftree-pre")
10 #pragma GCC optimize("-ftree-vrp")
11 #pragma GCC optimize("-fpeephole2")
12 #pragma GCC optimize("-ffast-math")
13 #pragma GCC optimize("-fsched-spec")
14 #pragma GCC optimize("unroll-loops")
15 #pragma GCC optimize("-falign-jumps")
16 #pragma GCC optimize("-falign-loops")
17 #pragma GCC optimize("-falign-labels")
18 #pragma GCC optimize("-fdevirtualize")
19 #pragma GCC optimize("-fcaller-saves")
20 #pragma GCC optimize("-fcrossjumping")
21 #pragma GCC optimize("-fthread-jumps")
22 #pragma GCC optimize("-funroll-loops")
23 #pragma GCC optimize("-fwhole-program")
24 #pragma GCC optimize("-freorder-blocks")
25 #pragma GCC optimize("-fschedule-insns")
26 #pragma GCC optimize("inline-functions")
27 #pragma GCC optimize("-ftree-tail-merge")
28 #pragma GCC optimize("-fschedule-insns2")
29 #pragma GCC optimize("-fstrict-aliasing")
30 #pragma GCC optimize("-fstrict-overflow")
31 #pragma GCC optimize("-falign-functions")
32 #pragma GCC optimize("-fcse-skip-blocks")
33 #pragma GCC optimize("-fcse-follow-jumps")
34 #pragma GCC optimize("-fsched-interblock")
35 #pragma GCC optimize("-fpartial-inlining")
36 #pragma GCC optimize("no-stack-protector")
37 #pragma GCC optimize("-freorder-functions")
38 #pragma GCC optimize("-findirect-inlining")
39 #pragma GCC optimize("-fhoist-adjacent-loads")
40 #pragma GCC optimize("-frerun-cse-after-loop")
41 #pragma GCC optimize("inline-small-functions")
42 #pragma GCC optimize("-finline-small-functions")
43 #pragma GCC optimize("-ftree-switch-conversion")
44 #pragma GCC optimize("-foptimize-sibling-calls")
45 #pragma GCC optimize("-fexpensive-optimizations")
46 #pragma GCC optimize("-funsafe-loop-optimizations")
47 #pragma GCC optimize("inline-functions-called-once")
48 #pragma GCC optimize("-fdelete-null-pointer-checks")
49 # include
50 # include
51 # include
52 # include
53 # include <string>
54 # include
55 # define mod 998244353
56 # define R register int
57 # define ll long long
58
59 using namespace std;
60
61 const int maxn=2004;
62 int n,k,h,x,y;
63 int firs[maxn],siz[maxn],dep[maxn];
64 int dp[maxn][maxn];
65
66 struct edge
67 {
68 int too,nex;
69 }g[maxn<<1];
70
71 inline void add (int x,int y)
72 {
73 g[++h].too=y;
74 g[h].nex=firs[x];
75 firs[x]=h;
76 }
77
78 inline int ad (int a,int b)
79 {
80 a+=b;
81 if(a>=mod) a-=mod;
82 return a;
83 }
84
85 void dfs (int x)
86 {
87 siz[x]=1;
88 int j;
89 dp[x][1]=1;
90 for (R i=firs[x];i;i=g[i].nex)
91 {
92 j=g[i].too;
93 if(dep[j]) continue;
94 dep[j]=dep[i]+1;
95 dfs(j);
96 siz[x]+=siz[j];
97 for (R s=min(siz[x],k);s;--s)
98 {
99 if(s==1)
100 {
101 dp[x][s]=(1LL*dp[x][s]*dp[j][0])%mod;
102 continue;
103 }
104 dp[x][s]=(1LL*dp[x][s]*dp[j][0])%mod;
105 for (R f=1;f<=min(s,siz[j]);++f)
106 {
107 if(dp[x][s-f]==0||dp[j][f]==0) continue;
108 dp[x][s]=ad(dp[x][s],1LL*dp[x][s-f]*dp[j][f]%mod);
109 }
110 }
111 }
112 for (R i=1;i<=min(k,siz[x]);++i)
113 dp[x][0]=ad(dp[x][0],dp[x][i]);
114 }
115
116 inline char gc()
117 {
118 static char now[1<<22],*S,*T;
119 if (T==S)
120 {
121 T=(S=now)+fread(now,1,1<<22,stdin);
122 if (T==S) return EOF;
123 }
124 return *S++;
125 }
126 inline int read()
127 {
128 R x=0;
129 register char ch=gc();
130 while(!isdigit(ch))
131 ch=gc();
132 while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-0,ch=gc();
133 return x;
134 }
135
136 int main()
137 {
138 n=read(),k=read();
139 for (R i=1;ii)
140 {
141 x=read(),y=read();
142 add(x,y);
143 add(y,x);
144 }
145 dep[1]=1;
146 dfs(1);
147 printf("%d",dp[1][0]);
148 return 0;
149 }


蓝魔法师

 

  T4:http://www.nowcoder.com/acm/contest/215/D

  题意概述:一个空的可重集合$S$,$n$次操作,每次操作给出$x,k,p$,执行以下操作:
  1、在$S$中加入$x$。
  2、输出

  技术分享图片技术分享图片

1 #pragma GCC diagnostic error "-std=c++14"
2 #pragma GCC target("avx")
3 #pragma GCC optimize(3)
4 #pragma GCC optimize("Ofast")
5 #pragma GCC optimize("inline")
6 #pragma GCC optimize("-fgcse")
7 #pragma GCC optimize("-fgcse-lm")
8 #pragma GCC optimize("-fipa-sra")
9 #pragma GCC optimize("-ftree-pre")
10 #pragma GCC optimize("-ftree-vrp")
11 #pragma GCC optimize("-fpeephole2")
12 #pragma GCC optimize("-ffast-math")
13 #pragma GCC optimize("-fsched-spec")
14 #pragma GCC optimize("unroll-loops")
15 #pragma GCC optimize("-falign-jumps")
16 #pragma GCC optimize("-falign-loops")
17 #pragma GCC optimize("-falign-labels")
18 #pragma GCC optimize("-fdevirtualize")
19 #pragma GCC optimize("-fcaller-saves")
20 #pragma GCC optimize("-fcrossjumping")
21 #pragma GCC optimize("-fthread-jumps")
22 #pragma GCC optimize("-funroll-loops")
23 #pragma GCC optimize("-fwhole-program")
24 #pragma GCC optimize("-freorder-blocks")
25 #pragma GCC optimize("-fschedule-insns")
26 #pragma GCC optimize("inline-functions")
27 #pragma GCC optimize("-ftree-tail-merge")
28 #pragma GCC optimize("-fschedule-insns2")
29 #pragma GCC optimize("-fstrict-aliasing")
30 #pragma GCC optimize("-fstrict-overflow")
31 #pragma GCC optimize("-falign-functions")
32 #pragma GCC optimize("-fcse-skip-blocks")
33 #pragma GCC optimize("-fcse-follow-jumps")
34 #pragma GCC optimize("-fsched-interblock")
35 #pragma GCC optimize("-fpartial-inlining")
36 #pragma GCC optimize("no-stack-protector")
37 #pragma GCC optimize("-freorder-functions")
38 #pragma GCC optimize("-findirect-inlining")
39 #pragma GCC optimize("-fhoist-adjacent-loads")
40 #pragma GCC optimize("-frerun-cse-after-loop")
41 #pragma GCC optimize("inline-small-functions")
42 #pragma GCC optimize("-finline-small-functions")
43 #pragma GCC optimize("-ftree-switch-conversion")
44 #pragma GCC optimize("-foptimize-sibling-calls")
45 #pragma GCC optimize("-fexpensive-optimizations")
46 #pragma GCC optimize("-funsafe-loop-optimizations")
47 #pragma GCC optimize("inline-functions-called-once")
48 #pragma GCC optimize("-fdelete-null-pointer-checks")
49 # include
50 # include
51 # define R register int
52
53 using namespace std;
54
55 const int maxn=100005;
56 int n,x,k,p,a[maxn];
57 int anss[maxn],vis[maxn],s,ans;
58
59 inline char gc()
60 {
61 static char now[1<<22],*S,*T;
62 if (T==S)
63 {
64 T=(S=now)+fread(now,1,1<<22,stdin);
65 if (T==S) return EOF;
66 }
67 return *S++;
68 }
69 inline int read()
70 {
71 R x=0;
72 register char ch=gc();
73 while(!isdigit(ch))
74 ch=gc();
75 while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-0,ch=gc();
76 return x;
77 }
78
79 int gcd (int a,int b)
80 {
81 int p=1;
82 if(a<b) swap(a,b);
83 while(a&&b)
84 {
85 if(a%2==0&&b%2==0) p*=2,a/=2,b/=2;
86 else if(a%2&&b%2==0) b/=2;
87 else if(a%2==0&&b%2) a/=2;
88 else a-=b;
89 if(a<b) swap(a,b);
90 }
91 return p*a;
92 }
93
94 int qui (int a,int b)
95 {
96 int s=1;
97 while (b)
98 {
99 if(b&1) s=1LL*s*a%p;
100 a=1LL*a*a%p;
101 b=b>>1;
102 }
103 return s;
104 }
105
106 int main()
107 {
108
109 n=read();
110 for (R i=1;i<=n;++i)
111 {
112 a[i]=read();
113 k=read();
114 p=read();
115 ans=0;
116 for (R j=1;j<=i;++j)
117 {
118 if(vis[ a[j] ]==i)
119 s=anss[ a[j] ];
120 else
121 {
122 int g=gcd(a[i],a[j]);
123 if(g==1) s=1;
124 else s=qui(g,k);
125 }
126 ans=ans+s;
127 if(ans>=p) ans-=p;
128 vis[ a[j] ]=i;
129 anss[ a[j] ]=s;
130 }
131 printf("%d
",ans);
132 }
133 return 0;
134 }


绿魔法师

 

  T5:http://www.nowcoder.com/acm/contest/215/E

  题意概述:对"灰魔法师"一题的延伸,要求构造一个长度为$n$的数列使得恰好有$k$对数相加是一个完全平方数.$n<=10^5,k<=10^{10}$

  构造?等官方题解下来再说吧。

  

  T6:http://www.nowcoder.com/acm/contest/215/F

  题意概述:直接粘题面吧,$Wannafly$的题面都挺简洁的.
  一个空的二维平面上,每次加入或删除一个整点。
  求每次操作完之后满足以下条件的三个点$p1,p2,p3$的对数。
  1、$p1.y>p2.y>p3.y$;
  2、$p1.x>max(p2.x,p3.x)$;
  令操作数为n,保证$n<=60000,1<=x,y<=n$。
  保证不会重复加入点,也不会删除不存在的点;

  这是啥...二维线段树还是$CDQ$分治?顺便问一下有没有二维平衡树啊.

  所以我虽然没做出来绿魔法师却因此上绿名了?要是做出来岂不是可以黄名?

  ---shzr













推荐阅读
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
author-avatar
大盗哈喽小马甲_943
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有