codeforces #577(Div.2)

A  Important Exam

A class of students wrote a multiple-choice test.

There are nn students in the class. The test had mm questions, each of them had 55 possible answers (A, B, C, D or E). There is exactly one correct answer for each question. The correct answer for question ii worth aiai points. Incorrect answers are graded with zero points.

The students remember what answers they gave on the exam, but they don't know what are the correct answers. They are very optimistic, so they want to know what is the maximum possible total score of all students in the class.

Input

The first line contains integers nn and mm (1≤n,m≤10001≤n,m≤1000) — the number of students in the class and the number of questions in the test.

Each of the next nn lines contains string sisi (|si|=m|si|=m), describing an answer of the ii-th student. The jj-th character represents the student answer (A, B, C, D or E) on the jj-th question.

The last line contains mm integers a1,a2,…,ama1,a2,…,am (1≤ai≤10001≤ai≤1000) — the number of points for the correct answer for every question.

Output

Print a single integer — the maximum possible total score of the class.

Examples

input

2 4
ABCD
ABCE
1 2 3 4

output

16

input

3 3
ABC
BCD
CDE
5 4 12

output

21

Note

In the first example, one of the most optimal test answers is "ABCD", this way the total number of points will be 1616.

In the second example, one of the most optimal test answers is "CCC", this way each question will be answered by exactly one student and the total number of points is 5+4+12=215+4+12=21.

题意:学生考完试后想算成绩,但他们不知道正确答案,只是每个人都记住了自己填写的答案,最后一行输入每个题目如果正确的话其得分为多少。让你算一下答案由你来决定的话,它们总分最多是多少,输出这个总分即可。每道题目最多有五个选项。

思路:算出每个题中选项最多的答案数量,再乘以改题正确的分数。代码如下:

#include <bits/stdc++.h>
#define LL long long
using namespace std;
int const maxn=1001;
struct node{
string a;
}q[maxn];
int main()
{
int n,k,x;
LL sum=0;
int s[5];
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++){
cin>>q[i].a;
}
for(int i=0;i<k;i++){
scanf("%d",&x);
memset(s,0,sizeof(s));
for(int j=0;j<n;j++){
if(q[j].a[i]=='A')s[0]++;
if(q[j].a[i]=='B')s[1]++;
if(q[j].a[i]=='C')s[2]++;
if(q[j].a[i]=='D')s[3]++;
if(q[j].a[i]=='E')s[4]++;
}
sum+=x*max(s[0],max(s[1],max(s[2],max(s[3],s[4]))));
}
cout<<sum<<endl;
return 0;
}

B.Zero Array

You are given an array a1,a2,…,ana1,a2,…,an.

In one operation you can choose two elements aiai and ajaj (i≠ji≠j) and decrease each of them by one.

You need to check whether it is possible to make all the elements equal to zero or not.

Input

The first line contains a single integer nn (2≤n≤1052≤n≤105) — the size of the array.

The second line contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1091≤ai≤109) — the elements of the array.

Output

Print "YES" if it is possible to make all elements zero, otherwise print "NO".

Examples

input

4
1 1 2 2

output

YES

input

6
1 2 3 4 5 6

output

NO

Note

In the first example, you can make all elements equal to zero in 33 operations:

  • Decrease a1a1 and a2a2,
  • Decrease a3a3 and a4a4,
  • Decrease a3a3 and a4a4

In the second example, one can show that it is impossible to make all elements equal to zero.

题意: 输入一组数,每次选其中两个数,使这两个数都减一。输入的数能否全都减为0。能的话输出“YES”,不能的话输出“NO”。

思路:计算所有数的和,和为奇数肯定不行,和为偶数有可能。但当某个数比其他所有数的和都大时也不行。代码如下:

#include <bits/stdc++.h>
#define LL long long
using namespace std;
int const maxn=100001;
bool cmp(int a,int b){return a>b;}
int main(){
int n;
int a[maxn];
LL sum=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
sum+=a[i];
}
sort(a,a+n,cmp);
if(sum%2==0&&sum-a[0]>=a[0])printf("YES\n");
else printf("NO\n");
return 0;
}

最新文章

  1. 网络抓包wireshark(转)
  2. Android 进程常驻----开机广播的简单守护以及总结
  3. WPS for Linux,系统缺失字体
  4. Enterprise Architect的共享Respository设置,postgresql数据库
  5. No bean named &#39;transactionManager&#39; is defined
  6. service name和SID的区别
  7. 实现自己的脚本语言ngscript之零
  8. python3 遍历文件
  9. CSS动画:Transform中使用频繁的scale,rotate,translate动画
  10. FilenameUtils工具类
  11. IOS 学习笔记(6) 控件 文本域(UITextField)的使用方法
  12. ios 视频/图片压缩
  13. js实现点击切换显示隐藏,点击其它位置再隐藏
  14. Tomcat 控制台UTF-8乱码问题
  15. python构造栈结构
  16. Oracle jdk 历史版本官方下载地址及下载方法
  17. [Asp.Net web api]基于自定义Filter的安全认证
  18. ReactNative 调用手机地图(高德、百度)导航 Android
  19. HDU 4498 Function Curve (分段,算曲线积分)
  20. Ubuntu下单网卡多IP地址的配置

热门文章

  1. 设置VMware中Kali 共享文件夹
  2. Codeforces Round #303 (Div. 2)(CF545) E Paths and Trees(最短路+贪心)
  3. FFMPEG+SDL实现视频播放器
  4. 201871010109-胡欢欢《面向对象程序设计(java)》第八周学习总结
  5. html基础内容
  6. 多个页面进行爬虫 pycharm
  7. es启动失败
  8. linux数据库中使用MD5加密
  9. [BJOI2019]光线(DP)
  10. Elasticsearch由浅入深(五)_version乐观锁、external version乐观锁、partial update、groovy脚本实现partial update