A

按题意模拟。

	scanf("%lld%lld%lld%lld",&n,&a,&x,&y);
std::cout<<n * x - (x - y) * std::max(n - a,0ll);

B

判断第一个 \(1\) 的位置的奇偶性。

	scanf("%lld",&n);
scanf("%s",a + 1);
for(int i = 1;i <= n;++i){
if(a[i] == '1'){
if(i % 2)
puts("Takahashi");
else
puts("Aoki");
return 0;
}
}

C

用 \(map\) 记录每个 \(k\) 长度区间的每个颜色的出现情况。

每次向右移一位,则把前者移除,后者加入。

	scanf("%lld%lld",&n,&k);
for(int i = 1;i <= n;++i){
scanf("%lld",&c[i]);
}
ll now = 0,ans = 0;
for(int i = 1;i <= k;++i){
QWQ[c[i]] ++ ;
if(QWQ[c[i]] == 1)
now ++ ;
}
ans = now;
for(int i = k + 1;i <= n;++i){
QWQ[c[i - k]] -- ;
if(QWQ[c[i - k]] == 0)
now -- ;
QWQ[c[i]] ++ ;
if(QWQ[c[i]] == 1)
now ++ ;
ans = std::max(now,ans);
}
std::cout<<ans<<std::endl;

D

考虑先考虑行的贡献,先把 \(a_{i,j} \to a_{i,j} + i * c\) ,并预处理出每行每列下的最小值。

然后我们按列按行枚举,在枚举第 \(i\) 列时,先把对应的行下的最小值区间,把 \([1,i]\) 加 \(c\),\([i + 1,n]\) 减 \(c\) ,可以使用线段树维护,然后查询最小值就好了。

同时要考虑在同行的操作,复杂度 \(O(nlogn)\) 。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define ll long long
#define N 1005
#define lowbit(x) (x & -x) ll a[N][N],k[N][N],pre[N][N],s[N][N];
ll h,w,c; struct P{
ll v,tag;
P(){v = tag = 0;}
}; struct segment{
P t[N << 2];
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
#define mid ((l + r) >> 1)
inline void up(int u){
t[u].v = std::min(t[ls(u)].v,t[rs(u)].v);
}
inline void push_down(int u){
if(t[u].tag){
t[ls(u)].v += t[u].tag;
t[ls(u)].tag += t[u].tag;
t[rs(u)].v += t[u].tag;
t[rs(u)].tag += t[u].tag;
t[u].tag = 0;
}
}
inline void add(int u,int l,int r,int tl,int tr,ll p){
if(tl <= l && r <= tr){
t[u].v += p;
t[u].tag += p;
return ;
}
push_down(u);
if(tl <= mid)
add(ls(u),l,mid,tl,tr,p);
if(tr > mid)
add(rs(u),mid + 1,r,tl,tr,p);
up(u);
}
}e[N]; ll ans = 9e18;
ll f[N]; int main(){
scanf("%lld%lld%lld",&h,&w,&c);
for(int i = 1;i <= h;++i)
for(int j = 1;j <= w;++j)
scanf("%lld",&a[i][j]),k[i][j] = a[i][j];
for(int i = 1;i <= h;++i)
for(int j = 1;j <= w;++j)
k[i][j] += i * c;
// for(int i = 1;i <= h;++i,puts(""))
// for(int j = 1;j <= w;++j)
// std::cout<<k[i][j]<<" ";
for(int i = 1;i <= w;++i)
for(int j = h;j >= 1;--j){
if(j == h)continue;
k[j][i] = std::min(k[j + 1][i],k[j][i]);
}
for(int i = 1;i <= h;++i)
for(int j = 1;j <= w;++j)
k[i][j] += (j - 1)*c;
// for(int i = 1;i <= h;++i,puts(""))
// for(int j = 1;j <= w;++j)
// std::cout<<k[i][j]<<" ";
// puts("");
for(int i = 1;i <= h;++i)
for(int j = 1;j <= w;++j)
e[i].add(1,1,w,j,j,k[i][j]);
// for(int j = 1;j <= w;++j)
// for(int i = 1;i <= h;++i)
// std::cout<<e[i].t[1].v<<std::endl;
for(int i = 1;i <= h - 1;++i)
ans = std::min(ans,1ll * e[i + 1].t[1].v + a[i][1] - i * c);
for(int i = 2;i <= w;++i)
for(int j = 1;j <= h - 1;++j){
e[j + 1].add(1,1,w,1,i - 1,c);
e[j + 1].add(1,1,w,i,w,-c);
ans = std::min(ans,1ll * e[j + 1].t[1].v + a[j][i] - j * c);
}
for(int i = 1;i <= h;++i){
std::memset(f,0x7f,sizeof(f));
for(int j = 1;j <= w;++j){
if(j != 1)
f[j] = f[j - 1] + c;
ans = std::min(ans,f[j] + a[i][j]);
f[j] = std::min(f[j],a[i][j]);
}
}
std::cout<<ans<<std::endl;
}

F

维护循环节就好。

按代价排序,并维护循环节至 \(1\) 。

#include <bits/stdc++.h>
using namespace std; #define int long long typedef pair<int, int> pii; pii a[100005]; int gcd(int x, int y) { return y == 0 ? x : gcd(y, x % y); } signed main() {
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for (register int i = 1; i <= m; i++) cin >> a[i].second >> a[i].first;
sort(a + 1, a + m + 1);
int answer = 0;
for (register int i = 1; n > 1 && i <= m; i++) {
int tn = gcd(n, a[i].second);
answer += (n - tn) * a[i].first;
n = tn;
}
if (n > 1)
cout << -1 << endl;
else
cout << answer << endl;
return 0;
}

ABC 210的更多相关文章

  1. 算法竞赛入门经典 习题2-10 排列(permutation)

    习题2-10 排列(permutation) 用1,2,3,-,9组成3个三位数 abc, def, 和ghi,每个数字恰好使用一次,要求 abc:def:ghi = 1:2:3.输出所有解.提示:不 ...

  2. 算法竞赛入门经典 习题 2-10 排列(permutation)

    习题 2-10 用1,2,3.....,9组成3个三位数abc.def和ghi,每一个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出全部解. #include <stdio.h& ...

  3. 【IOS】将一组包含中文的数据按照#ABC...Z✿分组

    上一篇文章[IOS]模仿windowsphone列表索引控件YFMetroListBox里面 我们一步步的实现了WindowsPhone风格的索引. 但是有没有发现,如果你要实现按照字母排序,你还得自 ...

  4. 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }

    平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...

  5. 学习Python的ABC模块(转)

    http://yansu.org/2013/06/09/learn-Python-abc-module.html 1.abc模块作用 Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助a ...

  6. 将abc的全排列输出

    #include "iostream" using namespace std; void swap(char a[],int i,int j){ char temp; temp= ...

  7. 关于String str =new String("abc")和 String str = "abc"的比较

    String是一个非常常用的类,应该深入的去了解String 如: String str =new String("abc") String str1 = "abc&qu ...

  8. IE9 使用document.getElementsByName("abc") 不能获取到名称相同SPAN元素

    <div name="abc"></div> <input name="abc" type="text" /& ...

  9. 经典String str = new String("abc")内存分配问题

    出自:http://blog.csdn.net/ycwload/article/details/2650059 今天要找和存储管理相关的一些知识,网上搜了半天也没有找到完善的(30%的程度都不到),没 ...

随机推荐

  1. 更好的 java 重试框架 sisyphus 的 3 种使用方式

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍 更好的 java 重试框架 sisyphus 背后的 ...

  2. 51.N皇后问题

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解法包含一个明确的 n 皇后问题的棋 ...

  3. BUAA 2020 软件工程 个人博客作业

    BUAA 2020 软件工程 个人博客作业 Author: 17373051 郭骏 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 ...

  4. Canal Server发送binlog消息到Kafka消息队列中

    Canal Server发送binlog消息到Kafka消息队列中 一.背景 二.需要修改的地方 1.canal.properties 配置文件修改 1.修改canal.serverMode的值 2. ...

  5. Python NameError: name 'unicode' is not defined

    Python2 的unicode 函数在 Python3 中被命名为 str.在 Python3 中使用 ·str 来代替 Python2 中的 unicode.

  6. js实现日期格式化封装-八种格式

    封装一个momentTime.js文件,包含8种格式. 需要传两个参数: 时间戳:stamp 格式化的类型:type, 日期补零的方法用到es6语法中的padStart(length,'字符'): 第 ...

  7. ssl 原理和建立连接过程

    ssl ("Secure Sockets Layer")加密原理 和https的关系https = http + ssl ssl 位置: SSL握手 证书主要作用是在SSL握手中, ...

  8. Linux 启动/关闭 oracle 数据库

    1.启动 1.1 启动监听 :lsnrctl start 1.2 启动数据库:sqlplus /nolog    conn /as sysdba(或者两句一起:sqlplus sys/ as sysd ...

  9. Effective C++ 总结笔记(六)

    七.模板与泛型编程 41.了解隐式接口和编译器多态 1.类和模板都支持接口和多态. 2.类的接口是显式定义的--函数签名.多态是通过虚函数在运行期体现的. 3.模板的接口是隐式的(由模板函数的实现代码 ...

  10. 【linux系统】命令学习(四)统计命令

    sort 排序 -b 忽略开头的空白符 -f 将小写字母看做为大写字母 -h 根据存储容量排序(kb mb hb )从小到大 -n 按数字排序 -o 把结果写入文件 -r 以相反的顺序来排序 -t 指 ...