zoukankan      html  css  js  c++  java
  • Ural 1036 Lucky Tickets

    Lucky Tickets

    Time Limit: 2000ms
    Memory Limit: 16384KB
    This problem will be judged on Ural. Original ID: 1036
    64-bit integer IO format: %lld      Java class name: (Any)
     
    You are given a number 1 ≤ N ≤ 50. Every ticket has its 2N-digit number. We call a ticket lucky, if the sum of its first N digits is equal to the sum of its last N digits. You are also given the sum of ALL digits in the number. Your task is to count an amount of lucky numbers, having the specified sum of ALL digits.
     

    Input

    Two space-separated numbers: N and S. Here S is the sum of all digits. Assume that 0 ≤ S ≤ 1000.
     

    Output

    The amount of lucky tickets.
     

    Sample Input

    2 2
    

    Sample Output

    4
    

    Hint

    The tickets are 0101, 0110, 1001, 1010 in the example above
     
    解题:动态规划$dp[i][j]表示处理到了第i位,且前i位的和为j的方案数$
      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 typedef long long LL;
      4 #define MAXN 100
      5 struct HP {
      6     int len,s[MAXN];
      7     HP() {
      8         memset(s,0,sizeof(s));
      9         len = 1;
     10     }
     11     HP operator=(const char *num) { //字符串赋值
     12         len = strlen(num);
     13         for(int i = 0; i < len; i++) s[i] = num[len-i-1]-'0';
     14     }
     15     HP operator=(int num) { //int 赋值
     16         char s[MAXN];
     17         sprintf(s,"%d",num);
     18         *this = s;
     19         return *this;
     20     }
     21     HP(int num) {
     22         *this = num;
     23     }
     24     HP(const char*num) {
     25         *this = num;
     26     }
     27     string str()const { //转化成string
     28         string res = "";
     29         for(int i = 0; i < len; i++) res = (char)(s[i]+'0') + res;
     30         if(res == "") res = "0";
     31         return res;
     32     }
     33     HP operator +(const HP& b) const {
     34         HP c;
     35         c.len = 0;
     36         for(int i = 0,g = 0; g||i < max(len,b.len); i++) {
     37             int x = g;
     38             if(i < len) x += s[i];
     39             if(i < b.len) x += b.s[i];
     40             c.s[c.len++] = x%10;
     41             g = x/10;
     42         }
     43         return c;
     44     }
     45     void clean() {
     46         while(len > 1 && !s[len-1]) len--;
     47     }
     48 
     49     HP operator *(const HP& b) {
     50         HP c;
     51         c.len = len + b.len;
     52         for(int i = 0; i < len; i++)
     53             for(int j = 0; j < b.len; j++)
     54                 c.s[i+j] += s[i]*b.s[j];
     55         for(int i = 0; i < c.len-1; i++) {
     56             c.s[i+1] += c.s[i]/10;
     57             c.s[i] %= 10;
     58         }
     59         c.clean();
     60         return c;
     61     }
     62     HP operator - (const HP& b) {
     63         HP c;
     64         c.len = 0;
     65         for(int i = 0,g = 0; i < len; i++) {
     66             int x = s[i]-g;
     67             if(i < b.len) x -= b.s[i];
     68             if(x >= 0) g = 0;
     69             else {
     70                 g = 1;
     71                 x += 10;
     72             }
     73             c.s[c.len++]=x;
     74         }
     75         c.clean();
     76         return c;
     77     }
     78     HP operator /(const HP &b) {
     79         HP c, f = 0;
     80         for(int i = len-1; i >= 0; i--) {
     81             f = f*10;
     82             f.s[0] = s[i];
     83             while(f >= b) {
     84                 f = f - b;
     85                 c.s[i]++;
     86             }
     87         }
     88         c.len = len;
     89         c.clean();
     90         return c;
     91     }
     92     HP operator % (const HP &b) {
     93         HP r = *this / b;
     94         r = *this - r*b;
     95         return r;
     96     }
     97     HP operator /= (const HP &b) {
     98         *this  = *this / b;
     99         return *this;
    100     }
    101     HP operator %= (const HP &b) {
    102         *this = *this % b;
    103         return *this;
    104     }
    105     bool operator < (const HP& b) const {
    106         if(len != b.len) return len < b.len;
    107         for(int i = len-1; i >= 0; i--)
    108             if(s[i] != b.s[i]) return s[i] < b.s[i];
    109         return false;
    110     }
    111     bool operator > (const HP& b) const {
    112         return b < *this;
    113     }
    114     bool operator <= (const HP& b) {
    115         return !(b < *this);
    116     }
    117     bool operator == (const HP& b) {
    118         return !(b < *this) && !(*this < b);
    119     }
    120     bool operator != (const HP &b) {
    121         return !(*this == b);
    122     }
    123     HP operator += (const HP& b) {
    124         *this = *this + b;
    125         return *this;
    126     }
    127     bool operator >= (const HP &b) {
    128         return *this > b || *this == b;
    129     }
    130 };
    131 istream& operator >>(istream &in, HP& x) {
    132     string s;
    133     in >> s;
    134     x = s.c_str();
    135     return in;
    136 }
    137 ostream& operator <<(ostream &out, const HP& x) {
    138     out << x.str();
    139     return out;
    140 }
    141 HP dp[101][1001];
    142 int main(){
    143     dp[0][0] = 1;
    144     for(int i = 1; i < 51; ++i)
    145         for(int j = 0; j <= i*9; ++j)
    146             for(int k = 0; k < 10; ++k)
    147                 dp[i][j + k] = dp[i][j + k] + dp[i-1][j];
    148     int n,s;
    149     while(~scanf("%d%d",&n,&s)){
    150         if(s&1) puts("0");
    151         else cout<<dp[n][s>>1]*dp[n][s>>1]<<endl;
    152     }
    153     return 0;
    154 }
    View Code
  • 相关阅读:
    配置Domino CA以支持SSL
    如何在Notes中撰寫JavaServlet程式
    Lotus 技术点之导入
    Lotus Domino R5开发心得
    Domino中用可定制表单显示定制的错误消息
    ExtJs GridPanel 完整实例
    当程序员变成软件项目经理
    SQL Server 索引结构及其使用
    C#事务处理
    on用onpropertychange,oninput事件解决onchange事件的不足
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4847215.html
Copyright © 2011-2022 走看看