zoukankan      html  css  js  c++  java
  • Test on 11/10/2016

    @kaike

    1.进制

      (spehex.pas/c/cpp)

    【问题描述】

    现在给定一个特殊的计数方式,混合进制数。也就是给定一个多位数,每位数上的进制都是不一样的。

    比如给定一个三位数:这三位数的进制分别是2 3 2.也就是最小的位数逢2进1,次小位数逢3进制,最高位逢2进1.

    那么,这个混合进制数最小数是0,最大数是121。一共有2*3*2=12个数。

    分别是:000,001,010,011,020,021,100,101,110,111,120,121。

    如果我想知道第7大的数,就是100.

    现在的问题就是,给你每个位数上的进制,你找出从0开始,第k个数是多少?

    【输入】

    第一行 一个整数n,表示这个数有n位 n<=30

    第二行,n个用空格隔开的整数,依次为最高位到最低位的进制。 保证进制都在十进制以内。

    保证这个混合进制数的最大数的编号在int范围内。

    第三行为m,表示m次查询。m<=6

    接下来m行,每行一个整数k,表示要查询的混合进制数的第k小的数

    保证k在int范围内。

    【输出】

           m行。每行一个数,表示要查询的混合进制数的第k小的数在这个混合进制数里的值是多少。

    如果超过要求的位数,那么输出-1

    【输入输出样例1】

    spehex.in

    spehex.out

    3

    2 3 2

    3

    7

    9

    14

    100

    110

    -1

    抓狂了两小时,最后A了?

    数据太弱了。

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int n,b[20],m,k,s[20];
     5 long long sum=1;
     6 int main()
     7 {
     8     freopen("spehex.in","r",stdin);
     9     freopen("spehex.out","w",stdout);
    10     cin>>n;
    11     for(int i=n;i>0;i--)
    12     {    cin>>b[i];
    13         sum*=b[i];
    14     }
    15     cin>>m;
    16     for(int i=1;i<=m;i++)
    17     {
    18         string s1;
    19         int j=1;
    20         cin>>k;
    21         if(k==1)    cout<<0<<endl;
    22         else if(k>sum)  cout<<-1<<endl;
    23         else{
    24             k--;
    25             while(k)
    26             {
    27                 s[j]=k%b[j];
    28                 k/=b[j];
    29                 j++;
    30             }
    31             for(int c=j-1;c>0;c--)
    32                 cout<<s[c];
    33             cout<<endl;
    34         }
    35     }
    36     return 0;
    37 }
    = =

    1.旅行

      (fule.pas/c/cpp)

    【问题描述】

        小x要去旅游了。他决定开一辆耗油量很高的巨大的拉风的tank去旅游了。

        这辆tank有一个巨大的油箱,可以装满G升燃油。tank是很费油的,每升燃油只够tank跑一公里,而小x的旅程要有D公里要跑。

        虽然油箱很大,但是,显然旅途中是需要加油的。

        小x得到了旅途中加油站的信息,一共有N个加油站,第i个加油站距离起点的距离为X_i(0 <= X_i <= D),每公升燃油价格为Y_i元(1 <= Y_i <= 1,000,000)。

        现在小x想知道,如果出发时,tank里已经有B公升燃油(0 <= B <= D),那么,他最少花费多少钱,可以完成整个旅途。

        如果中间因为燃油不够而无法完成旅程,那么你需要输出-1. 

    【输入】

    第一行4个整数:N,G,B和D

    接下来N行,每行两个整数表示X_i和 Y_i。

    【输出】

    一个整数,表示完成旅行的最小花费,或者-1。

    【输入输出样例1】

    fule.in

    fule.out

    4 10 3 17

    2 40

    9 15

    5 7

    10 12

    174

    在第一个加油点 加2升,在第5个加油点加满10升,再到第10个加油点加2升,一共花费174.

    【数据范围】

    30%  数据保证  N<=100   G<=1000  D<=10000  

    60%  数据保证  N<=5000  G<=1000  D<=10000000 

    100% 数据 1 <= G <= 1,000,000  1 <= D <= 1,000,000,000  1 <= N <= 50,000

    输出-1得30哈哈哈哈

    看不懂我放弃了,回来找找贪心的做法。

    1.旅程

      (journey.pas/c/cpp)

    【问题描述】

    给出一个长度为 N 的由小写字母’a’~’z’和’*’组成的字符串 A,一个长度为 M 的仅由小

    写字母’a’~’z’组成的字符串 B。一个’*’可以匹配任意多个字符(包括 0 个)。求在 B 的所有 循环同构串中,有多少个能够与 A 匹配。

    循环同构串:就是把 B 的前 k 个字母(0<=k<M)移到结尾所得到的字符串。例如 abc 的 循环同构串有 abc、bca 和 cab。

    A 与 B 匹配:若除了 A 中的’*’号可以匹配 B 中的任意多个字符外,其余字符一一对应, 则称 A 与 B 匹配。例如 a*b*c 与 aadbc 是匹配的,其中第一个*对应 ad,第二个*对应空串。

    【输入】

    第一行为字符串 A。

    第二行为字符串 B。

    【输出】

    输出在 B 的所有循环同构串中,有多少个能够与 A 匹配

    【输入输出样例1】

    journey.in

    journey.out

    aaaa

    aaaa

    4

    【输入输出样例2】

    journey.in

    journey.out

    a*a

    aaaaaa

    6

    【输入输出样例3】

    journey.in

    journey.out

    *a*b*c*

    abacabadabacaba

    15

    【数据范围】

    对于 30% 的测试点,M≤20。

    对于 80% 的测试点,M≤200。

    对于 100% 的测试点,1<=N<=100,1≤M≤100000。

    这题有好多个题解...然而我不会...

    No matter how you feel, get up , dress up , show up ,and never give up.
  • 相关阅读:
    .net同时执行多条sql语句(含事务功能)
    SQL标量值函数:小写金额转大写
    找出与某id相近的四条记录
    sql查询优化 索引优化
    半成品收发数量流程管控
    半成品进销存
    多表分页查询存储过程
    DataGridView数据用NPOI导出到Excel
    SQL事务+存储过程
    left join、right join和join的区别
  • 原文地址:https://www.cnblogs.com/Kaike/p/6063163.html
Copyright © 2011-2022 走看看