第一场训练赛,打之前去交大历险记玩了一圈,在罚时上有点多,但结果还可以(除了C题完全理解错了题意没有做出来以外),整体上难度不是很大没有用什么算法,大部分通过暴力以及一些数学方法就可以解决
描述
在某次ACM比赛中,一共有8道题,分别是A, B, C… H题。题目难度随机分布,最终成绩与AC数目和时间都有关系,具体的排名计算规则如下:若两人AC题目个数不同,则AC题目数多的人排名更靠前;若两人AC题目一样多,则罚时少的人排名更靠前。罚时为:从比赛开始计时,在所有AC的题目中,第一次AC的时间(分钟)+20(分钟)×该题错误提交的次数(编译错误"Compile Error" 不算罚时)。
如:某人在比赛开始 12分时A题 “Compile Error” 24分时A题 “Wrong Answer” 36分时A题"Accepted" 48分时B题"Time Limit Exceeded" 60分时E题"Accepted" 72分钟时B题 “Accepted” 84分时F题"Wrong Answer" 96分时F题"Wrong Answer" 108分时F题"Wrong Answer"。则此人AC题目数量为3题, 总罚时为 20+36+20+60+72=208分
输入
多组测试数据,第一行一个整数T(1<=T<=100),表示包含t组测试数据
每组测试数据第一行包含一个整数n(1<=n<=1000),表示n条提交记录
接下来n行,每行包含一个整数t(0<=t<=300)表示提交时间,一个字符 ch(‘A’ <= ch <= ‘H’)表示提交题号 和一个字符串 str 表示某次提交结果。"Accepted"表示该题正确通过(即AC); "Wrong Answer"表示该题答案错误; "Time Limit Exceeded"表示程序运行时间超出规定时间; "Runtime Error"表示程序运行时发生错误,可能是数组访问越界,除零错误,栈溢出等; “Compile Error” 表示程序编译没有通过; “Memory Limit Exceeded” 表示程序使用内存过多。在错误提交之中,只有 "Compile Error"不计入罚时
输出
每组数据输出一行,包含两个整数a, b 表示AC题目数量和总罚时
比较水的A题,输出包括两个一个AC的题目数量一个是罚时,只需要统计一下Accepted的次数,并记录一下出错的次数,在AC的时候增加一下罚时,不过要注意在评测机不能用gets输入,可以用string头文件里的getline (cin,str);输入
#include
#include
#include
#include
using namespace std;
int T,n,sum = 0,pp = 0;
int a[100];
string str;
int main() {
cin>>T;
while(T--) {
cin>>n;
memset(a,0,sizeof(a));
sum = 0, pp = 0;
for(int i = 1; i <= n; i++) {
int time;
char ch;
scanf("%d %c",&time,&ch);
getline (cin,str);
if(str[1] == 'A') {
sum++;
pp += time + a[ch - 'A' + 1] * 20;
}
else if(str[1] == 'C') continue;
else a[ch - 'A' + 1]++;
}
cout<
描述
在某次ACM比赛中,一共有8道题,分别是A, B, C… H题。题目难度随机分布,最终成绩与AC数目和时间都有关系,所以先做简单的题目便成了很多人的选择。为了方便起见,我们认为某题被AC的人数越多,则该题越简单。现给出n条提交记录,试找出最简单的题。
输入
多组测试数据,第一行一个整数t(1<=t<=100),表示包含t组测试数据
每组测试数据第一行包含一个整数n(1<=n<=1000),表示n条提交记录
接下来n行,每行包含一个字符 ch(‘A’ <= ch <= ‘H’) 和一个字符串 str 表示某次提交信息。ch表示此次提交题目题号,str表示提交结果:"Accepted"表示该题正确通过(即AC); "Wrong Answer"表示该题答案错误; "Time Limit Exceeded"表示程序运行时间超出规定时间; "Runtime Error"表示程序运行时发生错误,可能是数组访问越界,除零错误,栈溢出等; “Compile Error” 表示程序编译没有通过; “Memory Limit Exceeded” 表示程序使用内存过多
输出
每组数据输出一行,包含一个字符表示八道题中最简单的题。若多题一样简单,则输出那个最小的题号。
同样水的B题,AC越多,题越简单。统计每个题AC的次数就知道哪个最简单
#include
#include
#include
#include
using namespace std;
int T,n;
int a[100];
char p;
string str;
int main() {
cin>>T;
while(T--) {
cin>>n;
memset(a,0,sizeof(a));
for(int i = 1; i <= n; i++) {
cin>>p;
getline (cin,str);
if(str[1] == 'A') {
a[p - 'A' + 1]++;
}
}
int maxx = 0,tot = 1;
for(int i = 1; i <= 8; i++) {
if(a[i] > maxx) {
maxx = a[i];
tot = i;
}
}
char tt = (char)tot + 'A' - 1;
cout<
让我自闭的一道题,原因是完全没有看懂题目的意思,我垃圾的英语水平再一次拖累了我
其实很简单,就是统计有i个鞍点的矩阵数,最后求和。在求和时就会发现,其实结果就是矩阵的所有情况!!!!/喷血
#include
#include
using namespace std;
const int mod = 1000000007;
int T,n,m,k;
long long sum;
int main() {
cin>>T;
while(T--) {
cin>>n>>m>>k;
sum = 1;
for(int i = 1; i <= m * n; i++) {
sum = (sum * k) % mod;
}
cout<
比较x的y次方和y的x次方的大小,考虑到时间限制以及数据的范围,不能暴力求两数的值,可以通过两边取对数然后比较,可以直接用math库中的log直接比较
#include
#include
#include
using namespace std;
int a,b;
int main() {
while(scanf("%d",&a) != EOF) {
scanf("%d",&b);
if((double)a * log(b) > (double)b * log(a)) cout<<'<'<'<
大体意思是有几个单词的价值可以共享,求一个最小的价值,所以可以对可以共享的价值取min,更新每个单词的价值,然后根据最后信息的内容求一个min值
最开始一直在最后找每个单词价值时一直超时,用map来存一下来减少运行时间
#include
#include
#include
#include
#include
题意对一个数字,去掉几位数之后,剩下的数是否是一个平方数
首先用map把所有小于2e9的平方数存下来,然后通过暴力的方法将所有情况枚举出来,看是否存在平方数
#include
#include
#include
#include
emmm 怎么说这个题,在无疑之中做了出来
首先可以发现对于每两个可以相互跳的点,可以来回跳4次,而且只在这两个点相互跳时最优(不要问我为什么我也不知道)
所以只要能够统计所有可以跳的点之间的倍数之和,乘一个4倍就可以了
#include
#include
using namespace std;
int T;
int n;
int a;
int main() {
cin>>T;
while(T--) {
cin>>n;
a = 0;
for(int i = 2; i <= n; i++) {
for(int j = 2; j <= n; j++) {
if(i * j <= n) a+=j;
else break;
}
}
cout<