Codeforces - 440C DFS

搜索苦手,注意正负

#include<bits/stdc++.h>
#define rep(i,j,k) for(int i = j; i <=k; i++)
using namespace std;
const int maxn = 55;
typedef long long ll;
ll one[maxn];
ll n;
ll dfs(ll n,ll i){
    ll k = n/one[i];
    ll j = n%one[i];
    if(j==0) return k*i;
    return k*i+min(i+dfs(one[i]-j,i-1),dfs(j,i-1));
}
int main(){
    one[0]=0;
    rep(i,1,16) one[i]=10*one[i-1]+1;
    while(cin>>n) cout<<dfs(n,16)<<endl;
    return 0;
} 
时间: 2024-10-29 11:54:35

Codeforces - 440C DFS的相关文章

CodeForces 440C One-Based Arithmetic(递归,dfs)

A - One-Based Arithmetic Time Limit:500MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Appoint description:  System Crawler  (2014-08-21) Description Prof. Vasechkin wants to represent positive integer n as a sum of adden

Codeforces 405E DFS

这个题目要求把一个无向连通图里面的所有边,分成 两个一对,只能出现一次,而且一对边必须是连在一起的,点可以复用  但边不可复用 可解条件很易得,因为图是连通的,只要边数为偶数即可. 一开始我借着做欧拉回路的方法,直接DFS暴搜,沿路做标记,遇到未标记的连续两条边 输出即可 不过 事实证明这个算法是错的 暴搜能成立只是建立在图上的边可以存在很多个边对里,但肯定有图不满足这种条件 其实解决方法也就是在DFS的基础上对特殊边进行下考虑即可 即每次对某个点,对子节点进行dfs,如果发现子节点下面有落单的

Fox And Two Dots codeforces 510B(DFS)

http://codeforces.com/problemset/problem/510/B 题意:问你能否用相同的字母构成一个环. 分析:每一个都直接从它自身开始,看看到最后是否还能回到它本身.(注意:需要最少4个点) #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <vector> #include <algori

CodeForces 510B DFS水题

题目大意:在图中找到一个字符可以围成一个环(至少有环四个相同元素) 题目思路:对当前点进行搜索,如果发现可以达到某个已经被查找过的点,且当前点不是由这个点而来,则查找成功. #include<cstdio> #include<stdio.h> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #include<cstring>

CodeForces 570D DFS序 树状数组 Tree Requests

参考九野巨巨的博客. 查询一个子树内的信息,可以通过DFS序转成线形的,从而用数据结构来维护. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <map> 6 #define MP make_pair 7 #define FI first 8 #define SE second 9 using name

Codeforces 937D dfs

D. Sleepy Game 题意:n 个点 , m 条边的有向图.有两个人 A .B ,芯片开在点 s ,两人轮流移动芯片,A 为先手,最后不能移动者输. 但 B 在睡觉,所以 B 的移动由 A 帮他移. 问 A 是否能赢.如能,输出路径 :如不能,输出是否可以 平局 或 输. tags: 每个点两种状态 : 能到这个点且轮到 A 走,能到这个点且轮到B走. 用 pre[i][2] 表示这两种状态的前一个点,dfs 搜索状态,如果能到入度为 0 点,且轮到 B 走,那就赢了.如果不能赢就看是否

Concise and clear CodeForces - 991F(dfs 有重复元素的全排列)

就是有重复元素的全排列 #include <bits/stdc++.h> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; typedef long long LL; const int maxn = 10010, INF = 0x7fffffff; char str[maxn]; int vis[maxn], v[maxn]; LL num[maxn]; LL res = 0; void init() { num[0

Codeforces 1110F(DFS序+线段树)

题面 传送门 分析 next_id = 1 id = array of length n filled with -1 visited = array of length n filled with false function dfs(v): visited[v] = true id[v] = next_id next_id += 1 for to in neighbors of v in increasing order: if not visited[to]: dfs(to) 观察题目中的

E - Mahmoud and Ehab and the bipartiteness CodeForces - 862B (dfs黑白染色)

Mahmoud and Ehab continue their adventures! As everybody in the evil land knows, Dr. Evil likes bipartite graphs, especially trees. A tree is a connected acyclic graph. A bipartite graph is a graph, whose vertices can be partitioned into 2 sets in su