zoukankan      html  css  js  c++  java
  • 2018 总结

    总是要面对的东西,逃不过。

    这篇包含两个部分,竞赛与学习

    希望自己能在2019加倍努力。


    Part1:NOIP2018

    先上成绩:

    FJ - 0963 :T1 :100 T2:22 T3:12 T4:0

    Total :134 福建省二等奖

    T1:标题统计

    考场代码:

     1 #include <cstdio>
     2 
     3 int main() {
     4     //freopen("a.in","r",stdin);
     5     int ans = 0;
     6     char v = getchar();
     7     while (v != EOF) {
     8         if (v != ' ' && v != '
    ') {
     9             ans++;
    10         }
    11         v = getchar();
    12     }
    13     printf("%d",ans);
    14     return 0;
    15 } 
    View Code

    AC代码同上,这题是入门题,并没有出现太大的问题。


    T2:龙虎斗

    考场代码:

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <cctype>
     6 #define ll unsigned long long
     7 using namespace std;
     8 
     9 ll read() {
    10     ll a = 0,f = 1;
    11     char v = getchar();
    12     while (!isdigit(v)) {
    13         if (v == '-') {
    14             f = -1;
    15         }
    16         v = getchar();
    17     }
    18     while (isdigit(v)) {
    19         a = a * 10 + v - 48;
    20         v = getchar();
    21     }
    22     return a * f;
    23 }
    24 
    25 ll c[100010];
    26 int main() {
    27     freopen("fight.in","r",stdin);
    28     freopen("fight.out","w",stdout);
    29     ll n = read();
    30     for (ll i = 1;i <= n;i++) {
    31         c[i] = read();
    32     }
    33     ll m = read(),p1 = read(),s1 = read(),s2 = read();
    34     ll lsum = 0,rsum = 0;
    35     for (int i = 1;i <= n;i++) {
    36         if (i == m) {
    37             continue;
    38         }
    39         if (i < m) {
    40             lsum += c[i] * (m-i);
    41         }
    42         if (i > m) {
    43             rsum += c[i] * (i-m);
    44         }
    45     }
    46     if (p1 > m)    lsum += s1 * (m - p1);
    47     if (p1 < m) rsum += s1 * (p1 - m);
    48     ll nlsum = lsum,nrsum = rsum,bh = n,small = abs(lsum - rsum);
    49     for (int i = 1;i <= n;i++) {
    50         if (i == m) {
    51             left == false;
    52         }
    53         if (i < m) {
    54             nlsum = lsum + s2 * (m-i);
    55             if ((abs(nlsum - nrsum) < small) || ((abs(nlsum - nrsum)) == small && i < bh)) {
    56                 bh = i;
    57                 small = abs(nlsum - nrsum);
    58             }
    59         }
    60         if (i > m) {
    61             nrsum = rsum + s2 * (i-m);
    62             if ((abs(nlsum - nrsum) < small )|| ((abs(nlsum - nrsum)) == small && i < bh)) {
    63                 bh = i;
    64                 small = abs(nlsum - nrsum);
    65             }
    66         }
    67     }
    68     cout << bh;
    69     fclose(stdin);
    70     fclose(stdout);
    71     return 0;
    72 }
    View Code

    槽点过多,一点一点来分析:

    1. 对于数据类型并不熟悉,导致考场上写了unsigned long long(被玩了很久的梗),还写了abs,这个其实可以直接导致CE,还好没有,给了我20分
    2. 主过程完全不知道在干嘛,完全就是可以说瞎写的,并不是说不会写,考场上思路乱掉了
    3. 考后拿了100分

    这一题其实是我最想打自己的一道题,本来可以拿100分的,但是由于各种原因拿到了这个分数。说明对于模拟类的题还是要细心。

    AC代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cctype>
     4 using namespace std;
     5 typedef long long ll;
     6 const int MAXN = 100010;
     7 
     8 ll read() {
     9     ll a = 0,f = 1;
    10     char v = getchar();
    11     while (!isdigit(v)) {
    12         if (v == '-') {
    13             f = -1;
    14         }
    15         v = getchar();
    16     }
    17     while (isdigit(v)) {
    18         a = a * 10 + v - 48;
    19         v = getchar();
    20     }
    21     return a * f;
    22 }
    23 
    24 ll myabs(ll a) {
    25     if (a < 0) {
    26         return -a;
    27     }
    28     else {
    29         return a;
    30     }
    31 }
    32 
    33 ll c[MAXN],l,r,m,s1,r1,s2,n,sma,loc;
    34 
    35 int main() {
    36     n = read();
    37     for (ll i = 1;i <= n;i++) {
    38         c[i] = read();
    39     }
    40     m = read(); r1 = read(); s1 = read(); s2 = read();
    41     for (ll i = 1;i < m;i++) {
    42         l += c[i] * (m - i);
    43     }
    44     for (ll i = m+1;i <= n;i++) {
    45         r += c[i] * (i - m);
    46     }
    47     if (r1 > m) {
    48         r += s1 * (r1 - m);
    49     }
    50     if (r1 < m) {
    51         l += s1 * (m - r1);
    52     }
    53     sma = myabs(l-r);
    54     loc = m;
    55     for (int i = 1;i <= m;i++) {
    56         if (sma > myabs((l+s2*(m-i))-r) || (sma == myabs((l+s2*(m-i))-r) && i < loc)) {
    57             sma = myabs((l+s2*(m-i))-r);
    58             loc = i;
    59         }
    60     }
    61     for (int i = m+1;i <= n;i++) {
    62         if (sma > myabs((r+s2*(i-m))-l) || (sma == myabs((r+s2*(i-m))-l) && i < loc)) {
    63             sma = myabs((r+s2*(i-m))-l);
    64             loc = i;
    65         }
    66     }
    67     cout << loc;
    68     return 0;
    69 }
    View Code

    T3:摆渡车

    我从XDFZ一路打到南天门,却倒在了一辆人大附中的摆渡车前——zzl

    考场上明白了什么是学长说的所谓“膀胱题”(上厕所越多越有思路)

    考场代码:

     1 #include <cstdio>
     2 #include <cctype>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 inline int read() {
     7     int a = 0,f = 1;
     8     char v = getchar();
     9     while (!isdigit(v)) {
    10         if (v == '-') {
    11             f = -1;
    12         }
    13         v = getchar();
    14     }
    15     while (isdigit(v)) {
    16         a = a * 10 + v - 48;
    17         v = getchar();
    18     }
    19     return a * f;
    20 }
    21 
    22 inline bool cmp (int a,int b) {
    23     return a < b;
    24 } 
    25 int t[501];
    26 int main() {
    27     //freopen("bus.in","r",stdin);
    28     //freopen("bus.out","w",stdout);
    29     int n = read(),m = read();
    30     for (int i = 1;i <= n;i++) {
    31         time[i] = read();
    32     } 
    33     sort(t+1,t+1+n,cmp);
    34     int rs = 0,timea = 0,last = 1,dd = 0;
    35     for (int i = 1;i <= n;i++) {
    36         timea = min(timea + m,timea + (m - (time[i+1] - time[i])));
    37         for (int j = last;j <= n;j++) {
    38             if (timea >= t[j]) {
    39                 dd += timea - t[j];
    40             }
    41             if (timea < t[j]) {
    42                 last = j;
    43                 break;
    44             }
    45         }
    46     }
    47     printf("%d",dd);
    48     //fclose(stdin);
    49     //fclose(stdout);
    50     return 0;
    51 }
    View Code

    考场去了N次厕所,还是没有推出转移方程,最后只能打了一个大样例通不过的贪心,意料之外拿了12分。

    对于DP还是需要多加练习。

    AC代码:

     1 #include <cstdio>
     2 #include <algorithm>
     3 
     4 const int maxT = 4000105;
     5 
     6 int n, m, t, ti, ans = 1e9, l = 1, r, cnt[maxT], sum[maxT], q[maxT], f[maxT];
     7 
     8 inline double getSlope(int u, int v) { return (double) (f[v] + sum[v] - f[u] - sum[u]) / (cnt[u] == cnt[v] ? 1e-9 : cnt[v] - cnt[u]); }
     9 
    10 int main() {
    11     scanf("%d%d", &n, &m);
    12     for (int i = 1; i <= n; i++) {
    13         scanf("%d", &ti); t = std::max(t, ti);
    14         cnt[ti]++; sum[ti] += ti;
    15     }
    16     for (int i = 1; i < t + m; i++) { cnt[i] += cnt[i - 1]; sum[i] += sum[i - 1]; } // 前缀和.
    17     for (int i = 0; i < t + m; i++) {
    18         if (i - m >= 0) {
    19             while (l < r && getSlope(q[r - 1], q[r]) >= getSlope(q[r], i - m)) { r--; }
    20             q[++r] = i - m; // 把可能成为最优解的推入队列. 
    21         }
    22         while (l < r && getSlope(q[l], q[l + 1]) <= i) { l++; } // 把不可能成为最优解的弹出队列. 
    23         f[i] = cnt[i] * i - sum[i]; // 特判边界情况.
    24         if (l <= r) { f[i] = std::min(f[i], f[q[l]] + (cnt[i] - cnt[q[l]]) * i - (sum[i] - sum[q[l]])); } // 斜率优化转移. 
    25     }
    26     for (int i = t; i < t + m; i++) { ans = std::min(ans, f[i]); }
    27     printf("%d
    ", ans);
    28     return 0;
    29 }
    View Code

    (实际上还有更优做法,不过并没有研究)


    T4:对称二叉树

    先讲个笑话:20 -> 0是什么体验?

    考场上大暴力都能得分,我写了一遍

    然后交了cout << 1;

    这题就是典型的:暴力出奇迹

    一个dfs就可以过掉的无脑题目,考场上明显把它想难了。

    AC代码:

     1 #include <cstdio>
     2 #include <cctype>
     3 #define MAXN 1000010
     4 
     5 int tree[MAXN][2],ans[MAXN],final,val[MAXN];
     6 
     7 inline int max(int a,int b) {
     8     if (a > b) {
     9         return a;
    10     }
    11     else {
    12         return b;
    13     } 
    14 } 
    15 inline int read() {
    16     int a = 0,f = 1;
    17     char v = getchar();
    18     while (!isdigit(v)) {
    19         if (v == '-') {
    20             f = -1;
    21         }
    22         v = getchar();
    23     }
    24     while (isdigit(v)) {
    25         a = a * 10 + v - 48;
    26         v = getchar();
    27     }
    28     return a * f;
    29 }
    30 
    31 inline void dfs(int u) {
    32     ans[u] = 1;
    33     if (tree[u][0] != -1) {
    34         dfs(tree[u][0]);
    35         ans[u] += ans[tree[u][0]];
    36     }
    37     if (tree[u][1] != -1) {
    38         dfs(tree[u][1]);
    39         ans[u] += ans[tree[u][1]];
    40     }
    41 }
    42 
    43 inline bool check(int u,int v) {
    44     if (u == -1 && v == -1) {
    45         return true;
    46     }
    47     if (u != -1 && v != -1 && val[u] == val[v] && check(tree[u][0],tree[v][1]) && check(tree[u][1],tree[v][0])) {
    48         return true;
    49     }
    50     return false;
    51 }
    52 
    53 int main() {
    54     int n = read();
    55     for (int i = 1;i <= n;i++) {
    56         val[i] = read();
    57     }
    58     for (int i = 1;i <= n;i++) {
    59         tree[i][0] = read();
    60         tree[i][1] = read();
    61     }
    62     dfs(1);
    63     for (int i = 1;i <= n;i++) {
    64         if (check(tree[i][0],tree[i][1])) {
    65             final = max(final,ans[i]);
    66         }
    67     }
    68     printf("%d",final);
    69     return 0;
    70 }
    View Code

    Part2:期末考

    关于这部分,我想了很久。

    不能全部怪在考试前突然的感冒,更应该归在最后一两个月的学习状态上。

    1月份开始,我似乎就找不到非常好的学习状态,

    每一天的学习状态并不是很好,

    总是想要努力,但是却没有找到好的方法。

    望着自己与别人的差距,有时会狠下心来认真,但大部分的时间里还是不够。

    考完几个认为自己能发挥好的学科都考得不怎么样,心态从第一天语文考完就开始爆炸

    语文考完:完了,接下来期末考都考不好了

    带着这种心态考完了三天,每天都在数着日子

    回家之后决定抛弃这种状态,努力学习。

    寒假是赶超的最好机会。

    我一直记着这句话

    今年的寒假,我要改变!

    为自己的学习,竞赛加油。

    你好,2019.

    2019.2.2

  • 相关阅读:
    SharePoint 2013 商务智能报表发布
    sharepoint designer web 服务器似乎没有安装microsoft sharepoint foundation
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 入门教程之创建及修改母版页
    SharePoint 2013 入门教程之创建页面布局及页面
    SharePoint 2010 级联下拉列表 (Cascading DropDownList)
    使用SharePoint Designer定制开发专家库系统实例!
    PL/SQL Developer 建立远程连接数据库的配置 和安装包+汉化包+注册机
  • 原文地址:https://www.cnblogs.com/doubeecat/p/2018final.html
Copyright © 2011-2022 走看看