题目列表
奶牛式乘法
题目很简单,就是每位数字相乘做加法。
下列描述中,均将两个数字 $A,B$ 分别用字符串 $S,T$ 表示,$n=\left|S\right|,m=\left|T\right|$。
很显然,有一种 $\mathcal O(nm)$ 的写法,直接模拟题意。
代码
#include<bits/stdc++.h>
using namespace std;
string a,b;
int ans;
int main()
{
cin>>a>>b;
for(int i=0;i<a.size();i++)
{
for(int j=0;j<b.size();j++)
{
ans+=(int)(a[i]-'0')*(int)(b[j]-'0');
}
}
cout<<ans<<endl;
return 0;
}
当然,我们做一个乘法分配律的逆运用。
$S_1\times T_1 + S1 \times T_2 + \dots +S_n\times T_1 + S_n \times \dots + S_n\times T_m$。
然后会发现,上式即为 $(S_1+\dots+S_n)\times T_1+(S_1+\dots+S_n)\times T_2+\dots +(S_1+\dots+S_n)\times T_m$。
再次合并,即为 $(S_1+\dots +S_n)\times (T_1+\dots+T_m)$,也就是数字和相乘。
复杂度仅为 $\mathcal O(n+m)$。
代码
```cpp #include$s_l=\tt{*}$
-$s_r=\tt{*}$
为了字典序最小,我们选择最小的 $\tt{A}$。 -$s_r \neq \tt{*}$
为了保持回文,我们把 $s_l$ 换为 $s_r$。 -$s_r=\tt{*}$
-$s_l=\tt{*}$
为了字典序最小,我们选择最小的 $\tt{A}$。 -$s_l \neq \tt{*}$
为了保持回文,我们把 $s_r$ 换为 $s_l$。 -上述条件均不满足
- 无解。代码
```cpp
#include
using namespace std;
string s;
int len,l,r;
int main()
{
cin>>s;
len=s.size();
l=0;
r=len-1;
while(l
#define min(a,b) (a>b?b:a)
using namespace std;
int a[10];
void solve()
{
long long ans=0;
int minn=INT_MAX,cnt=0;
for(int i=1;i>a[i];
cnt+=(a[i]!=0);
}
while(1)
{
minn=INT_MAX;
cnt=0;
for(int i=1;i>t;
while(t--)
{
solve();
}
return 0;
}
```
代码