A题:Marks
水题,直接上代码:
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <iomanip>
#include <map>
#include <climits>
#include <set>
#include <vector>
using namespace std;
int main()
{
int n , m , sum = 0 ;
cin >> n >> m ;
string s[111] ;
for(int i = 0 ; i < n ; i ++)
{
cin >> s[i] ;
}
int i , j ;
for(i = 0 ; i < n ; i ++)
{
for(j = 0 ; j < m ; j ++)
{
int tmp = 1 ;
for(int k = 0 ; k < n ; k ++)
{
if(s[i][j] < s[k][j])
tmp = 0 ;
}
if(tmp)
{
sum ++ ;
break ;
}
}
}
cout << sum << endl ;
return 0;
}
B题:steps
这道题就是模拟每次取出一个向量能走的最大的步数。需要注意的是要考虑dx , dy的符号问题,所以需要分情况讨论。
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <iomanip>
#include <map>
#include <climits>
#include <set>
#include <vector>
using namespace std;
int main()
{
long long n , m ,sum = 0 , i ;
long long x , y , k , a ,b ;
scanf("%I64d%I64d" , &n , &m) ;
scanf("%I64d%I64d" , &x , &y) ;
scanf("%I64d" , &k) ;
for(i = 0 ; i < k ; i ++)
{
scanf("%I64d%I64d" , &a , &b) ;
int p , q ;
if(a < 0)
{
p = (1 - x) / a ;
}
else if(a > 0)
{
p = (n - x) / a ;
}
else
{
p = 1000000000 ;
}
if(b < 0)
{
q = (1 - y) / b ;
}
else if(b > 0)
{
q = (m - y) / b ;
}
else
{
q = 1000000000 ;
}
long long w = min(p , q) ;
sum += w ;
x += a * w ;
y += b * w ;
}
cout << sum << endl ;
return 0 ;
}
C题:Pocket Book
这题就是字符串之间的字母可以交换,但是能在相同的位置交换,问能组成多少个不同的字符串?
其实就是求每列有多少个不同的字母,然后将每列不同字母的个数相乘。
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <string>
#include <cstring>
#include <queue>
#include <stack>
#include <iomanip>
#include <map>
#include <climits>
#include <set>
#include <vector>
#define N 1000000007
using namespace std;
int main()
{
long long n , m , ans = 1 , t , i , j , k ;
string s[111] ;
cin >> n >> m ;
for(i = 0 ; i < n ; i ++)
cin >> s[i] ;
for(i = 0 ; i < m ; i ++)
{
for(k = 0 , t = n ; k < n ; k ++)
{
for(j = 0 ; j < k ; j ++)
{
if(s[k][i] == s[j][i])
{
t -- ;
break ;
}
}
}
ans = ans * 1ll * t % N ;
}
cout << ans << endl ;
return 0 ;
}