Digit Holes

Time limit: 1000 ms
Memory limit: 256 MB

 

When writing digits, some of them are considered to have holes: 00, 66 and 99 have one hole, while 88 has two holes. The other digits don't have any holes.

Given two integers AA and BB, find a value in the interval [A, B][A,B] that has the maximum total number of holes in its digits. If the solution is not unique, print the smallest one.

Standard input

The first line contains two integers AA and BB.

Standard output

Print the answer on the first line.

Constraints and notes

  • 0 \leq A \leq B \leq 10000≤A≤B≤1000
Input Output Explanation
0 20
8

88 is the first integer in [0, 20][0,20] with 22 holes.

10 20
18

1818 is the only integer in [10, 20][10,20] with 22 holes.

1 100
88

8888 is the only integer in [1, 100][1,100] with 44 holes.

统计每一位的贡献,直接取就行了,我本来还想去sort,那样麻烦了蛮多

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
vector<pii>A;
int la(int t)
{
int ans=;
if(!t)ans=;
while(t)
{
if(t%==||t%==||t%==)
ans+=;
else if(t%==)
ans+=;
t/=;
}
return ans;
}
int main()
{
int a,b;
cin>>a>>b;
int ma=a,maf=;
for(int i=a; i<=b; i++)
if(la(i)>maf)
{
ma=i;
maf=la(i);
}
cout<<ma;
return ;
}

Right Down Path

Time limit: 1000 ms
Memory limit: 256 MB

 

You are given a binary matrix AA of size N \times MN×M. You should find a path that starts in a cell, then goes to the right at least one cell, then goes down at least one other cell. That path should contain only cells equal to 11.

Find the longest path respecting these constraints.

Standard input

The first line contains two integers NN and MM.

Each of the next NN lines contains MM integers, 00 or 11, representing the elements of matrix AA.

Standard output

Print the size of the longest path on the first line.

Constraints and notes

  • 2 \leq N, M \leq 3002≤N,M≤300
  • It is guaranteed there is always at least one valid path
Input Output Explanation
4 4
0 1 1 0
1 1 1 0
1 0 1 0
1 1 0 0
4

One of the solutions of length 44 is bolded below.

0\ \bold{1}\ \bold{1}\ 00 1 1 0

1\ 1\ \bold{1}\ 01 1 1 0

1\ 0\ \bold{1}\ 01 0 1 0

1\ 1\ 0\ 01 1 0 0

5 4
1 0 1 0
1 1 1 1
1 0 1 0
1 0 1 1
0 0 0 1
5

The solutions of length 55 is bolded below.

1\ 0\ 1\ 01 0 1 0

\bold{1}\ \bold{1}\ \bold{1}\ 11 1 1 1

1\ 0\ \bold{1}\ 01 0 1 0

1\ 0\ \bold{1}\ 11 0 1 1

0\ 0\ 0\ 10 0 0 1

5 5
0 0 0 0 1
1 1 0 0 1
0 1 0 1 1
0 0 0 0 1
1 1 1 1 1
4

Note that you need to move at least once right and down.

Because of this, the solutions consisting of the 5 ones on the sides is not valid.

The valid solution is bolded below.

0\ 0\ 0\ 0\ 10 0 0 0 1

1\ 1\ 0\ 0\ 11 1 0 0 1

0\ 1\ 0\ \bold{1}\ \bold{1}0 1 0 1 1

0\ 0\ 0\ 0\ \bold{1}0 0 0 0 1

1\ 1\ 1\ 1\ \bold{1}1 1 1 1 1

从一个点开始可以向右然后向下,但是必须要走一格的,所以暴力的时候要判断有没有路

n^3的暴力

#include<bits/stdc++.h>
using namespace std;
int a[][];
int main()
{
int n,m,ans=;
cin>>n>>m;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
cin>>a[i][j];
for(int i=; i<n-; i++)
for(int j=,k; j<m-; j++)
{
if(a[i][j])
{
for(k=j+; k<m; k++)
{
if(a[i][k])
{
if(a[i+][k])
{
int t=k-j+;
for(int l=i+;l<n;l++)
if(a[l][k])t++;
else break;
ans=max(ans,t);
}
}
else break;
}
j=k;
}
}
cout<<ans;
return ;
}

但是我当时写的是用后缀和和优化的,其实完全没有必要

#include<bits/stdc++.h>
using namespace std;
int a[][],s[][];
int main()
{
int n,m,ans=;
cin>>n>>m;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
cin>>a[i][j];
for(int i=n-; i>=; i--)
for(int j=; j<m; j++)
if(a[i][j])s[i][j]=s[i+][j]+;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
{
if(a[i][j])
for(int k=j; k<m; k++)
{
if(a[i][k])ans=max(ans,k-j+s[i][k]);
else break;
}
}
cout<<ans;
return ;
}

Min Distances

Time limit: 1000 ms
Memory limit: 256 MB

 

You should build a simple, connected, undirected, weighted graph with NN nodes. You are given MM constraints of the type a, b, ca,b,c, representing the fact that the minimum distance between nodes aa and bb should be cc.

Standard input

The first line contains two integers NN and MM.

Each of the next MM lines contains three integers aa, bb and cc representing a constraint.

Standard output

If there is no solution output -1−1.

Otherwise, print the number of edges your graph has on the first line.

Each of the next line should contain three integers aa, bb, ww, representing an edge (a, b)(a,b)with weight ww.

Constraints and notes

  • 2 \leq N \leq 1002≤N≤100
  • 0 \leq M \leq \binom{N}{2}0≤M≤(​2​N​​)
  • 1 \leq a, b \leq N1≤a,b≤N and a \neq ba≠b
  • 1 \leq c \leq 10^61≤c≤10​6​​
  • The weigths ww should respect 1 \leq w \leq 10^71≤w≤10​7​​
Input Output Explanation
3 3
1 2 1
2 3 2
1 3 3
2
1 2 1
2 3 2

Note that the graph is not unique

12123

5 4
3 1 2
3 5 2
1 5 3
4 2 2
6
1 3 2
5 1 3
2 4 2
2 5 4
3 5 2
5 4 1

Note that the graph is not unique

23242112354

3 3
1 2 1
2 3 1
3 1 3
-1

There's no graph to satisfy all 3 restrictions.

给定n个点M条边的最短路,让你构造一个图满足这个

因为是多源最短路,点数也不多,所以直接Floyd走一波然后判断是否合法

因为是无向图所以直接输出一半就好了

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int M[][];
struct T
{
int a,b,c;
} t;
vector<T>V;
int main()
{
memset(M,INF,sizeof M);
int n,m;
cin>>n>>m;
for(int i=; i<m; i++)
cin>>t.a>>t.b>>t.c,V.push_back(t),M[t.a][t.b]=t.c,M[t.b][t.a]=t.c;
for(int k=; k<=n; k++)
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
M[i][j]=min(M[i][j],M[i][k]+M[k][j]);
int f=;
for(int i=; i<m&&f; i++)
{
t=V[i];
if(M[t.a][t.b]!=t.c)f=;
}
if(!f)printf("-1");
else
{
printf("%d\n",n*(n-)/);
for(int i=; i<=n; i++)
for(int j=i+; j<=n; j++)
if(M[i][j]!=INF)
printf("%d %d %d\n",i,j,M[i][j]);
else printf("%d %d %d\n",i,j,(int)1e7);
}
return ;
}

Distribute Candies

Time limit: 1000 ms
Memory limit: 256 MB

 

You should distribute NN candies in KK boxes such that the difference between the maximum and the minimum number of candies in a box is minimized. In addition, every pair of consecutive boxes should have a different number of candies.

Standard input

The first line contains two integers NN and KK.

Standard output

If there is no solution output -1−1.

Otherwise, print KK numbers on the first line, representing the number of candies in each box.

Constraints and notes

  • 1 \leq N \leq 10^{18}1≤N≤10​18​​
  • 1 \leq K \leq 10^51≤K≤10​5​​
  • Each box has to have a strictly positive amount of candies
  • If the solution is not unique you can print any of them
Input Output
15 2
8 7
16 4
3 5 3 5
100 80
-1

把n个盒子放进和为m的盒子里,且相邻盒子放的数不一样

取中间值,然后去构造就行了,奇偶分析

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
typedef long long ll;
ll n,m,a[N];
int main()
{
cin>>m>>n;
if(n==)cout<<m;
else
{
m-=n;
if(m<n/)cout<<-;
else
{
ll k=m%n;
if(k<(n/))k+=n;
m-=k,m+=n,m/=n;
for(int i=; i<n; i++)a[i]=m;
if(k==(n/))
{
for(int i=; i<n; i+=)a[i]++;
}
else if(k==((n+)/))
{
for(int i=; i<n; i+=)a[i]++;
}
else
{
for(int i=; i<n; i+=)a[i]++,k--;
for(int i=; k>&&i<n; i+=)a[i]++,k--;
for(int i=; k>&&i<n; i+=)a[i]++,k--;
}
for(int i=; i<n; i++)cout<<a[i]<<" ";
}
}
return ;
}

Squared Ends

Time limit: 2000 ms
Memory limit: 256 MB

 

You are given an array AA of NN integers. The cost of a subarray [A_l, A_{l+1},...A_r][A​l​​,A​l+1​​,...A​r​​]is equal to (A_l -A_r)^2(A​l​​−A​r​​)​2​​. Partition the array in KK subarrays having a minimum total cost.

Standard input

The first line contains two integers NN and KK.

The second line contains NN integers representing the elements of AA.

Standard output

Print the minimum total cost on the first line.

Constraints and notes

  • 1 \leq N \leq 10^41≤N≤10​4​​
  • 1 \leq K \leq min(N, 100)1≤K≤min(N,100)
  • 1 \leq A_i \leq 10^61≤A​i​​≤10​6​​
Input Output Explanation
5 1
1 2 3 4 5
16

The only partition is [1, 5][1,5] with cost (5 - 1)^2 = 16(5−1)​2​​=16

4 2
2 4 3 10
1

The partitions is [1, 3][1,3] and [4, 4][4,4]

11 3
2 4 1 5 3 4 3 5 7 100 100
5

The 33 partitions are

[2\ 4\ 1]\ [5\ 3\ 4\ 3\ 5\ 7]\ [100\ 100][2 4 1] [5 3 4 3 5 7] [100 100]

动态凸包

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,b) for(int i=a;i<b;i++)
const ll is_query = -(1LL<<);
struct convex_line
{
ll m,b;
mutable function<const convex_line*()> succ;
bool operator<(const convex_line& rhs) const
{
if(rhs.b!=is_query) return m < rhs.m;
const convex_line* s=succ();
if(s==NULL) return ;
ll x=rhs.m;
return 1.0*(b-s->b)<1.0*(s->m-m)*x;
}
};
struct dcht : public multiset<convex_line>
{
bool invalid(iterator y)
{
auto z=next(y);
if(y==begin())
{
if (z==end()) return ;
return y->m==z->m && y->b<=z->b;
}
auto x=prev(y);
if(z==end()) return y->m==x->m && y->b<=x->b;
return 1.0*(x->b-y->b)*(z->m-y->m)>=1.0*(y->b-z->b)*(y->m-x->m);
} void insert_line(ll m,ll b) //insert any line
{
auto y = insert({m,b});
y->succ = [=] { return next(y) == end() ? : &*next(y); };
if (invalid(y))
{
erase(y);
return;
}
while (next(y) != end() && invalid(next(y))) erase(next(y));
while (y != begin() && invalid(prev(y))) erase(prev(y));
} void remove_line(ll m,ll b)
{
auto y=find({m,b});
if(y==end()) return;
erase(y);
} ll eval(ll x)
{
auto l=lower_bound({x, is_query});
return (*l).m * x + (*l).b;
}
};
const int N=;
const ll inf=(ll)1e18;
ll a[N];
ll dp[][N];
int main()
{
std::ios::sync_with_stdio(false);
int n,k;
cin>>n>>k;
rep(i,,n+) cin>>a[i];
rep(i,,) rep(j,,N) dp[i][j]=inf;
dp[][]=;
rep(j,,k+)
{
dcht cht;
cht.insert_line(*a[],-dp[j-][]-(a[]*a[]));
rep(i,,n+)
{
dp[j][i]=a[i]*a[i]-cht.eval(a[i]);
cht.insert_line(*a[i+],-dp[j-][i]-(a[i+]*a[i+]));
}
}
cout<<dp[k][n]<<endl;
return ;
}

这份代码也不错

csa Round #70的更多相关文章

  1. CSA Round #54 $\ $Voting

    CSA Round #54 \(\ \)Voting 题目大意: 原题网址:戳我戳我! 一次歌唱比赛中,一位歌手刚刚结束表演,评委正在打分. 一共有 \(n\) 位评委,他们每人可以打 \(1\) 分 ...

  2. Codeforces Beta Round #70 (Div. 2)

    Codeforces Beta Round #70 (Div. 2) http://codeforces.com/contest/78 A #include<bits/stdc++.h> ...

  3. 水题 Codeforces Beta Round #70 (Div. 2) A. Haiku

    题目传送门 /* 水题:三个字符串判断每个是否有相应的元音字母,YES/NO 下午网速巨慢:( */ #include <cstdio> #include <cstring> ...

  4. 题解-CSA Round#18 Randomly Permuted Costs

    Problem CSA Round 18 题意概要:给定一个有重边有自环 \(n\) 点 \(m\) 边的有向无环图(DAG),每条边有其权值,每当你走到一个点 \(x\) 时,所有从 \(x\) 连 ...

  5. 【题解】Comet OJ Round 70 简要题解

    [题解]Comet OJ Round 70 简要题解 A 将放在地上的书按照从小到大排序后,问题的本质就变成了合并两个序列使得字典序最小.可以直接模拟归并排序.直接用循环和std::merge实现这个 ...

  6. Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛

    orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...

  7. BestCoder Round 70

    惨败,不能再嘲笑别人了,否则自己也会像别人那样倒霉 HDU 5615:http://acm.hdu.edu.cn/showproblem.php?pid=5615 求ax^2+bx+c能否拆成(px+ ...

  8. BestCoder Round #70 Jam's math problem(hdu 5615)

    Problem Description Jam has a math problem. He just learned factorization. He is trying to factorize ...

  9. HDU 5618 Jam's problem again CDQ分治 BC ROUND 70

    题意:给你1e5个点(x,y,z),对于每一个点询问有多少个点(x1,y1,z1)满足x1<=x&&y1<=y&&z1<=z 分析:(官方题解奉上)很 ...

随机推荐

  1. 假如m是奇数,且m>=3,证明m(m² -1)能被8整除

    m是奇数,且m>=3 =>m可以用表达式2n-1,n>=2 =>m²-1 = (2n-1)²-1 =>m²-1 = 4n²-4n+1-1 =>m²-1 = 4n²- ...

  2. tsung基准测试方法、理解tsung.xml配置文件、tsung统计报告简介

    网上搜集的资料,资料来源于:http://blog.sina.com.cn/ishouke 1.tsung基准测试方法 https://pan.baidu.com/s/1Ne3FYo8XyelnJy8 ...

  3. VC 对话框设置背景颜色和图片

    改变背景颜色,有两种方法: 1.在app的初始化函数中调用:void SetDialogBkColor( COLORREF clrCtlBk = RGB(192, 192, 192), COLORRE ...

  4. UVA 11992 Fast Matrix Operations (降维)

    题意:对一个矩阵进行子矩阵操作. 元素最多有1e6个,树套树不好开(我不会),把二维坐标化成一维的,一个子矩阵操作分解成多条线段的操作. 一次操作的复杂度是RlogC,很容易找到极端的数据(OJ上实测 ...

  5. Spark 配置整理

    Spark 的配置有很多,这里一方面总结一下官方文档中的内容,一方面将网上查到的资料中用到的针对特定问题的配置整理一下. 先看一下官网的配置:http://spark.apache.org/docs/ ...

  6. 使用FileSystemWatcher组件监视日志文件

    实现效果: 知识运用: FileSystemWatcher组件的Path属性 Filter属性 //要监视那些文件   默认为*.* Endinit方法 //结束在窗体上使用或有另一个组件使用的Fil ...

  7. 采用maven 对tomcat 进行自动部署

    在工作过程中经常会遇到项目频繁发不到额过程,而且在这个过程中会一直进行一些简单但是繁琐的重复性工程 1.打war 包 2.停掉tomcat 3.copy war 包 4.启动tomcat 听说mave ...

  8. Nginx正向代理代理http和https服务

    Nginx正向代理代理http和https服务 1. 背景需求 通过Nginx正向代理,去访问外网.可实现局域网不能访问外网的能力,以及防止在上网行为上,留下访问痕迹. 2. 安装配置 2.1安装 w ...

  9. odoo10 api 装饰器

    http://www.cnblogs.com/kfx2007/p/3894297.html one:装饰record-style方法中的self为单一实例,被装饰的方法将会在每一条记录中循环调用,返回 ...

  10. 洛谷 P1516 青蛙的约会

    https://www.luogu.org/problemnew/show/P1516#sub 题意还是非常好理解的..... 假如这不是一道环形的跑道而是一条直线,你会怎样做呢? 如果是我就会列一个 ...