罕见的又改完了。

T1 神炎皇


吸取昨天三个出规律的教训,开场打完T2 20pts直接大力打表1h。

但怎么说呢,我不懂欧拉函数。(其实exgcd都忘了 于是只看出最大平方因子,不得不线性筛,爆拿60

正解又是看不懂的东西,取a和b的gcd d,把a,b同除d得到A,B,很容易想到(但好像不太容易证)A+B与AB互质。

那么要保证(A+B)d|ABd2,就要使(A+B)|d。又因为(A+B)d<n,所以(A+B)<根号n。

直接枚举A与B的和k,可以知道符合互质的AB数对有φ(k)对,d有n/k2对,相乘后累加即可。

code:

 1 #include<bits/stdc++.h>
2 #define debug exit(0)
3 #define int long long
4 using namespace std;
5 const int NN=2e7+5;
6 int n,N,pri[NN],phi[NN],cnt,ans;
7 bool vis[NN];
8 inline int read(){
9 int x=0,f=1;
10 char ch=getchar();
11 while(ch<'0'||ch>'9'){
12 if(ch=='-') f=-1;
13 ch=getchar();
14 }
15 while(ch>='0'&&ch<='9'){
16 x=(x<<1)+(x<<3)+(ch^48);
17 ch=getchar();
18 }
19 return x*f;
20 }
21 void write(int x){
22 if(x<0) putchar('-'), x=-x;
23 if(x>9) write(x/10);
24 putchar(x%10+'0');
25 }
26 void getphi(){
27 phi[1]=1;
28 for(int i=2;i<=N;i++){
29 if(!vis[i]) pri[++cnt]=i, phi[i]=i-1;
30 for(int j=1;j<=cnt&&pri[j]*i<=N;j++){
31 int now=pri[j]*i;
32 vis[now]=1;
33 if(i%pri[j]) phi[now]=phi[i]*(pri[j]-1);
34 else{ phi[now]=phi[i]*pri[j]; break; }
35 }
36 }
37 }
38 signed main(){
39 n=read(); N=sqrt(n);
40 getphi();
41 for(int i=2;i<=N;i++) ans+=phi[i]*(n/(i*i));
42 write(ans); putchar('\n');
43 return 0;
44 }

T1

T2 降雷皇


树状数组求最长上升子序列,中间维护方案数,如果同一位置有同样长度的方案,就把它们方案数累加。

用线段树也可。还能用双指针,因为fi相等的i电阻单调递减。

code:

 1 #include<bits/stdc++.h>
2 #define debug exit(0)
3 using namespace std;
4 const int NN=1e5+5,p=123456789;
5 int n,type,maxr,r[NN],res;
6 struct node{
7 int len,sum;
8 }s[NN];
9 inline node max(node a,node b){
10 if(a.len==b.len)
11 return (node){a.len,(a.sum+b.sum)%p};
12 else return a.len>b.len?a:b;
13 }
14 inline int read(){
15 int x=0,f=1;
16 char ch=getchar();
17 while(ch<'0'||ch>'9'){
18 if(ch=='-') f=-1;
19 ch=getchar();
20 }
21 while(ch>='0'&&ch<='9'){
22 x=(x<<1)+(x<<3)+(ch^48);
23 ch=getchar();
24 }
25 return x*f;
26 }
27 void write(int x){
28 if(x<0) putchar('-'), x=-x;
29 if(x>9) write(x/10);
30 putchar(x%10+'0');
31 }
32 inline int lowbit(int x){ return x&(-x); }
33 inline void insert(int pos,node v){
34 while(pos<=maxr){
35 s[pos]=max(s[pos],v);
36 pos+=lowbit(pos);
37 }
38 }
39 inline node query(int pos){
40 node res=(node){0,0};
41 while(pos){
42 res=max(res,s[pos]);
43 pos-=lowbit(pos);
44 }
45 return res;
46 }
47 void work(){
48 for(int i=1;i<=n;i++){
49 node nows=query(r[i]-1);
50 nows.len++;
51 if(nows.len==1) nows.sum++;
52 insert(r[i],nows);
53 }
54 node ans=query(maxr);
55 write(ans.len); putchar('\n');
56 if(type) write(ans.sum), putchar('\n');
57 }
58 signed main(){
59 n=read(); type=read();
60 for(int i=1;i<=n;i++) r[i]=read(), maxr=max(maxr,r[i]);
61 work();
62 return 0;
63 }

T2

T3 幻魔皇


树上全是菲波那契,再次在T3大力分类讨论。

考虑点对的LCA,LCA为点对中白点时可以直接用菲波那契求,根节点单算。

LCA为黑点时考虑黑点的两个子树,黑点的白色儿子单算。

预处理黑点为LCA,考虑最大深度为i中距离为j的点对fi,j,一波计算出解。

code:

 1 #include<bits/stdc++.h>
2 #define debug exit(0)
3 #define int long long
4 using namespace std;
5 const int NN=5e3+5,p=123456789;
6 int n,fib[NN],ans[NN<<1],f[NN][NN<<1];
7 inline int read(){
8 int x=0,f=1;
9 char ch=getchar();
10 while(ch<'0'||ch>'9'){
11 if(ch=='-') f=-1;
12 ch=getchar();
13 }
14 while(ch>='0'&&ch<='9'){
15 x=(x<<1)+(x<<3)+(ch^48);
16 ch=getchar();
17 }
18 return x*f;
19 }
20 void write(int x){
21 if(x<0) putchar('-'), x=-x;
22 if(x>9) write(x/10);
23 putchar(x%10+'0');
24 }
25 signed main(){
26 n=read(); fib[1]=fib[2]=1;
27 for(int i=3;i<=n;i++) fib[i]=(fib[i-1]+fib[i-2])%p;
28 for(int i=2;i<=n;i++){
29 for(int j=1;j<=n*2;j++) (f[i][j]+=f[i-1][j])%=p;
30 for(int j=3;j<=n;j++) (f[max(i,j)][i+j]+=fib[i-1]*fib[j-2]%p)%=p;
31 }
32 for(int i=2;i<=n;i++){
33 for(int j=5;j<=2*(n-i);j++) (ans[j]+=fib[i-1]*f[n-i][j]%p)%=p;
34 for(int j=i+2;j<=n;j++) (ans[j-i+1]+=fib[i-1]*fib[j-i-1]%p)%=p;
35 for(int j=i+2;j<=n;j++) (ans[j-i]+=fib[j-i-1]*fib[i-2]%p)%=p;
36 }
37 for(int i=3;i<=n;i++) (ans[i-1]+=fib[i-2])%=p;
38 for(int i=1;i<=2*n;i++)
39 write(ans[i]), putchar(' '); putchar('\n');
40 return 0;
41 }

T3

2021.7.28考试总结[NOIP模拟26]的更多相关文章

  1. 2021.9.28考试总结[NOIP模拟64]

    T1 三元组 发现确定\(b,c\)的情况下,\(a\)的值域是连续的.确定\(b\)后\(a+b\)的取值是\([1+b,b+b]\).树状数组维护对每个\(b\)可行的\(c\). 注意取模后取值 ...

  2. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  3. 2021.9.13考试总结[NOIP模拟52]

    T1 路径 考虑每一位的贡献,第$i$位每$2^i$个数会变一次,那么答案为$\sum_{i=1}^{log_2n} \frac{n}{2^i}$. $code:$ 1 #include<bit ...

  4. 2021.8.11考试总结[NOIP模拟36]

    T1 Dove玩扑克 考场并查集加树状数组加桶期望$65pts$实际$80pts$,考后多开个数组记哪些数出现过,只扫出现过的数就切了.用$set$维护可以把被删没的数去掉,更快. $code:$ 1 ...

  5. 2021.7.29考试总结[NOIP模拟27]

    T1 牛半仙的妹子图 做法挺多的,可以最小生成树或者最短路,复杂度O(cq),c是颜色数. 我考场上想到了原来做过的一道题影子,就用了并查集,把边权排序后一个个插入,记录权值的前缀和,复杂度mlogm ...

  6. 2021.7.15考试总结[NOIP模拟16]

    ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...

  7. [考试总结]noip模拟26

    首先看到这样中二的题目心头一震.... 然而发现又是没有部分分数的一天. 然而正解不会打.... 那还是得要打暴力. 但是这套题目有两个题目只有一个参数. 所以... (滑稽).jpg 然后我就成功用 ...

  8. 2021.9.14考试总结[NOIP模拟53]

    T1 ZYB和售货机 容易发现把每个物品都买成$1$是没有影响的. 然后考虑最后一个物品的方案,如果从$f_i$向$i$连边,发现每个点有一个出度多个入度,可以先默认每个物品都能买且最大获利,这样可以 ...

  9. 2021.9.12考试总结[NOIP模拟51]

    T1 茅山道术 仔细观察发现对于每个点只考虑它前面第一个与它颜色相同的点即可. 又仔细观察发现对一段区间染色后以这个区间内点为端点的区间不能染色. 于是对区间右端点而言,区间染色的贡献为遍历到区间左端 ...

随机推荐

  1. Identity用户管理入门五(登录、注销)

    一.建立LoginViewModel视图模型 using System.ComponentModel.DataAnnotations; namespace Shop.ViewModel { publi ...

  2. Nginx+Tomcat 负载均衡、动静分离集群

    目录: 一.Nginx负载均衡实现原理 二.Nginx动静分离实现原理 三.Nginx+Tomcat 负载均衡.动静分离集群部署 一.Nginx负载均衡实现原理 1.Nginx实现负载均衡是通过反向代 ...

  3. HDU 6170 Two strings( DP+字符串匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=6170 题目大意: 给出两个字符串s1和s2(长度小于等于2500). s1是一个正常的包含大小写字母的字符串,s ...

  4. vue注意点

    template下面只能有一个节点,不能是多个

  5. modern php closure 闭包

    * 在array_map()函数中使用闭包 <?php $numbersPlusOne = array_map(function($number) { return $number + 1; } ...

  6. lua自写限制并发访问模块

    注意:ngx.say跟ngx.exit是不可以共存,否则会出现ngx.exit无法正常执行 1.定义lua共享内存20m lua_shared_dict ceshi 20m; 2.再location ...

  7. django forms的常用命令及方法(二)

    根据别人网上发布,个人爱好收集 1.创建Form类 from django.forms import Form from django.forms import widgets from django ...

  8. 利用griddata进行二维插值

    有时候会碰到这种情况: 实际问题可以抽象为 \(z = f(x, y)\) 的形式,而你只知道有限的点 \((x_i,y_i,z_i)\),你又需要局部的全数据,这时你就需要插值,一维的插值方法网上很 ...

  9. turtle setup和screensize

    关于setup有明确的定义,它包括4个参数width,height,startx,starty, setup定义窗体的大小和相对位置,并隐含定义了画布的位置,缺省是居中占整个屏幕的一半[setup() ...

  10. bzoj#2407-探险【最短路,二进制分组】

    正题 题目链接:https://darkbzoj.tk/problem/2407 题目大意 \(n\)个点的一张无向图(但是正反权值不同),求一个从\(1\)出发回到\(1\)且不经过重复边的最短路径 ...