码迷,mamicode.com
首页 > 其他好文 > 详细

SnackDown Online Qualifier 2017

时间:2017-06-01 22:43:01      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:close   opened   sort   har   freopen   否则   isp   判断   online   

好久没做题了,然后就想着随便做一个。无奈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\n", 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

 

SnackDown Online Qualifier 2017

标签:close   opened   sort   har   freopen   否则   isp   判断   online   

原文地址:http://www.cnblogs.com/y119777/p/6930954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!