//字符串处理 A hdoj1727
#include<stdio.h>
#include<string.h>
using namespace std;
char num[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
char num1[11][10]={"","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
char num2[10][10]={"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==0)
{
printf("zero\n");
continue;
}
int flag=0;
if(n/1000)
{
printf("%s",num[n/1000]);
printf(" thousand");
flag=1;
}
n=n%1000;
if(n/100)
{
if(flag)
printf(" and ");
printf("%s",num[n/100]);
printf(" hundred");
flag=1;
}
if(n%100)
{
n=n%100;
if(n/10>=2)
{
if(flag)
printf(" and ");
printf("%s",num1[n/10]);
if(n%10)
printf("-%s",num[n%10]);
}
else if(n/10==1)
{
if(flag)
printf(" and ");
printf("%s",num2[n%10]);
}
else
{
if(flag)
printf(" and ");
printf("%s",num[n%10]);
}
}
printf("\n");
}
return 0;
}
//数学推论 C hdoj1719
#include<stdio.h>
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==0)
{
printf("NO!\n");
continue;
}
n+=1;
while(n%2==0)
n/=2;
while(n%3==0)
n/=3;
if(n==1)
printf("YES!\n");
else
printf("NO!\n");
}
return 0;
}
//简单大数处理 D hdoj 1715 大斐波数
#include<stdio.h>
#include<string.h>
int a[1005][500];
void init()
{
memset(a,0,sizeof(a));
a[0][0]=0;
a[1][0]=1;
a[2][0]=1;
int d=0;
for(int i=3;i<=1000;i++)
{
d=0;
for(int j=0;j<499;j++)
{
a[i][j]=a[i-1][j]+a[i-2][j]+d;
d=a[i][j]/10;
a[i][j]%=10;
}
}
}
int main()
{
int t,n;
scanf("%d",&t);
init();
while(t--)
{
scanf("%d",&n);
int k=499;
while(a[n][k]==0)
k--;
k++;
while(k--)
{
printf("%d",a[n][k]);
}
printf("\n");
}
return 0;
}
//简单DP E hdoj2391
#include<stdio.h>
int map[1017][1017];
int main()
{
int t,n,m;
scanf("%d",&t);
for(int k=1;k<=t;k++)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%d",&map[i][j]);
}
}
for(int i=0;i<n;i++)
{
int d=-1000000;
for(int j=0;j<m;j++)
{
if(i-1>=0)
{
d=d>map[i-1][j]?d:map[i-1][j];
}
if(j-1>=0)
{
d=d>map[i][j-1]?d:map[i][j-1];
}
if(d>0)
{
map[i][j]+=d;
}
}
}
printf("Scenario #%d:\n",k);
printf("%d\n\n",map[n-1][m-1]);
}
}
//二分或处理技巧 (我用的二分) F hdoj 3762
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int a[1000004];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)&&(m||n))
{
memset(a,0x3f,sizeof(a));
int num=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int k;
for(int i=0;i<m;i++)
{
scanf("%d",&k);
int len=lower_bound(a,a+n,k)-a;
if(len<n&&a[len]==k)
++num;
}
printf("%d\n",num);
}
}