2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

D.Distinctive Character

看到样例,第一个反应贪心。先写了个按这一位1和0的数目多少,确定0还是1的东西。感觉不够真,又写了个尽量加到相似的比较小的串上的贪心。在和前边的那个组合一下,换了换顺序。。。好吧就过了13组样例。。。正解如下:考虑如何求出,所有2^k个状态与这n个串的最大相似度。起初的n个串的答案显然为k,那改变一个位置,相似度就改变为k-1,对于一个状态,越早算出来的相似度,越大,那么就可以直接bfs求出所有状态的最大相似度了。答案就是取最小值的状态。

#include <bits/stdc++.h>
#define mem(W) memset(W,0,sizeof(W))
using namespace std;
int n, k, a[1<<23], b[1<<23];
char s[25];
int q[1<<23],l=0,r=0;
int main(){scanf("%d%d",&n,&k);for(int i=0;i<(1<<k);++i)b[i]=-1;for(int i=1;i<=n;++i) {scanf(" %s",s);for(int j=0;j<k;++j) a[i]=a[i]*2+(s[j]-'0');q[r]=a[i];++r;b[a[i]]=k;}while(l<r){int S=q[l]; ++l;for(int i=0;i<k;++i){if(b[S^(1<<i)]==-1){b[S^(1<<i)]=b[S]-1;q[r]=S^(1<<i); ++r;}}}int MN=10000,ans=0;for(int i=0;i<(1<<k);++i){if(MN>b[i]){MN=b[i];ans=i;}}for(int i=k-1;i>=0;--i)printf("%d",!!(ans&(1<<i)));puts("");
}

E.Emptying the Baltic 

bfs暴搜的做法很显然,一直搜到所有位置都无法流向周围的格子为止,但是会tle。考虑剪枝:1)水位低的地方,不能流向高的地方;2)没有水也不能流了;3)最重要的一个剪枝/贪心,我们尽量先去从当前水位比较高的地方搜,用优先队列可以解决。(读题能力好差。。。

#include <cstdio>
#include <queue>
#define rep(i,a,b) for(int i=a;i<=b;++i)
typedef long long ll;
const int N = 550;
inline int read() {char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int dx[]={0, 0, 1, 1, -1, -1, 1, -1};
int dy[]={1,-1, 0,-1, 0,   1, 1, -1};
int n, m, xs, ys;
ll mp[N][N], h[N][N];
struct node{int x,y;bool operator < (const node a) const {return h[a.x][a.y] < h[x][y];}node(){}node(int a,int b){x=a;y=b;}
};
inline int inb(int x,int y) {if(x>n||x<1||y>m||y<1)return 0;return 1;
}
inline ll solve(node e,node s){ll t;if(mp[s.x][s.y] >= h[e.x][e.y]) {t=h[s.x][s.y]-mp[s.x][s.y];h[s.x][s.y]-=t;return t;}else {t=h[s.x][s.y]-h[e.x][e.y];h[s.x][s.y]-=t;return t;}return t;
}inline ll bfs(int sx, int sy) {ll ans=0;priority_queue<node> q;q.push(node(sx,sy));ans += (-mp[sx][sy]);h[sx][sy]=mp[sx][sy];while(!q.empty()) {node u=q.top();q.pop();rep(i,0,7) {int tx=u.x+dx[i], ty=u.y+dy[i];if(!inb(tx,ty)||mp[tx][ty]>=0||h[tx][ty] <= h[u.x][u.y])continue;if(h[tx][ty]==mp[tx][ty]) continue;ll tmp=solve(u,node(tx,ty));ans+=tmp;q.push(node(tx,ty));}}return ans;
}
int main() {n=read(),m=read();rep(i,1,n)rep(j,1,m)mp[i][j]=read();xs=read(),ys=read();printf("%lld\n", bfs(xs,ys));
}

G. Galactic Collegiate Programming Contest

用数据结构维护比1队排名靠前的队伍。一眼考虑用优先队列加数组标记,感觉删除的复杂度就没有保证,状态本身就多,还额外加了一些,肯定会T,就没写。然后,考虑用set删除操作就很方便,然而还是T了。(于是膜了题解。。。还学了很多神奇的操作%%%)用multiset的话,有很多重复的值,时间就更优秀了。

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
const int N = 1e5 + 100;
typedef long long ll;
using namespace std;
struct node{int x,y;node(){}node(int a,int b){x=a;y=b;}bool operator < (const node a)const {if(a.y!=y) return y > a.y;return x < a.x;}
};
multiset<node> s;
int n,m,t,p,a[N],b[N];
int main() {scanf("%d%d",&n,&m);rep(i,1,m) {scanf("%d%d",&t,&p);if(t!=1) {if(node(a[t],b[t]) < node(a[1],b[1])) s.erase(s.find(node(a[t],b[t])));a[t]+=p;++b[t];s.insert(node(a[t],b[t]));}else {a[t]+=p;++b[t];}while(!s.empty()&&!(*--s.end()<node(a[1],b[1]))) s.erase(--s.end());printf("%d\n",s.size()+1);}
}

 

转载于:https://www.cnblogs.com/RRRR-wys/p/9086143.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【二分】买礼物的艰辛

买礼物的艰辛 题目大意&#xff1a; 有n个物品的价格&#xff0c;还有m个人&#xff0c;m个人中的每个人都要购买一定的连续物品&#xff0c;问买下n个物品&#xff0c;花钱最大的人最少花多少钱 原题&#xff1a; 题目描述 小X同学给小C同学选了N件礼物&#xff0c;决定顺…

P4449-于神之怒加强版【莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/P4449 题目大意 TTT组询问给出n,mn,mn,m求∑i1n∑j1mgcd(i,j)k\sum_{i1}^n\sum_{j1}^mgcd(i,j)^ki1∑n​j1∑m​gcd(i,j)k 解题思路 ∑i1n∑j1mgcd(i,j)k\sum_{i1}^n\sum_{j1}^mgcd(i,j)^ki1∑n​j1∑m​gcd(i,j)k ∑d1ndk∑i…

Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)

写在前面本文地址&#xff1a;http://www.cnblogs.com/yilezhu/p/9315644.html作者&#xff1a;yilezhu上一篇关于Asp.Net Core Web Api图片上传的文章使用的是mongoDB进行图片的存储&#xff0c;文章发布后&#xff0c;张队就来了一句&#xff0c;说没有使用GridFS。的确博主只…

Codeforces40E[Number Table]

Codeforces40E[Number Table] 解法一&#xff0c;如果有一维很小&#xff0c;可以考虑状压dp之类的&#xff0c;显然非常不优秀。 解法二&#xff0c;如果n*m较小&#xff0c;可以考虑&#xff0c;设出每个位置是否为-1&#xff0c;解xor线性方程组。再bitset优化一下之类的。然…

【DP】天平问题

天平问题 解题思路&#xff1a; 有n个砝码&#xff0c;问可以称出多少种重量&#xff0c;可以在左边或者右边放&#xff0c;也可以不放 原题&#xff1a; 题目描述 小C为了试验小X&#xff0c;便为物竞的小X出了一道物理相关的题&#xff1a;现在给出n个质量的砝码&#x…

.NET Core开发日志——从ASP.NET Core Module到KestrelServer

ASP.NET Core程序现在变得如同控制台(Console)程序一般&#xff0c;同样通过Main方法启动整个应用。而Main方法要做的事情很简单&#xff0c;创建一个WebHostBuilder类&#xff0c;调用其Build方法生成一个WebHost类&#xff0c;最后启动之。实现代码一目了然&#xff1a;要想探…

BZOJ5358: [Lydsy1805月赛]口算训练

题解&#xff1a;判断d是否整除&#xff0c;可以转化为求这段区间内d的因子的指数是否均大于d中的指数。容易想到把每个数字都分解为素因子形式&#xff0c;对每个素数出现的次数求个前缀和即可。然而&#xff0c;这样时间空间都不行。注意到对于一个数x&#xff0c;小于sqrt(x…

jzoj6800-NOIP2020.9.19模拟spongebob【枚举】

正题 题目链接:https://gmoj.net/senior/#contest/show/3222/0 题目大意 nnn个ai,bia_i,b_iai​,bi​&#xff0c;求一个xxx使得最小化∑i1n∣aixbi∣\sum_{i1}^n|a_ixb_i|i1∑n​∣ai​xbi​∣ 解题思路 每个∣aixbi∣|a_ixb_i|∣ai​xbi​∣可以视为一个分两段的函数&#…

【bfs】极其简单的最短路问题

极其简单的最短路问题 题目大意&#xff1a; 求最短路&#xff0c;权值只有1或2 原题&#xff1a; 题目描述 小C终于被小X感动了&#xff0c;于是决定与他看电影&#xff0c;然而小X距离电影院非常远&#xff0c;现在假设每条道路需要花费小X的时间为1&#xff0c;由于有数…

GraphQL 的前世今生

GraphQL是什么GraphQL是一种新的API标准&#xff0c;它提供了一种更高效、强大和灵活的数据提供方式。它是由Facebook开发和开源&#xff0c;目前由来自世界各地的大公司和个人维护。GraphQL本质上是一种基于api的查询语言&#xff0c;现在大多数应用程序都需要从服务器中获取数…

jzoj6801-NOIP2020.9.19模拟patrick【树状数组】

正题 题目大意 nnn个连续的数&#xff0c;第iii个为hih_ihi​。有操作 给出一个HHH&#xff0c;询问大于等于HHH的数能组成多少个联通块修改一个位置的数。 解题思路 考虑计算连通块尾的数量&#xff0c;我们可以发现一个位置作为联通块尾部当且仅当hi≥Hh_i\geq Hhi​≥H且h…

Codeforces Round #485 (Div. 2)

Codeforces986B [Petr and Permutations] 看到两个随机的swap次数&#xff0c;很容易想到跟奇偶性有关。然后就凉了。赛后思考了一下&#xff0c;这个思路应该没问题&#xff0c;那就需要考虑swap的奇偶性与排列的关系。因此&#xff0c;我们考虑如何把两个不相邻数的swap&…

初一模拟赛总结(5.18)

成绩&#xff1a; rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111lyflyflyf210210210505050606060303030707070111hkyhkyhky210210210100100100404040000707070333wjjwjjwjj190190190100100100000000909090444fyfyfy170170170100100100000000707070555tj…

Codeforces Round #486 (Div. 3)

E. Divisibility by 25 能被25整除的充要条件就是末两位是00&#xff0c;25&#xff0c;50&#xff0c;75。如果没有过程中不出现前导0这一限制&#xff0c;显然对每种情况&#xff0c;贪心取尽量低位即可。本题的关键就在于如何满足这个条件&#xff0c;首先有个”显然”的方法…

C#:如何将坏的代码重新编译为好的代码

自己的前言说明&#xff1a;本文原作者&#xff1a;Radoslaw Sadowski&#xff0c;原文链接为&#xff1a;C# BAD PRACTICES: Learn how to make a good code by bad example。本系列还有其他文章&#xff0c;后续将慢慢翻译。引言&#xff1a;我的名字叫Radoslaw Sadowski&…

P6855-「EZEC-4.5」走方格【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P6855 题目大意 n∗mn*mn∗m的网格&#xff0c;每个格子有一个数&#xff0c;可以选择一个位置变为000。要求最小化最大权值和路径。 解题思路 考虑枚举哪个位置变为000&#xff0c;一个位置变为000后我们将路径分为两种路径…

【搜索树】高级打字机(luogu 1383)

高级打字机 luogu 1383 题目大意&#xff1a; 有三种操作&#xff1a;添加一个字符&#xff08;更改操作&#xff09;&#xff0c;撤回前iii步步更改操作&#xff08;更改操作&#xff0c;可以撤回自己&#xff09;&#xff0c;输出某一位的字符&#xff0c;现在要按要求输出…

AtCoder Grand Contest 025

B.RGB Coloring 绿色可以看作拿红和蓝都涂了&#xff0c;那么只需要满足A*a B*b K && 0 ≤ a,b ≤ n&#xff0c;答案加上C(n,a)*C(n,b) #include <bits/stdc.h> typedef long long ll; const ll mod 998244353; const int N 300000 100; using namespace s…

走进 Cake for .NET

一、什么是 CakeCake&#xff08;C# Make&#xff09; 是一个使用 C# DSL 面向 Task 的跨平台构建自动化系统&#xff0c;像编译代码&#xff0c;复制文件和文件夹&#xff0c;运行单元测试&#xff0c;压缩文件和构建 NuGet 包。更多内容请访问官网二、使用 Cake先尝试一下 P…

jzoj4616-[NOI2016模拟7.12]二进制的世界【平衡规划,dp】

正题 题目大意 nnn个数&#xff0c;对于每个数找左边的一个数执行optoptopt操作使得答案最大&#xff0c;并且求有多少个数能够使得最大。 解题思路 我们设fi,jf_{i,j}fi,j​表示下一个数的后888位为iii&#xff0c;当前数的前888位为jjj时的最大后888位的答案。然后每次用fi,…