今天的题目总的来说不难,就是想法的问题,自己各种傻逼啊。
A. Marks
这道题目就是就是,自己煞笔了,当时思维太乱了,总想着每一个人的每一科目都和其他人的比,逻辑太乱。就是让
你判断每一个人是不是拥有至少每一科目当中的最高分。每一次统计一次最高分,再拿给每一个人判断,是的话就标
记一下。擦,自己太SB了:
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
char sp[105][105];
int vis[105];
int main()
{
int n,m;
cin >> n >>m;
memset(vis,0,sizeof(vis));
for(int i = 1; i<=n; i++)
for(int j=1; j<=m; j++)
cin >> sp[i][j];
int num;
for(int i = 1; i <= m; i++)
{
num = 0;
for(int j = 1; j<=n; j++)
if((sp[j][i]-'0') >= num)
num =(sp[j][i]-'0');
for(int j = 1; j <= n; j++)
if((sp[j][i]-'0') >= num)
vis[j]=1;
}
int s=0;
for(int i=1; i<=n; i++)
if(vis[i])
s++;
cout << s <<endl;
return 0;
}
B. Steps
这道题目就是一个向量,给你开始的位置,选择一个方向后,沿着这个方向一直走到不能走为止,在选择下一个向量
。移动步数可以为0。问最多可以移动多少步?
直接选择一个方向,判断一下是不是x,y同时移动,是的话就直接取最小值移动。当然,考虑一下x和y的正负问题。
向上就移动到n和m,向下就移动到1.过掉所有的向量就可以了。
自己想直接选一个一次一个向量的向前移动,毫不犹豫的T了。太水了:
#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
using namespace std;
#define NP 1000000001
#define N 10004
int n, m, k;
int dirx[N], diry[N];
int x, y;
int main()
{
cin >> n >> m;
cin >> x >> y;
cin >> k;
for(int i = 0; i < k; ++i)
scanf("%d%d", &dirx[i],&diry[i]);
__int64 cnt = 0;
int dx,dy;
for(int i = 0; i < k; ++i)
{
if(dirx[i] < 0)//判正负
dx = x - 1;
if(dirx[i] > 0)
dx = n - x;
if(diry[i] < 0)
dy = y - 1;
if(diry[i] > 0)
dy = m - y;
int mx = -1;
int my = -1;
if(dirx[i] != 0)
mx = abs(dx / dirx[i]);
if(diry[i] != 0)
my = abs(dy / diry[i]);
if(mx == -1)//但Y移动
{
cnt += my;
y += my * diry[i];
}
else if(my == -1)//单X移动
{
cnt += mx;
x += mx * dirx[i];
}
else//同时移动取最小
{
int tp = min(mx, my);
cnt += t;
x += t * dirx[i];
y += t * diry[i];
}
}
printf("%I64d\n", cnt);
return 0;
}
C. Pocket Book
排列组合问题,每一位可以有多少种选择。各位相乘就可以了。找出可以组出的不同字符串:#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
using namespace std;
#define N 1000000007
int n, m;
char sp[111][111];
int vis[100];
int main()
{
cin >> n >> m;
__int64 sum = 1;
for(int i=0; i<n; i++)
scanf("%s", sp[i]);
for(int j = 0; j < m; j ++)
{
memset(vis, 0,sizeof(vis));
int cnt = 0;
for(int i = 0; i < n; i++)
{
if(vis[sp[i][j] - 'A'] == 0)
{
cnt ++;
vis[sp[i][j] - 'A'] = 1;
}
}
//cout << cnt <<endl;
sum = sum * cnt % N;
}
cout << sum << endl;
return 0;
}
自己太水了.....