codeforces-305A Strange Addition
2016-07-20 14:42
344 查看
题目链接:点击打开链接
之前一直理解错题意,以为两个数字里面任意一个数含有0就能相加,结果各种wa。。。
其实题目说的意思是两个数如果在任意十进制位至少有一个数含有0才可以相加,比如505和50可以相加(50可以看成050,在个十百位上505和050这两个数至少一方含有0),而50和25不能相加(在十位上两方都不含有0),理解清楚题意后直接暴力求解就可以了
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=105;
int a[maxn];
int ans[maxn];
bool vis[maxn];
int main()
{
int n;
while(cin>>n)
{
memset(vis,false,sizeof vis);
int maxpos=-1,low=inf;
int num=0;
for(int i=0;i<n;i++)
{
scanf("%d",a+i);
int temp=a[i],t=0;
while(temp)
{
temp/=10;
t++;
}
maxpos=max(maxpos,t);
if(a[i]==0)
{
ans[num++]=a[i];
maxpos=max(maxpos,1);
//low=min(low,1);
}
}
//cout<<"maxpos="<<maxpos<<endl;
for(int i=0;i<maxpos;i++)
{
for(int j=0;j<n;j++)
{
if(vis[j]) continue;
int temp=a[j];
for(int k=0;k<i;k++)
temp/=10;
if(temp!=0&&temp%10==0)
{
temp/=10;
bool flag=true;
while(temp)
{
if(temp%10==0) { flag=false; break; }
temp/=10;
}
if(flag)
{
low=min(low,i+1);
ans[num++]=a[j];
vis[j]=true;
break;
}
}
}
}
//cout<<"low="<<low<<endl;
if(num==0)
{
puts("1");
printf("%d\n",a[0]);
continue;
}
for(int i=0;i<n;i++)
{
int temp=a[i],t=0,k=0;
if(a[i]==0) continue;
while(temp)
{
if(temp%10) k++;
temp/=10;
t++;
}
if(t==k&&k<=low)
{
ans[num++]=a[i];
break;
}
}
printf("%d\n",num);
for(int i=0;i<num;i++)
{
if(i==0) printf("%d",ans[i]);
else printf(" %d",ans[i]);
if(i==num-1) puts("");
}
}
return 0;
}
之前一直理解错题意,以为两个数字里面任意一个数含有0就能相加,结果各种wa。。。
其实题目说的意思是两个数如果在任意十进制位至少有一个数含有0才可以相加,比如505和50可以相加(50可以看成050,在个十百位上505和050这两个数至少一方含有0),而50和25不能相加(在十位上两方都不含有0),理解清楚题意后直接暴力求解就可以了
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=105;
int a[maxn];
int ans[maxn];
bool vis[maxn];
int main()
{
int n;
while(cin>>n)
{
memset(vis,false,sizeof vis);
int maxpos=-1,low=inf;
int num=0;
for(int i=0;i<n;i++)
{
scanf("%d",a+i);
int temp=a[i],t=0;
while(temp)
{
temp/=10;
t++;
}
maxpos=max(maxpos,t);
if(a[i]==0)
{
ans[num++]=a[i];
maxpos=max(maxpos,1);
//low=min(low,1);
}
}
//cout<<"maxpos="<<maxpos<<endl;
for(int i=0;i<maxpos;i++)
{
for(int j=0;j<n;j++)
{
if(vis[j]) continue;
int temp=a[j];
for(int k=0;k<i;k++)
temp/=10;
if(temp!=0&&temp%10==0)
{
temp/=10;
bool flag=true;
while(temp)
{
if(temp%10==0) { flag=false; break; }
temp/=10;
}
if(flag)
{
low=min(low,i+1);
ans[num++]=a[j];
vis[j]=true;
break;
}
}
}
}
//cout<<"low="<<low<<endl;
if(num==0)
{
puts("1");
printf("%d\n",a[0]);
continue;
}
for(int i=0;i<n;i++)
{
int temp=a[i],t=0,k=0;
if(a[i]==0) continue;
while(temp)
{
if(temp%10) k++;
temp/=10;
t++;
}
if(t==k&&k<=low)
{
ans[num++]=a[i];
break;
}
}
printf("%d\n",num);
for(int i=0;i<num;i++)
{
if(i==0) printf("%d",ans[i]);
else printf(" %d",ans[i]);
if(i==num-1) puts("");
}
}
return 0;
}
相关文章推荐
- HDU 5724 Chess
- 聚类 - 6 - Canopy聚类
- PBR贴图转换6——Specular和Metalness的转换
- qt 汉字
- servlet学习(三)
- JAVA 注解的几大作用及使用方法详解
- js-动态添加li、option,并且添加其点击事件
- window和linux安装qt5.2注意事项
- Leetcode 198. House Robber (Easy) (cpp)
- 将替代ListView的RecyclerView 的使用详解(一)
- 可重入函数和线程安全的区别与联系
- Jquery 获取input是否被选中,并修改状态!
- SDWebImage NSURLErrorDomain - Code = 406
- windows下qt5使用ffmpeg(不用编译源码)
- java性能分析工具
- 第14章 Linux账号管理与ACL权限设置
- leetcode338
- jquery获得下拉列表选中值和文本
- Tegra TX1 安装配置 + caffe run
- Codeforces-699A Launch of Collider