Codeforces Round #299

原创 2015年11月21日 16:00:52

 A题 简单的模拟。给出一个数,输出它的英文名就好,注意零。

#include
#include

using namespace std;

int main()
{
    int n;
    scanf("%d",&n);
    if(n==0||n==1||n==2||n==3||n==4||n==5||n==6||n==7||n==8||n==9||n==10||n==11||n==12||n==13||n==14||n==15||n==16||n==17||n==18||n==19||n==20||n==30||n==40||n==50||n==60||n==70||n==80||n==90)
  {
    switch(n)
    {
        case 0:printf("zero\n");break;
        case 1:printf("one\n");break;
        case 2:printf("two\n");break;
        case 3:printf("three\n");break;
        case 4:printf("four\n");break;
        case 5:printf("five\n");break;
        case 6:printf("six\n");break;
        case 7:printf("seven\n");break;
        case 8:printf("eight\n");break;
        case 9:printf("nine\n");break;
        case 10:printf("ten\n");break;
        case 11:printf("eleven\n");break;
        case 12:printf("twelve\n");break;
        case 13:printf("thirteen\n");break;
        case 14:printf("fourteen\n");break;
        case 15:printf("fifteen\n");break;
        case 16:printf("sixteen\n");break;
        case 17:printf("seventeen\n");break;
        case 18:printf("eighteen\n");break;
        case 19:printf("nineteen\n");break;
        case 20:printf("twenty\n");break;
        case 30:printf("thirty\n");break;
        case 40:printf("forty\n");break;
        case 50:printf("fifty\n");break;
        case 60:printf("sixty\n");break;
        case 70:printf("seventy\n");break;
        case 80:printf("eighty\n");break;
        case 90:printf("ninety\n");break;
    }
  }
  else
  {
      string str,s1,s2;
      if(n%10==1) s2="one";
      if(n%10==2) s2="two";
      if(n%10==3) s2="three";
      if(n%10==4) s2="four";
      if(n%10==5) s2="five";
      if(n%10==6) s2="six";
      if(n%10==7) s2="seven";
      if(n%10==8) s2="eight";
      if(n%10==9) s2="nine";
      if((n/10)%10==2) s1="twenty";
      if((n/10)%10==3) s1="thirty";
      if((n/10)%10==4) s1="forty";
      if((n/10)%10==5) s1="fifty";
      if((n/10)%10==6) s1="sixty";
      if((n/10)%10==7) s1="seventy";
      if((n/10)%10==8) s1="eighty";
      if((n/10)%10==9) s1="ninety";
      str=s1+"-"+s2;
      cout<
B题 数学题,是二进制法表示数这一类问题的变形。二进制表示数确实有很多优势,在计数上可以达到很大的值。在于领会二进制法的精髓吧,所以代码有时候作为语言的能力甚至超过了言辞。
#include
#include
#include

using namespace std;

int main()
{
    string str;
    cin>>str;
    int len=str.length();
    int m=atoi(str.c_str());
    int tmp=1;
    int ans=0;
    while(m)
    {
        if(m%10==4)
            ans+=1*tmp;
        else if(m%10==7)
            ans+=2*tmp;
        tmp=tmp*2;
        m/=10;
    }
    printf("%d\n",ans);
}
C题  分治题,用二分法解。读题是一个艰难的过程。给出一等差数列si=A+(i-1)*B;n次询问,每次询问给出l,t,m。题目要求,取数列中l开始的m个数,每次对每个数减一,减t次,到零就停止,求为零的最右边的数的下标是多少。
   二分就是要找到二分的区间以及二分结束的判断条件。显然可以得到最右端的数是lr=(t-a)/b+1,最左端的数是ll=l。且只要sl+(sl+1)+(sl+2)+...+(smid)<=t*m;就可以将二分区间向右移动,否则向左。需要注意的是longlong ==
#include
#include

using namespace std;
typedef long long ll;
ll a,b,n;
ll l,t,m;
ll sum(ll r)
{
    return (2*a+(l+r-2)*b)*(r-l+1)/2;

}
int main()
{
    scanf("%I64d%I64d%I64d",&a,&b,&n);
    while(n--)
    {
        scanf("%I64d%I64d%I64d",&l,&t,&m);
        ll sl=a+(l-1)*b;
        if(sl>t)
        {
            printf("-1\n");
            continue;
        }
        else
        {
            ll ll=l,lr=(t-a)/b+1,mid;
            while(ll<=lr)
            {
                mid=(ll+lr)/2;
                if(sum(mid)<=t*m) ll=mid+1;
                else lr=mid-1;
            }
          printf("%I64d\n",ll-1);
        }
    }
    return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Codeforces Round #299 (Div. 2)【A,B,C】

codeforces 535A-水题; #include using namespace std; typedef long long LL; char s2[15][20]={"eleven"...

Codeforces Round #299 (Div. 2)——C. Tavas and Karafs

快被二分搞死了。。。听一个大神说最好选择一种适合自己的写法然后搞懂它。 一开始用昨天那种写法,发现姿势不对,于是跑去又重新搞了一遍二分写法的区别。 题意: 现在告诉你每个点i的高度的求法是si=A+B...

Codeforces Round #299 (Div. 2) -- (A,B,C)

题目传送:Codeforces Round #299 (Div. 2) A. Tavas and Nafas time limit per test 1 seco...

Codeforces Round #299 (Div. 2) C. Tavas and Karafs 二分搜索+数列

题意:每个萝卜长度为 hi = a + (i - 1) * b,然后每次询问是每次操作最多把 m 个不同的未吃完的萝卜每个咬掉1单位长度,最多 t 次操作,其中求最大的r,是的[l......r]访问...

Codeforces Round #299 (DIV.2)

A - Inna and Alarm Clock         坐标系上有很多闹钟,现在要关掉闹钟,首先选一个方向(横或纵),然后每次只能按这个方向关掉闹钟,问关掉所有闹钟的最小次数……直接...
  • qian99
  • qian99
  • 2014年02月12日 12:03
  • 490

Codeforces Round #299 (Div. 2) Tavas and Karafs(二分)

英语渣渣感觉无力。。。翻了下题解才知道题意。。。 给你一个无限长的等差数列a,n个查询。对于每个查询,给出l,t,m,求最大的r。表示在等差数列a的第l号元素到第r号元素,执行t次操作,对于每一次操...
  • cqbzwja
  • cqbzwja
  • 2015年08月09日 17:08
  • 256

Codeforces Round #299 (Div. 2) D. Tavas and Malekas KMP+预处理、string suffix structures

题意:给一个字符串p,然后一个长为n的字符串s上,对于m个yi,每个yi,有syi-1syi-1+1... syi-1 + |p| - 1 = p,如果s是可能存在的求出s的可能方案数%1e9+7,否...

【Codeforces】Codeforces Round #299 (Div. 1) E. Tavas on the Path 【树链剖分+区间合并】

传送门:【Codeforces】Codeforces Round #299 (Div. 1) E. Tavas on the Path 大概题意: 首先对于一个串s,我们可以提取m个只包含...

codeforces 535D. Tavas and Malekas----#299div2D

此为kmp好题 题意:现在已知串p,还知道串s中与p匹配的都有那些位置,问这样的s串共有多少个 思路:这个题就是直接用p把匹配的位置填上就可以了,没有填的位置就是可以变换的,假...

【codeforces #299(div 1)】ABC题解

codeforces#299(div1)详细题解+代码~ 思路题+hash/kmp+计算几何~
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #299
举报原因:
原因补充:

(最多只允许输入30个字)