Codeforces Round #582 (Div. 3)

链接:http://codeforces.com/contest/1213

A. Chips Moving

思路:+2免费代表奇偶性一样的免费,那么只要求奇变成偶的少还是偶变成奇的少就行。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 105;
 4 int num[2];
 5 int main()
 6 {
 7     std::ios::sync_with_stdio(false);
 8     int n;
 9     cin >> n;
10     int a;
11     for(int i = 0;i < n;i++)
12     {
13         cin >> a;
14         num[a%2]++;
15     }
16     cout << min(num[1], num[0]) << endl;
17     return 0;
18 }
View Code

B. Bad Prices

思路:倒过来维护最小值,大于最小值的都是bad。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 2e5;
 4 int a[maxn];
 5 int main()
 6 {
 7     std::ios::sync_with_stdio(false);
 8     int t;
 9     cin >> t;
10     while(t--)
11     {
12         int n;
13         cin >> n;
14         for(int i = 0; i < n;i++) cin >> a[i];
15         int ans =  0;
16         int mi = a[n - 1];
17         for(int i = n - 1;i >= 0;i--){
18                 if(a[i] > mi) ans++;
19                 else mi = a[i];
20         }
21         cout << ans << endl;
22     }
23     return 0;
24 }
View Code

C. Book Reading

思路:m的个位数是奇数的10个一循环,循环的总和是10,偶数5个一循环,循环和为20,特判0和5即可。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 2e5;
 5 int main()
 6 {
 7     std::ios::sync_with_stdio(false);
 8     int t;
 9     cin >> t;
10     while(t--)
11     {
12         ll n, m;
13         cin >> n >> m;
14         ll id = m%10;
15         ll sum = n / m;
16         if(id  % 2 == 0)
17         {
18             if(id == 0) {cout << 0 << endl;continue;}
19             ll ans = sum / 5LL * 20LL;
20             for(ll i = 1;i <= sum%5LL;i++){
21                 ans += (id * i)%10;
22             }
23             cout << ans << endl;
24         }
25         else {
26             if(id == 5){
27                 cout << (sum / 2 + sum%2) * 5LL << endl;
28                 continue;
29             }
30             ll ans = sum / 10LL * 45LL;
31             for(ll i = 1;i <= sum%10LL;i++){
32                 ans += (id * i)%10;
33             }
34             cout << ans << endl;
35         }
36     }
37     return 0;
38 }
View Code

D. Equalizing by Division

思路:贪心 ,从小到大遍历把每个数算出到0的步数(不断除以2),每到一个数给那个数字的个数加一,然后如果那个数字的个数等于K了就更新最小值

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 2e5 + 50;
 5 const int INF = 0x3f3f3f3f;
 6 int a[maxn];
 7 int num[maxn];
 8 int ans[maxn];
 9 int main()
10 {
11     std::ios::sync_with_stdio(false);
12     int n, k;
13     cin >> n >> k;
14     for(int i = 0;i < n;i++) {
15         cin >> a[i];
16     }
17     sort(a, a + n);
18     int sum = INF;
19     for(int i = 0;i < n;i++){
20         int t = a[i];
21         int cnt = 1;
22         while(t){
23             num[t]++;
24             if(num[t] == k){
25                 sum = min(ans[t],sum);
26             }
27             t /= 2;
28             ans[t] += cnt++;
29         }
30     }
31     cout << sum << endl;
32     return 0;
33 }
View Code

E. Two Small Strings

思路:全排列abc的所有组合,易知排列需满足abcabcabc...abc这样的或者是a...ab...bc...c,这样的(抱歉没看出来..),在所有组合中搜索不存在S和T的字符串即可。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int main()
 5 {
 6     std::ios::sync_with_stdio(false);
 7     int n;
 8     string s, t;
 9     cin >> n >> s >> t;
10     string sum = "abc";
11     vector<string> v;
12     do{
13         string ans;
14         for(int i = 0;i < n;i++) ans += sum;
15         v.push_back(ans);
16         v.push_back(string(n,ans[0]) + string(n,ans[1]) + string(n,ans[2]));
17     }
18     while(next_permutation(sum.begin(),sum.end()));
19     for(auto i : v)
20     {
21         if(i.find(s) == string::npos && i.find(t) == string::npos){
22             cout<< "YES" << endl;
23             cout << i << endl;
24             return 0;
25         }
26     }
27     cout << "NO" << endl;
28     return 0;
29 }
View Code

 

 

 

 

转载于:https://www.cnblogs.com/Carered/p/11437778.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值