文章目录

  • 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 i1→i中严格大于中位数的个数

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

只需要判断有没有某个正方形中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(j−1∈Si−1​⋃j+1∈Si−1​)⋂j∈/​Si−1​⇒j∈Si​

    因为写法其实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_ij−1∈/​Si−1​⋂j+1∈/​Si−1​⋂j∈Si−1​⇒j∈/​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}\rfloor⌊2H​⌋在,不难发现,操作次数是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}fi−1,k​+∑ak​>⌊2aj​​⌋,k≤j​1→fi,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;
}

AtCoder Beginner Contest 203(Sponsored by Panasonic)题解相关推荐

  1. AtCoder Beginner Contest 203 (Sponsored by Panasonic) A~E 题解

    ABC203 A~E [A - Chinchirorin](https://atcoder.jp/contests/abc203/tasks/abc203_a) 题目大意 输入格式 输出格式 样例 分 ...

  2. AtCoder Beginner Contest 199 (Sponsored by Panasonic) A~E 题解

    ABC199 A~E [A - Square Inequality](https://atcoder.jp/contests/abc199/tasks/abc199_a) 题目大意 输入格式 输出格式 ...

  3. AtCoder Beginner Contest 297 【E-F】题解

    AtCoder Beginner Contest 297 [E-F]题解 E - Kth Takoyaki Set 多重指针,具体可参考leetcode简化版题目 丑数 import math imp ...

  4. AtCoder Beginner Contest 203(Sponsored by Panasonic)D.Pond

    题目链接 Problem Statement The land of a park AtCoder is an N×NN×NN×N grid with east-west rows and north ...

  5. AtCoder Beginner Contest 203(Sponsored by Panasonic) D.Pond(二分+二维前缀和)

    link 思路: 先来想想暴力的写法: n2n^{2}n2枚举左上角的顶点,k2k^{2}k2求最小值. 考虑优化: 1.1.1.答案有单调性,可以二分答案,省去枚举左上角顶点的复杂度. 2.2.2. ...

  6. AtCoder Beginner Contest 203 Pond(二分+二维前缀和)

    样例输入 [样例1] 3 2 1 7 0 5 8 11 10 4 2 [样例2] 3 3 1 2 3 4 5 6 7 8 9 样例输出 [样例1] 4 [样例2] 5 据说这个题用对顶堆维护被卡了 先 ...

  7. Atcoder Beginner Contest 271 A~E 题题解

    前言 一场掉分的 ABC /kk 在花了 101010 分钟看完前 444 题后,选择了赛场上大部分人使用的:先开 D,再按顺序做 A.B.C.(打题的时候才发现应该先开 C 的 QwQ) 但却因为 ...

  8. Panasonic Programming Contest (AtCoder Beginner Contest 195) 题解

    文章目录 A - Health M Death B - Many Oranges C - Comma D - Shipping Center E - Lucky 7 Battle F - Coprim ...

  9. AtCoder Beginner Contest 197 题解(A ~ F)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Rotate B - Visibility C - ORXOR D - Opposite ...

最新文章

  1. 【转】感知哈希算法——找出相似的图片
  2. wifi android系统耗电,魅族mx4 pro耗电严重是什么原因?异常费电元凶居然是WiFi
  3. Can you raed it croretcly?
  4. [Python]no encoding declared 错误解决方法
  5. jenkins使用哪个版本号_Linux下安装JDK及jenkins
  6. 领导者的资质——学习笔记(3):领导者的十项职责
  7. 【C#桌面应用】第三节:创建一个按钮窗口 您好,世界!
  8. win10调节屏幕亮度_Win8系统笔记本电脑如何调节屏幕亮度?
  9. Python -- 常见错误解决方法记录
  10. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_14_常用的函数式接口_Predicate接口中的默认方法or和negate...
  11. delphi 消息列表中文说明
  12. C#EXE 文件中 嵌入dll文件
  13. 光纤通道网络FC vs 以太网光纤通道FCoE
  14. MIS--信息管理系统
  15. arcgis许可服务器不运行,ArcGIS许可服务管理器无法启动问题解决方法
  16. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-S CALE IMAGE RECOGNITION-论文笔记
  17. iphone11各机型对比_9款旗舰系统对比 iPhone 11居然不是最好用的
  18. 还记得那一场说开始就开始的恋爱吗?
  19. 如何制作自己的网页html,如何制作自己的网页
  20. 余秋雨 成熟是一种明亮而不刺眼的光辉

热门文章

  1. 21张GIF动图让你秒懂数学原理
  2. 湘乡江南计算机学校,湘乡职业中等专业学校2021年招生录取分数线
  3. 实现贝叶斯分类器_机器学习实战项目-朴素贝叶斯
  4. java跨库调用存储_存储库仅在第二个调用数据时发送回ViewModel
  5. mongodb时间范围查询少8个小时_为何要对开源mongodb数据库内核做二次开发
  6. 开启事物_《原神》全新角色甘雨登场 「浮生孰来」活动祈愿开启_新闻资讯_最新手游时评_原创手游资讯...
  7. 77. 组合016(回溯法)
  8. [Spring5]IOC容器_Bean管理注解方式_组件扫描配置细节
  9. 在安装keepalived出现问题:需要:libmysqlclient.so.18
  10. [汇编语言]实验三:栈和栈段