1002.多项式A+B

#include<iostream>
#include<map>
using namespace std;
map <int,double,greater<int>> has; //从大到小哈希
int main(){
for(int i=0;i<2;i++){
int k;
cin>>k;
while(k--){
int n;
double a;
cin>>n>>a;
has[n]+=a;
}
}
for(auto t=has.begin();t!=has.end();t++){ //去掉系数为0的数据
if(t->second==0)has.erase(t);
}
cout<<has.size();
for(auto t: has){
printf(" %d %.1lf",t.first,t.second);
}
}
1009.多项式乘积

- 注意乘出来的多项式C最高次幂应当是2000,数据范围要开够
```
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010,M=2010;
double a[N],b[N];
double c[M];
int main(){
int k;
cin>>k;
while(k--){
int n;
double x;
cin>>n>>x;
a[n]=x;
}
cin>>k;
while(k--){
int n;
double x;
cin>>n>>x;
b[n]=x;
}
for(int i=0;i<N;i++){
if(a[i]){
for(int j=0;j<N;j++){
if(b[j])c[i+j]+=a[i]*b[j];
}
}
}
int cnt=0;
for(int i=M-1;i>=0;i--)if(c[i])cnt++;
cout<<cnt;
for(int i=M-1;i>=0;i--)if(c[i])printf(" %d %.1lf",i,c[i]);
}
```
1023.趣味数字

- 高精度乘法,最后判断是否相等,可以用哈希,也可以存到
vector里排完序比较,(vector支持类似a==b,返回字典序比较)
#include<iostream>
#include<cstring>
#include<algorithm>
#include<unordered_map>
#include<vector>
using namespace std;
string to_double (string s){
int len=s.size();
vector<int> num;
vector<int> c;
for(int i=len-1;i>=0;i--)num.push_back(s[i]-'0');
int t=0;
for(int i=0;i<num.size();i++){
int x=num[i]*2+t;
c.push_back(x%10);
t=x/10;
}
if(t)c.push_back(t);
string res;
for(int i=c.size()-1;i>=0;i--)res+=to_string(c[i]);
return res;
}
int main(){
string s1,s2;
cin>>s1;
s2=to_double(s1);
unordered_map<char,int> has;
for(int i=0;i<s1.size();i++)has[s1[i]]++;
for(int i=0;i<s2.size();i++)has[s2[i]]--;
for(int i=0;i<has.size();i++){
if(has[i]!=0){
cout<<"No"<<endl<<s2;
return 0;
}
}
cout<<"Yes"<<endl<<s2;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
string A;
vector<int> a;
cin >> A;
for (int i = A.size() - 1; i >= 0; i -- ) a.push_back(A[i] - '0');
vector<int> b;
int t = 0;
for (int i = 0; i < a.size(); i ++ )
{
int s = a[i] + a[i] + t;
b.push_back(s % 10);
t = s / 10;
}
if (t) b.push_back(t);
vector<int> c = b;
sort(a.begin(), a.end());
sort(c.begin(), c.end());
if (a == c) puts("Yes");
else puts("No");
for (int i = b.size() - 1; i >= 0; i -- ) cout << b[i];
return 0;
}
作者:yxc
链接:https://www.acwing.com/activity/content/code/content/269793/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1024.回文数

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
vector<int> add(vector<int> a,vector<int> b){
vector<int> c;
int i=0,t=0;
int len=a.size();
while(i<len){
int x=a[i]+b[i]+t;
c.push_back(x%10);
t=x/10;
i++;
}
if(t)c.push_back(t);
return c;
}
bool judge(vector<int> a){
for(int i=0,j=a.size()-1;i<j;i++,j--)
if(a[i]!=a[j])return false;
return true;
}
int main(){
string s;
int k;
cin>>s>>k;
vector<int> a;
for(int i=s.size()-1;i>=0;i--)a.push_back(s[i]-'0');
int cnt=0;
while(k--){
if(judge(a))break;
vector<int> b;
for(int i=a.size()-1;i>=0;i--)b.push_back(a[i]);
a=add(a,b);
cnt++;
}
for(int i=a.size()-1;i>=0;i--)cout<<a[i];
cout<<endl<<cnt;
return 0;
}
1058.霍格沃茨的A+B

- 嘴上说范围是10^7,实际上是10 ^8次方???
- y总写的真的简单,我像个弱智5555555
#include<iostream>
#include<cstring>
#include<unordered_map>
#include<vector>
using namespace std;
const int N=1e8;
vector<int> s_change(string s){
vector<int> res;
int k1=s.find('.');
int k2=s.find('.',k1+1);
res.push_back(stoi(s.substr(k2+1)));
res.push_back(stoi(s.substr(k1+1,k2-k1-1)));
res.push_back(stoi(s.substr(0,k1)));
return res;
}
vector<int> add(vector<int> a,vector<int> b){
vector<int> res;
int t=0,i=0;
int x=a[i]+b[i];
res.push_back(x%29);
t=x/29,i++;
x=a[i]+b[i]+t;
res.push_back(x%17);
t=x/17,i++;
x=a[i]+b[i]+t;
res.push_back(x%N);
return res;
}
int main(){
string s1,s2;
cin>>s1>>s2;
vector<int> a,b,c;
a=s_change(s1);
b=s_change(s2);
c=add(a,b);
string res;
for(int i=c.size()-1;i>=0;i--)res+=to_string(c[i])+".";
res.erase(res.size()-1);
cout<<res;
}
#include<iostream>
using namespace std;
int main(){
int a,b,c,d,e,f;
scanf("%d.%d.%d %d.%d.%d",&a,&b,&c,&d,&e,&f);
c+=f,b+=e,a+=d;
b+=c/29,c=c%29;
a+=b/17,b=b%17;
printf("%d.%d.%d",a,b,c);
return 0;
}
1136.延迟的回文数

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
vector<int> add(vector<int> a,vector<int> b){
vector<int> res;
for(int i=0,t=0;i<a.size()||i<b.size()||t;i++){
int sum=t;
if(i<a.size())sum+=a[i];
if(i<b.size())sum+=b[i];
res.push_back(sum%10);
t=sum/10;
}
return res;
}
bool check(vector<int> c){
for(int i=0,j=c.size()-1;i<j ;i++,j--)
if(c[i]!=c[j])return false;
return true;
}
void print(vector<int> a){
for(int i=a.size()-1;i>=0;i--)cout<<a[i];
}
int main(){
string s;
cin>>s;
vector<int> a,b;
for(int i=s.size()-1;i>=0;i--)a.push_back(s[i]-'0');
if(check(a)){
print(a);
cout<<" is a palindromic number.";
return 0;
}
int k=10;
while(k--){
for(int i=a.size()-1;i>=0;i--)b.push_back(a[i]);
vector<int> c=add(a,b);
print(a),cout<<" + ",print(b),cout<<" = ",print(c),cout<<endl;
if(check(c)){
print(c);
cout<<" is a palindromic number.";
return 0;
}
a=c;
b.clear();
}
cout<<"Not found in 10 iterations.";
}