17-09-21模拟赛

T1:数论。

<not_complete>

Code:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 inline int in(){
 6     int x=0;bool f=0; char c;
 7     for (;(c=getchar())<‘0‘||c>‘9‘;f=c==‘-‘);
 8     for (x=c-‘0‘;(c=getchar())>=‘0‘&&c<=‘9‘;x=(x<<3)+(x<<1)+c-‘0‘);
 9     return f?-x:x;
10 }
11 int a[16],sum[3],n,m,ct=0,ans,res;
12 bool mk;
13 inline int gcd(int x,int y){
14     return (!y)?x:gcd(y,x%y);
15 }
16 int main()
17 {
18     n=in();m=in();mk=0;
19     for (int i=1;i<=m;++i){
20         a[ct]=in();if (a[ct]==1) {printf("0");return 0;}
21         if (!(a[ct]%3)) mk=(mk||a[ct]==3)?1:0,--ct;++ct;
22     }for (int i=0;i<3;++i) sum[i]=n/3;
23     if (n%3==1) ++sum[1];
24     else if (n%3==2) ++sum[1],++sum[2];
25     for (int i=1;i<(1<<ct);++i){
26         int cnt=0,res=1,tmp;
27         for (int j=0;j<ct;++j)if (i&(1<<j)){
28             if (1ll*res*a[j]/gcd(res,a[j])>1ll*n) {res=-1;break;}
29             res=a[j]/gcd(res,a[j])*res;++cnt;
30         }if (res==-1) continue;
31         tmp=n/res,cnt=(cnt&1)?-1:1;
32         for (int i=0;i<3;++i) sum[i]+=cnt*(tmp/3);
33         if (res%3==1){
34             if (tmp%3==1) sum[1]+=cnt;
35             else if (tmp%3==2) sum[1]+=cnt,sum[2]+=cnt;
36         }else if (res%3==2){
37             if (tmp%3==1) sum[2]+=cnt;
38             else if (tmp%3==2) sum[2]+=cnt,sum[1]+=cnt;
39         }
40     }ans=((sum[1]<sum[2])?sum[2]:sum[1]);
41     printf("%d",(mk||(n<3))?ans:ans+1);return 0;
42 }

T2:最大权闭合子图问题,转二分图匹配解决。

可以发现有冲突的格子(x,y)之间,(x+y)的奇偶性一定不同。

考虑将图黑白染色,每个黑色位置向该位置上的马能够控制的格子连边。

对于负权,可以发现不选一定更优,所以可以直接连权值为0的边,即对0取max。

Code:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<queue>
 5 #define ME 220005
 6 #define MN 20005
 7 #define inf 0x7fffffff
 8 using namespace std;
 9 inline int in(){
10     int x=0;bool f=0; char c;
11     for (;(c=getchar())<‘0‘||c>‘9‘;f=c==‘-‘);
12     for (x=c-‘0‘;(c=getchar())>=‘0‘&&c<=‘9‘;x=(x<<3)+(x<<1)+c-‘0‘);
13     return f?-x:x;
14 }
15 struct edge{
16     int to,next,cap;
17 }e[ME];
18 const int dx[8]={-2,-1,1,2,2,1,-1,-2};
19 const int dy[8]={1,2,2,1,-1,-2,-2,-1};
20 int v[MN],head[MN],iter[MN],lev[MN];
21 int cnt=1,n,m,s,t,sum;
22 inline void ins(int x,int y,int cp){
23     e[++cnt].to=y;e[cnt].next=head[x];head[x]=cnt;e[cnt].cap=cp;
24     e[++cnt].to=x;e[cnt].next=head[y];head[y]=cnt;e[cnt].cap=0;
25 }
26 inline void bfs(){
27     queue<int> q;memset(lev,-1,sizeof(lev));
28     lev[s]=0;q.push(s);while(!q.empty()){
29         int u=q.front();q.pop();
30         for (int i=head[u];i;i=e[i].next){
31             int v=e[i].to;
32             if (lev[v]==-1&&e[i].cap>0) lev[v]=lev[u]+1,q.push(v);
33         }
34     }
35 }
36 inline int dfs(int u,int f){
37     if (u==t) return f;int used=0;
38     for (int &i=iter[u];i;i=e[i].next){
39         int v=e[i].to;
40         if (e[i].cap>0&&lev[u]<lev[v]){
41             int w=dfs(v,min(f-used,e[i].cap));
42             if (w>0){
43                 e[i].cap-=w;e[i^1].cap+=w;used+=w;
44                 if (used==f) return f;
45             }
46         }
47     }return used;
48 }
49 inline int dinic(){
50     int fl=0;while (1){
51         bfs();if (lev[t]==-1) return fl;
52         memcpy(iter,head,sizeof(head));
53         int d;while((d=dfs(s,inf))>0) fl+=d;
54     }
55 }
56 inline bool check(int x,int y){
57     return ((x>=0)&&(x<n)&&(y>0)&&(y<=m));
58 }
59 int main()
60 {
61     n=in();m=in();s=0;t=n*m+1;
62     for (int i=0;i<n;++i)
63     for (int j=1;j<=m;++j){
64         v[i*m+j]=in(),sum+=max(0,v[i*m+j]);
65         if ((i+j)&1) ins(s,i*m+j,max(0,v[i*m+j]));
66         else ins(i*m+j,t,max(0,v[i*m+j]));
67     }for (int i=0;i<n;++i)
68     for (int j=1;j<=m;++j){
69         if (!((i+j)&1)) continue;
70         for (int k=0;k<8;++k){
71             int x=i+dx[k],y=j+dy[k];
72             if (check(x,y)) ins(i*m+j,x*m+y,inf);
73         }
74     }printf("%d",sum-dinic());return 0;
75 }
时间: 2024-12-28 09:41:07

17-09-21模拟赛的相关文章

2017.9.17校内noip模拟赛解题报告

预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Time Limit:1000ms Memory Limit:64MB题目描述LYK 找到了一根巧克力棒,但是这根巧克力棒太长了,LYK 无法一口吞进去.具体地,这根巧克力棒长为 n,它想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后慢慢享用.它打算每次将一根长为 k 的巧克力棒折成两段长为 a

NOIP模拟9.17(TYVJNOIP2017模拟赛D2)

曼德布洛特(Mandelbrot)集合 算法课W1·leetcode654.MaximumBinaryTree 官方文档PackageOverview软件包概述--几何内核类 glClearColor第四个参数有什么用? dxd奈犯材http://p.baidu.com/itopic/main/center?uid=00266162633962396665360ebc&59m6丶号斗yrci6b觅滓问http://p.baidu.com/itopic/main/center?uid=4ba761

『8.21 模拟赛』Victory

题目描述 迟到大王rsw喜欢V这个字母,因为V代表着victory,当一个数字,从左向右数的时候,没有出现过先递减,再递增的情况,就被称作Victory数. 也就是说,这个数字可以是递增的,也可以是递减的,也可以是先递减再递增的,这个过程中可以出现相邻数字相等的情况,但是,就是不能出现过先递减再递增的情况. 问题是:给定n,问:1~n之间有多少个victory数. 解题思路 我们应该一眼就能看出这是一道数位dp题,一开始用3维dp写,状态不够写挂了...后来改用4维就A了. 我们用dp[ i ]

『8.21 模拟赛』技能大赛

题目描述 rsw因为迟到次数太多被列入黑名单,于是被派去参加陕西妇女儿童技能大赛,大赛中共安排了m个比赛项目,算上rsw在内,共有n位选手报名参加本次比赛.(如rsw,zrx,kh,ljm,cky,大耳朵图图,大头儿子等) 经过m场比赛,组委会发现,每个项目,有且仅有两个人实力超群.(比如穿针引线项目,rsw,ljm独领风骚,健美操项目,cky,cjy风姿绰约). 现在,组委会要推选一些人去参加全国比赛,因为每个项目都必须有人擅长,所以推选的这些人,对于每一个项目,至少要有一个人擅长. 已知,选

『8.21 模拟赛』冒泡排序 II

题目描述 前一天的冒泡排序对rsw来说太简单了,所以又有了冒泡排序2,给定n,k,q,问:有多少个不同的1~n的排列,能够使得,冒泡排序k趟后,得到一个几乎正确的序列. 一个几乎正确的序列指的是:它的最长上升子序列的长度至少是n-1. 解题思路 思路就是没有思路.... 昨天刚刚做过一道冒泡排序的题,有一个结论在这里 每个位置上的数最远是由前面的第k个位置转移过来的,并且题目中要求最长上升子序列最短是n-1的长度,所以只有两种情况: 1) 最终是从小到大排序好的 2)最终是从小到大排序好的序列中

NOIP模拟17.9.21

NOIP模拟17.9.21 1 任务安排manage.in/.out/.cpp1.1 问题描述你有N 个工作,同一时刻只能做一个任务, 其中每个工作有其所需时间, 及完成的Deadline(截止时间), 问要完成所有工作, 最迟要从什么时候开始.你最早可以从时间0 开始工作.1.2 输入格式第一行一个整数N,表示任务数量接下来n 行,每行两个整数,Ti; Si,分别表示该任务的持续时间和截止时间.1.3 输出格式输出一个整数,表示最晚的开始时间,如果不能完成,输出-1.1.4 样例输入43 58

2017.12.09【NOIP提高组】模拟赛A组

2017.12.09[NOIP提高组]模拟赛A组 T1 3489. [NOIP2013模拟联考11]数列的GCD(gcd) T2 3500.[NOIP2013模拟联考15]物语(monogatari) T3 3501.[NOIP2013模拟联考15]消息传递(news) 吐槽:这次的题好像有点水啊,但最简单的第二题都给打挂啦!!(数组开小了) T1 本套题中最难的题.考虑dp 设f[i]是b[1],b[2]...b[N]的最大公约数的数目,g[i]是b[1],b[2]...b[N]的公约数的数目

2019模拟赛09场解题报告

目录 2019模拟赛09场解题报告 目录la~~ 题一:瞬间移动 题二:食物订购 题三:马蹄印 题四:景观美化 2019模拟赛09场解题报告 标签(空格分隔): 解题报告 Forever_chen 2019.8.20 目录la~~ 题一:瞬间移动 [题面] 有一天,暮光闪闪突然对如何将一个整数序列a1,a2,...,an排序为一个不下降序列起了兴趣.身为一只年轻独角兽的她,只能进行一种叫做"单元转换"(unit shift)的操作.换句话说,她可以将序列的最后一个元素移动到它的起始位置

【BZOJ】【2741】【FOTILE模拟赛】L

可持久化Trie+分块 神题……Orz zyf & lyd 首先我们先将整个序列搞个前缀异或和,那么某一段的异或和,就变成了两个数的异或和,所以我们就将询问[某个区间中最大的区间异或和]改变成[某个区间中 max(两个数的异或和)] 要是我们能将所有[l,r]的答案都预处理出来,那么我们就可以O(1)回答了:然而我们并不能. 一个常见的折中方案:分块! 这里先假设我们实现了一个神奇的函数ask(l,r,x),可以帮我们求出[l,r]这个区间中的数,与x最大的异或值. 我们不预处理所有的左端点,我

10.30 NFLS-NOIP模拟赛 解题报告

总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没码QAQ 现在我来写解题报告了,有点饿了QAQ.. 第一题 题目 1: 架设电话线 [Jeffrey Wang, 2007] 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务,于 是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线.新的电话线架设 在已有的N(2 <=