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
  • 相关阅读:
    js实现element中可清空的输入框(1)
    vue中v-model的学习
    Oracle触发器和MySQL触发器的简单应用
    Java中的多线程你只要看这一篇就够了()
    HTML 随笔记之 刷新页面
    HTML CSS 随笔记之 cursor
    float到底是干什么的?
    Spring Boot 事物的快速应用
    java web 中文乱码
    LVM 创建实例
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4847215.html
Copyright © 2011-2022 走看看