题目链接

A. Vasya and Chocolate

题意

已知钱,价格,赠送规则求最多获得巧克力数

思路
常规算即可

代码

#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl;
using namespace std;
typedef long long LL; LL t,s,a,b,c; int main(){
cin >> t;
while(t--){
cin >> s >> a >> b >> c;
LL ans=s/c;
ans+=(ans/a)*b;
cout << ans << endl;
}
return 0;
}

B. Vasya and Isolated Vertices

题意

给出无向图点和边数问最多和最少孤立点的数量

思路

使孤立点尽可能少就让一条边尽可能消去两个点,否则让其尽可能消去一个点

代码

#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl;
using namespace std;
typedef long long LL; LL n,m,i; int main(){
scanf("%I64d%I64d",&n,&m);
while(i*(i-1)/2 < m)i++;
printf("%I64d %I64d\n",(m*2 < n) ? n-m*2 : 0,n-i);
return 0;
}

C. Make It Equal

题意

给出一些块柱,每次移动一层及以上所有块,在一次不移动超过k的前提下使所有柱高度一致的最少次数

思路

枚举当前移动的高度,使被移动的块尽可能接近k,需要预处理每层会影响的块数,枚举高度二分找位置,维护后缀即可完成预处理

代码

#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl;
const int inf = 0x3f3f3f3f;
const int maxn = 2e5+5;
using namespace std; int n,k,a[maxn],maxH=-inf;
int b[maxn];
vector<int>vec; int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
sort(a+1,a+1+n);
for(int i=2;i<=n;i++){
int det=a[i]-a[1];
maxH=max(maxH,det);
if(det)vec.push_back(det);
}
int siz=vec.size();
for(int i=maxH;i>=1;i--){
b[i]=lower_bound(vec.begin(),vec.end(),i)-vec.begin()+1;
b[i]=siz-b[i]+1;
b[i]+=b[i+1];
}
int now=0,cnt=0;
for(int i=maxH;i>=1;i--){
if(b[i]-now > k)now=b[i+1],cnt++;
}
if(now != b[1] && b[1]-now <= k)cnt++;
printf("%d\n",cnt);
return 0;
}
D. Three Pieces
题意
给定棋盘和三颗棋子,问遍历棋盘的最少步数即满足最少步数前提下替换棋子的最少次数
思路
从起点开始大力搜索,枚举所有可能的后继状态
代码
#include <bits/stdc++.h>
#define DBG(x) cerr << #x << " = " << x << endl;
const int maxn = 15;
const int maxm = 205;
const int inf = 0x3f3f3f3f;
using namespace std; int n,k;
int mp[maxn][maxn],vis[maxn][maxn],dp[maxn][maxn][3][maxm][maxm];
int sx,sy,ex,ey;
int dx1[8][2]={{-2,-1},{-2,1},{2,-1},{2,1},{-1,-2},{-1,2},{1,-2},{1,2}};
int dx2[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int dx3[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};
int ans=inf; struct node{
int r,c,who,time,pre;
node(int _r,int _c,int _who,int _time,int _pre){
r=_r,c=_c,who=_who,time=_time,pre=_pre;
}
}; void bfs(int sx, int sy) {
memset(dp, -1, sizeof dp);
dp[sx][sy][0][0][1] = dp[sx][sy][1][0][1] = dp[sx][sy][2][0][1] = 0;
queue<node>q;
q.push(node(sx, sy, 0, 0, 1));
q.push(node(sx, sy, 1, 0, 1));
q.push(node(sx, sy, 2, 0, 1));
while(!q.empty()) {
node nd = q.front();
q.pop();
int x = nd.r, y = nd.c, z = nd.who, t = nd.time, k = nd.pre;
for(int i = 0; i < 3; i++) {
if(i == z) continue;
if(dp[x][y][i][t + 1][k] != -1) continue;
dp[x][y][i][t + 1][k] = dp[x][y][z][t][k] + 1;
q.push(node(x, y, i, t + 1, k));
}
if(z == 0) {
for(int i = 0; i < 8; i++) {
int nx=x+dx1[i][0];
int ny=y+dx1[i][1];
int nk=k;
if(nx < 1 || nx > n || ny < 1 || ny > n) continue;
if(mp[nx][ny] == k + 1) nk++;
if(dp[nx][ny][z][t][nk] != -1) continue;
dp[nx][ny][z][t][nk] = dp[x][y][z][t][k] + 1;
q.push(node(nx, ny, z, t, nk));
}
}
if(z == 1) {
for(int i = 0; i < 4; i++) {
for(int j = 1;j <= 10;j++) {
int nx=x+j*dx2[i][0];
int ny=y+j*dx2[i][1];
int nk=k;
if(nx < 1 || nx > n || ny < 1 || ny > n) continue;
if(mp[nx][ny] == k + 1) nk++;
if(dp[nx][ny][z][t][nk] != -1) continue;
dp[nx][ny][z][t][nk] = dp[x][y][z][t][k] + 1;
q.push(node(nx, ny, z, t, nk));
}
}
}
if(z == 2) {
for(int i = 0; i < 4; i++) {
for(int j = 1;j <= 10;j++) {
int nx=x+j*dx3[i][0];
int ny=y+j*dx3[i][1];
int nk=k;
if(nx < 1 || nx > n || ny < 1 || ny > n) continue;
if(mp[nx][ny] == k + 1) nk++;
if(dp[nx][ny][z][t][nk] != -1) continue;
dp[nx][ny][z][t][nk] = dp[x][y][z][t][k] + 1;
q.push(node(nx, ny, z, t, nk));
}
}
}
}
}
int main(){///0 == knight,1 == bishop,2 == rook
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&mp[i][j]);
if(mp[i][j] == 1){sx=i;sy=j;}
if(mp[i][j] == n*n){ex=i;ey=j;}
}
}
bfs(sx,sy);
for(int i=0;i<maxm;i++){
for(int j=0;j<3;j++){
if(dp[ex][ey][j][i][n*n] != -1)ans=min(ans,dp[ex][ey][j][i][n*n]);
}
}
for(int i=0;i<maxm;i++){
for(int j=0;j<3;j++){
if(dp[ex][ey][j][i][n*n] == ans){printf("%d %d\n",ans,i);return 0;}
}
}
}

E. Side Transmutations

看这篇

F. Up and Down the Tree

看这篇

Educational Codeforces Round 52 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 52 (Rated for Div. 2) E. Side Transmutations

    http://codeforces.com/contest/1065/problem/E 数学推导题 #include <bits/stdc++.h> using namespace st ...

  2. Educational Codeforces Round 52 (Rated for Div. 2) -C

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  3. Educational Codeforces Round 52 (Rated for Div. 2) F. Up and Down the Tree 树型DP

    题面 题意:给你一棵树,你起点在1,1也是根节点,你每次可以选择去你子树的某个叶子节点,也可以选择,从叶子节点返回距离不超过k的一个根, 也就是说,你从1开始,向下跳,选择一个叶子(就是没有子树的节点 ...

  4. Educational Codeforces Round 117 (Rated for Div. 2)

    Educational Codeforces Round 117 (Rated for Div. 2) A. Distance https://codeforces.com/contest/1612/ ...

  5. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  6. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  7. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  8. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  9. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

随机推荐

  1. Java之匿名内部类详解

    前言 本文讲解Java中最后一种内部类,叫做匿名内部类.顾名思义,所谓的匿名内部类就是一个没有显式的名字的内部类,在实际开发中,此种内部类用的是非常多的. 匿名内部类 本质:匿名内部类会隐式的继承一个 ...

  2. 在Bootstrap开发框架的工作流模块中实现流程完成后更新资料状态处理

    在开发查看流程表单明细的时候,在Web界面中,我们往往通过使用@RenderPage实现页面内容模块化的隔离,减少复杂度,因此把一些常用的如审批.撤销.会签.阅办等等的流程步骤都放到了通用处理的页面V ...

  3. MaxCompute教程

    MaxCompute全套攻略:https://blog.csdn.net/qq_35394891/article/details/82943894 [2019年大数据福利推荐]MaxCompute教程 ...

  4. Linux下修改MySQL数据表中字段属性

    一.修改某个表的字段类型及指定为空或非空 alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空]; alter table 表名称 modify 字段名称 字段类 ...

  5. Oracle物化视图的创建及使用

    oracle物化视图 一.oracle物化视图基本概念  物化视图首先需要创建物化视图日志,  oracle依据用户创建的物化视图日志来创建物化视图日志表,  物化视图日志表的名称为mlog$_后面跟 ...

  6. Linux(Ubuntu 16) 下Java开发环境的配置(二)------Tomcat的配置及常见问题

    前言 相比于java JDK的配置,Tomcat的配置简单的多,简直就相当于直接运行了,本文以Tomcat8.0为例进行配置   1.Tomcat的下载 地址:https://tomcat.apach ...

  7. Python——threading模块(线程)

    一.threading模块的对象 Thread:表示一个执行线程的对象 Lock:锁 Rlock:可重入锁对象 Condition:条件变量对象,使得一个线程等待另一个线程满足特定的“条件” Even ...

  8. 使用jenkins进行前端项目自动部署

    前面的话 后端的nodeJS项目可以使用pm2进行自动部署,由于前端项目打包后是静态资源,不需要进程守护.一般地,前端项目使用jenkins来进行自动部署,包括打包.测试等一系列流程.本文将详细介绍j ...

  9. springboot连接数据库报错testWhileIdle is true, validationQuery not set

    问题描述: 使用springboot连接数据库,启动的时候报错:testWhileIdle is true, validationQuery not set.但是不影响系统使用,数据库等一切访问正常. ...

  10. ElasticSsarch汇总

    用途: 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索: 实时分析的分布式搜索引擎: 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据. 点击查看安装.基本增删改查操作REST ...