1006 sign in and sign out
很简单的一次遍历搜索
刚开始最后一个没过,想到只是no more than 可能等于15,char数组最后一个需要存放’\0’,因此改为16,成功ac
(看到可以时间转换为秒再进行比较,确实简单许多
#include<stdio.h>
#include<string.h>
int main() {
int num;
scanf("%d",&num);
char name[16];
int hour,minute,second;
int ansh=24,ansm=24,anss=24;
int maxh=0,maxm=0,maxs=0;
char lock[16],unlock[16];
for(int i = 0;i < num;i++) {
scanf("%s",name);
scanf("%d:%d:%d",&hour,&minute,&second);
if(hour < ansh){
ansh = hour;
strcpy(unlock, name);
}
else if(hour == ansh && minute < ansm) {
ansm = minute;
strcpy(unlock, name);
}
else if(hour == ansh && minute == ansm && second < anss) {
anss = second;
strcpy(unlock, name);
}
scanf("%d:%d:%d",&hour,&minute,&second);
if(hour > maxh){
maxh = hour;
strcpy(lock, name);
}
else if(hour == maxh && minute > maxm) {
maxm = minute;
strcpy(lock, name);
}
else if(hour == maxh && minute == maxm && second > maxs) {
maxs = second;
strcpy(lock, name);
}
}
printf("%s %s\n",unlock,lock);
}
1007 maximum subsequence sum
典型的动态规划
但是刚开始没考虑到最大子序列和为0的情况,导致测试点5一直无法通过。
因为刚开始ans置0,如果都没有大于它的,那么元素下标不会改变,因此输出还是第一个元素以及最后一个元素。
所以还是需要刚开始将ans置为负数,但是这时如果都是负数,那么ans不会更新,因此后面还需要增加一个判断其是否小于0的条件
#include<stdio.h>
#include<stdlib.h>
int main() {
int k;
scanf("%d",&k);
int *seq;
seq = (int *)malloc(sizeof(int)*k);
int ans = -1;
int sum = 0;
int m = 0,n = k-1;
int temp = 0;
for(int i = 0; i < k; i++) {
scanf("%d",&seq[i]);
sum += seq[i];
if(sum > ans) {
ans = sum;
n = i;
m = temp;
}
else if(sum < 0) {
sum = 0;
temp = i + 1;
}
}
if(ans < 0) {
ans = 0;
}
printf("%d %d %d\n",ans,seq[m],seq[n]);
}