Problem:
Problem B:
宝くじチェッカー
あなたは無事進学振り分けを終え、駒場近辺から本郷近辺へ引っ越す準備の最中であった。 家の中を整理していたところ去年購入した宝くじが大量に見つかった。 交換期限を確認したところ明日までに換金しなければならないのだが、引っ越しの準備がまだ全く終わっていないため少額の当選金のために宝くじ売り場まで行くのは面倒である。 そこであなたはいくら当選金が得られるかを調べることにした。
宝くじは8桁の数字からなる。当選番号は同じく8桁で数字と'*'から構成され、持っている宝くじと数字部分が一致した場合、当選番号に応じた当選金が支払われる。
例えば所持している宝くじの番号が "12345678" の場合、当選番号が "*******8" や "****5678" の場合は当選となるが、当選番号が "****4678" のときは当選とはならない。当選番号は複数あり得て、それぞれ独立に当選金が支払われる。ただし、当選番号は1枚の宝くじが2つ以上の当選番号に当たらないように選ばれる。たとえば当選番号が "*******8", "****5678" の2つであった場合、 "12345678" は両方に当選してしまうため、このような当選番号の選ばれ方がされることはない。
あなたの仕事は、入力として与えられる所持している宝くじの番号と宝くじの当選番号に対して、いくらの当選金が得られるかを出力するプログラムを書くことである。
Input
入力は以下のような形式で与えられる。
n
m
N
1
M
1
...
N
n
M
n
B
1
...
B
m
1行目では当選番号の数
n
(1 ≤
n
≤ 100)と所持している宝くじの枚数
m
(1 ≤
m
≤ 1000)がそれぞれ整数で与えられる。
続く
n
行では、各行に当選番号
N
i
と当選金
M
i
(1 ≤
M
i
≤ 1000000)が与えられる。当選金は整数である。当選番号の形式は問題文中で述べたとおりである。
続く
m
行では所持している宝くじの番号が与えられる。
Output
当選金の合計額を出力せよ。
Notes on Test Cases
上記入力形式で複数のデータセットが与えられます。各データセットに対して上記出力形式で出力を行うプログラムを作成して下さい。
n が 0 のとき入力の終わりを示します。
Sample Input
3 3
*******1 100
******22 1000
11111112 1000000
01203291
02382022
11111111
10 10
****3228 149416
****3992 198635
****4286 77783
****4843 225244
***49835 231046
***59393 379996
*5763748 437345
*6726222 58054
*8117882 16375
*9244339 537727
77885716
96726222
26971031
66652868
89599648
37772338
64679621
65479161
92959393
57855682
0 0
Output for Sample Input
1200
438050

Submitted solutions:

code_snippet: #include <iostream>
#include <vector>
using namespace std;

int main() {
  int n, m;
  
  while (true) {
    cin >> n >> m;
    
    if (n == 0 && m == 0)
      break;
    
    int ans = 0;
    vector<int> o(n);
    vector<string> b(n);

    for (int i = 0; i < n; i++)
      cin >> b[i] >> o[i];
    
    for (int i = 0; i < m; i++) {
      string l;
      cin >> l;
      bool match = false;
      
      for (int j = 0; j < n; j++) {
        bool f = true;
        
        for (int k = 0; k < 8; k++) {
          if (b[j].substr(k, 1) != "*" && b[j].substr(k, 1) != l.substr(k, 1)) {
            f = false;
            break;
          }
        }
        
        if (f) {
          match = true;
          ans += o[j];
          break;
        }
      }
      
      if (!match)
        ans += 0;
    }
    
    cout << ans << endl;
  }
}
accuracy: 1
time_ms: 130
memory_kb: 3176
final_rank: 16

code_snippet: #include <iostream>
using namespace std;
int main() {
  int n, m;
  cin >> n >> m;
  while (n || m) {
    int* o = new int[n];
    string* b = new string[n];
    for (int i = 0; i < n; i++)
      cin >> b[i] >> o[i];
    int ans = 0;
    for (int i = 0; i < m; i++) {
      string l;
      cin >> l;
      for (int j = 0; j < n; j++) {
        bool f = true;
        for (int k = 0; k < 8; k++) {
          if (b[j][k] != '*' && b[j][k] != l[k]) {
            f = false;
            break;
          }
        }
        if (f) {
          ans += o[j];
          break;
        }
      }
    }
    cout << ans << endl;
    delete[] o;
    delete[] b;
    cin >> n >> m;
  }
}
accuracy: 1
time_ms: 10
memory_kb: 3096
final_rank: 4

code_snippet: #include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <algorithm>
#include <regex>

using namespace std;

int main()
{
  int n, m;
  int prize;
  
  vector<pair<int, string> > winning;
  vector<string> lottery;
  vector<bool> is_winning;

  const regex r("[^*]+");
  smatch number, result;
  
  while(1) {
    cin >> n >> m;
    if (n == 0) break;
    
    winning.clear();
    lottery.clear();
    is_winning.clear();
    prize = 0;
    
    while(n--) {
      pair<int, string> tmp;
      cin >> tmp.second >> tmp.first;
      winning.push_back(tmp);
    }

    while(m--) {
      string s;
      cin >> s;
      lottery.push_back(s);
      is_winning.push_back(false);
    }

    sort(winning.begin(), winning.end(), greater<pair<int, string>>());

    for (size_t i = 0; i < winning.size(); i++) {
      regex_search(winning[i].second, number, r);
      string s = number.str() + "$";
      for (size_t j = 0; j < lottery.size(); j++) {
        if (regex_search(lottery[j], result, regex(s)) && is_winning[j] == false) {
            prize += winning[i].first;
            is_winning[j] = true;
        }
      }
    }
    cout << prize << endl;
  }
  
  return 0;
}
accuracy: 1
time_ms: 1120
memory_kb: 3368
final_rank: 20

code_snippet: #include<iostream>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<bitset>
#include<vector>
#include<string>
#include <iomanip>
#include <deque>
#include<list>
#include<cmath>
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;
using ll=long long;
using P=pair<int,int>;
using P_S=pair<int,string>;
using P_D=pair<double,int>;
using T=tuple<int,int,char,ll,string>;

int main()
{
    while(1)
    {
        int n,m;
        cin>>n>>m;
        if(n==0) break;
        string s[n];
        int money[n];
        rep(i,n){
            cin>>s[i]>>money[i];
        }
        int ans=0;
        rep(i,m){
            string t;
            cin>>t;
            rep(j,n){
                int flag=1;
                rep(l,8){
                    if(s[j][l]!='*'&&s[j][l]!=t[l]){
                        flag=0;
                    }
                }
                if(flag==1) {
                    ans+=money[j];
                }
            }
        }
        cout<<ans<<endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 3012
final_rank: 1

code_snippet: #include<iostream>
#include<vector>
#include <cmath>
#include <map>
#include <algorithm>
#include <string>
#include<sstream>
using namespace std;
int main(void){
    
    long long int n , m;
    while(1){
    cin >> n >> m;
    if(n ==0 &&m ==0){
        break ;
    }
    string  a[n] ;//当選番号
    int g[n] ;//賞金
    for(int i = 0 ; i < n ; i++){
        cin >> a[i] >> g[i] ;
    }

    int b[m] ;//宝くじの番号

    for(int j = 0 ; j < m ; j++){
        cin >> b[j] ;

    }
    int countc = 0;//*の数
    int tempg = 0;
    char hh;
    string temp ;//当選番号（一時保存）
    int atemp ;//当選番号（int）
    long long int sum = 0;//賞金合計


    for(int i = 0; i < n ; i++){
        temp = a[i];
        for(int k = 0 ; k < 8 ; k++){
                if(temp[k] == '*'){
                    countc++ ;
                    
                }
        }//〇
        if(countc ==7){
            hh = temp[7]  ;
            atemp = ((int)hh) -48;
        }else{
        for(int o = 0 ; o < 8 - countc ; o++){
            hh = temp[7 - o]  ;
            
            atemp += (int)(((int)hh-48) * (int)pow(10.0 , (double)o)) ;
           
        }
        //cout <<"atemp" << atemp << endl;
        }
        for(int j = 0;  j < m ; j++){
            
            if(b[j] % ((long long int )pow( 10.0, 8-countc)) == atemp ){
                sum += g[i] ;
               
            }  
            //cout <<"TAKARA"<<   b[j] % ((long long int )pow( 10.0, 8-countc)) << endl;
        }

         atemp = 0 ;
         countc = 0;
       
    }

    cout << sum << endl;
    }
    return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3288
final_rank: 19

code_snippet: #include<algorithm>
#include<bitset>
#include<cassert>
#include<cfloat>
#include<climits>
#include<cmath>
#include<deque>
#include<functional>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<string>
#include<unordered_map>
#include<unordered_set>
#include<utility>
#include<vector>

#define REP(i, n) for(int i = 0;i < n;i++)
#define REPR(i, n) for(int i = n;i >= 0;i--)
#define FOR(i, m, n) for(int i = m;i < n;i++)
#define FORR(i, m, n) for(int i = m;i >= n;i--)
#define SORT(v, n) sort(v, v+n);
#define VSORT(v) sort(v.begin(), v.end());
#define llong long long
#define pb(a) push_back(a)

using namespace std;

typedef long long int ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;


template<typename T>
vector<T> make_v(size_t a) { return vector<T>(a); }
template<typename T, typename... Ts>
auto make_v(size_t a, Ts... ts) {
	return vector<decltype(make_v<T>(ts...))>(a, make_v<T>(ts...));
}
template<typename T, typename V>
typename enable_if<is_class<T>::value == 0>::type
fill_v(T& t, const V& v) { t = v; }
template<typename T, typename V>
typename enable_if<is_class<T>::value != 0>::type
fill_v(T& t, const V& v) {
	for (auto& e : t) fill_v(e, v);
}


// aよりもbが大きいならばaをbで更新する
// (更新されたならばtrueを返す)
template <typename T>
bool chmax(T & a, const T & b) {
	if (a < b) {
		a = b;  // aをbで更新
		return true;
	}
	return false;
}
// aよりもbが小さいならばaをbで更新する
// (更新されたならばtrueを返す)
template <typename T>
bool chmin(T & a, const T & b) {
	if (a > b) {
		a = b;  // aをbで更新
		return true;
	}
	return false;
}


#define ARRAY_MAX 100005
const int INF = 1e9 + 7;
const ll MOD = 1e9 + 7;

int dx[4] = { 1,0,0,-1 };
int dy[4] = { 0,1,-1,0 };


/******************************************************************************************/



int main() {

	cin.tie(0);
	ios::sync_with_stdio(false);
	cout << fixed << setprecision(10);

	ll n,m;

	while(cin >> n >> m,n){


		ll ans = 0;
		vector<string> N(n);
		vector<int> M(n);

		for (int i = 0; i < n; i++)
		{
			cin >> N[i] >> M[i];
			reverse(N[i].begin(),N[i].end());
		}
		
		vector<string> kuji(m);
		for (int i = 0; i < m; i++)
		{
			cin >> kuji[i];
			reverse(kuji[i].begin(),kuji[i].end());
		}
		//kuji
		for (int i = 0; i < m; i++)
		{
			//prize
			for (int j = 0; j < n; j++)
			{
				//cout << "i= " << i << endl;
				bool flag = true;
				for (int k = 0; k < 8; k++)
				{
					if(N[j][k] == '*'){
						break;
					}
			
					flag &= (kuji[i][k] == N[j][k]);
				}
				if(flag){
					ans += M[j];
				}

			}
	
		}
	
		cout << ans << endl;
	}
	



	return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3100
final_rank: 5

code_snippet: #include <bits/stdc++.h>
using namespace std;
#define REP(i, s, n) for (int i = s; i < n; ++i)
#define rep(i, n) REP(i, 0, n)
#define SORT(c) sort((c).begin(), (c).end())
#define IINF INT_MAX
#define LLINF LLONG_MAX
#define DEBUG false
// sort(a.begin(), a.end(), std::greater<int>());

/*
std::vector<std::string> split(const std::string &input, char delimiter)
{
    std::istringstream stream(input);

    std::string field;
    std::vector<std::string> result;
    while (std::getline(stream, field, delimiter))
    {
        result.push_back(field);
    }
    return result;
}
*/
/*
int dfs(int foo, int timer)
{
    //foo is node number
    if (finds[foo].first != -1)
        return timer;
    finds[foo].first = ++timer;
    int result = timer;
    if (data[foo].size() != 0)
    {
        rep(i, data[foo].size())
        {
            result = dfs(data[foo][i], result);
        }
    }
    finds[foo].second = ++result;
    return result;
}
*/

int main()
{
    int n, m;
    while (true)
    {
        cin >> n >> m;
        if (n == 0 || m == 0)
            break;
        vector<string> a;
        vector<int> b;
        rep(i, n)
        {
            string c;
            int d;
            cin >> c >> d;
            a.push_back(c);
            b.push_back(d);
        }
        int ans = 0;
        rep(i, m)
        {
            string num;
            cin >> num;
            rep(j, a.size())
            {
                string foo = a[j];
                rep(k, foo.size())
                {
                    if (foo[k] == '*')
                    {
                        foo[k] = num[k];
                    }
                }
                if (foo == num)
                    ans += b[j];
            }
        }
        cout << ans << endl;
    }
    return 0;
}
accuracy: 1
time_ms: 50
memory_kb: 3148
final_rank: 10

code_snippet: /*
Dear ToM,
Congratulations on your graduation!
You did a great job!
     ☆ﾟ*＠*ﾟ☆
　　(＠*｡☆｡*＠
　 /☆｡*＠ﾟ*☆
▲/／｡＠｡*☆＠*
　▼―ｰ｡*＠ﾟ*☆
*/

#include <bits/stdc++.h>
using namespace std;

#define REP(i,s,n) for(int i=s; i<n; ++i)
#define rep(i,n) REP(i,0,n)
#define SORT(c) sort((c).begin(),(c).end())
#define IINF INT_MAX
#define LLINF LLONG_MAX
#define DEBUG false

typedef long long ll;
typedef pair<int, int> ii;

int main(){
	ll n, m;
	while(cin >> n >> m, n, m){
		ll ans = 0;
		map<string, ll> mp;
		rep(i, n){
			string s;
			ll num;
			cin >> s >> num;
			mp[s] = num;
		}
		rep(i, m){
			string my;
			cin >> my;
			for(auto it:mp){
				bool flag = true;
				rep(j, (int)my.size()){
					if(it.first[j] == '*') continue;
					if(my[j] != it.first[j]){
						flag = false;
						break;
					}
				}
				if(flag) ans += (it.second);
			}
		}
		cout << ans << endl;
	}



	return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3068
final_rank: 3

code_snippet: #include <bits/stdc++.h>
using namespace std;

using ll = long long int;
using P = pair<int, int>;
using P3 = pair<ll,P>;
using PP = pair<P, P>;
constexpr int INF = 1 << 30;
constexpr ll MOD = ll(1e9) + 7;
constexpr int di[] = {0, 1, 0, -1};
constexpr int dj[] = {1, 0, -1, 0};
constexpr double EPS = 1e-8;

bool ok(string &a, string &b){
    bool res = true;
    for(int i=7;i>=0;i--){
        res &= (a[i] == '*' || a[i] == b[i]);
    }
    return res;
}

bool solve(){
    int n, m;
    cin >> n >> m;
    if(n == 0) return true;
    vector<string> s(n), t(m);
    vector<int> c(n);
    for(int i=0;i<n;i++){
        cin >> s[i] >> c[i];
    }
    for(int i=0;i<m;i++){
        cin >> t[i];
    }
    int ans = 0;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(ok(s[j],t[i])){
                ans += c[j];
                break;
            }
        }
    }
    cout << ans << endl;
    return false;
}

int main(){
    while(!solve());
    // int t; cin >> t; for(;t>0;t--) solve();
    return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3220
final_rank: 17

code_snippet: #include<bits/stdc++.h>
using namespace std;

using i64 = int64_t;

int main(){
    int n, m;
    while(cin >> n >> m, n > 0){
        vector<pair<string, int>> v;
        for(int i=0;i<n;++i){
            string s;
            int money;
            cin >> s >> money;
            v.emplace_back(s, money);
        }
        int ans = 0;
        for(int i=0;i<m;++i){
            string b;
            cin >> b;
            for(auto e: v){
                bool flag = true;
                for(int j=0;j<8;++j){
                    if(e.first[j] != '*' && e.first[j] != b[j]){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    ans += e.second;
                    break;
                }
            }
        }
        cout << ans << endl;
    }

    return 0;
}
accuracy: 1
time_ms: 30
memory_kb: 3176
final_rank: 13

code_snippet: #include <iostream>
#include <string>

using namespace std;

int main()
{
    int n,m,sum,c[110],d[110];
    string s[110],b;

    while(cin >> n >> m,n!=0&&m!=0){
        for(int i=0;i<n;i++){
            cin >> s[i] >> c[i];
            d[i] = 0;
            if(s[i].rfind("*") != string::npos) d[i] = s[i].rfind("*")+1;
        }
    
        sum = 0;
        for(int i=0;i<m;i++){
            cin >> b;
            for(int j=0;j<n;j++){
                if(b.substr(d[j],8-d[j]) == s[j].substr(d[j],8-d[j])) sum += c[j];
            }
        }
        cout << sum << endl;
    }
    
    return 0;
}
accuracy: 1
time_ms: 50
memory_kb: 3152
final_rank: 11

code_snippet: #include<iostream>
#include<string>
#include<vector>
using namespace std;

int main(){
  int m,n;
  while(cin >> n >> m,n){
    vector<string> cv;
    vector<string> nv;
    vector<int> iv;
    for(int i=0; i<n; ++i){
      string tmp;
      int num;
      cin >> tmp >> num;
      cv.push_back(tmp);
      iv.push_back(num);
    }                               
    for(int i=0; i<m; ++i){
      string tmp;
      cin >> tmp;
      nv.push_back(tmp);
    }
    int ans = 0;
    for(int i=0; i<n; ++i){
      for(int j=0; j<m; ++j){
        bool frg = true;
        for(int k=0; k<8; ++k){
          if(cv[i][k]!='*' && cv[i][k]!=nv[j][k]){frg = false;}
        }
        if(frg){ans+=iv[i];}
      }
    }
    cout << ans << endl;
  }
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3108
final_rank: 6

code_snippet: #include <bits/stdc++.h>

using namespace std;

int main()
{
  while(1){
    int n,m;
    cin>>n>>m;
    if(n == 0){
      break;
    }

    vector<string> number;
    vector<int> money;
    for(int i = 0;i < n;++i){
      string a;
      int b;
      cin>>a>>b;

      number.push_back(a);
      money.push_back(b);
    }

    vector<string> ticket;
    for(int i = 0;i < m;++i){
      string a;
      cin>>a;

      ticket.push_back(a);
    }

    int sum = 0;
    for(int i = 0;i < number.size();++i){
      int e = 0;
      string c = number.at(i);

      for(int j = 0;j < c.size();++j){
        char d = c.at(j);
        if(d == '*'){
          ++e;
        }
      }
      c.erase(c.begin(), c.begin() + e);

      for(int j = 0;j < ticket.size();++j){
        string f = ticket.at(j);
        f.erase(f.begin(), f.begin() + e);

        if(f == c){
          sum += money.at(i);
        }
      }
    }

    cout<<sum<<endl;
  }

  return 0;
}
accuracy: 1
time_ms: 40
memory_kb: 3176
final_rank: 14

code_snippet: #include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main(){
  int n,m;
  string tnum[100];
  int tv[100];
  string num;
  
  while(cin>>n>>m){
    int sum=0;
    if(n==0 && m==0)
      break;
    
    for(int i=0;i<n;i++){
      cin>>tnum[i]>>tv[i];
    }

    for(int i=0;i<m;i++){
      cin>>num;
      for(int j=0;j<n;j++){
        bool hit=true;
        for(int k=0;k<8;k++){
          if(tnum[j][k]=='*')
            continue;
          if(num[k]!=tnum[j][k])
            hit=false;
        }
        if(hit==true)
          sum+=tv[j];
      }
    }

    cout<<sum<<endl;
  }
}
accuracy: 1
time_ms: 10
memory_kb: 3152
final_rank: 8

code_snippet: #include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
  int n, m;
  vector<string> N, B;
  vector<int> M;

  while(cin >> n, n) {
    cin >> m;

    for(int i = 0; i < n; i++) {
      string str;
      int money;
      cin >> str >> money;
      N.push_back(str);
      M.push_back(money);
    }

    for(int i = 0; i < m; i++) {
      string str;
      cin >> str;
      B.push_back(str);
    }

    int ans = 0;
    for(int i = 0; i < m; i++) {
      for(int j = 0; j < n; j++) {
        int chance = 1;
        for(int k = 0; k < 8; k++) {
          if(N[j][k] != '*') {
            if(N[j][k] != B[i][k]) {
              chance = 0;
              break;
            }
          }
        }
        if(chance == 1)
          ans += M[j];
      }
    }
    cout << ans << endl;
    M.clear();
    N.clear();
    B.clear();
  }
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3168
final_rank: 12

code_snippet: #include<bits/stdc++.h>

using namespace std;

int main(){

  int n,m;

  while(1){

	cin >> n >> m;

	if(n == 0 && m == 0)
	  break;

	vector<string> N(n);
	vector<int> M(n);
	vector<string> B(m);

	for(int i=0;i<n;++i)
	  cin >> N[i] >> M[i];

	for(int i=0;i<m;++i)
	  cin >> B[i];

	int sum = 0;
	
	for(int i=0;i<n;++i){
	  for(int j=0;j<m;++j){
		for(int k=7;k>=0;--k){
		  if(N[i][k] == '*' || (k == 0 && N[i][k] == B[j][k])){
			sum += M[i];
			break;
		  }
		  
		  if(N[i][k] != B[j][k])
			break;
		  
		}
	  }
	}
	cout << sum << endl;
  }

}
accuracy: 1
time_ms: 10
memory_kb: 3228
final_rank: 18

code_snippet: #include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
    int n,m;
    while(cin >> n >> m,n){
        vector<string> s(n);
        vector<int> num(n);
        for(int i = 0; i < n; i++)cin >> s[i] >> num[i];
        int ans = 0;
        while(m--){
            string t;
            cin >> t;
            for(int i = 0; i < n; i++){
                bool c = true;
                for(int j = 0; j < 8; j++){
                    if(s[i][j] != '*' && t[j] != s[i][j])c = false;
                }
                if(c)ans += num[i];
            }
        }
        cout << ans << endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 3128
final_rank: 7

code_snippet: #define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define FOR(i, m, n) for(int i=(m); i<(n); ++i)
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define mp make_pair
#define pb push_back
#define Cout(x) cout << (x) << endl
#define Cout2(x, y) cout << (x) << " " << (y) << endl
#define dump(x) cerr << #x << " = " << (x) << endl;
typedef long long LL;
typedef vector<int> VI;
typedef vector<LL> VL;
typedef vector<string> VS;
typedef vector<bool> VB;
typedef vector<vector<int>> VVI;
typedef pair<int, int> PII;
const int inf = 1e9;
const double pi = acos(-1.0);

bool Check(string a, string b) {
	bool ret = true;
	for (int i = 7; i >= 0 && a[i] != '*'; i--) {
		if (a[i] != b[i])ret = false;
	}
	return ret;
}

int main() {
	int n, m;
	while (cin >> n >> m && (n || m)) {
		VS n2(n), b(m); VI m2(n);
		rep(i, n)cin >> n2[i] >> m2[i];
		rep(i, m)cin >> b[i];

		int ans = 0;
		rep(i, n) {
			rep(j, m)ans += Check(n2[i], b[j])*m2[i];
		}
		Cout(ans);
	}
}
accuracy: 1
time_ms: 60
memory_kb: 3172
final_rank: 15

code_snippet: #include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
bool f(string a, string b) {
	for (int i = 0; i < 8; i++)if (a[i] != '*'&&a[i] != b[i])return 0; return 1;
}
string p[123]; int q[123];
signed main() {
	while (1) {
		int n, m, sum = 0;
		cin >> n >> m;
		if (!n)return 0;
		for (int i = 0; i < n; i++)cin >> p[i] >> q[i];
		for (int i = 0; i < m; i++) {
			string k; cin >> k;
			for (int j = 0; j < n; j++)if (f(p[j], k))sum += q[j];
		}
		cout << sum << endl;
	}
}
accuracy: 1
time_ms: 60
memory_kb: 3136
final_rank: 9

code_snippet: #include <bits/stdc++.h>
using namespace std;

int n,m;
string N[101];
int M[101];
string B[1001];

int main(){
	while(cin >> n >> m, n != 0 && m != 0){
		for(int i = 0; i < n; i++){
			cin >> N[i] >> M[i];
		}
		for(int i = 0; i < m; i++){
			cin >> B[i];
		}
		
		int score = 0;
		for(int i = 0; i < m; i++){  // B
			for(int j = 0; j < n; j++){  // N,M
				bool f = true;
				for(int k = 0; k < 8; k++){
					if(N[j][k] != B[i][k] && N[j][k] != '*'){
						f = false;
						break;
					}
				}
				if(f){
					score += M[j];
					break;
				}
			}
		}
		cout << score << endl;

	}

	return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 3052
final_rank: 2