[AtCoder Beginner Contest 215] A-G题解

文章目录

  • A - Your First Judge
  • B - log2(N)
  • C - One More aab aba baa
  • D - Coprime 2
  • E - Chain Contestant
  • F - Dist Max 2
  • G - Colorful Candies 2

atcoder题目链接

A - Your First Judge

签到题

#include <cstdio>
#include <iostream>
using namespace std;
string s;
int main() {cin >> s;if( s == "Hello,World!" ) printf( "AC\n" );else printf("WA\n" );return 0;
}

B - log2(N)

签到题

#include <cstdio>
int main() {long long n;scanf( "%lld", &n );int ans;for( int i = 0;;i ++ ) {if( ( 1ll << i ) <= n ) ans = i;else break;}printf( "%d", ans );return 0;
}

C - One More aab aba baa

离散化后压成整数搜索,简单题

#include <stack>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
stack < char > sta;
char s[10], rnk[10];
int t[40325], used[30];
bool vis[10];
int n, k, cnt, tot;void dfs( int x, int val ) {if( x > n ) {t[++ cnt] = val;return;}for( int i = 1;i <= n;i ++ )if( vis[i] ) continue;else {vis[i] = 1;dfs( x + 1, val * 10 + used[s[i] - 'a' + 1] );vis[i] = 0;}
}int main() {scanf( "%s %d", s + 1, &k );n = strlen( s + 1 );for( char i = 'a';i <= 'z';i ++ )for( int j = 1;j <= n;j ++ )if( s[j] == i ) {used[i - 'a' + 1] = ++ tot, rnk[tot] = i;break;}dfs( 1, 0 );sort( t + 1, t + cnt + 1 );cnt = unique( t + 1, t + cnt + 1 ) - t - 1;while( t[k] ) sta.push( rnk[t[k] % 10] ), t[k] /= 10;while( ! sta.empty() ) printf( "%c", sta.top() ), sta.pop();return 0;
}

D - Coprime 2

质因数分解后,把质因数的倍数都筛掉,简单题

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define maxn 100005
vector < int > ans;
int cnt;
bool vis[maxn], is[maxn];
int prime[maxn];void init( int n ) {for( int i = 2;i <= n;i ++ ) {if( ! vis[i] ) is[i] = 1, prime[++ cnt] = i;for( int j = 1;j <= cnt && i * prime[j] <= n;j ++ ) {vis[i * prime[j]] = 1;if( i % prime[j] == 0 ) break;}}
}int n, m;
int a[maxn], p[maxn * 100];int main() {init( 1e5 );scanf( "%d %d", &n, &m );for( int i = 1;i <= n;i ++ )scanf( "%d", &a[i] );cnt = 0;for( int i = 1;i <= n;i ++ ) {for( int j = 1;j * j <= a[i];j ++ )if( a[i] % j == 0 ) {if( is[j] ) p[++ cnt] = j;if( is[a[i] / j] ) p[++ cnt] = a[i] / j;}}for( int i = 1;i <= m;i ++ ) vis[i] = 0;sort( p + 1, p + cnt + 1 );cnt = unique( p + 1, p + cnt + 1 ) - p - 1;for( int i = 1;i <= cnt;i ++ )for( int j = p[i];j <= m;j += p[i] )vis[j] = 1;for( int i = 1;i <= m;i ++ )if( ! vis[i] ) ans.push_back( i );printf( "%d\n", ans.size() );for( int i = 0;i < ans.size();i ++ )printf( "%d\n", ans[i] );return 0;
}

E - Chain Contestant

只有101010种,符合状压

dpi,s,j:dp_{i,s,j}:dpi,s,j:iii为止出现字符的状态为sss,上一次出现的字符为jjj(多加一种字符表示空)

  • 不选iii

    dpi,s,j+=dp[i−1][s][j]dp_{i,s,j}+=dp[i-1][s][j]dpi,s,j+=dp[i1][s][j]

  • iii,必须满足iii位置字符没出现过上一次出现字符就是iii位置字符

    dp[i][1<<t[i]∣s][t[i]]+=dp[i][1<<t[i]∣s][t[i]]+dp[i−1][s][j]dp[i][1 << t[i] | s][t[i]]+=dp[i][1 << t[i] | s][t[i]] + dp[i - 1][s][j]dp[i][1<<t[i]s][t[i]]+=dp[i][1<<t[i]s][t[i]]+dp[i1][s][j]

简单题

#include <cstdio>
#define int long long
#define mod 998244353
#define maxn 1002
#define S 1 << 10
int n;
char s[maxn];
int t[maxn];
int dp[maxn][S][11];signed main() {scanf( "%lld %s", &n, s + 1 );for( int i = 1;i <= n;i ++ ) t[i] = s[i] - 'A';dp[0][0][10] = 1;for( int i = 1;i <= n;i ++ )for( int sta = 0;sta < S;sta ++ )for( int j = 0;j <= 10;j ++ )if( ! dp[i - 1][sta][j] ) continue;else {dp[i][sta][j] = ( dp[i][sta][j] + dp[i - 1][sta][j] ) % mod;if( j == 10 ) dp[i][1 << t[i] | sta][t[i]] = ( dp[i][1 << t[i] | sta][t[i]] + dp[i - 1][sta][j] ) % mod;else if( ( 1 << t[i] & sta ) and j != t[i] ) continue;elsedp[i][1 << t[i] | sta][t[i]] = ( dp[i][1 << t[i] | sta][t[i]] + dp[i - 1][sta][j] ) % mod;}int ans = 0;for( int i = 0;i < S;i ++ )for( int j = 0;j <= 10;j ++ )if( i == 0 && j == 10 ) continue;else ans = ( ans + dp[n][i][j] ) % mod;printf( "%lld\n", ans );return 0;
}

F - Dist Max 2

二分答案

将点按xxx坐标排序

类似滑动窗口模拟

记录在满足xxx坐标情况下的最大最小yyy,判断是否有满足与现在枚举iiiyyy距离不小于二分答案

简单题

#include <queue>
#include <cstdio>
#include <algorithm>
using namespace std;
#define maxn 200005
struct node { int x, y; }p[maxn];
queue < node > q;
int n;int main() {scanf( "%d", &n );for( int i = 1;i <= n;i ++ ) scanf( "%d %d", &p[i].x, &p[i].y );sort( p + 1, p + n + 1, []( node s, node t ) { return s.x < t.x; } );int l = 0, r = 1e9, ans;next :while( l <= r ) {int mid = l + r >> 1;while( ! q.empty() ) q.pop();int Min = 1e9, Max = 0;for( int i = 1;i <= n;i ++ ) {while( ! q.empty() ) {if( q.front().x > p[i].x - mid ) break;Min = min( Min, q.front().y );Max = max( Max, q.front().y );q.pop();}if( Min <= p[i].y - mid or Max >= p[i].y + mid ) {ans = mid, l = mid + 1;goto next;}q.push( p[i] );}r = mid - 1;}printf( "%d\n", ans );return 0;
}

G - Colorful Candies 2

中档题

CCC表示不同的糖果颜色数,将NNN颗糖果重新离散化颜色1,2,...,C

显然答案与具体糖果的颜色无关,只与每种颜色的个数有关,令nin_ini表示颜色为iii的糖果个数

枚举每一轮要选择的糖果个数KKK

对于每一种颜色,定义XiX_iXi,若选择糖果种有iii颜色,Xi=1X_i=1Xi=1,否则Xi=0X_i=0Xi=0

KKK糖果中不同颜色种数可以表示为∑i=1CXi\sum_{i=1}^CX_ii=1CXi

所求期望为E[∑i=1CXi]E\Big[\sum_{i=1}^CX_i\Big]E[i=1CXi],根据期望的线性可加性知道=∑i=1CE[Xi]=\sum_{i=1}^CE\Big[X_i\Big]=i=1CE[Xi]

一个颜色出现的期望很简单,出现的方案数///总方案数,出现的方案数===总方案数−-一次都没出现
E[Xi]=(NK)−(N−niK)(NK)E\Big[X_i\Big]=\frac{\binom{N}{K}-\binom{N-n_i}{K}}{\binom{N}{K}} E[Xi]=(KN)(KN)(KNni)
枚举iii又是O(n)O(n)O(n)的时间,再加上外层的KKK枚举,时间O(n2)O(n^2)O(n2)难以接受

发现其实如果有xxx种颜色的个数都是nin_ini,那么这xxx种颜色的期望可以O(1)O(1)O(1)计算
x∗(NK)−(N−niK)(NK)x*\frac{\binom{N}{K}-\binom{N-n_i}{K}}{\binom{N}{K}} x(KN)(KN)(KNni)
那么不同个数就是ni=1,2,...,n_i=1,2,...,ni=1,2,...,,又要满足∑ni=N\sum n_i=Nni=N,所以可以知道上界就是根号级别ni=1,2,...,Nn_i=1,2,...,\sqrt Nni=1,2,...,N

#include <map>
#include <cstdio>
using namespace std; 
#define int long long 
#define mod 998244353
#define maxn 50005
map < int, int > color, cnt;
int fac[maxn], inv[maxn];
int n;int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans;
}void init() {fac[0] = inv[0] = 1;for( int i = 1;i <= n;i ++ ) fac[i] = fac[i - 1] * i % mod;inv[n] = qkpow( fac[n], mod - 2 );for( int i = n - 1;i;i -- ) inv[i] = inv[i + 1] * ( i + 1 ) % mod;
}int C( int n, int m ) {if( n < m ) return 0;else return fac[n] * inv[m] % mod * inv[n - m] % mod;
}signed main() {scanf( "%lld", &n );init();for( int i = 1, x;i <= n;i ++ ) {scanf( "%lld", &x );color[x] ++;//颜色x的出现次数 }for( auto it : color )	cnt[it.second] ++;//颜色出现次数为x的颜色个数for( int i = 1;i <= n;i ++ ) {int ans = 0;for( auto it : cnt ) ans = ( ans + ( C( n, i ) - C( n - it.first, i ) + mod ) % mod * it.second ) % mod;printf( "%lld\n", ans * qkpow( C( n, i ), mod - 2 ) % mod );}return 0;
}

后言:HHH就是FWTFWTFWTatcoder-abc很喜欢在最后考些鹅心算法模板,不想补了

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

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

相关文章

Acwing 135 最大子序和

Acwing 135 最大子序和 题目&#xff1a; 输入一个长度为 n 的整数序列&#xff0c;从中找出一段长度不超过 m 的连续子序列&#xff0c;使得子序列中所有数的和最大。 题解&#xff1a; 我们把这个问题的集合分成n份&#xff0c;第k份表示以A[k]结尾的最大连续子序列是多少…

.net core自定义高性能的Web API服务网关

网关对于服务起到一个统一控制处理的作用&#xff0c;也便于客户端更好的调用&#xff1b;通过网关可以灵活地控制服务应用接口负载&#xff0c;故障迁移&#xff0c;安全控制&#xff0c;监控跟踪和日志处理等。由于网关在性能和可靠性上都要求非常严格&#xff0c;所以针对业…

微软宣布 Visual Studio 2019 将于4月2日正式发布

微软于去年发布了 Visual Studio 2019 预览版。今天&#xff0c;该公司宣布 Visual Studio 2019 正式版将于4月2日发布。微软在公告中表示&#xff1a;“欢迎加入我们在4月2号当天举办的 VS 2019 线上发布活动&#xff0c;这是一款更加现代化、创新且实用的生产力工具”。据悉&…

CF1427F-Boring Card Game【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF1427F 题目大意 有一个1∼6n1\sim 6n1∼6n的序列&#xff0c;两个人轮流操作&#xff0c;每次取走连续的三个数字。 现在给出先手取走的数字集合&#xff0c;要求构造方案。 保证有解 1≤n≤2001\leq n\leq 2001≤n≤200…

模板:旋转卡壳(计算几何)

所谓旋转卡壳&#xff0c;就是旋转起来的卡壳 &#xff08;逃&#xff09; 前言 前置知识&#xff1a;凸包 个人感觉很像 two-pointers 算法。 能够在优秀的线性时间复杂度内完成总多求最值&#xff08;周长、面积…&#xff09;的神奇操作。 解析 给出情境&#xff1a; 给…

Acwing 1088.旅行问题

Acwing 1088.旅行问题 题目&#xff1a; 一个环形公路&#xff0c;由n个车站&#xff0c;每个站有若干升汽油&#xff08;有的站可能油量为零&#xff09;&#xff0c;每升油可以让汽车行驶一千米。 从某个车站出发&#xff0c;一直按顺时针&#xff08;或逆时针&#xff09;…

[AtCoder Regular Contest 125] A-F全题解

文章目录A - Dial UpB - SquaresC - LIS to Original SequenceD - Unique SubsequenceE - SnackF - Tree Degree Subset Sum网址链接A - Dial Up 签到题 特判一下有没有0/1在目标串中出现而没在原串出现 除了第一次0/1数字互换时&#xff0c;需要从a1a_1a1​左右找距离最近的…

DotNetty 实现 Modbus TCP 系列 (三) Codecs Handler

DotNetty 实现 Modbus TCP 系列 (一) 报文类DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例DotNetty 作为一个半成品&#xff0c;我们不需要关注细节的实现&#xff0c;只需要关注自己的业务即可&#xff0c;所以最主要的就是处理 Codecs 和 Handler。所有…

loj#2788-「CEOI2015 Day1」管道【树上差分】

正题 题目链接:https://loj.ac/p/2788 题目大意 给出nnn个点mmm条边的一张图&#xff0c;求它的所有割边。 1≤n≤105,1≤m≤61061\leq n\leq 10^5,1\leq m\leq 6\times 10^61≤n≤105,1≤m≤6106&#xff0c;内存限制16MB 解题思路 我们存不下所有的边&#xff0c;但是nnn很…

Acwing -- 单调队列优化的DP问题

文章目录引入acwing154 滑动窗口应用135 最大子序和1088.旅行问题AcWing 1087. 修剪草坪28AcWing 1089. 烽火传递AcWing 1090. 绿色通道AcWing 1091. 理想的正方形引入 acwing154 滑动窗口 题目链接 题解 应用 闫氏最优化问题分析法 135 最大子序和 题目&#xff1a; 输入…

模板:半平面交(计算几何)

所谓半平面交&#xff0c;就是和“半平先生”当面交谈。顾名思义&#xff0c;这是一个源于日本的算法。 &#xff08;逃&#xff09; 前言 感觉应用很灵活的一个算法&#xff0c;一切有两个变量的线性规划问题都可以转化为半平面交。 有时可能要注意取等问题&#xff08;指射…

Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) A-F全题解

Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) 文章目录A. Simply Strange SortB. Charmed by the GameC. Deep Down BelowD1/D2. Up the StripE. Bottom-Tier ReversalsF. Top-Notch InsertionsA. Simply Strange Sort 签到题&#xff0c;暴力做 …

[小技巧]C#中如何为枚举类型添加描述方法

背景在我们的日常开发中&#xff0c;我们会经常使用枚举类型。有时我们只需要显示枚举的值或者枚举值对应名称&#xff0c; 但是在某些场景下&#xff0c;我们可能需要将枚举值显示为不同的字符串。例&#xff1a; 当前我们有如下枚举Level这个枚举有4个可选值B, N, G, VG。 现…

Loj#3320-「CCO 2020」旅行商问题

正题 题目链接:https://loj.ac/p/3320 题目大意 有一张nnn个点的无向完全图&#xff0c;每一条边是红色或者蓝色&#xff0c;对于每个点sss求从这个点出发的一条尽量短的经过所有点的路径。 1≤n≤20001\leq n\leq 20001≤n≤2000 解题思路 显然地猜测一下最短的长度肯定是n…

AcWing 1087. 修剪草坪28

AcWing 1087. 修剪草坪 题意: 有n个数&#xff0c;不能选超过连续的k个数&#xff0c;问所能选的最大值是多少&#xff1f; 题解&#xff1a; 我们首先分析dp过程&#xff1a; dp[i]表示选择完前i个数的最大值 sum[i]表示前i项和 对于第i个数&#xff0c;它有两个情况&#…

洛谷P4463:calc(dp、拉格朗日插值)

Solution\text{Solution}Solution 神奇题目。 首先可以强制所有的数递增&#xff0c;最后的答案乘一个 n!n!n! 即可。 设 dpi,jdp_{i,j}dpi,j​ 表示在 [1,j][1,j][1,j] 的值域选了 iii 个数的答案&#xff0c;不难写出 dp 转移&#xff1a; dpi,jdpi−1,j−1jdpi,j−1dp_{i,j…

CF1710C-XOR Triangle【dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF1710C 题目大意 求有多少对0≤a,b,c≤n0\leq a,b,c\leq n0≤a,b,c≤n满足axorb,axorc,bxorca\ xor\ b,a\ xor\ c,b\ xor\ ca xor b,a xor c,b xor c作为边长时能构成一个非退化三角形。 n以二进制形式给出 1≤n<221051…

工业通信的开源项目 HslCommunication 介绍

前言&#xff1a;本项目的孵化说来也是机缘巧合的事&#xff0c;本人于13年大学毕业后去了一家大型的国企工作&#xff0c;慢慢的走上了工业软件&#xff0c;上位机软件开发的道路。于14年正式开发基于windows的软件&#xff0c;当时可选的技术栈就是MFC和C#的winform&#xff…

【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)

文章目录Gorgeous SequenceTyvj 1518 CPU监控【清华集训2015】VNaive OperationsPictureWalking RaceGorgeous Sequence HDU5306 操作 区间与xxx取min\rm minmin查询区间最大值查询区间和 比较暴力的线段树维护区间 Max : 区间最大值sub_max : 严格小于最大值的区间次大值…

Acwing 1089. 烽火传递

Acwing 1089. 烽火传递 题意&#xff1a; 有n个数&#xff0c;要保证每m个数中必须选一个&#xff0c;问所选数的最小总和是多少 题解&#xff1a; 我一开始设的状态为:dp[i]表示前i个数选完的最小值&#xff0c;第i个数可以选也可以不选&#xff0c;但是这样一个状态&…