首页 > 其他分享 >AtCoder Beginner Contest 284(D,E,F)

AtCoder Beginner Contest 284(D,E,F)

时间:2023-01-08 19:12:44浏览次数:70  
标签:AtCoder string Beginner int back ans algorithm include 284

AtCoder Beginner Contest 284(D,E,F)

D

D

这可题的大意是有一个很大的数,n,它可以变成pXpXq(p,q是质数),要我们找出这两个质数

我们可以发现,这一个n的质因数一定只有两个,p,q,而我们只要发现了n的一个因数,那么这个因数要么是p,pXp,要么是q,(只有这三种数是n的因数),而我们是从小到大遍历的,那么第一个找到的要么是p,要么是q,我们需要判断一下,如果这一个数是x(n%x=0),如果(n/x)%x==0,那么这个数是p,(另外一个就是n/x/x),否则x就是q,那么p就是sqrt(n/x)(四舍五入),这里使用了round()函数

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define int long long 
int n,t;
void solve()
{
    cin>>n;
    int x=0,y=0;
    for (int i=2;i*i*i<=n;i++)//最大的i,一定是i*i*i<=n
    {
        if (n%i) continue;
        if ((n/i)%i==0)
        {
            x=i,y=(n/i)/i;
        }
        else 
        {
            y=i;
            x=round(sqrt(n/i));
        }
      break;
    }
    cout<<x<<" "<<y<<'\n';
    return ;
}
signed main ()
{
    cin>>t;
    while (t--)
    {
        solve();
    }
    system ("pause");
    return 0;
}

E

E

题目大意是要我们求出从1到x(任意可到达的点)有多少条路径(但是这一条路径中不可以出现相同点,根据这一个,我们可以用到回溯,题目还告诉我们每个店的度不会大于10,而我们要找的数量ans=min(1e6,ans),所以我们dfs最多在1e7的样子,应该不会超时

只要我们到达了一个点,就多了一条路径(我感觉就这句是有用的,前面在讲废话)

#include <iostream>
#include <vector>
using namespace std;
const int maxn=2e5+10;
vector<int>g[maxn];
int limit = 1000000;
int n,m;
int ans;
bool vis[maxn];
void dfs(int u,int fa)
{
    ans++;
    if (ans==limit)
    {
        cout<<ans<<'\n';
        system ("pause");
        exit(0);
    }
    for (auto v:g[u])
    {
        if (v==fa) continue;
        if (vis[v]) continue;
        vis[v]=true;
        dfs(v,u);
        vis[v]=false;
    }
    return ;
}
int main ()
{
    cin>>n>>m;
    for (int i=1;i<=m;i++)
    {
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    vis[1]=true;
    dfs(1,-1);
    cout<<ans<<'\n';
    system ("pause");
    return 0;
}

F

F

前置知识:

Z_algorithm

具体推导过程

我看了前面还是不太明白到底要怎么用,刚好这一道题给我加深了对这一个算法的理解

我这里来浅浅表达一下我在做完了这一个题后对z_algorithm的z数组的理解

z[i]就是从i开始的后缀可以和从第一个开始字符串的最长相同序列的长度(这不就是z的意义吗?)我一开始没理解,觉得太抽象(虽然现在也很抽象)(个人拙见)

这个题呢,就是给你一个字符串f(i),由3部分组成,

第一部分是s的0到i的子串

第二部分是原来的s的翻转

第三部分是i到n的子串

要我们知道这一个i和s,如果找不到,就输出-1

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
vector<int>z_algorithm(string s)
{
    int n=s.size();
    vector<int>z(n);
    int l=0,r=0;
    for (int i=1;i<n;i++)
    {
        if (i<=r)
        {
            z[i]=min(r-i+1,z[i-l]);
        }
        while (i+z[i]<n&&s[z[i]]==s[i+z[i]])
        {
            z[i]++;
        }
        if (i+z[i]-1>r)
        {
            l=i,r=i+z[i]-1;
        }
    }
    return z;
}
int main ()
{
    int n;
    cin>>n;
    string t;
    cin>>t;
    string a=t.substr(0,n);
    string b=t.substr(n);
    reverse(b.begin(),b.end());
    string x=a+b;
    vector<int>z_x=z_algorithm(x);
    z_x.push_back(0);
    string y=b+a;
    vector<int>z_y=z_algorithm(y);
    z_y.push_back(0);
    for (int i=0;i<=n;i++)
    {
        if (z_x[2*n-i]==i&&z_y[n+i]==n-i)
        {
            cout<<(t.substr(0,i)+t.substr(n+i))<<'\n';
            cout<<i<<'\n';
            system ("pause");
            return 0;
        }
    }
    cout<<-1<<'\n';
    system ("pause");
    return 0;
}

标签:AtCoder,string,Beginner,int,back,ans,algorithm,include,284
From: https://www.cnblogs.com/righting/p/17035119.html

相关文章

  • C - Count Connected Components -- ATCODER
    C-CountConnectedComponentshttps://atcoder.jp/contests/abc284/tasks/abc284_c 思路寻找独立的子连通图个数。 使用map记录边,即点之间的连通性使用vector记......
  • AtCoder Beginner Contest 284
    AtCoderBeginnerContest284https://atcoder.jp/contests/abc284被D卡了,感觉十分的弱智。GEx看不懂题解(A-SequenceofStrings#include<bits/stdc++.h>usingn......
  • AtCoder Beginner Contest 284 C - Count Connected Components DFS的应用
    TimeLimit:2sec/MemoryLimit:1024MBScore: 300300 pointsProblemStatementYouaregivenasimpleundirectedgraphwith NN verticesnumbered 11 ......
  • Atcoder ABC284 前五题题解
    ABC284A-SequenceofStrings题意:有n个字符串\(s_1,s_2,s_3,...,s_n\),要求按\(n,n-1,n-2,...,1\)的顺序输出样例:输入3TakahashiAokiSnuke输出......
  • Atcoder ABC040D 道路の老朽化対策について
    链接难度:\(\texttt{1656}\)\(n\)个点\(m\)条无向边,每条边\((u_i,v_i)\)有一个对应的时间\(t_i\)。\(q\)次询问,每次询问从\(x_i\)只经过\(t_i>y_i\)的边共能......
  • AtCoder Beginner Contest 284-F - ABCBAC(双哈希)
    F-ABCBAC题目大意:给定一个正整数n,和一个长度为2*n的字符串s问s串能不能是由一个t串经过如下操作变成s串:t串的前i个字符t串的反转串t串的后(n-i)个字符如果存在......
  • AtCoder Beginner Conest 284 解题报告
    AtCoderBeginnerConest284解题报告\(\text{ByDaiRuiChen007}\)\(\text{ContestLink}\)A.SequenceofStrings模拟,时间复杂度\(\Theta(n)\)#include<bits/stdc......
  • 2023.1.7(Atcoder Beginner Contest 284)
    A.HappyNewYear2023Linkhttps://atcoder.jp/contests/abc284/tasks/abc284_dStatement将给定的\(N\)分解成\(N=p^2\cdotq\)的形式,其中\(p,q\)为两个不......
  • Atcoder ABC 284题解
    DHappyNewYear2023(枚举,时间复杂度计算)题意​ 给定\(n\\le\9\times10^{18}\),给出式子\(n=p^2\timesq\),该式子必定有解且有唯一解。请输出\(p\)和\(q\)......
  • Atcoder Beginner Contest ABC 284 Ex Count Unlabeled Graphs 题解 (Polya定理)
    题目链接弱化版(其实完全一样)u1s1,洛谷上这题的第一个题解写得很不错,可以参考直接边讲Polya定理边做这题问题引入:n颗珠子组成的手串,每颗珠子有两种不同的颜色,如果两......