前言:果然自己连\(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的更多相关文章

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

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  2. 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 中一共有 ...

  3. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  4. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  5. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  6. AtCoder Beginner Contest 068 ABCD题

    A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...

  7. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  8. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  9. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

随机推荐

  1. Vim合并行

    日常常用到多行合并的功能,记录如下: 第一种, 多行合并成一行,即: AAAAABBBBBCCCCC 合并为:AAAAA BBBBB CCCCC 方法1: normal状态下 3J 其中的3是范围,可 ...

  2. USART 硬件流控

    流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口.流控的定义.大家一定了解,RS232 中的"RS"是Recommend Standard 的缩写,即&qu ...

  3. 零基础入门c语言函数之递归函数

    今天来总结一下关于递归函数的使用方面的问题. 递归函数就是在函数使用的时候自己调用自己,层层调用,来实现你想要的功能. 有两个最常用的例子,我们来写一下. (1)计算阶乘 #include int f ...

  4. 嵌入式物联网之SPI接口原理与配置

    本实验采用W25Q64芯片 W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb.该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件.W25Q64将8M字节的容量分为 ...

  5. Verdi Transaction Debug Mode 简单使用

    转载:Verdi Transaction Debug Mode 简单使用_Holden_Liu的博客-CSDN博客 文档与源码: User Guide: Verdi_Transaction_and_P ...

  6. linux系列之: 你知道查看文件空间的两种方法吗?

    目录 简介 du命令 df命令 总结 简介 linux系统中查看文件空间大小应该是一个非常常见的命令了,今天给大家介绍linux系统中查看文件空间的两种方法和在使用中可能会遇到的奇怪问题. 为什么会有 ...

  7. .Net Minimal Api 介绍

    Minimal API是.Net 6中新增的模板,借助C# 10的一些特性以最少的代码运行一个Web服务.本文脱离VS通过VS Code,完成一个简单的Minimal Api项目的开发. 创建项目 随 ...

  8. 【CVE-2020-1948】Apache Dubbo Provider反序列化漏洞复现

    一.实验简介 实验所属系列: 系统安全 实验对象:本科/专科信息安全专业 相关课程及专业: 计算机网络 实验时数(学分):2 学时 实验类别: 实践实验类 二.实验目的 Apache Dubbo是一款 ...

  9. 一文看懂socket编程

    1.网络模型的设计模式 1.1 B/S模式 B/S: Browser/Server,浏览器/服务器模式,在一端部署服务器,在另外外一端使用默认配置的浏览器即可完成数据的传输. B/S结构是随着互联网的 ...

  10. JSON实现序列化dump和dumps方法,JSON实现反序列化loads和load方法

    通过文件操作,我们可以将字符串写入到一个本地文件.但是,如果是一个对象(例如列表.字典.元组等),就无 法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里. 设计一套协议,按照某种 ...