Codeforces Round #271 (Div. 2)-A.B

    A. Keyboard
简单水水:

 
 
int n,m,tot=0;
char mp[55]={ "qwertyuiop asdfghjkl; zxcvbnm,./" };
int main()
{
    //freopen("D:\data.txt","r",stdin);
    int TT=1,tt=1,i=0,j=0,k=0;
    //scanf("%d",&TT);
    while(TT--){
       char c;   char s[199];   tot =strlen(mp);
       scanf("%c",&c);          scanf("%s",s);
       if(c=='R')  m= -1;  else m= 1;
       int l=strlen(s);
       for(i=0;i<l;i++){
           for(k=0;k<tot;k++){
               if(mp[k]==s[i]) { printf("%c",mp[k+m]);  break; }
           }
       }
    }
    return 0;
}

B. Worms

神般的二分查找:
</pre><pre name="code" class="cpp">int n,m,tot=0;
int dat[100009];
int bsearch(int l,int r,int val){
    //printf("find- %d %d %d\n",l,r,val);
    int m;
    while(l<=r){
        m =(l+r)/2;    //printf("m- %d xm- %d\n",m,x[m]);
        if(dat[m]==val)  return m;
        else if(dat[m]>val)  r=m-1;
        else                 l=m+1;
    }
    return l;   //原来为 return -1;  表示查找失败
                //这里水了一下,想表示 查找到的第一个不大于val的位置;竟然过了
}
int main()
{
    //freopen("D:\data.txt","r",stdin);
    int TT=1,tt=1,i=0,j=0,k=0;
    //scanf("%d",&TT);
    while(TT--){
        scanf("%d",&n);         dat[0]= 0;
        for(i=1;i<=n;i++){
           scanf("%d",&tt);     dat[i]= dat[i-1]+tt;
        }
        scanf("%d",&m);
        for(i=1;i<=m;i++){
           scanf("%d",&tt);
           int ans =bsearch(1,n,tt);
           printf("%d\n",ans);
           /*  此题用如下库函数应也能解决
               函数lower_bound()在first和last中的前闭后开区间进行二分查找,
               返回大于或等于val的第一个元素位置。
               如果所有元素都小于val,则返回last的位置,且last的位置是越界的!      
               lower_bound(val): 返回容器中第一个值【大于或等于】val的元素的iterator位置。
               upper_bound(val): 返回容器中第一个值【大于】val的元素的iterator位置。
           */
        }

    }
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值