Sichuan University Programming Contest 2011 Preliminary(for Non-SCUers) / A Course

返回目录

 

题目大意:  输入一些课程和对应的成绩,假设是按时间发展顺序。求重修成功(即同一课程,后一次比前面的最大成绩大的情况)次数。

 

题目类型:  模拟

 

题目分析: 虽然是水题,但是不注意细节还是很容易WA。注意点吧。

另外,既然是水题,做的时候就不要轻易放弃它,相信可能错的地方就那么几点,静下心来,逐一排查 。

 

代码 :

 

#include<cstdio> #include<cstring> using namespace std; #define MAXN 102 #define MAXM 32 struct course { int score; char name[MAXM]; } a[MAXN]; int main() { int t; scanf("%d", &t); while(t--) { int num=0; int ans = 0; int n; scanf("%d", &n); while(n--) { int find = 0; course t; scanf("%s%d", t.name, &t.score); for(int i=0; i<num; i++) if(!strcmp(t.name, a[i].name)) { if(t.score>a[i].score) { a[i].score = t.score; //更新最大 ans++; } find = 1; break; } if(!find) { //a[num].name = t.name; strcpy(a[num].name, t.name); a[num++].score = t.score; } }// Ncase printf("%d/n", ans); }//Tcase }

 官方的两个标程序:

值得学习的地方是STL map 的使用。

#include<cstdio> #include<algorithm> // #include<map> #include<iostream> #include<string> using namespace std; inline int Rint(){ int x; scanf("%d", &x); return x; } map< string, int > hash; //hash 查找表, 字符串->整型(映射) int main() { int Tcase = Rint(); while( Tcase -- ) { int n = Rint(); int ans = 0; hash.clear(); while( n -- ) { char str[100]; scanf("%s", str); int v = Rint(); if( hash.find(str) == hash.end() ) //没找到 { hash[str] = v; //注意map用法 } else { if( v > hash[str] ) { ++ ans; hash[str] = v; } } } printf("%d/n", ans); } return 0; }

#include <stdio.h> #include <map> #include <string> using namespace std; map<string, bool> sub; map<string, int> s; int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); int T, i, n, ans, score; char name[50]; scanf("%d", &T); while (T--) { scanf("%d", &n); ans=0; sub.clear(); s.clear(); for (i=0; i<n; i++) //!结构有点乱 { scanf("%s%d", name, &score); if (sub[name]) if (score>s[name]) ans++; sub[name]=true; if (score>s[name]) s[name]=score; //找不到的话,s[name] 返回0 } printf("%d/n", ans); } return 0; }

 

你可能感兴趣的:(struct,String)