#include<stdio.h>#include<stdlib.h>#include<iostream>#include<vector>#pragmawarning(disable:4996)
using namespace std;//60分intmain(){int n, a, b;scanf("%d %d %d",&n,&a,&b);
vector<int>arr(n),brr(n);for(int i =0; i < n; i++){
arr[i]=0;
brr[i]=0;}//输入int x, y;for(int i =0; i < a; i++){scanf("%d %d",&x,&y);
arr[x -1]= y;}for(int i =0; i < b; i++){scanf("%d %d",&x,&y);
brr[x -1]= y;}int sum =0;for(int i =0; i < n; i++){
sum +=(arr[i]* brr[i]);}printf("%d\n", sum);return0;}
100分代码:
#include<stdio.h>#include<stdlib.h>#include<iostream>#include<vector>#pragmawarning(disable:4996)
using namespace std;//100分,但在这里是不通过的intmain(){longlong n;longlong a, b;
cin >> n >> a >> b;longlong arru[a][2];longlong arrv[b][2];for(int i =0; i < a; i++){for(int j =0; j <2; j++){
cin >> arru[i][j];}}for(int i =0; i < b; i++){for(int j =0; j <2; j++){
cin >> arrv[i][j];}}longlong l1 =0, l2 =0;//分别指向两个二维数组的行longlong sum =0;while(l1 < a && l2 < b){//只有有一个遍历完了,就跳出循环if(arru[l1][0]> arrv[l2][0]){//前者index大,那么后者后移
l2++;continue;}if(arru[l1][0]< arrv[l2][0]){//反之前者移动
l1++;continue;}if(arru[l1][0]== arrv[l2][0]){//相等做运算
sum += arru[l1][1]* arrv[l2][1];
l1++;
l2++;continue;}}
cout << sum;return0;}