zoukankan      html  css  js  c++  java
  • 洛谷 P2841 A*B Problem

    https://www.luogu.org/problemnew/show/P2841

    根本不会啊。。。

    大概就是:如果两个数模a的结果相同,那么它们前面同时加上一个0或1后模a的结果仍然相同,因此可以先求a*b,按照模a的结果来划分状态,模a相同的只保留较小的,这样可以求出a*b,然后高精除得到b

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 #include<string>
     6 #include<map>
     7 using namespace std;
     8 #define fi first
     9 #define se second
    10 #define mp make_pair
    11 #define pb push_back
    12 typedef long long ll;
    13 typedef unsigned long long ull;
    14 typedef pair<int,int> pi;
    15 typedef pair<int,string> ps;
    16 int n;
    17 map<int,string> a1,a2;
    18 ps ans;
    19 int ax[1010];
    20 int main()
    21 {
    22     int i,now;
    23     bool fl=0;
    24     scanf("%d",&n);
    25     if(n==1)
    26     {
    27         puts("1 1");
    28         return 0;
    29     }
    30     a1[0]="0";a1[1]="1";now=1;
    31     while(1)
    32     {
    33         now=now*10%n;
    34         for(auto &x:a1)
    35         {
    36             if((x.fi+now)%n==0)
    37             {
    38                 ans=mp((x.fi+now)%n,"1"+x.se);
    39                 goto xxx;
    40             }
    41             //printf("%d %s
    ",(x.fi+now)%n,("1"+x.se).c_str());
    42             //printf("%d %s
    ",x.fi,("0"+x.se).c_str());
    43             if(!a2.count((x.fi+now)%n))
    44                 a2[(x.fi+now)%n]="1"+x.se;
    45             else
    46                 a2[(x.fi+now)%n]=min("1"+x.se,a2[(x.fi+now)%n]);
    47             if(!a2.count(x.fi))
    48                 a2[x.fi]="0"+x.se;
    49             else
    50                 a2[x.fi]=min("0"+x.se,a2[x.fi]);
    51         }
    52         a1=a2;a2.clear();
    53         //printf("%d
    ",now);
    54     }
    55     xxx:;
    56     now=0;
    57     for(i=0;i<ans.se.length();i++)
    58     {
    59         now=now*10+ans.se[i]-'0';
    60         ax[i]=now/n;now%=n;
    61     }
    62     for(i=0;i<ans.se.length();i++)
    63     {
    64         if(ax[i]==0&&!fl)    continue;
    65         fl=1;printf("%d",ax[i]);
    66     }
    67     printf(" %s",ans.se.c_str());
    68     return 0;
    69 }
  • 相关阅读:
    凌乱的DSP笔记(6)-直流电机&步进电机
    凌乱的DSP笔记(5)-按键
    凌乱的DSP笔记(4)-继电器
    凌乱的DSP笔记(3)-蜂鸣器播放音乐
    凌乱的DSP笔记(2)-LED流水灯
    凌乱的DSP笔记(1)-F28335基础知识
    Python GUI设计——tkinter菜鸟编程(上)
    Python基础知识
    R|Shiny练习
    R之ggvis学习笔记
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9282567.html
Copyright © 2011-2022 走看看