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. python join的用法

    joinn其实就相当于用某个字符串来拼接列表或者元组中的元素 当然也可以将字符串以某一个str拼接起来 得出的结果自然也是字符串 ex1: results: 实例用处: 当我们从某个文件中读出内容时, ...

  2. Java泛型背后是什么?

    文Java中泛型的应用,让大家更好地理解泛型,以及常说的泛型类型擦除是什么概念,举一个简单的例子,如下: 这里可以看出来在代码编写阶段就已经报错了,不能往string类型的集合中添加int类型的数据. ...

  3. 【c++ Prime 学习笔记】第6章 函数

    6.1 函数基础 函数定义包括:返回类型.函数名字.由0个或多个形参组成的列表以及函数体 通过调用运算符()来执行函数,它作用于一个表达式,该表达式是函数或函数指针.圆括号内是一个逗号隔开的实参列表, ...

  4. [敏捷软工团队博客]Beta阶段测试报告

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 博客园班级博客 作业要求 Beta阶段测试报告 我们在这个课程的目标是 在团队合作中锻炼自己 这个作业在哪个具体方面帮助我们实现目标 对Bet ...

  5. BUAA 2020 软件工程 软件分析案例作业

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

  6. hdu 3635 Dragon Balls(并查集)

    题意: N个城市,每个城市有一个龙珠. 两个操作: 1.T A B:A城市的所有龙珠转移到B城市. 2.Q A:输出第A颗龙珠所在的城市,这个城市里所有的龙珠个数,第A颗龙珠总共到目前为止被转移了多少 ...

  7. PWN学习之格式化字符串漏洞

    目录 PWN学习之格式化字符串漏洞 格式化输出函数 格式化字符串漏洞 漏洞利用 使程序崩溃 栈数据泄露 任意地址内存泄漏 栈数据覆盖 任意地址内存覆盖 PWN学习之格式化字符串漏洞 格式化输出函数 可 ...

  8. (三)lamp环境搭建之编译安装php

    1,PRC (People's republic of China) timezone中设置的时间为中国时间. 2,php的官方镜像源,使用linux时可以直接下载的 http://cn2.php.n ...

  9. 2020 ICPC 沈阳站 I - Rise of Shadows 题解

    题面看这里 \(PS\):符号 \([\ \rm P\ ]\) 的意义是:当表达式 \(\rm P\) 为真则取值为 \(1\),为假则取值为 \(0\). 题目大意 给你一个一天有 \(H\)​​​ ...

  10. matlab与python scipy.signal中 freqs freqz 中w,什么时候是角频率,什么时候是真实的工程中使用的采样频率Hz,如何转化

    matlab与python scipy.signal中的freqs,freqz频率分析函数,输出的w,有时候是角频率,有时候是真实频率,容易搞混,这里对比一下. 0.  精要总结: 1) freqs: ...