传送门:题目传送门
大体题意:
给你n 场oj的比赛,告诉你每一次比赛的名字,和每一次比赛总共的题数,在告诉你他的做题情况 打出一个表来!
思路:
这个题目坑不多,也不是很难,但自己就是没有做出来,通过这个题目自己长了不少教训!!!!
思路很简单了,建立一个结构体,有标题,和总体数,和每一道题目是否做出来,-1表示没做,0 表示做错,1表示AC,最后统计即可!
教训:
1. 首先对于字符串有空格的情况,scanf之后gets之前虽然要加getchar,但是一定要统揽全局来看,因为有的样例 不循环,导致循环之内的scanf 没有运行,就会因为少了一个getchar出错!
对于这种情况 很简单, 直接每次scanf后加上%*c即可! 可以吃掉回车,这样可以紧接着写gets!
2. 不用gets,用getline 或者fgets 尽量用fgets!
为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常严重!
fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。
之前就是一道题目因为用了gets 怎么改都是WA 换了fgets AC了!!!
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<set>
#include<stack>
#include<queue>
#include<sstream>
#define fout freopen("out.txt","w",stdout)
#define fi first
#define se second
#define mr make_pair
using namespace std;
const int maxn = 1000 + 10;
struct Node{
string title;
int y,d,m;
int ok[26];
int sum;
void init(){
memset(ok,-1,sizeof ok);
y = d = m = 0;
title = "";
}
}p[107];
char ans[107];
int main(){
int n;
scanf("%d%*c",&n);
for (int kase = 0; kase < n; ++kase){
p[kase].init();
getline(cin,p[kase].title);
scanf("%d.%d.%d%*c",&p[kase].d,&p[kase].m,&p[kase].y);
int m,q;
scanf("%d %d%*c",&m,&q);
p[kase].sum = m;
char cmd[5];
for (int i = 0; i < q; ++i){
scanf("%s%*c",cmd);
fgets(ans,maxn,stdin);
cmd[0] = toupper(cmd[0]);
int id = cmd[0] - 'A';
if (ans[0] == 'A')p[kase].ok[id] = 1;
else if (p[kase].ok[id] <= 0)p[kase].ok[id] = 0;
}
}
printf("+------------------------------+--------+-------------+\n");
printf("|Contest name |Date |ABCDEFGHIJKLM|\n");
for (int i = 0; i < n; ++i){
printf("+------------------------------+--------+-------------+\n");
printf("|%s",p[i].title.c_str());
int len = p[i].title.length();
for (int i = len; i < 30; ++i)printf(" ");
printf("|%02d.%02d.%02d|",p[i].d,p[i].m,p[i].y);
int en = 'M'-'A'+1;
for (int j = 0; j < p[i].sum; ++j){
if (p[i].ok[j] == 1)printf("o");
else if (p[i].ok[j] == 0)printf("x");
else printf(".");
}
for(int j = p[i].sum; j < en; ++j)printf(" ");
puts("|");
}
printf("+------------------------------+--------+-------------+\n");
return 0;
}
2073. Log Files
Memory limit: 64 MB
Input
Output
Sample
input | output |
---|---|
2 Codeforces Gamma Round 512 29.02.16 5 4 A Accepted B Accepted C Accepted E Accepted URKOP 17.10.15 12 11 A Accepted B Wrong Answer B Time Limit Exceeded J Accepted B Accepted J Time Limit Exceeded J Accepted F Accepted E Runtime Error H Accepted E Runtime Error | +------------------------------+--------+-------------+ |Contest name |Date |ABCDEFGHIJKLM| +------------------------------+--------+-------------+ |Codeforces Gamma Round 512 |29.02.16|ooo.o | +------------------------------+--------+-------------+ |URKOP |17.10.15|oo..xo.o.o.. | +------------------------------+--------+-------------+ |
Problem Source: Ural Regional School Programming Contest 2015
All submissions (1735) All accepted submissions (590) Solutions rating (431)