zoukankan      html  css  js  c++  java
  • 记录一下hdu的几道题

    杭州电子科技大学程序设计竞赛 2016‘12-网络同步赛

    前几天看到这个比赛,想着要是到时候没事就做一下,但是中午实在太困,加上水平太次,才a了4道题目。

    说明:我是看ac人数多少的顺序来做题的。

    1.1001 BigZhuGod的粉丝

    没写输入与输出,看例子,找规律!注意一行字符输入的方法。我一般是用getline(cin, s),但是一般会得到' ',可能需要先getchar()处理一下。

    2. 1007 反差萌

    看题意,输入2*n个数,然后排序,求和就完了!我刚开始一直无法ac,才发现,我只开了n大小的数组,而实际的输入大小是n*2的,这点注意一下。

    3. 1002 递增数

    这个题目,我认为有点难度,看完题目后,我就吓坏了,不知道怎么做!但是还得静下心来仔细分析!这不就是简单的数个数么。

    跟这道题目挺相似的,https://leetcode.com/problems/k-th-smallest-in-lexicographical-order/ 这个也是不会做,好像现在也不会做哎!

    分析:求长度为1的递增数的个数,长度为2,长度为3,由于最大1e8,长度最大为8,那么对于x = 1234,结果包含长度为3,2,1的递增数,首先考虑这个怎么计算。

    长度为1的就是9个,长度为2,依次枚举首位的数字,由于是递增数,后续的数字,需要大于等于这个数字,那么,我们要求的可以转化为求长度为k,以a开头的递增数的个数,这个问题容易处理。

    长度为1的,以a开头的递增数为10-a,长度为k的,以a开头的递增数包括:以a+1开头的,长度为k的和以a开头的,长度为k-1的递增数的和。这个问题就解决了,求长度为k的也很容易解决。

    接下来考虑对于x= 1234, 如何求长度为4的递增数,第一位不能为0,所以第一位只能为1,接下来考虑第二位,基于第一位,要大于等于上一位,说以先求解[1,2),这个可以通过上面的方法,利用区间减法得到,然后接下来需要考虑的就是第二位为2的情况,依次往后考虑。

    讲的有点乱,具体看代码:

     1 /*
     2 ID: y1197771
     3 PROG: test
     4 LANG: C++
     5 */
     6 #include<bits/stdc++.h>
     7 #define pb push_back
     8 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
     9 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
    10 typedef long long ll;
    11 using namespace std;
    12 typedef pair<int, int> pii;
    13 const int maxn = 2e3 + 10;
    14 map<pii, ll> ma;
    15 ll work(int x, int len) {
    16     if(len <= 0 || x == 0) return 0;
    17     if(len == 1) return 10 - x;
    18     if(len == 2) {
    19         ll t = 0;
    20         if(x + 1 <= 9) t += work(x + 1, len);
    21         t += work(x, len - 1);
    22         return ma[{x, len} ] = t;
    23     }
    24     ll res = 0;
    25     if(x + 1 <= 9) res += work(x + 1, len);
    26     res += work(x, len - 1);
    27     return ma[{x, len} ] = res;
    28 }
    29 void solve() {
    30     int x;
    31     ll res = 0;
    32     cin >> x;
    33     int len = 0;
    34     int t = x;
    35     int lb = x;
    36     vector<int> v;
    37     while(t) {
    38         v.pb(t % 10);
    39         len ++; t /= 10;
    40     }
    41     reverse(v.begin(), v.end());
    42     for (int i = 1; i < len; i++)
    43         res += work(1, i);
    44     int lst = 1;
    45     int i = 0;
    46     for (i = 0; i < v.size(); i++) {
    47         if(v[i] <= 0 || v[i] < lst) break;
    48         res += work(lst, len - i) - work(v[i], len - i);
    49         lst = v[i];
    50     }
    51     if(i == v.size()) res++;
    52     cout << res << endl;
    53 
    54 }
    55 int main() {
    56     freopen("test.in", "r", stdin);
    57     //freopen("test.out", "w", stdout);
    58     //ios::sync_with_stdio(0);
    59     //cin.tie(0); cout.tie(0);
    60     int _; cin >> _;
    61     while(_--)
    62     solve();
    63     return 0;
    64 }

    4. 1004 我要拿走你的蜡烛

    简单的暴力枚举。

     1 /*
     2 ID: y1197771
     3 PROG: test
     4 LANG: C++
     5 */
     6 #include<bits/stdc++.h>
     7 #define pb push_back
     8 #define FOR(i, n) for (int i = 0; i < (int)n; ++i)
     9 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl
    10 typedef long long ll;
    11 using namespace std;
    12 typedef pair<int, int> pii;
    13 const int maxn = 1e3 + 10;
    14 int n, m;
    15 int a[20];
    16 int tag[4] = {4, 2, 2, 4};
    17 int s[20];
    18 void solve() {
    19     string st;
    20     cin >> n >> m;
    21     for (int i = 0; i < n; i++) {
    22         cin >> st;
    23         if(st[0] == 'F') a[i] = 0;
    24         if(st[0] == 'I') a[i] = 1;
    25         if(st[0] == 'D') a[i] = 2;
    26         if(st[0] == 'E') a[i] = 3;
    27     }
    28     bool f = 0;
    29     for (int i = 0; i < (1 << n); i++) {
    30         int cost = 0;
    31         memset(s, 0, sizeof s);
    32         //a1 = a2 = a3 = a4 = 0;
    33         for (int j = 0; j < n; j++) {
    34             if(i & (1 << j)) {
    35                 cost += tag[a[j] ];
    36                 s[a[j] ]++;
    37             }
    38         }
    39         //cout << i << " " << cost << endl;
    40         if(cost > 10) continue;
    41         //for (int j = 0; j < 4; j++) cout << s[j] << endl;
    42         int d = s[2] + 2 * s[3];
    43 
    44         int res = (6 + d) * s[0] + (3 + d) * s[1];
    45         if(res >= m) {
    46             f = 1; break;
    47         }
    48     }
    49     if(f) cout << "Yes" << endl;
    50     else cout << "No" << endl;
    51 }
    52 int main() {
    53     freopen("test.in", "r", stdin);
    54     //freopen("test.out", "w", stdout);
    55     ios::sync_with_stdio(0);
    56     cin.tie(0); cout.tie(0);
    57     int _; cin >> _;
    58     while(_--)
    59     solve();
    60     return 0;
    61 }
    View Code

    这个做完,大概就4:15,然后看了看1003 洗衣服,简单分析下,一看时间到了,也没想出怎么做。中间还耽搁了大概1小时,去睡觉,最后结果算一般把,估计正常做也就这个水平!

  • 相关阅读:
    详细讲解Linux下安装python3(Python3.5.4)
    JavaScript抽象语法树英文对照
    关于MacBook Pro外接4K/60HZ显示器的问题
    Vue组件v-if新渲染的组件不更新
    Vue 子组件与子组件之间传值
    Spring整合CXF步骤,Spring实现webService,spring整合WebService
    CXF错误:Unsupported major.minor version 51.0,java.lang.UnsupportedClassVersionErro
    springMvc中406错误解决,springMvc使用json出现406 (Not Acceptable)
    jquery.validate中使用remote,remote相同值不校验问题解决
    MyBatis返回主键,MyBatis Insert操作返回主键
  • 原文地址:https://www.cnblogs.com/y119777/p/6218631.html
Copyright © 2011-2022 走看看