codeforces 535A-水题;

#include <bits/stdc++.h>
using namespace std;
typedef long long LL; char s2[15][20]={"eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
char s1[15][20]={"ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
char s3[15][20]={"one","two","three","four","five","six","seven","eight","nine"}; int main()
{ int n;
scanf("%d",&n);
if(n==0)
{
puts("zero");
return 0;
}
if(n>=10)
{
if(n%10==0)
printf("%s",s1[n/10-1]);
else if((n/10)==1)
printf("%s",s2[n%10-1]);
else
printf("%s-%s",s1[n/10-1],s3[n%10-1]);
}
else
printf("%s",s3[n%10-1]); return 0;
}

codeforces 535B

最多才2^9个数,直接预处理,然后找一遍。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL; LL p[1000000]; LL Pow(int k)
{
LL ans=1;
for(int i=1;i<=k;i++)
ans=ans*10LL;
return ans;
}
int num;
void init()
{ LL k;
p[0]=4LL;
p[1]=7LL;
num=2;
bool flag=false;
for(int i=1;i<=9;i++)
{
int t=0;
k=Pow(i);
for(int j=0;j<num;j++)
{
if(p[j]*10<k) continue;
p[num+t]=k*4LL+p[j];
if(p[num+t]>1000000000)
{
num=num+t;
flag=true;
break;
}
t++;
p[num+t]=k*7LL+p[j];
if(p[num+t]>1000000000)
{
num+=t;
flag=true;
break;
}
t++;
}
if(flag) break;
num=num+t;
}
} int main()
{
init();
LL n;
scanf("%lld",&n);
sort(p,p+num);
for(int i=0;i<num;i++)
{
if(p[i]==n)
{
printf("%d\n",i+1);
return 0;
}
}
return 0;
}

codeforces 535C:题意:

给等差数列:首项A,公差B,n个询问

每个询问 给l,t,m

以l为左端点,每次可以最多选择m个数,使这些数 -1   

t次操作后,求最长序列使所有数为0,输出这个最长序列的右端序号

思路:

二分对吧。

那么就去找二分的满足条件对吧。

首先数列里面最大的数肯定<=t,对勾

数列里面所有的数相加和<=t*m 对勾

然后二分 11111100000型 对勾

#include <cstdio>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long LL;
int n;
LL a,b,t,m; LL sum[1000100];
void init()
{
sum[0]=0;
sum[1]=a;
for(LL i=2;i<=1000000;i=i+1LL)
sum[i]=sum[i-1]+a+(i-1LL)*b;
} int main()
{
LL tmp;
scanf("%I64d%I64d%I64d",&a,&b,&n);
init();
while(n--)
{
scanf("%I64d%I64d%I64d",&tmp,&t,&m);
LL left=tmp,right=1000000;
while(left<right)
{
LL mid=left+(right-left+1LL)/2LL;
if((a+(mid-1LL)*b)<=t&&(sum[mid]-sum[tmp-1])<=t*m)
left=mid;
else
right=mid-1LL;
}
if((a+(left-1LL)*b)<=t&&(sum[left]-sum[tmp-1])<=t*m)
printf("%I64d\n",left);
else
puts("-1");
}
return 0;
}
/*
2 1 4
1 5 3
3 3 10
7 10 2
6 4 8
*/

最新文章

  1. Jquery ajax运用执行顺序有误怎么解决
  2. N 皇后问题
  3. ELK+FileBeat+Log4Net搭建日志系统
  4. mongoose的promise(转发)
  5. 使用ar命令删除iOS静态库重复编译的.o文件
  6. Tengine:基于Nginx的衍生版
  7. 关于 Code First
  8. OpenGL程序运行提示glut32.dll丢失问题
  9. HDU 1504 Disk Tree
  10. 一周一话题之四(JavaScript、Dom、jQuery全面复习总结&lt;Dom篇&gt;)
  11. OS error set
  12. centos源码安装git
  13. DOM2级事件对象、添加事件、阻止默认事件、阻止冒泡事件、获取事件对象目标的兼容处理
  14. 找回XP中的搜索助理
  15. java设计模式------建造者模式
  16. Flash Alternativa 3D引擎-基础理论
  17. Promise实现ajax
  18. oracle 关于房贷计算过程
  19. 《深入理解Java虚拟机》笔记(转)
  20. C# 在项目中配置Log4net

热门文章

  1. 【题解】[P4178 Tree]
  2. linux c编程:进程间通信
  3. Android Studio快速添加Gson Gsonformat
  4. CSS3定时提示动画特效
  5. jzyz集训 0612
  6. POJ 2348 Euclid Game (模拟题)
  7. hdu1015 —— 回溯
  8. Spring Boot2.0之 原理—创建内置Tomcat容器
  9. 应用程序无法启动(0*c000007b)
  10. BZOJ 1726 [Usaco2006 Nov]Roadblocks第二短路:双向spfa【次短路】