AtCoder Beginner Contest 200
前言:果然自己连\(ABC\)都打不好了吗。
没看清题目,卡了巨久,排名一直跌,笔记本键盘坏了,心态崩了。
冷静。
——————————————————————————————————————————————————————
\(A\)
判断一个年份处于几世纪。
A
// code by fhq_treap
#include<bits/stdc++.h>
#define ll long long
#define N 300005
inline ll read(){
char C=getchar();
ll A=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') A=(A << 1)+(A << 3)+(C - 48) , C=getchar();
return A*F;
}
struct P{
int to,next;
};
struct Map{
P e[N << 1];
int head[N],cnt;
Map(){
std::memset(head,0,sizeof(head));
cnt = 0;
}
inline void add(int x,int y){
e[++cnt].to = y;
e[cnt].next = head[x];
head[x] = cnt;
}
};
ll a;
ll ans = 0;
int main(){
scanf("%lld",&a);
ans = (a / 100) + (a % 100 != 0);
std::cout<<ans<<std::endl;
}
\(B\)
按题意模拟就行。
B
// code by fhq_treap
#include<bits/stdc++.h>
#define ll long long
#define N 300005
inline ll read(){
char C=getchar();
ll A=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') A=(A << 1)+(A << 3)+(C - 48) , C=getchar();
return A*F;
}
struct P{
int to,next;
};
struct Map{
P e[N << 1];
int head[N],cnt;
Map(){
std::memset(head,0,sizeof(head));
cnt = 0;
}
inline void add(int x,int y){
e[++cnt].to = y;
e[cnt].next = head[x];
head[x] = cnt;
}
};
ll a,k;
int main(){
a = read(),k = read();
for(int i = 1;i <= k;++i){
if(a % 200 == 0)
a /= 200;
else
a = a * 1000 + 200;
}
std::cout<<a<<std::endl;
}
\(C\)
从左往右扫,按前缀和的膜分类一下就能统计了。
C
// code by fhq_treap
#include<bits/stdc++.h>
#define ll long long
#define N 300005
inline ll read(){
char C=getchar();
ll A=0 , F=1;
while(('0' > C || C > '9') && (C != '-')) C=getchar();
if(C == '-') F=-1 , C=getchar();
while('0' <= C && C <= '9') A=(A << 1)+(A << 3)+(C - 48) , C=getchar();
return A*F;
}
struct P{
int to,next;
};
struct Map{
P e[N << 1];
int head[N],cnt;
Map(){
std::memset(head,0,sizeof(head));
cnt = 0;
}
inline void add(int x,int y){
e[++cnt].to = y;
e[cnt].next = head[x];
head[x] = cnt;
}
};
ll mod[300];
ll n,a[500005];
ll ans = 0;
int main(){
scanf("%lld",&n);
for(int i = 1;i <= n;++i){
a[i] = read();
ans += mod[a[i] % 200];
mod[a[i] % 200] ++;
}
std::cout<<ans<<std::endl;
}
\(D\)
五分钟写完三题,感觉良好。
这题一眼看错了题意,以为不能有相同元素,于是乎写了正确算法交了三发\(WA\)然后就不想打了。
认真看题,不然人没。
一眼看出鸽笼原理,所以只要枚举一群数量大于\(200\),复杂度在接受范围里的就行。
D
#include<iostream>
#include<cstdio>
#define ll long long
#define N 500
ll n,a[N];
inline ll read(){
ll ans = 0,f = 1;
char a = getchar();
while(a < '0' || a > '9' && a != '-')a = getchar();
if(a == '-')
f = -1,a = getchar();
while(a <= '9' && a >= '0')
ans = (ans << 3) + (ans << 1) + (a - '0'),a = getchar();
return ans;
}
ll mod[N];
inline void print(ll a,ll b){
puts("Yes");
ll x = 0;
for(int i = 0;i <= std::min(n - 1,(ll)10);++i)
if((a >> i) & 1)
x ++ ;
std::cout<<x<<" ";
for(int i = 0;i <= std::min(n - 1,(ll)10);++i)
if((a >> i) & 1)
std::cout<<(i + 1)<<" ";
a = b,x = 0;
puts("");
for(int i = 0;i <= std::min(n - 1,(ll)10);++i)
if((a >> i) & 1)
x ++ ;
std::cout<<x<<" ";
for(int i = 0;i <= std::min(n - 1,(ll)10);++i)
if((a >> i) & 1)
std::cout<<(i + 1)<<" ";
}
int main(){
n = read();
for(int i = 1;i <= n;++i)
a[i] = read() % 200;
for(int i = 1;i <= (1 << std::min(n - 1,(ll)10));++i){
ll s = 0;
for(int j = 0;j <= std::min(n - 1,(ll)10);++j)
if((i >> j) & 1)
s = (s + a[j + 1]) % 200;
if(mod[s]){
print(mod[s],i);
return 0;
}else{
mod[s] = i;
}
}
puts("No");
}
\(E\)
这题的关键点在于,如何快速求出三元组和为\(s\)的数量。
找到答案所在的块内后,完全可以枚举第一,第二个数求解。
考虑找规律,规律见程序。
很抱歉这里说不清。
E
#include <cstdio>
#include <algorithm>
using namespace std;
long long dp[4][3000005];
int ans[4];
int main()
{
int n,st;
long long k,sum,now;
int all;
scanf("%d%lld",&n,&k);
dp[0][0]=1;
for(int i=1;i<=3;i++)
{
sum=0;
for(int j=0;j<=i*n;j++)
{
dp[i][j]=sum;
sum+=dp[i-1][j];
if(j>=n)
sum-=dp[i-1][j-n];
}
}
now=0;
for(int i=0;i<=3*n;i++)
{
now+=dp[3][i];
if(now>=k)
{
all=i;
k-=now-dp[3][i];
break;
}
}
now=0;
for(int i=1;i<=n;i++)
{
now+=dp[2][all-i];
if(now>=k)
{
ans[1]=i;
for(int j=1;j<=n;j++)
if(all-ans[1]-j>=1&&all-ans[1]-j<=n)
{
ans[2]=j;
ans[3]=all-ans[1]-ans[2];
break;
}
for(int j=0;j<k-(now-dp[2][all-i])-1;j++)
{
ans[2]++;
ans[3]--;
}
printf("%d %d %d\n",ans[1],ans[2],ans[3]);
break;
}
}
return 0;
}
F找时间补上。
AtCoder Beginner Contest 200的更多相关文章
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- Atcoder Beginner Contest 200 E. Minflip Summation(概率数论)
题面 一个字符串 T T T 是由一个包含 0.1.? 的字符串 S S S 循环连接 K K K 次获得的. 字符串 T T T 中的每个 ? 都可以换成 0 或 1 ,假设 T T T 中一共有 ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 068 ABCD题
A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
随机推荐
- TCC分布式事务的实现原理
目录 一.写在前面 二.业务场景介绍 三.进一步思考 四.落地实现TCC分布式事务 (1)TCC实现阶段一:Try (2)TCC实现阶段二:Confirm (3)TCC实现阶段三:Cancel 五.总 ...
- ShardingSphere学习
1 基本概念 1.1 ShardingSphere概述 官网:https://shardingsphere.apache.org/index_zh.html 1.2 分库分表概述 分库分表是为了解决由 ...
- JAVA String、StringBuffer、StringBuilder类解读
JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...
- 实现服务器和客户端数据交互,Java Socket有妙招
摘要:在Java SDK中,对于Socket原生提供了支持,它分为ServerSocket和Socket. 本文分享自华为云社区<Java Socket 如何实现服务器和客户端数据交互>, ...
- 改善深层神经网络-week1编程题(Regularization)
Regularization Deep Learning models have so much flexibility and capacity that overfitting can be a ...
- flink中使用lambda表达式
flink中使用lambda表达式 1.使用lambda的一个示例 2.使用上面这种写法通常或得到如下错误 3.解决方案 4.建议 5.完整代码 在 java8中有一种新的语法糖,即 lambda表达 ...
- spring security中动态更新用户的权限
在程序的执行过程中,有时有这么一种需求,需要动态的更新某些角色的权限或某些人对应的权限,当前在线的用户拥有这个角色或拥有这个权限时,在不退出系统的情况下,需要动态的改变的他所拥有的权限. 需求:张三 ...
- 数据流中的中位数 牛客网 剑指Offer
数据流中的中位数 牛客网 剑指Offer 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就 ...
- NSFOCUS建议您采取以下措施以降低威胁: * 修改源代码或者配置文件改变SSH服务的缺省banner。
老扫漏洞出来要整改 1.在 /etc/下创建一个文件 ssh_banner_change,在文件中输入内容,如:welcome! 2.修改/etc/ssh/sshd_config 文件,添加以下内容: ...
- k8s入坑之路(2)kubernetes架构详解
每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平 ...