AtCoder Beginner Contest 203(Sponsored by Panasonic)题解

文章目录

  • A - Chinchirorin
  • B - AtCoder Condominium
  • C - Friends and Travel costs
  • D - Pond
  • E - White Pawn
  • F - Weed

ABC203

A - Chinchirorin

三个条件if

#include <cstdio>
int main() {int a, b, c;scanf( "%d %d %d", &a, &b, &c );if( a == b ) return ! printf( "%d\n", c );if( a == c ) return ! printf( "%d\n", b );if( b == c ) return ! printf( "%d\n", a );printf( "0\n" );return 0;
}

B - AtCoder Condominium

for循环

#include <cstdio>
int main() {int n, k;scanf( "%d %d", &n, &k );int ans = 0;for( int i = 1;i <= n;i ++ )for( int j = 1;j <= k;j ++ )ans += i * 100 + j;printf( "%d\n", ans );return 0;
}

C - Friends and Travel costs

sort后再for扫一遍

#include <cstdio>
#include <algorithm>
using namespace std;
#define int long long
#define maxn 200005
struct node {int pos, w;
}p[maxn];
int n, k;bool cmp( node x, node y ) {return x.pos < y.pos;
}signed main() {scanf( "%lld %lld", &n, &k );for( int i = 1;i <= n;i ++ )scanf( "%lld %lld", &p[i].pos, &p[i].w );sort( p + 1, p + n + 1, cmp );int ans = k, pos = 0;for( int i = 1;i <= n;i ++ )if( pos + ans >= p[i].pos ) {ans -= ( p[i].pos - pos );ans += p[i].w;pos = p[i].pos;}else break;printf( "%lld\n", pos + ans );return 0;
}

D - Pond

非常朴素的扣出每一个正方形暴力做,O(nmk2)O(nmk^2)O(nmk2)

就是把每个数当成可能成为的答案做

既然每个数都来一次超时,那就二分

二分中位数,用二维前缀和做

fi,j:f_{i,j}:fi,j: k×kk\times kk×k正方形的右下角为(i,j)(i,j)(i,j),该正方形中严格大于中位数的个数

sumi,j:sum_{i,j}:sumi,j:jjj列的1→i1\rightarrow i1i严格大于中位数的个数

中位数在第⌊k22⌋+1\lfloor\frac{k^2}{2}\rfloor+12k2+1位,那么严格大于的个数就为⌊k22⌋\lfloor\frac{k^2}{2}\rfloor2k2

只需要判断有没有某个正方形中fi,jf_{i,j}fi,j比要求个数小的,这说明该正方形的中位数应该更小,那么二分值往下调;否则往上调

#include <cstdio>
#include <iostream>
using namespace std;
#define int long long
#define maxn 805
int n, k, t, ans = 1e18;
int a[maxn][maxn], sum[maxn][maxn], f[maxn][maxn];int c( int x ) {if( x < 0 ) return 0;else return x;
}bool check( int x ) {for( int i = 1;i <= n;i ++ )for( int j = 1;j <= n;j ++ )sum[i][j] = ( a[i][j] > x ), f[i][j] = 0;for( int i = 1;i <= n;i ++ )for( int j = 1;j <= n;j ++ )sum[j][i] += sum[j - 1][i];for( int i = 1;i <= n;i ++ )for( int j = 1;j <= n;j ++ ) {f[i][j] = f[i][j - 1] - ( sum[i][c(j - k)] - sum[c(i - k)][c(j - k)] ) + ( sum[i][j] - sum[c(i - k)][j] );if( i >= k && j >= k && f[i][j] <= t ) return 1;}return 0;
}signed main() {scanf( "%lld %lld", &n, &k );for( int i = 1;i <= n;i ++ )for( int j = 1;j <= n;j ++ )scanf( "%lld", &a[i][j] );t = k * k / 2;int l = 0, r = 1e9;while( l <= r ) {int mid = ( l + r ) >> 1;if( check( mid ) ) ans = mid, r = mid - 1;else l = mid + 1;}printf( "%lld\n", ans );return 0;
}

E - White Pawn

如果i+1i+1i+1行一个黑格子都没有,那么i+1i+1i+1行的状态与iii是一样的,nnn的级别一下子被压成了mmm级别

每一层最多往外扩222,那么整体来说到达点数硬存下来也是可行的

Si={whitecanreach(x,y)indepthi}S_i=\bigg\{white\ can\ reach\ (x,y)\ in\ depth_i\bigg\}Si={white can reach (x,y) in depthi}

  • (j−1∈Si−1⋃j+1∈Si−1)⋂j∉Si−1⇒j∈Si(j-1∈S_{i-1}\bigcup j+1∈S_{i-1})\bigcap j∉ S_{i-1}\Rightarrow j∈S_i(j1Si1j+1Si1)j/Si1jSi

    因为写法其实SSS是一个,如果jjj之前已经在里面了,就没必要加了(虽然用的是自动去重set)

  • j−1∉Si−1⋂j+1∉Si−1⋂j∈Si−1⇒j∉Sij-1∉S_{i-1}\bigcap j+1∉S_{i-1}\bigcap j∈ S_{i-1}\Rightarrow j∉S_ij1/Si1j+1/Si1jSi1j/Si

#include <set>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
set < int > s;
vector < int > Old, New;
vector < pair < int, int > > g;
int n, m;int main() {scanf( "%d %d", &n, &m );for( int i = 0, x, y;i < m;i ++ ) {scanf( "%d %d", &x, &y );g.push_back( make_pair( x, y ) );}sort( g.begin(), g.end() );s.insert( n );for( int l = 0, r;l < m;l = r ) {for( r = l;r < m && g[l].first == g[r].first;r ++ );New.clear(), Old.clear();for( int i = l;i < r;i ++ ) {int k = g[i].second;if( ( s.find( k - 1 ) != s.end() || s.find( k + 1 ) != s.end() ) && ( s.find( k ) == s.end() ) ) New.push_back( k );if( ( s.find( k - 1 ) == s.end() && s.find( k + 1 ) == s.end() ) && ( s.find( k ) != s.end() ) ) Old.push_back( k );}for( int i = 0;i < New.size();i ++ ) s.insert( New[i] );for( int i = 0;i < Old.size();i ++ ) s.erase( Old[i] );}printf( "%d\n", s.size() );return 0;
}

F - Weed

由于特殊操作⌊H2⌋\lfloor\frac{H}{2}\rfloor2H在,不难发现,操作次数是log⁡N\log NlogN级别的

将杂草高度排序,直接枚举操作次数,记fi,j:f_{i,j}:fi,j:iii次操作到jjj杂草为止拔草的最大数目

fi−1,k+∑ak>⌊aj2⌋,k≤j1→fi,jf_{i-1,k}+\sum_{a_k>\lfloor\frac{a_j}{2}\rfloor,k\le j}1\rightarrow f_{i,j}fi1,k+ak>2aj,kj1fi,j

最后滚动掉iii这一维即可

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 200005
int f[2][maxn];
int a[maxn];
int n, k;int main() {scanf( "%d %d", &n, &k );for( int i = 1;i <= n;i ++ )scanf( "%d", &a[i] );if( n == k ) return ! printf( "0 %d\n", n );sort( a + 1, a + n + 1 );int ans = 0;for( int i = 1;i <= 31;i ++ ) {int ip = 0, maxx = 0;for( int j = 1;j <= n;j ++ ) {while( ip < n && a[ip + 1] <= a[j] / 2 )maxx = max( maxx, f[i & 1 ^ 1][++ ip] );f[i & 1][j] = maxx + j - ip;ans = max( ans, f[i & 1][j] );}if( ans >= n - k ) return ! printf( "%d %d\n", i, n - ans );}return 0;
}

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

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

相关文章

AcWing 1068. 环形石子合并

AcWing 1068. 环形石子合并 题意&#xff1a; n堆石头围成一个圈&#xff0c;然后将相邻两堆合并成新的一堆&#xff0c;得分为新的一堆的石头数 问最高得分合最低得分 题解&#xff1a; 很简单&#xff0c;区间dp的模板题 和这个题一样 状态转移方程&#xff1a; dpmax[i]…

2.10模拟总结

文章目录前言题目解析随机减法&#xff08;calculate&#xff09;大图书馆&#xff08;bibliotheca&#xff09;子串选取 &#xff08;substr&#xff09;代码T1T2T3总结前言 200pts 4010060 rnk3 拿到牌勒嘿嘿嘿&#xff08;脑补流口水黄豆&#xff09; T3两个log想在ybt的机…

ABP VNext 微服务演示,项目状态和路线图

在ABP vNext上的第一个公告之后,我们对代码库进行了很多改进(GitHub存储库上的1100多次提交).我们已经创建了功能,示例,文档等等.在这篇文章中,我想告诉你一些新闻和项目的状态.ABP微服务演示解决方案ABP框架的主要目标之一是提供创建微服务解决方案的便利基础设施.我们一直在努…

加分二叉树

加分二叉树 题意&#xff1a; 给你一个数的中序表达式&#xff0c;然后一颗子树的分数左子树的分数*右子树的分数根的分数 给你所有点的分数&#xff0c;让你构造出分值最大的树&#xff0c;输出前序遍历 题解&#xff1a; 区间dp问题 设dp[i][j]表示中序遍历是w[i~j]的所有…

AtCoder ZONe Energy Programming Contest 题解

文章目录A - UFO InvasionB - Sign of FriendshipC - MAD TEAMD - Message from AliensE - SneakingF - Encounter and FarewellZONe Energy Programming ContestA - UFO Invasion 太简单了。 #include <cstdio> char ch[10] { Z, O, N, e }; char s[20];int main() {…

2.11模拟总结

前言 145&#xff08;175&#xff1f;&#xff09;pts 100450&#xff08;30&#xff1f;&#xff09; rnk11&#xff08;8&#xff1f;&#xff09; 之所以有括号是因为T3莫名其妙的TLE了&#xff1f; 考后我一模一样的码再交一遍30分就到手了… 应该不是我的问题吧&#xff…

[aspnetcore.apidoc]一款很不错的api文档生成工具

简单徐速一下为什么选用了aspnetcore.apidoc 而没有选用swagger最初我们也有在试用swagger&#xff0c;但总是有些感觉&#xff0c;感觉有点不满意&#xff0c;就但从api文档角度来说&#xff0c;从前后端文档沟通角度来讲apidoc的表现形式&#xff0c;要比swagger简单的多&…

【学习笔记】浅谈短小可爱的左偏树(可并堆)

文章目录左偏树左偏树的合并(merge)操作例题罗马游戏[Apio2012]dispatching[JLOI2015]城池攻占[Baltic2004]sequence左偏树 左偏树是一个堆&#xff0c;而且是一个可并堆&#xff0c;所以一定有权值的限制 以小根堆为例&#xff0c;那么必须满足节点权值小于左右儿子权值&…

2.12 模拟

文章目录前言题目解析染色计划&#xff08;color&#xff09;奇度边集&#xff08;edges&#xff09;猜拳游戏&#xff08;guess&#xff09;代码T1T2LCT整体二分总结前言 120pts 期望&#xff1a;4010020160 实际&#xff1a;406020120 rnk 9 我yue了。 怎么又是不可抗力性挂…

Acwing1069. 凸多边形的划分

Acwing1069. 凸多边形的划分 题意&#xff1a; 一个N个顶点的凸多边形&#xff0c;划分成N-2个互不相交的三角形&#xff0c;对于每个三角形&#xff0c;其三个顶点的权值相乘都可得到一个权值乘积&#xff0c;试求所有三角形的顶点权值乘积之和至少为多少。 题解&#xff1…

徐磊(Devops):一名写了十几年代码但还没写够的程序员

徐磊&#xff08;Devops 社区领袖&#xff09;【个人介绍】徐磊&#xff0c;微软MVP&#xff08;微软最有价值专家&#xff0c;大中华区域社区技术总监&#xff0c;Devops 社区领袖&#xff09;&#xff0c;从事过网管、技术支持、网络、软件开发等工作&#xff0c;一名写了十几…

加强版[BZOJ#3483] SGU505 Prefixes and suffixes(询问在线版)

文章目录descriptionsolutioncode#3483. SGU505 Prefixes and suffixes&#xff08;询问在线版&#xff09;description 给定&#x1d45b;个字符串&#xff0c;有&#x1d45a;个询问。 每个询问给出两个字符串&#x1d460;1, &#x1d460;2&#xff0c;问&#x1d45b;个字…

AcWing 320. 能量项链

AcWing 320. 能量项链 题意&#xff1a; 题解&#xff1a; 和环形石头合并基本一样 代码&#xff1a; #include<bits/stdc.h> #define debug(a,b) printf("%s %d\n",a,b); typedef long long ll; using namespace std;inline int read(){int s0,w1;char c…

ERP不规范,同事两行泪

最近的很多次对外交流&#xff0c;都聊到了ERP建设的话题&#xff0c;并且无一例外的不那么让人省心&#xff0c;回想我这么多年走过的ERP坑坑路&#xff0c;在这里也写下经验和总结&#xff0c;希望能给正在或者即将走上ERP建设路的企业一些思考和帮助。导读1、几个瞎眼而普遍…

2.13模拟总结

文章目录前言题目解析最小划分&#xff08;divide&#xff09;进制路径&#xff08;base&#xff09;欧拉欧拉&#xff08;eular&#xff09;代码T1T2T3总结前言 day9 170pts 期望&#xff1a;10010020220 实际&#xff1a;701000170 rnk7 挂的分有点多qwq 分数要是得满就能拿…

Panasonic Programming Contest (AtCoder Beginner Contest 195) 题解

文章目录A - Health M DeathB - Many OrangesC - CommaD - Shipping CenterE - Lucky 7 BattleF - Coprime PresentPanasonic Programming Contest (AtCoder Beginner Contest 195)A - Health M Death 判断倍数。 #include <cstdio> int main() {int M, H;scanf( "…

长沙.NET社区之光

奈何万事开头难迎着改革开放四十年带来的春风&#xff0c;长沙的互联网生态环境以唐胡子俱乐部为首的一众互联网社群将长沙互联网的环境推上了一个新的台阶。年底&#xff0c;我与有幸一起共事的溪源兄&#xff0c;下班后一起闲聊&#xff0c;觉着长沙的.NET的生态环境亟待改善…

P3205 [HNOI2010]合唱队

P3205 [HNOI2010]合唱队 题意&#xff1a; 有n个数&#xff0c;然后插入队伍中&#xff0c;如果队列当前为空&#xff0c;则直接插入&#xff0c;然后每次插入和上一次插入的比较&#xff0c;如果大于&#xff0c;插入当前队列的最右侧&#xff0c;如果小于&#xff0c;插入当…

2.14模拟总结

前言 节日快乐&#xff01; (逃) day10 50pts 期望&#xff1a;10302060 实际&#xff1a;0302050 rnk11 彻彻底底的摆烂局了。 但是rnk竟然没有太掉&#xff0c;所以我应该并不孤独… 和KH并排坐在机房里&#xff0c;各自看着电脑&#xff0c;痴痴想着各自的心事&#xff0c;…

KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)题解

文章目录A - CenturyB - 200th ABC-200C - Ringos Favorite Numbers 2D - Happy Birthday! 2E - Patisserie ABC 2F - Minflip SummationKYOCERA Programming Contest 2021&#xff08;AtCoder Beginner Contest 200&#xff09; A - Century 简单的除以200200200向上取整 B…