【赛时总结】 ◇赛时·III◇ AtCoder ABC-099
◆赛时·III◆ ABC-099
■唠叨■
不要问我为什么先给ABC-100写了博客再写的ABC-099……
莫名觉得这次比赛特别简单……虽然我并没有参加比赛,只是之后再补做的。QwQ
■试题&解析■
◇不动脑子◇ A-ABD
- 【Atcoder ABC-099 A】
- 【翻译】
从ABC开始举办的数十年后,
每轮比赛被编号为 ABC-001,ABC-002...,但是第999轮比赛后,一个问题产生了:如何给之后的比赛编号?
最后,决定第1000轮到第1998轮被依次编号为 ABD-001,ABD-002...
求第N轮比赛(1≤N≤1998)的编号的前3位(ABC or ABD) - 【解析】
其实看样例就能够看出来——当N≤999时,输出ABC,否则输出ABD。就不解释了(⊙ᗜ⊙) - 【源代码】
/*Lucky_Glass*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;scanf("%d",&n);
printf("%s",n<=999? "ABC":"ABD");
return 0;
}
◇论英语的重要性◇ B-Stone Monument
- 【Atcoder ABC-099 B】
- 【翻译】
在一些村庄里,共有999座塔自西向东排列,第i座塔的高度为 (1+2+3+...+i)米。
雪下了很久才停,我们测量了两个相邻的塔分别露出雪面的高度,靠西的塔是A米,靠东的塔是B米。
若村庄的地面相平,且雪覆盖深度相同(即雪在各处的高度是一样的),给出A,B,求积雪的深度。保证有解。 - 【解析】
虽然我知道这道题有数学方法,但还是直接上大暴力……先算出999座塔的高度。再直接枚举第i座塔,如果第i-1座塔(靠西)的高度减去A等于第i座塔的高度减去B,即雪的深度。 - 【源代码】
/*Lucky_Glass*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int tower[1005];
int main()
{
for(int i=1;i<=999;i++)
tower[i]=tower[i-1]+i;
int a,b;
scanf("%d%d",&a,&b);
for(int i=2;i<=999;i++)
if(tower[i-1]-a==tower[i]-b)
{
printf("%d\n",tower[i-1]-a);
return 0;
}
return 0;
}
◇奇怪,真的奇怪◇ C-Strange Bank
- 【Atcoder ABC-099 C】
- 【翻译】
为了使人们取钱更困难(????),一家银行在提款时只允许取走1日元、6的幂日元(如6、36、216)以及9的幂日元。且不允许将取出的钱再存入,请问取出N日元最少需要提款多少次? - 【解析】
其实是一个类似于完全背包的背包问题……
简单地定义状态dp[i]表示取出n日元的最少次数。那么物品有1,6,36,...,9,81,...日元。最终状态是dp[n]。
于是我就用记忆化搜索,当前钱数为x,每次枚举取出钱数i(i < x),dp[x]=min{dp[x-i]}。 - 【源代码】
/*Lucky_Glass*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,dp[100005];
int DP(int x)
{
if(x<0) return 1e8;
if(x==0) return 0;
if(dp[x]!=-1) return dp[x];
dp[x]=1e8;
for(int i=6;i<=x;i*=6)
dp[x]=min(dp[x],DP(x-i)+1);
for(int i=9;i<=x;i*=9)
dp[x]=min(dp[x],DP(x-i)+1);
dp[x]=min(dp[x],DP(x-1)+1);
return dp[x];
}
int main()
{
scanf("%d",&n);
memset(dp,-1,sizeof dp);
printf("%d\n",DP(n));
return 0;
}
◇压轴大暴力?◇ D-Good Grid
- 【Atcoder ABC-099 D】
- 【翻译】
有一个N*N的正方形,(i,j)表示i行j列。
共有C种颜色,这个正方形的所有块都被涂上了这些颜色。若某一个块上原来涂的是颜色x,要将其改为颜色j,则需要花费C[i][j]。
特别的,对于(i,j),令F(i,j)=(i+j)%3,则给出改变颜色的花费和该正方形原本每个块涂上的颜色,求出要使F(i,j)值不同的格子涂的颜色不同,F(i,j)值相同的格子涂的颜色相同的最小花费。 - 【解析】
用tot[x][y]统计F(i,j)=x的格子中,原本颜色为y的格子的个数。然后枚举3种不同的格子(模3余0,1,2)将要被涂成的颜色,分别计算每一种格子需要的花费,最后统计取最小值。简单说来就是大暴力,时间复杂度大概是 O(颜色种类数^3)=O(27000)。
好像时间复杂度也不是特别大……(o^^)o - 【源代码】
/*Lucky_Glass*/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXCOL=30;
int n_col,siz,spd[MAXCOL+5][MAXCOL+5];
int tot[3][MAXCOL+5];
int main()
{
scanf("%d%d",&siz,&n_col);
for(int i=0;i<n_col;i++)
for(int j=0;j<n_col;j++)
scanf("%d",&spd[i][j]);
for(int i=0;i<siz;i++)
for(int j=0;j<siz;j++)
{
int col;
scanf("%d",&col);
tot[(i+j+2)%3][col-1]++;
}
int ans=1e9;
for(int i=0;i<n_col;i++)
{
int A=0;
for(int col=0;col<n_col;col++)
A+=tot[0][col]*spd[col][i];
for(int j=0;j<n_col;j++)
if(i!=j)
{
int B=0;
for(int col=0;col<n_col;col++)
B+=tot[1][col]*spd[col][j];
for(int k=0;k<n_col;k++)
if(i!=k && j!=k)
{
int C=0;
for(int col=0;col<n_col;col++)
C+=tot[2][col]*spd[col][k];
ans=min(ans,A+B+C);
}
}
}
printf("%d\n",ans);
return 0;
}
The End
Thanks for reading!
- Lucky_Glass
【赛时总结】 ◇赛时·III◇ AtCoder ABC-099的更多相关文章
- ATCODER ABC 099
ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...
- Atcoder ABC 141
Atcoder ABC 141 A - Weather Prediction SB题啊,不讲. #include<iostream> #include<cstdio> #inc ...
- Atcoder ABC 139E
Atcoder ABC 139E 题意: n支球队大循环赛,每支队伍一天只能打一场,求最少几天能打完. 解法: 考虑抽象图论模型,既然一天只能打一场,那么就把每一支球队和它需要交手的球队连边. 求出拓 ...
- Atcoder ABC 139D
Atcoder ABC 139D 解法: 等差数列求和公式,记得开 $ long long $ CODE: #include<iostream> #include<cstdio> ...
- Atcoder ABC 139C
Atcoder ABC 139C 题意: 有 $ n $ 个正方形,选择一个起始位置,使得从这个位置向右的小于等于这个正方形的高度的数量最多. 解法: 简单递推. CODE: #include< ...
- Atcoder ABC 139B
Atcoder ABC 139B 题意: 一开始有1个插口,你的插排有 $ a $ 个插口,你需要 $ b $ 个插口,问你最少需要多少个插排. 解法: 暴力模拟. CODE: #include< ...
- Atcoder ABC 139A
Atcoder ABC 139A 题意: 给你两个字符串,记录对应位置字符相同的个数 $ (n=3) $ 解法: 暴力枚举. CODE: #include<iostream> #inclu ...
- atcoder abc 244
atcoder abc 244 D - swap hats 给定两个 R,G,B 的排列 进行刚好 \(10^{18}\) 次操作,每一次选择两个交换 问最后能否相同 刚好 \(10^{18}\) 次 ...
- AtCoder ABC 250 总结
AtCoder ABC 250 总结 总体 连续若干次一样的结果:30min 切前 4 题,剩下卡在 T5 这几次卡在 T5 都是一次比一次接近, 什么 dp 前缀和打挂,精度被卡,能水过的题连水法都 ...
- AtCoder ABC 242 题解
AtCoder ABC 242 题解 A T-shirt 排名前 \(A\) 可得 T-shirt 排名 \([A+1,B]\) 中随机选 \(C\) 个得 T-shirt 给出排名 \(X\) ,求 ...
随机推荐
- (转)Rsync命令详解
Rsync命令详解 原文:http://blog.51cto.com/irow10/1826249 说明: Rsync是linux/Unix文件同步和传送工具.用于替代rcp的一个工具,rsync可以 ...
- PyCharm5 破解汉化
作者博文地址:https://www.cnblogs.com/liu-shuai/ 破解: 将下列序列号复制到软件激活界面即可破解. 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0 ...
- 什么是JavaScript Souce Map
第一部分 我们经常可以看到后缀名为.map的文件,比如我们下载得到bootstrap的css文件,如下所示: 不难理解bootstrap.css. bootstrap.min.css.等这些常规的代码 ...
- net 总数据中取随机几条数据
List<string> lstSample = new List<string>(); Random rand = new Random(); List<int> ...
- 一个ActionResult中定位到两个视图—<团委项目>
在使用MVC做项目的时候一般的情况就是一个ActionResult一个视图,这样对应的Return View();就可以找到下面对应的视图,这是根据一个原则,“约定大于配置”,但是我们有的时候需要在一 ...
- td标签里内容不换行
在一些页面开发中,除自己操作外,引起换行的情况一般有: Ex一.td标签里内容长度过长引起换行: Ex二.div标签(或其他标记)里内容有文本和图片引起换行: 解决方法: 针对例子一用<nobr ...
- Flask文件目录----- __init__ 文件
import os from flask import Flask def create_app(test_config=None): # 创建和设置app app = Flask(name, ins ...
- jquery常用属性与方法
1..css( )给指定的样式设置样式值: 2..attr(attributeName,value) /.removeAttr(attributeName);给指定的属性设置值 / 清除所有匹配的元素 ...
- BOM DOM区别 来源
DOM 是为了操作文档出现的 API,document 是其的一个对象:BOM 是为了操作浏览器出现的 API,window 是其的一个对象. BOM是浏览器对象模型,DOM是文档对象模型,前者是对浏 ...
- C++ Knowledge series Conversion & Constructor & Destructor
Everything has its lifecycle, from being created to disappearing. Pass by reference instead of pass ...