输入为两行,分别表示两个多项式。表示每项的整数对按照次数大小降序给出。(次数绝对值小于1000,系数绝对值小于10000)
按照降次顺序输出表示和多项式的整数对(系数为0的整数对不用输出,整数对由空格分隔,最后一个整数对后不添加空格)
3 3 5 -2 1 4 0 4 2 3 -1 2 1 1 3 0
3 5 2 3 -1 2 -1 1 7 0
#include <stdio.h> #define N 3000 #define OFFSET 1000 int main() { int n; int a[N];//系数矩阵 int x, y;//系数和次数 while(scanf("%d", &n)!=EOF) { for(int i=0; i<N; i++) { a[i]=0; } for(int i=0 ;i<n; i++) { scanf("%d %d", &x, &y); a[y+OFFSET]+=x; } scanf("%d", &n); for(int i=0 ;i<n; i++) { scanf("%d %d", &x, &y); a[y+OFFSET]+=x; } bool isfirst=true; for(int i=N-1; i>=0; i--) { if(a[i]!=0) { if(isfirst) isfirst=false; else printf(" "); printf("%d %d", a[i], i-OFFSET); } } printf("\n"); } return 0; }
#include <iostream> #include <string> #define SizeMax 2001 //定义最大用于存储的容量2 × 1000 using namespace std; int main() { int arr[SizeMax] = { 0 }, N, M, cefc, index, count = 0; cin >> N; for (int i = 0; i < N; i++) { cin >> cefc >> index; //依次录入系数cef和对应的指数index arr[1000 + index] = arr[1000 + index] + cefc; //5x^3存储为arr[1005] = 3; } cin >> M; for (int i = 0; i < M; i++) { cin >> cefc >> index; arr[1000 + index] = arr[1000 + index] + cefc; //假若指数相同,则相加 } for (int i = 0; i < SizeMax; i++) if (arr[i] != 0) count++; //数出非零项数 for (int i = SizeMax - 1; i >= 0; i--) //从2000 -> 0依次输出系数非零的元素 if (arr[i] != 0) { count--; cout << arr[i] << ' ' << i - 1000; if (count) //最后一项用换行符,否则空格 cout << ' '; else cout << endl; } }
#include<iostream> #include<map> using namespace std; //用map这个关联容器实现系数与相应次数的一一对应 int main(void) { int n_1; map<int,int> a; while(cin >> n_1) { for(int i = 0;i < n_1;i++) { int x,y; cin >> x >> y; a[y] = x; } int n_2; cin >> n_2; for(int i = 0;i < n_2;i++) { int x,y; cin >> x >> y; a[y] += x; } map<int,int>::iterator it = a.end(); for(;it != a.begin();it--) if(it->second != 0) cout << it->second << ' ' << it->first << ' '; it->second != 0 ? cout << it->second << ' ' << it->first << endl: cout << endl; } return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int arr[20002]={0}; for(int k=0,n,a,b;k<2;++k) { cin>>n; for(int i=0;i<n;++i) { cin>>a>>b; arr[b+10000]+=a; } } bool first=true; for(int i=20001;i>=0;--i) if(arr[i]!=0 ) { if(first) { cout<<arr[i]<<" "<<i-10000; first=false; } else cout<<" "<<arr[i]<<" "<<i-10000; } cout<<endl; }
#Python解释不多,致力于推广Python,所以给出Python实现 while True: try: digitList1 = list(map(int, input().split())) digitList2 = list(map(int, input().split())) num1 = digitList1[0] num2 = digitList2[0] temp = [] #保存整数对 for i in range(num1): temp.append([digitList1[i * 2 + 1], digitList1[i * 2 + 2]]) for i in range(num2): temp.append([digitList2[i * 2 + 1], digitList2[i * 2 + 2]]) temp.sort(key=lambda x: x[1],reverse=True) #对整数对进行排序,以次数为关键字排序,默认为升序,所以反转为降序 result = [] #保存结果整数对 lastNum = temp[0][1] modulus = temp[0][0] temp.pop(0) for i in temp: if i[1] == lastNum: modulus += i[0] else: if modulus != 0: #序数不为0才加入到结果中 result.append(modulus) result.append(lastNum) lastNum = i[1] modulus = i[0] if modulus != 0: #结尾还剩余最后项未在循环中处理,所以在结束后增加处理 result.append(modulus) result.append(lastNum) print(' '.join(map(str,result))) except Exception: break
//存储在map中,后面再顺序的读取 import java.util.*; public class Main{ public static void main(String[] args){ HashMap<Integer,Integer> map = new HashMap<Integer,Integer>(); Scanner scanner=new Scanner(System.in); int input_one_size=scanner.nextInt(); for(int i=0;i<input_one_size;i++){ int coefficient=scanner.nextInt(); int degree=scanner.nextInt(); map.put(degree,coefficient); } int input_two_size=scanner.nextInt(); for(int i=0;i<input_two_size;i++){ int coefficient=scanner.nextInt(); int degree=scanner.nextInt(); if(map.containsKey(degree)){ int value=map.get(degree); map.put(degree,value+coefficient); }else map.put(degree,coefficient); } for(int i=1000;i>=-1000;i--){ if(map.containsKey(i) && map.get(i)!=0){ System.out.print(map.get(i)+" "+i+" "); } } } }
#include<iostream> #include<map> #include<vector> using namespace std; int main() { map<int, int> mmp; int n; cin>>n; for(int i=0; i<n; i++) { int a,b; cin>>a>>b; mmp[b] = a; } cin>>n; for(int i=0; i<n; i++) { int a,b; cin>>a>>b; map<int, int>::iterator it = mmp.find(b); if(it != mmp.end()) { mmp[b] = it->second+a; if(mmp[b] == 0) mmp.erase(b); } else mmp[b] = a; } vector<int> res; for(map<int, int>::iterator it = mmp.begin(); it != mmp.end(); it++) { res.push_back(it->first); res.push_back(it->second); } for(int i=res.size()-1; i>0; i--) cout<<res[i]<<" "; cout<<res[0]<<endl; return 0; }
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
int a[2002] = {0};
int coef, time, m;
int maxa, maxb;
int mina, minb;
cin >> coef >> mina;
a[mina + 1000] = coef;
for (int i = 3; i <= n; i++)
{
cin >> coef >> time;
a[time + 1000] = coef;
}
cin >> coef >> maxa;
a[maxa + 1000] = coef;
cin >> m;
cin >> coef >> minb;
a[minb + 1000] += coef;
for (int i = 3; i <= m; i++)
{
cin >> coef >> time;
a[time + 1000] += coef;
}
cin >> coef >> maxb;
a[maxb + 1000] += coef;
maxa = maxa > maxb ? maxa : maxb;
mina = mina < minb ? mina : minb;
maxa += 1000;
mina += 1000;
int j;
for (j = maxa; j > mina; j--)
if (a[j] != 0)
{
cout << a[j] << " " << j - 1000;
break;
}
for (int i = j - 1; i > mina; i--)
if (a[i] != 0)
cout << " " << a[i] << " " << i - 1000;
cout << endl;
}
return 0;
}
#include<stdio.h> int ex[2000]; int main (){//the shorter,the better. int i,j,n,k,m,minM; for(i=0;i<2&&~scanf("%d",&n);i++) for (j=0 ; j<n && ~scanf("%d %d",&k,&m); ex[1000+m] += k,++j); for (minM=2000,i = 0; i < 2000;minM=i<minM&&ex[i]?i:minM,i++); for (j = 1999; j>=minM;ex[j]?(j==minM?printf("%d %d\n",ex[minM],minM-1000):printf("%d %d ",ex[j],j-1000)):0,--j); }
#include<iostream> #include<map> using namespace std; int main() { int m,n,a,b; while(cin>>m) { map<int,int> x; while(m--) { cin>>a>>b; x[b]+=a; } cin>>n; while(n--) { cin>>a>>b; x[b]+=a; } auto it=x.end(); for(it;it!=x.begin();it--) { if(it->second!=0) cout<<it->second<<' '<<it->first<<' '; } it->second!=0 ? cout<<it->second<<' '<<it->first<<endl:cout<<endl; } }
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { Map<Integer, Integer> firstMap = new HashMap<Integer, Integer>(); Map<Integer, Integer> secondMap = new HashMap<Integer, Integer>(); int n = scanner.nextInt(); for(int i = 0; i < n; i++) { int xiShu = scanner.nextInt(); int zhiShu = scanner.nextInt(); firstMap.put(zhiShu,xiShu); } int m = scanner.nextInt(); for (int i = 0; i < m; i++) { int xiShu = scanner.nextInt(); int zhiShu = scanner.nextInt(); secondMap.put(zhiShu,xiShu); } for(Map.Entry<Integer, Integer> entry : secondMap.entrySet()) { if (firstMap.containsKey(entry.getKey())) { int xiShuResult = firstMap.get(entry.getKey())+entry.getValue(); if (xiShuResult == 0) { firstMap.remove(entry.getKey()); }else { firstMap.put(entry.getKey(), xiShuResult); } }else { firstMap.put(entry.getKey(), entry.getValue()); } } List<Map.Entry<Integer, Integer>> myList = new ArrayList<>(firstMap.entrySet()); //按照Map的key进行排序 myList.sort(Map.Entry.comparingByKey()); for (int i = myList.size()-1; i >= 0; i--) { System.out.print(myList.get(i).getValue()+ " " + myList.get(i).getKey()+" "); } } } }
import sys result = [] aa = [] for line in sys.stdin: dd = list(map(int, line[:-1].split()))[1:] aa.append(dd) rr = sorted(aa[0][1::2] + aa[1][1::2], reverse=True) max_exp = rr[0] min_exp = rr[-1] for i in range(min_exp, max_exp + 1): result.append([0, i]) locations = {} for location, (conf, exp) in enumerate(result): # print(exp, location) locations[exp] = location aa_cc = [(i, j) for i,j in zip(aa[0][0::2], aa[0][1::2])] bb_cc = [(i, j) for i,j in zip(aa[1][0::2], aa[1][1::2])] # print(max_exp) for conf, exp in aa_cc + bb_cc: result[locations[exp]][0] += conf resultss = "" for conf, exp in result[::-1]: if conf != 0: # print(conf, exp) resultss += str(conf) + " " + str(exp) + " " print(resultss[:-1])
#include <algorithm> #include <iostream> #include <vector> using namespace std; struct Node { //多项式的项 int xishu; //系数 int cishu; //次数 Node(int xishu, int cishu): xishu(xishu), cishu(cishu) {} bool operator<(const Node& node) { return cishu > node.cishu; } }; int main() { int n; while (cin >> n) { vector<Node>polynomial; //多项式 while (n--) { int xishu, cishu; cin >> xishu >> cishu; polynomial.emplace_back(xishu, cishu); } cin >> n; while (n--) { int xishu, cishu; cin >> xishu >> cishu; polynomial.emplace_back(xishu, cishu); } sort(polynomial.begin(), polynomial.end()); //按次数降序排序 //合并同类项 for (int i = 0; i < polynomial.size(); i++) { if (polynomial[i].cishu == polynomial[i + 1].cishu) { polynomial[i].xishu += polynomial[i + 1].xishu; //系数叠加 polynomial[i + 1].xishu = 0; //多余项系数置0 } } for (auto i = polynomial.begin(); i != polynomial.end(); i++) { if (i->xishu == 0) { continue; //零系数项不输出 } cout << i->xishu << " " << i->cishu; i + 1 == polynomial.end() ? cout << endl : cout << " "; } } return 0; }
#include <iostream> #include <map> #include <cstdio> using namespace std; map<int, int, greater<int>> mp; // key为次数,value为系数,key从大到小排列 map<int, int, greater<int>>::iterator it; int main() { int num; while (scanf("%d", &num) != EOF) { for (int i = 0; i < num; i++) { int value, key; scanf("%d %d", &value, &key); mp[key] += value; //将次数相同的系数相加。 } } for (it = mp.begin(); it != mp.end(); it++) if (it->second != 0) //系数为0时不输出 printf("%d %d ", it->second, it->first); mp.clear(); return 0; }
#include <iostream> #include <map> using namespace std; int main() { map<int, int> mmap; int a, b, c; while (cin >> a){ for (int i = 0; i < a; ++i){ cin >> b >> c; mmap[c] = b; } cin >> a; for (int i = 0; i < a; ++i){ cin >> b >> c; if (mmap.count(c) > 0) mmap[c] += b; else mmap[c] = b; } for (auto it = mmap.rbegin(); it != mmap.rend(); ++it) if (it->second != 0) cout << it->second << " " << it->first << " "; cout << endl; } }
import traceback import sys def AddPoly(lst1,lst2): result_lst = [] result = [] dic1 = {} dic2 = {} lst1.pop(0) lst2.pop(0) # 将两个poly的系数和node作为两个dic的key和value for i in range(0,len(lst1),2): dic1[lst1[i+1]]= lst1[i] for i in range(0,len(lst2),2): dic2[lst2[i+1]]= lst2[i] # 若两个dic的key相同,将value相加 for i,j in dic2.items(): if i in dic1.keys(): dic1[i] = dic1[i] + dic2[i] # 将两个dic的内容更新都一个dic中 dic2.update(dic1) # 查找更新后的dic中是否有系数为0的项,删除 for i in list(dic2.keys()): if not dic2.get(i): del dic2[i] # 将dic内容按照key排序,升序排列,存为list result_lst = sorted(dic2.items(), reverse=True) # 将list中的pair拆开 按照输出要求顺序摆放 for i in range(len(result_lst)): result.append(result_lst[i][1]) result.append(result_lst[i][0]) return result try: digitList1 =input().strip().strip('\n').split(' ') digitList2 =input().strip().split(' ') digitList1 = list(map(lambda x:int(x), digitList1)) digitList2 = list(map(lambda x:int(x), digitList2)) num1 = int(digitList1[0]) num2 = int(digitList2[0]) addpoly = [] addpoly = AddPoly(digitList1, digitList2) for x in addpoly: print(x, end=' ') except Exception as e: pass