牛客小白月試合10 A,B,C,D

5323 ワード

トランスファゲート
リンク:https://ac.nowcoder.com/acm/contest/280/A出典:牛客網
タイトルはActciが偶然1つの鉱洞を発見したことを説明して、この鉱洞の構造は1本の二叉木に似ていて、Actciが発見した鉱洞はちょうど根のノードのところに位置して、できるだけ早く掘り起こすため、Actciは彼女の小さい仲間たちを探して助けに来て、地質の原因のため、毎日小さい仲間たちは1本の子ノードまでの道(時間を消費しません)を打つしかありません.つまり、毎日1つのノードが1つのサブノードにしか道路を建設できないということです.1つの道路を歩くには1日かかります.1つの道路を発見すると、一部のパートナーが残って探査を続けることを選択します.リンク:https://ac.nowcoder.com/acm/contest/280/A出典:牛客網
説明を入力:1行、1数n.出力説明:1行、1つの数は最大建設の道路数を表し、答えは100000007に対して型を取ります.例1入力
2

しゅつりょく
3

説明
    :
 n         n×2 n×2+1,      1.
   1->2, 1,2       ,    1。
   1->3,2->4, 2,3,4    ,    3.

例2入力
100

しゅつりょく
6531708670

コメント:
    :
  100%      n ≤ 5×106

法則を探る.
#include 
using namespace std;
typedef long long ll;
const ll mod=10000000007;
ll n,s1,s2,t;
ll f[10000010],ans;
int main() {
    cin>>n;
    f[1]=1;f[2]=2;
    for(int i=3;i<=n;i++) f[i]=(f[i-1]+f[i-2])%mod;
    for(int i=1;i<=n;i++) ans=(ans+f[i])%mod;
    cout<

リンク:https://ac.nowcoder.com/acm/contest/280/B出典:牛客網
説明を入力:1行、1数a.出力説明:2行.最初の行はYesまたはNoを出力し、この数がこの4つの数のうちの1つまたは複数の数の倍数であるかどうかを示します.2行目、aはどの数の倍数であり、各数はスペースで区切られ(順序は小さいから大きい)、第1の動作Noであれば出力されない.例1入力
123456789

しゅつりょく
   Yes
    3

例2入力
2341232402462055420

しゅつりょく
Yes
3 5

例3入力
9741427

しゅつりょく
No

文字列シミュレーション大数演算{{もじれつ:アナログだいすうえんざん}}
#include 
using namespace std;
typedef long long LL;
const int maxn = 1e4 + 10;

const LL inf = 0x3f3f3f3f;
 
char s[maxn];
int a[11];
 
bool isok(int k){
    int tem = 0;
    for (int i=0; s[i]!='\0'; i++)  tem = (tem * 10 + (s[i] - '0')) % k;
    if (tem == 0)  return true;
    else  return false;
}
int main(){
    scanf("%s", s);
    int k = 0;
    for (int i=1; i<=4; i++){
        int x;
        if (i == 1)  x = 3;
        else if (i == 2)  x = 5;
        else if (i == 3)  x = 8;
        else if (i == 4)  x = 11;
        if (isok(x))  a[++k] = x;
    }
 
    if (k == 0)  puts("No");
    else {
        puts("Yes");
        for (int i=1; i

リンク:https://ac.nowcoder.com/acm/contest/280/C出典:牛客網
题目描述Actci授业で一眠りして、授业が终わって数学の先生を探して补习して、先生に1つの题目を闻きました:2つの数a,bを与えて、aとbのすべての公约数は何ですか?数学の先生はこの問題を見ると簡単すぎて、答えたくないので、あなたに渡しました.入力記述:1行2個の数a,b.出力記述:aとbのすべての公約数、各数字の間にスペースが隔てられている.例1入力
25 37

しゅつりょく
1

例2入力
25 100

しゅつりょく
1 5 25

コメント:
  100%   ,1 ≤ a,b ≤ 1013

2つの数の積は、この2つの数の最大公約数と最小公倍数の積に等しい.
2つの数がaおよびbであり、彼らの最大公約数がa/cであると仮定すると、彼らの最小公倍数は(a/c)a/(a/c)*b/(a/c)である.化簡後得:b!c従って最大公約数に最小公倍数=(a/c)*(bc)=a*bを乗じる
2つの数の最大公因数は必ずこの2つの数の因数であり、2つの数の最小公倍数は必ずこの2つの数の倍数であるため、2つの数の最小公倍数は必ずそれらの最大公因数の倍数である.
では、2つの数の公因数は必ず2つの数の因数であり、2つの数の最小公倍数は必ずこの2つの数の倍数である.だから2つの数の最小公倍数は彼らの因数の倍数に違いない.
#include 
using namespace std;
typedef long long ll;
const int maxn = 1e6+7;
ll gcd(ll a,ll b)
{
    if(b==0) return a;
    return gcd(b,a%b);
}
set ans;
ll a,b;
int main()
{
    cin>>a>>b;
    ll g = gcd(a,b);
    for(ll i=1;i*i<=g;i++)
    {
        if(g%i==0)
        {
            ans.insert(i);
            ans.insert(g/i);
        }
    }
    for(auto it = ans.begin();it!=ans.end();++it)
    {
        cout<

リンク:https://ac.nowcoder.com/acm/contest/280/D出典:牛客網
テーマは夕日が西に沈んで、慌ただしく忙しくて、SSJの一日の课程はすでにすべて终わって、腹がグーグーと叫び始めて、家に帰るバスに乗って、しかしSSJは今日少し迷っているようで、今日昼ごはんの时に食堂に行かなかったと言って、歩いていて、外の景色は美しいですね、ああ?私はここを通ったことがないようです.終わったので、道に迷いたいです.バスは終点に着いて、SSJは降りて、内心はこの上なく緊張して、帰れなくて、ひとしきりの冷たい風が吹いて、瑟瑟は震えて、emm...、あれは1枚の地図ですか?地図の上で何がみんなはすべて知っていて、SSJは今すでに腹が減って考える力がなくて、彼に最も速く家に帰る道を設計してもらって、彼は早く家に帰ってxxxを食べます.説明を入力:最初の行の4つの数n,m,s,t.(地図上のn地点,m道路,SSJはs地点,他家はt地点)第2−m+1の3つの正の整数,f,u(ある道の起点),v(到達点),w(経路距離)をそれぞれ示す.(fは1または0,0はこの道に悪犬が道を塞いでいることを示し、SSJは悪犬と戦う力がないので、彼はこれらの道を避けなければならない.1はこの道に危険がないことを示している).出力説明:最初の行の1つの数は最短の経路の長さを表して、もし家に帰ることができないならば“My gold!!”を出力します(引用符なし)家に帰れるなら.例1入力
5 7 1 5
0 1 4 4
1 1 3 2
1 1 5 7
1 2 5 10
0 2 3 1
1 3 5 2
1 4 3 7

しゅつりょく
4

コメント:
n≤10000,m≤200000,w≤5000000

優先キュー最適化dijkstraテンプレート
#include
using namespace std;
typedef long long LL;
const LL inf=1e18+5;
const int maxn=10005;
int n,m,s,t,f,u,v,x,y,z;
vector v1[maxn];
vector v2[maxn];
bool vis[maxn];LL w,dis[maxn];
priority_queue< pair > que;
void Dijkstra(){
    while(!que.empty())que.pop();
    memset(vis,false,sizeof(vis));
    dis[s]=0;que.push(make_pair(-dis[s],s));
    while(!que.empty()){
        x=que.top().second;que.pop();
        if(vis[x])continue;
        vis[x]=true;
        for(size_t j=0;j