T1 入阵曲

二位前缀和暴力n4可以拿60。

观察到维护前缀和时模k意义下余数一样的前缀和相减后一定被k整除,前缀和维护模数,n2枚举行数,n枚举列,

开一个桶记录模数出现个数,每枚举到该模数就加上它先前出现个数,表示增添了这么多对可被k整除的前缀和。

code:

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 const int NN=405;
5 int n,m,k,a[NN][NN],sum[NN][NN],ans,bot[1000010],res[NN];
6 bool check;
7 inline int read(){
8 int x=0;
9 char ch=getchar();
10 while(ch<'0'||ch>'9') ch=getchar();
11 while(ch>='0'&&ch<='9'){
12 x=(x<<1)+(x<<3)+(ch^48);
13 ch=getchar();
14 }
15 return x;
16 }
17 signed main(){
18 n=read(); m=read(); k=read();
19 for(register int i=1;i<=n;++i)
20 for(register int j=1;j<=m;++j) a[i][j]=read();
21 for(register int i=1;i<=n;++i)
22 for(register int j=1;j<=m;++j) sum[i][j]=(sum[i][j-1]+a[i][j])%k;
23 for(register int i=2;i<=n;++i)
24 for(register int j=1;j<=m;++j) sum[i][j]=(sum[i-1][j]+sum[i][j])%k;
25 for(register int i=1;i<=n;i++)
26 for(register int j=0;j<i;j++){
27 for(register int u=1;u<=m;u++){
28 res[u]=(sum[i][u]-sum[j][u]+k)%k;
29 ans+=bot[res[u]]++;
30 }
31 ans+=bot[0]; bot[0]=0;
32 for(register int u=1;u<=m;u++)
33 bot[res[u]]=0;
34 }
35 printf("%d\n",ans);
36 return 0;
37 }

T1


T2 将军令

一眼看上去像个树形DP,但k<=20忒恶心了,跑DP麻烦至极,我两小时打DP爆拿10分(当然也可以做,大概

正解是一个贪心。观察到在深度较深的点驻扎军队更优。所以按深度逆序遍历。

为避免军队范围被浪费,每次发现点未被覆盖时在它的k级父亲处驻扎军队肯定最优。

驻扎时直接暴力DFS即可。

code:

 1 #include<bits/stdc++.h>
2 #define re register
3 using namespace std;
4 const int NN=1e5+5;
5 int n,k,t,to[2*NN],nex[2*NN],head[NN],num,fa[NN][21],ans;
6 bool vis[NN];
7 struct node{
8 int id,dep;
9 }nod[NN];
10 inline int read(){
11 int x=0,f=1;
12 char ch=getchar();
13 while(ch<'0'||ch>'9') ch=getchar();
14 while(ch>='0'&&ch<='9'){
15 x=(x<<1)+(x<<3)+(ch^48);
16 ch=getchar();
17 }
18 return x*f;
19 }
20 inline void add(int a,int b){
21 to[++num]=b; nex[num]=head[a]; head[a]=num;
22 to[++num]=a; nex[num]=head[b]; head[b]=num;
23 }
24 bool cmp(node a,node b){
25 return a.dep>b.dep;
26 }
27 void indfs(int f,int s){
28 nod[s].id=s;
29 for(int i=head[s];i;i=nex[i]){
30 int t=to[i];
31 if(t==f) continue;
32 nod[t].dep=nod[s].dep+1;
33 fa[t][1]=s;
34 for(int j=2;j<=min(k,nod[t].dep);j++) fa[t][j]=fa[fa[t][j-1]][1];
35 indfs(s,t);
36 }
37 }
38 void dfs(int f,int s,int cnt){
39 if(!cnt) return;
40 for(int i=head[s];i;i=nex[i]){
41 int t=to[i];
42 if(t==f) continue;
43 vis[t]=1;
44 dfs(s,t,cnt-1);
45 }
46 }
47 int main(){
48 n=read(); k=read(); t=read();
49 for(int i=1;i<n;i++) add(read(),read());
50 indfs(0,1);
51 sort(nod+1,nod+n+1,cmp);
52 for(int i=1;i<=n;i++){
53 if(vis[nod[i].id]) continue;
54 int st=fa[nod[i].id][min(nod[i].dep,k)];
55 vis[st]=1; ++ans;
56 dfs(0,st,k);
57 }
58 printf("%d\n",ans);
59 return 0;
60 }

T2


T3 星空

考场防AC的题。。至少对我来说。。

m=1的情况贪心扫一遍,碰到灭的就往后开,可以拿到28,再输出个2,36高分到手。

正解真不是人在考场上能想出来的(弱限制了我的想象

考虑对问题进行转化。

首先用差分数组将区间修改转化为单点修改。对[l,r]区间反转就相当于对l与r+1两点的差分值反转。

因为差分涉及r+1,所以要多维护一位。

之后问题就转化为每次异或两位,用最少操作数将01串全变为0。只考虑串里的1即可。

用BFS预处理出把两个1都变为0的最小方案,然后状压。

code:

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int NN=4e4+5;
4 int n,k,m,to[65],dis[20][20],tmp,f[1<<16];
5 bool a[NN],pre[NN];
6 map<int,int>mp;
7 inline int read(){
8 int x=0,f=1;
9 char ch=getchar();
10 while(ch<'0'||ch>'9') ch=getchar();
11 while(ch>='0'&&ch<='9'){
12 x=(x<<1)+(x<<3)+(ch^48);
13 ch=getchar();
14 }
15 return x*f;
16 }
17 struct node{
18 int id,w;
19 }c;
20 void bfs(int s){
21 queue<node>q;
22 bool vis[NN]={0};
23 c.id=s; c.w=0;
24 q.push(c);
25 while(!q.empty()){
26 int x=q.front().id,y=q.front().w;
27 q.pop();
28 if(vis[x]) continue;
29 vis[x]=1;
30 if(pre[x]&&dis[mp[s]][mp[x]]>999999999) dis[mp[s]][mp[x]]=y;
31 for(int i=1;i<=m;i++){
32 int t1=x-to[i],t2=x+to[i];
33 if(t1>=1&&!vis[t1]){
34 c.id=t1; c.w=y+1;
35 q.push(c);
36 }
37 if(t2<=n+1&&!vis[t2]){
38 c.id=t2; c.w=y+1;
39 q.push(c);
40 }
41 }
42 }
43 }
44 int main(){
45 n=read(); k=read(); m=read();
46 for(int i=1;i<=k;i++) a[read()]=1;
47 for(int i=1;i<=m;i++) to[i]=read();
48 for(int i=1;i<=n+1;i++){
49 pre[i]=a[i-1]^a[i];
50 if(pre[i]) mp[i]=++tmp;
51 }
52 memset(dis,0x3f,sizeof(dis));
53 memset(f,0x3f,sizeof(f));
54 for(int i=1;i<=n+1;i++)
55 if(pre[i]) bfs(i);
56 int all=(1<<tmp)-1;
57 f[all]=0;
58 for(int u=all;u;u--)
59 for(int i=1;i<tmp;i++)
60 for(int j=i+1;j<=tmp;j++){
61 if(i==j) continue;
62 if(!(u&(1<<(j-1)))&&!(u&(1<<(i-1)))) continue;
63 f[u^((1<<(i-1))|(1<<(j-1)))]=min(f[u^((1<<(i-1))|(1<<(j-1)))],f[u]+dis[i][j]);
64 }
65 printf("%d\n",f[0]);
66 return 0;
67 }

T3

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

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

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

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

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

  3. 2021.8.3考试总结[NOIP模拟29]

    T1 最长不下降子序列 数据范围$1e18$很不妙,但模数$d$只有$150$,考虑从这里突破. 计算的式子是个二次函数,结果只与上一个值有关,而模$d$情况下值最多只有$150$个,就证明序列会出现 ...

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

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

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

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

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

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

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

    不小心有咕掉了一段时间 这次考试咕掉的分数也是太多了 然后就是这次暴力完全没有打满 遗憾啊遗憾 T1 入阵曲 前面的题目背景故意引导我们去往矩阵快速幂的方向去想 然而半毛钱关系没有 其实就是维护前缀和 ...

  8. 2021.9.20考试总结[NOIP模拟57]

    (换个编辑器代码就SB地不自动折叠了.. T1 2A 考察快读的写法. $code:$ T1 #include<bits/stdc++.h> #define scanf SCANF=sca ...

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

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

随机推荐

  1. poll?transport=longpoll&connection...烦人的请求c

    1.问题描述: 最近使用miniui做了一个后台管理系统,打开浏览器调试时,总发现一堆无关的请求,结构大致是:poll?transport=longpoll&connection.....一直 ...

  2. 了解HTTP基本知识板块

    一.HTTP 协议概述 HTTP协议采用了请求/响座模型. 客户端向服务器发送-个请求,请求头包含请求的方法.URT..协议版本.以以 及包含请求修饰符.客户信息和内容的类似于MIME的消息结构. 服 ...

  3. 自定义组件 v-model 的使用

    关于自定义组件如何使用 v-model,本章直讲如何使用: 一. $emit('input', params) // 父组件中 <template> <article> {{f ...

  4. 分布式必备理论基础:CAP和BASE

    大家好,我是老三,今天是没有刷题的一天,心情愉悦,给大家分享两个简单的知识点:分布式理论中的CAP和BASE. CAP理论 什么是CAP CAP原则又称CAP定理,指的是在一个分布式系统中,Consi ...

  5. tomcat 跨域的配置

    * 允许所有跨域  E:\apache-tomcat-7.0.81\conf\web.xml  <filter> <filter-name>CorsFilter</fil ...

  6. FastAPI logger日志记录方案 loguru模块

    实现方式: 采用 loguru 模块.跟flask直接挂载到app上有区别,当然也可以尝试去这样做. 但是 好像没有这个必要.要的就是个快速.整那些子虚乌有的东西完全木有意义. 1.首先是去项目git ...

  7. 使用亚马逊服务器报错:Signature not yet current: 20190726T070253Z is still later than 20190726T070246Z (20190726T065746Z + 15 min.)时间不同步的解决办法

    1.首先获取亚马逊的时间: $ curl http://s3.amazonaws.com -v 2.更改当前服务器时间,使之与亚马逊时间同步 $ date -s 'xxxx-xx-xx xx:xx:x ...

  8. 10分钟教你使用Picgo+GitHub+ jsDelivr搭建CDN加速免费图床

    前言 经常写Markdown或者博客的同学,肯定都要用到图床.图床是什么呢?其实相当于一个存储图片的网站,类似百度云这样,不过上传图片到图床后可以直接通过外链进行访问. 比如把本地一张a.jpg上传到 ...

  9. 未能加载文件或程序集“System.Net.Http

    前言 简单说先事情的起因吧,之前的程序写了有一段时间了,最近要添加新的功能.顺手就把NuGet包全部更新到最新版.随之问题就出现了. 开始以为是.NET Framework 库的原因,之前是4.6.1 ...

  10. C#实例:datagridview单元格合并

    这是替C#微信交流群群友做的一个小实例,目的就是在datagridview选择对应行以后,点击button后获取对应行的ip,并执行相应的操作,其实我觉得这样的话button没必要非放置到datagr ...