今天的题目总的来说不难,就是想法的问题,自己各种傻逼啊。
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; }
自己太水了.....