首页 > 其他分享 >D - Count Subtractions

D - Count Subtractions

时间:2023-04-09 22:25:57浏览次数:44  
标签:Count typedef Subtractions int void vector include adj

D - Count Subtractions

https://atcoder.jp/contests/abc297/tasks/abc297_d

 

思路

按照题目给的逻辑会超时。

需要使用 除法来优化算法。

Code

#include <iomanip>
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
#include <limits.h>
#include <math.h>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>

typedef long long LL;
typedef pair<int, int> pii;
typedef pair<LL, LL> pll;
typedef pair<string, string> pss;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<pii> vii;
typedef vector<LL> vl;
typedef vector<vl> vvl;

double EPS = 1e-9;
int INF = 1000000005;
long long INFF = 1000000000000000005LL;
double PI = acos(-1);
int dirx[8] = { -1, 0, 0, 1, -1, -1, 1, 1 };
int diry[8] = { 0, 1, -1, 0, -1, 1, -1, 1 };

#ifdef TESTING
#define DEBUG fprintf(stderr, "====TESTING====\n")
#define VALUE(x) cerr << "The value of " << #x << " is " << x << endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define DEBUG
#define VALUE(x)
#define debug(...)
#endif

#define FOR(a, b, c) for (int(a) = (b); (a) < (c); ++(a))
#define FORN(a, b, c) for (int(a) = (b); (a) <= (c); ++(a))
#define FORD(a, b, c) for (int(a) = (b); (a) >= (c); --(a))
#define FORSQ(a, b, c) for (int(a) = (b); (a) * (a) <= (c); ++(a))
#define FORC(a, b, c) for (char(a) = (b); (a) <= (c); ++(a))
#define FOREACH(a, b) for (auto&(a) : (b))
#define REP(i, n) FOR(i, 0, n)
#define REPN(i, n) FORN(i, 1, n)
#define MAX(a, b) a = max(a, b)
#define MIN(a, b) a = min(a, b)
#define SQR(x) ((LL)(x) * (x))
#define RESET(a, b) memset(a, b, sizeof(a))
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ALL(v) v.begin(), v.end()
#define ALLA(arr, sz) arr, arr + sz
#define SIZE(v) (int)v.size()
#define SORT(v) sort(ALL(v))
#define REVERSE(v) reverse(ALL(v))
#define SORTA(arr, sz) sort(ALLA(arr, sz))
#define REVERSEA(arr, sz) reverse(ALLA(arr, sz))
#define PERMUTE next_permutation
#define TC(t) while (t--)

/******************************** COMMON FUNC START ***************************************/

inline string IntToString(LL a)
{
    char x[100];
    sprintf(x, "%lld", a);
    string s = x;
    return s;
}

inline LL StringToInt(string a)
{
    char x[100];
    LL res;
    strcpy(x, a.c_str());
    sscanf(x, "%lld", &res);
    return res;
}

inline string GetString(void)
{
    char x[1000005];
    scanf("%s", x);
    string s = x;
    return s;
}

inline string uppercase(string s)
{
    int n = SIZE(s);
    REP(i, n)
    if (s[i] >= 'a' && s[i] <= 'z')
        s[i] = s[i] - 'a' + 'A';
    return s;
}

inline string lowercase(string s)
{
    int n = SIZE(s);
    REP(i, n)
    if (s[i] >= 'A' && s[i] <= 'Z')
        s[i] = s[i] - 'A' + 'a';
    return s;
}

inline void OPEN(string s)
{
#ifndef TESTING
    freopen((s + ".in").c_str(), "r", stdin);
    freopen((s + ".out").c_str(), "w", stdout);
#endif
}

/******************************** COMMON FUNC END ***************************************/

/******************************** GRAPH START ***************************************/
// Graph class represents a directed graph
// using adjacency list representation
class Graph {
public:
    map<int, bool> visited;
    map<int, list<int> > adj;

    // function to add an edge to graph
    void addEdge(int v, int w);

    // DFS traversal of the vertices
    // reachable from v
    void DFS(int v);
};

void Graph::addEdge(int v, int w)
{
    adj[v].push_back(w); // Add w to v’s list.
}

void Graph::DFS(int v)
{
    // Mark the current node as visited and
    // print it
    visited[v] = true;
    cout << v << " ";

    // Recur for all the vertices adjacent
    // to this vertex
    list<int>::iterator i;
    for (i = adj[v].begin(); i != adj[v].end(); ++i)
        if (!visited[*i])
            DFS(*i);
}

/******************************** GRAPH END ***************************************/

/*
https://atcoder.jp/contests/abcxxx/tasks/abcxxx_d
*/

LL a, b;

int main()
{
    cin >> a >> b;

    LL cnt = 0;
    while(true){
        if (a == b){
            break;
        }

        if (a<b){
            cnt += b / a;
            b = b % a;
            if (b == 0){
                cnt--;
                break;
            }
        } else if (a>b){
            cnt += a / b;
            a = a % b;
            if (a == 0){
                cnt--;
                break;
            }
        }
    }

    cout << cnt << endl;

    return 0;
}

 

标签:Count,typedef,Subtractions,int,void,vector,include,adj
From: https://www.cnblogs.com/lightsong/p/17301249.html

相关文章

  • CountDownLatch、CyclicBarrier 使用区别
    CountDownLatch:所有子线程完成后,再执行主线程、CyclicBarrier:所有子线程就绪后,再执行子线程主要区别CountDownLatch:所有子线程完成后,再执行主线程CyclicBarrier:所有子线程就绪后,再执行子线程CountDownLatch所有子线程完成后,再执行主线程多线程ThreadP......
  • Parameter 'account' not found. Available parameters are [arg1, arg0, param1, par
     使用Mybatis传参时遇到的一个问题    更改前的代码 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------更改后 ......
  • oracle 中Version counts高原因分析
    (18条消息)Oracle高Versioncounts问题说明_Dave的博客-CSDN博客主要查看视图v$sqlareav$sql_shared_cursor ......
  • Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待
    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 用给定的计数初始化CountDownLatch。由于调用了countDown()方法,所以在当前计数到达零之前,await方法会一直受阻塞。之后,会释放所有等待的线程,awai......
  • Python ORM Pony 常用表连接聚合操作(sum()、count()、min()、max()、avg()等)
    Pony是一个高级的对象关系映射器ORM框架。Pony它能够使用Python生成器表达式和lambdas向数据库编写查询。Pony分析表达式的抽象语法树,并将其转换为SQL查询。支持SQLite,MySQL,PostgreSQL和Oracle等数据库,本文主要介绍PythonORMPony中常用聚合操作(sum()、count()、min()、max(......
  • CountDownLatch、CyclicBarrier 使用区别
    主要区别CountDownLatch:所有子线程完成后,再执行主线程CyclicBarrier:所有子线程就绪后,再执行子线程CountDownLatch所有子线程完成后,再执行主线程多线程ThreadPoolTaskExecutor应用SpringBoot下载文件CyclicBarrier有若干个线程,比如说有五个线程,需要它们都到达了某......
  • 36、K8S-安全机制-ServiceAccount(SA)
    1、基础知识1.1、场景基础1.1.1、应用场景对于任何一种应用场景,其权限的认证管理都是非常重要的,对于linux系统来说,selinux、防火墙、pam、sudo等等,其核心的目的都是为......
  • 【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Sha
    问题描述很早之前,介绍了在AppServiceforLinux中挂载StorageAccount共享文件,当时Windows无法实现这个功能。而现在,AppServiceForWindows也可以挂载StorageAccount......
  • Kubernetes v1.25创建ServiceAccount未生成Secret问题
    说明kubernetesv1.24.0更新之后进行创建ServiceAccount不会自动生成Secret需要对其手动创建。网上的很多教程都没有创建Secret这步,应该是之前版本的教程,笔者使......
  • 实现一个CRDT工具库——GCounter
    GCounter这段代码实现了一个GCounter,是一个分布式计数器,支持增加计数和合并计数器。GCounter是一种弱一致性的数据结构,可以用于分布式系统中的计数场景。其中,zero()函数......