day3:选拔赛2
开始就觉得是贪心就行,原来就是一道完全背包的裸题啊,明天再去补补吧,不然上午估计得起不来了
一道水题,但是还是WA了一发,因为没有考虑到,第一个数是0,但是并不是表示结束标识,感觉这道题如果不是老师前两天提过一下,还不会这么快有思路,直接用个栈即可,但是就是有空格需要处理
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<stack>
#include<cmath>
using namespace std;
int main()
{
double num;
char ch;
while(~scanf("%lf",&num))
{
stack<double>sta;
ch=getchar();
if(num==0&&ch=='\n')
break;
sta.push(num);
scanf("%c",&ch);
getchar();
double x;
while(~scanf("%lf",&num))
{
if(ch=='*')
{
x=sta.top();
sta.pop();
num=num*x;
sta.push(num);
}
else if(ch=='/')
{
x=sta.top();
sta.pop();
num=x/num;
sta.push(num);
}
else if(ch=='+')
{
sta.push(num);
}
else if(ch=='-')
{
num=0-num;
sta.push(num);
}
if(getchar()=='\n')
break;
ch=getchar();
}
num=0;
while(!sta.empty())
{
num+=sta.top();
sta.pop();
}
printf("%.2lf\n",num);
}
return 0;
}
F题:poj 2586:Y2K Accounting Bug
感觉应该不难,但是居然题目都没看懂是啥意思
明天一定得补了
显然会爆long long 于是直接用字符串存即可,可惜还是出了点问题,没考虑最后一位进位相加,导致WA了一发
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll long long
using namespace std;
char str[1010][100010];
char s[100010];
void fx(char s1[],char s2[],int i)
{
int len1=strlen(s1);
int len2=strlen(s2);
int num;
int bit=0;
int t=0;
while(len1>0&&len2>0)
{
num=(s1[len1-1]-'0')+(s2[len2-1]-'0')+bit;
bit=num/10;
num=num%10;
s[t++]=num+'0';
len1--;
len2--;
}
if(len1>0)
{
while(len1>0)
{
num=s1[len1-1]-'0'+bit;
bit=num/10;
num=num%10;
s[t++]=num+'0';
len1--;
}
}
else if(len2>0)
{
while(len2>0)
{
num=s2[len2-1]-'0'+bit;
bit=num/10;
num%=10;
s[t++]=num+'0';
len2--;
}
}
if(bit!=0)
s[t++]=bit+'0';
s[t]='\0';
int m=0;
for(int j=t-1;j>=0;j--)
{
str[i][m++]=s[j];
}
str[i][m]='\0';
}
int main()
{
strcpy(str[1],"1");
strcpy(str[2],"1");
for(int i=3;i<=1000;i++)
{
fx(str[i-1],str[i-2],i);
}
int t;
int n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%s\n",str[n]);
}
return 0;
}
I题:hdu 1106:排序
一道可以说是模拟题,但是也不算是模拟题,其实顺着题意来,就还是很简单的,但是又是考虑不周全,导致没一发A,案例给的是字符串最后一个字符是5,但是如果不是5的话,还是要把最后一个数算上的啊,这20分钟还是罚的冤
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
char str[1010];
char s[1010];
int num[10010];
int main()
{
while(~scanf("%s",str))
{
memset(num,0,sizeof(num));
int t=0;
int cnt=0;
int len=strlen(str);
for(int i=0; i<len; i++)
{
if(str[i]=='5')
{
if(t==0)
continue;
s[t]='\0';
t=0;
int len1=strlen(s);
int flag=0;
int sum=0;
int x=0;
for(int j=0; j<len1; j++)
{
if(s[j]=='0'&&flag==0)
{
continue;
}
else
{
flag=1;
x=(s[j]-'0');
for(int k=0; k<len1-j-1; k++)
x*=10;
sum+=x;
}
}
if(flag==0)
num[cnt++]=0;
else
num[cnt++]=sum;
}
else
{
s[t++]=str[i];
}
}
if(t!=0)
{
s[t]='\0';
t=0;
int len1=strlen(s);
int flag=0;
int sum=0;
int x=0;
for(int j=0; j<len1; j++)
{
if(s[j]=='0'&&flag==0)
{
continue;
}
else
{
flag=1;
x=(s[j]-'0');
for(int k=0; k<len1-j-1; k++)
x*=10;
sum+=x;
}
}
if(flag==0)
num[cnt++]=0;
else
num[cnt++]=sum;
}
sort(num,num+cnt);
for(int i=0; i<cnt; i++)
{
if(i==0)
printf("%d",num[i]);
else
printf(" %d",num[i]);
}
printf("\n");
}
return 0;
}
大水题
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
int t;
int n;
char str[100];
char s[100];
scanf("%d",&t);
for(int j=0;j<t;j++)
{
scanf("%d",&n);
scanf("%s",str);
int len=strlen(str);
int m=0;
for(int i=0;i<len;i++)
{
if(i==n-1)
continue;
else
s[m++]=str[i];
}
s[m]='\0';
printf("%d %s\n",j+1,s);
}
return 0;
}