不算太难。就是题目有歧义。
wa了好几次才发现。上一天要是小于8的话。结算是昨天一个负值在加上今天课时数。再减去8。233.。。。
而不是上一天小于8个小时。就清零了。。大家要注意(ps:题解第一遍完美的没过233.。。。)
直接上题解
#include<iostream>//头文件。。有点多哈。 #include<stdio.h> #include<string.h> #include<algorithm> #include<cmath> using namespace std; int a[3500],b[3500],c[3500];//c用于保存a+b int n,last,ans;//last是上一天结算。ans是到此天为止的累计。 int main() { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&a[i],&b[i]); c[i]=a[i]+b[i]; }//输入,不解释。 for(int i=0;i<n;i++) { last=last+c[i]-8; /*结算,后面一个last保存的上一天剩下来的不开心程度(会有负值!!!) 前面的last是今天上完了课后剩下的不开心程度*/ ans=ans+last;//统计截止到第i天的不开心程度的和。 } printf("%d",ans);//输出 return 0;//程序拜拜 }