zoukankan      html  css  js  c++  java
  • SnackDown Online Qualifier 2017

    好久没做题了,然后就想着随便做一个。无奈cf都是晚上,然后就看见这个,随便做做。

    资格赛,只要做出来1题就行了,4天的时间。

    1. 水题 

     1 #include <iostream>
     2 #include <stdio.h>
     3  
     4 using namespace std;
     5  
     6 int n;
     7 string s;
     8 void yes() {
     9     cout << "Valid" << endl;
    10 }
    11 void no() {
    12     cout << "Invalid" << endl;
    13 }
    14 void solve() {
    15     cin >> n >> s;
    16     int t = 0;
    17     for (char c : s) {
    18         if(c == 'H') {
    19             if(t == 0) {
    20                 t = 1;
    21             } else {
    22                 no();
    23                 return;
    24             }
    25         } else if(c == 'T') {
    26             if(t == 1) {
    27                 t = 0;
    28             } else {
    29                 no();
    30                 return;
    31             }
    32         }
    33     }
    34     if(t != 0) no();
    35     else yes();
    36 }
    37  
    38 int main() {
    39     //freopen("test.in", "r", stdin);
    40     int _;
    41     cin >> _;
    42     while(_--)
    43         solve();
    44     return 0;
    45 } 
    View Code

    2. 就是 1, 2,3,。。,3,2,1,必须是奇数个。

     1 #include<bits/stdc++.h>
     2 #define pb push_back
     3 typedef long long ll;
     4 using namespace std;
     5 typedef pair<int, int> pii;
     6 const int maxn = 1e2 + 10;
     7  
     8 int n;
     9 int a[maxn];
    10 void yes() {cout << "yes" << endl;}
    11 void no() {cout << "no" << endl;}
    12 void solve() {
    13     cin >> n;
    14     for (int i = 1; i <= n; i++) cin >> a[i];
    15     if(n % 2 == 0) {
    16         no(); return;
    17     }
    18     for (int i = 1; i <= n / 2 + 1; i++) {
    19         if(i != a[i] || a[i] != a[1 + n - i]) {
    20             no(); return;
    21         }
    22     }
    23     yes();
    24 }
    25  
    26 int main() {
    27    // freopen("test.in", "r", stdin);
    28     //freopen("test.out", "w", stdout);
    29     ios::sync_with_stdio(0);
    30     cin.tie(0); cout.tie(0);
    31     int _;
    32     cin >> _;
    33     while(_--)
    34     solve();
    35     return 0;
    36 }
    View Code

    3. 这个题,我写的很麻烦, 上来先判断线段的类型,有三种,点,水平和垂直,然后每2种进行考虑。

    只要一个是点, 就判断这个点是不是在另一个线段上。

    2条线段类型相同, 都是水平或者垂直, 这个时候, 必须共线才满足条件,否则不满足。

    2条线段类型不同,这个时候,2条线段的有一个端点重合,才是满足的。

    就是,上面的这三种情况。

     1 #include<bits/stdc++.h>
     2 #define pb push_back
     3 typedef long long ll;
     4 using namespace std;
     5 typedef pair<int, int> pii;
     6 const int maxn = 1e3 + 10;
     7 int type, mx, ma, mb;
     8 void work(int x, int y, int a, int b) {
     9     type = mx = mb = -1;
    10     if(x == a && y == b) {
    11         type = 3;
    12         ma = x; mb = y;
    13         return;
    14     }
    15     if(x == a) {
    16         type = 1;
    17         mx = x;
    18         ma = min(y, b);
    19         mb = max(y, b);
    20     } else {
    21         type = 2;
    22         mx = y;
    23         ma = min(x, a);
    24         mb = max(x, a);
    25     }
    26 }
    27 void yes() {
    28     cout << "yes" << endl;
    29 }
    30 void no() {
    31     cout << "no" << endl;
    32 }
    33 void solve() {
    34     int x, y, a, b;
    35     cin >> x >> y >> a >> b;
    36     work(x, y, a, b);
    37     int xt = type, xx = mx, xa = ma, xb = mb;
    38     cin >> x >> y >> a >> b;
    39     work(x, y, a, b);
    40     //cout << xt << " " << type << endl;
    41     if(xt == type) {
    42         if(xt == 3) {
    43             if(xa == ma && xb == mb) {
    44                 yes();
    45             } else {
    46                 no();
    47             }
    48             return;
    49         }
    50         if(xx != mx) {
    51             no();
    52             return;
    53         }
    54         if(xa > mb || ma > xb) {
    55             no();
    56             return;
    57         }
    58         yes();
    59     } else {
    60         if(xt == 3) {
    61             if((xa == mx && xb >= ma && xb <= mb) || (xb == mx && xa >= ma && xa <= mb)) {
    62                 yes();
    63  
    64             } else {
    65                 no();
    66             }
    67             return;
    68         }
    69         if(type == 3) {
    70             if((ma == xx && mb >= xa && mb <= xb) || (mb == xx && ma >= xa && ma <= xb)) {
    71                 yes();
    72             } else no();
    73             return;
    74         }
    75         if((xx == ma || xx == mb) && (mx == xa || mx == xb)) {
    76             yes();
    77             return;
    78         }
    79         no();
    80     }
    81 }
    82  
    83 int main() {
    84     //freopen("test.in", "r", stdin);
    85     //freopen("test.out", "w", stdout);
    86     ios::sync_with_stdio(0);
    87     cin.tie(0); cout.tie(0);
    88     int _; cin >> _;
    89     while(_--)
    90     solve();
    91     return 0;
    92 }
    View Code

    4. 大蛇吃小蛇,先从小到大排序,然后对于一次查询,大于等于l的都是满足要求的, 这个是二分, 然后判断剩下的最多能凑成几条蛇。

    剩下的能凑成几条,也是判断一种状况, 左边的蛇都被吃掉,右边的蛇变长成l,看需要的个数是否是左边的个数, 这个过程也是二分,然后就完了。

     1 #include<bits/stdc++.h>
     2 #define pb push_back
     3 typedef long long ll;
     4 using namespace std;
     5 typedef pair<int, int> pii;
     6 const int maxn = 1e5 + 10;
     7 int n, q;
     8 int a[maxn];
     9 ll s[maxn];
    10 ll work(int x, int y) {
    11     return s[y] - s[x - 1];
    12 }
    13 void solve() {
    14     memset(a, 0, sizeof a);
    15     memset(s, 0, sizeof s);
    16     scanf("%d%d", &n, &q);
    17     for (int i = 1; i <= n; i++) {
    18         scanf("%d", &a[i]);
    19         //s[i] = s[i - 1] + a[i];
    20     }
    21     sort(a + 1, a + n + 1);
    22     for (int i = 1; i <= n; i++)
    23         s[i] = s[i - 1] + a[i];
    24     int k;
    25     while(q--) {
    26         scanf("%d", &k);
    27         int t = lower_bound(a + 1, a + n + 1, k) - a;
    28         //cout << t <<endl;
    29         int res = n + 1 - t;
    30         int left = 1, right = t - 1, ed = t - 1;
    31         while(left < right) {
    32             int mid = (left + right) / 2;
    33             ll st = 1ll * (ed - mid) * k - work(mid + 1, ed);
    34             //cout << st << " " << mid << endl;
    35             if(st > mid) {
    36                 left = mid + 1;
    37             } else right = mid;
    38             //cout << left << " " << right << " " << mid << endl;
    39         }
    40         //cout << left << " " << right << endl;
    41         if(left == right)
    42             res += ed - left;
    43         printf("%d
    ", res);
    44     }
    45 }
    46  
    47 int main() {
    48     //freopen("test.in", "r", stdin);
    49     //freopen("test.out", "w", stdout);
    50     int _;
    51     scanf("%d", &_);
    52     while(_--)
    53         solve();
    54     return 0;
    55 }
    View Code
  • 相关阅读:
    死锁及预防
    Java中的接口和抽象类
    Jmeter执行java脚本结束时提示:The JVM should have exited but did not.
    dubbo服务的group和version
    Dubbo-admin无法显示Group分组信息
    Python中的变量、引用、拷贝和作用域
    记一次调试python内存泄露的问题
    使用gdb调试python程序
    dstat用法;利用awk求dstat所有列每列的和;linux系统监控
    flask到底能登录多少用户?
  • 原文地址:https://www.cnblogs.com/y119777/p/6930954.html
Copyright © 2011-2022 走看看