标签:
一年半没碰代码,手生是自然的。暑假打算泛刷hduoj,当作调整和复习。
(以下是正文)
水题(迷之AC率),交了6次才过。主要原因是因为我忘了scanf()不返回1,以至于自己乱搞搞就花式TLE了。改成cin就AC了。下次注意恩
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int x,y;
int main(){
while(cin>>x>>y){
cout<<x+y<<endl;
}
return 0;
}
水题,注意一下signed int
#include<cstdio>
#include<iostream>
using namespace std;
int x,y;
signed int sum;
int main(){
while(cin>>x){
sum=0;
for(int j=1;j<=x;j++) sum+=j;
cout<<sum<<endl<<endl;
}
return 0;
}
裸高精加。有点遗忘,但还好高精都是用模拟理解,很快就想起来了。
交了好几次才过,被卡的原因有两点:
1.误以为头文件中的string和cstring是同个东西。只打了cstring,dev-c++没报错,但是交上去CE了。中间找了一些学长请教了一下,尴尬....
2.交了几次PE了,这题输出有点坑(可能是很久没写题的缘故)。最后一行答案,不可以外加空行。(1003也有这个问题,还好前面有1002铺垫)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int a[1001],b[1001],c[1001],n,m,len,len1,len2;
string s1,s2;
void solve1(int len){
memset(a,0,sizeof(a));
for(int i=1;i<=len;i++) a[i]=s1[len-i]-‘0‘;
}
void solve2(int len){
memset(b,0,sizeof(b));
for(int i=1;i<=len;i++) b[i]=s2[len-i]-‘0‘;
}
void jia(){
memset(c,0,sizeof(c));
m=0;
for(int i=1;i<=len;i++){
c[i]+=a[i]+b[i]+m;
m=c[i]/10;
c[i]%=10;
}
if(c[len+1]) len++;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>s1>>s2;
len1=s1.length();
solve1(len1);
len2=s2.length();
solve2(len2);
if(len1>len2) len=len1; else len=len2;
jia();
printf("Case %d:\n",i);
cout<<s1<<" + "<<s2<<" = ";
for(int j=len;j>=1;j--) printf("%d",c[j]);
printf("\n");
if(i!=n) printf("\n");
}
return 0;
}
最大子序列和裸题。
这个是真忘了,或者以前没学到过(毕竟动规太烂)。刚开始先打了个暴力O(N2),结果被卡了。只好去找找动规怎么打(毕竟动规这种东西,用脑子硬想怎么想得出来嘛)
然后发现还挺好理解的(注释如下)
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,sum,Begin,End,s,B,E;//Begin,End是最终的起始结尾,B,E则为暂时的
int a[1000001];
void Maxsum(){
Begin=0;
End=0;
sum=s=-99999;
for(int i=1;i<=m;i++){
if(s<0){ //处理一下负数的情况
if(a[i]>s){
s=a[i];
B=E=i;
if(sum<s){
Begin=B;
End=E;
sum=s;
}
}
}
else{ //转移
s+=a[i];
E=i;
if(sum<s){
sum=s;
Begin=B;
End=E;
}
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&m);
memset(a,0,sizeof(a));
for(int j=1;j<=m;j++) scanf("%d",&a[j]);
Maxsum();
printf("Case %d:\n",i);
printf("%d %d %d\n",sum,Begin,End);
if(i!=n) printf("\n");
}
return 0;
}
其实我觉得这不太像动规?
= =希望以后自己能回头看看这题吧,我觉得动规是我的硬伤,动态方程写不出来啊,过程不理解啊.....
rank94795
6/25
晚安
标签:
原文地址:http://www.cnblogs.com/polebug23/p/5617230.html