首页 > 代码库 > Clash Credenz 2014 Wild Card Round题解

Clash Credenz 2014 Wild Card Round题解

A题

简单模拟。

 1 /************************************************************************* 2     > File Name: A.cpp 3     > Author: Stomach_ache 4     > Mail: sudaweitong@gmail.com 5     > Created Time: 2014年09月01日 星期一 08时08分12秒 6     > Propose:  7  ************************************************************************/ 8  9 #include <cmath>10 #include <string>11 #include <cstdio>12 #include <string>13 #include <fstream>14 #include <cstring>15 #include <iostream>16 #include <algorithm>17 using namespace std;18 /*Let‘s fight!!!*/19 20 int n;21 string s;22 double a, f;23 24 int main(void) {25       while (cin >> n) {26         cin >> s;27         cin >> a >> f;28 29         double sum = 0.0;30         int m = (int)s.length();31         bool flag = true;32         for (int i = 0; i < m; i++) {33             if (s[i] == L) sum -= a;34             else sum += a;35             if (sum >= f || sum <= -f) {flag = false; break;}36         }37         printf("%s\n", flag ? "YES" : "NO");38     }39 40     return 0;41 }

 

B题

判断最大值和剩下的值的和的关系

 1 /************************************************************************* 2     > File Name: B.cpp 3     > Author: Stomach_ache 4     > Mail: sudaweitong@gmail.com 5     > Created Time: 2014年09月01日 星期一 14时26分17秒 6     > Propose:  7  ************************************************************************/ 8  9 #include <cmath>10 #include <string>11 #include <cstdio>12 #include <fstream>13 #include <cstring>14 #include <iostream>15 #include <algorithm>16 using namespace std;17 /*Let‘s fight!!!*/18 19 int n, m;20 21 int main(void) {22     ios::sync_with_stdio(false);23     while (cin >> m >> n) {24         long long sum = 0, t = -1, a;25         for (int i = 0; i < m; i++) cin >> a, t = max(t, a), sum += a;26         sum -= t;27         if (t > sum + 1) cout << "NO\n";28         else cout << "YES\n";29     }30     return 0;31 }

 

C题

模拟。

 1 /************************************************************************* 2     > File Name: C.cpp 3     > Author: Stomach_ache 4     > Mail: sudaweitong@gmail.com 5     > Created Time: 2014年09月01日 星期一 14时32分40秒 6     > Propose:  7  ************************************************************************/ 8 #include <map> 9 #include <cmath>10 #include <string>11 #include <vector>12 #include <cstdio>13 #include <fstream>14 #include <cstring>15 #include <iostream>16 #include <algorithm>17 using namespace std;18 /*Let‘s fight!!!*/19 20 int vis[100050];21 22 int main(void) {23       ios::sync_with_stdio(false);24       int n;25       while (cin >> n) {26         map<string, int> var;27         vector<string> s(n + 1);28         for (int i = 1; i <= n; i++) cin >> s[i];29         memset(vis, 0, sizeof(vis));30 31         for (int i = 1; i <= n; i++) {32             if (var.find(s[i]) == var.end()) var[s[i]] = 1;33             else var[s[i]]++;34             if (!vis[var[s[i]]]) vis[var[s[i]]] = i;35         }36         for (int i = 1; i <= n && vis[i]; i++) cout << i <<   << s[vis[i]] << endl;37     }38 39     return 0;40 }

 

D题

从后往前计算,判断当前点在左上或者右上或者左下或者右下,然后分别乘以不同的系数,并且更新点的位置。

 1 /************************************************************************* 2     > File Name: D.cpp 3     > Author: Stomach_ache 4     > Mail: sudaweitong@gmail.com 5     > Created Time: 2014年09月01日 星期一 14时56分31秒 6     > Propose:  7  ************************************************************************/ 8  9 #include <cmath>10 #include <string>11 #include <cstdio>12 #include <fstream>13 #include <cstring>14 #include <iostream>15 #include <algorithm>16 using namespace std;17 /*Let‘s fight!!!*/18 19 int t, a, b, c, d, x, y;20 typedef long long LL;21 22 int main(void) {23       ios::sync_with_stdio(false);24     cin >> t;25     while (t--) {26           int n;27           cin >> n;28         cin >> a >> b >> c >> d;29         cin >> x >> y;30 31         int times = 0;32         while ((1<<times) < max(x, y)) times++;33         LL ans = 1;34         while (times--) {35             if (x <= (1<<times)) {36                   if (y <= (1<<times)) ans *= a;37                 else ans *= b, y -= 1<<times;38             } else {39                   x -= 1<<times;40                   if (y <= (1<<times)) ans *= c;41                 else ans *= d, y -= 1<<times;42             }43         }44         cout << ans << endl;45     }46 47     return 0;48 }

 

E题

比赛时候没有过。可以先枚举角度(从0到2*pi,每次加1e-7,加多了就会WA),求得系数。

 1 /************************************************************************* 2     > File Name: E.cpp 3     > Author: Stomach_ache 4     > Mail: sudaweitong@gmail.com 5     > Created Time: 2014年09月01日 星期一 15时34分16秒 6     > Propose:  7  ************************************************************************/ 8  9 #include <cmath>10 #include <string>11 #include <cstdio>12 #include <fstream>13 #include <cstring>14 #include <iostream>15 #include <algorithm>16 using namespace std;17 /*Let‘s fight!!!*/18 19 int main(void) {20       /*double ans;21     ans=0.0;22     double pi = acos(-1.0);23     for (double i = 0.0; i < 2 * pi; i += 0.0000001)24     {25       ans += sqrt(5.0 - 4.0 * cos(i));26     }27     ans /= 2 * pi * 10000000;28     cout << ans << endl; */29     int r;30     while (cin >> r) cout << (int)(r * 2.12709) <<endl;31     return 0;32 }

 

F题

因为y-x < 1e4,以此作为着手点。先去掉Ai中大于y-x+1的系数,然后去重。

之后就转化为完全背包。

 1 /************************************************************************* 2     > File Name: F.cpp 3     > Author: Stomach_ache 4     > Mail: sudaweitong@gmail.com 5     > Created Time: 2014年09月01日 星期一 19时14分48秒 6     > Propose:  7  ************************************************************************/ 8 #include <set> 9 #include <cmath>10 #include <string>11 #include <cstdio>12 #include <fstream>13 #include <vector>14 #include <cstring>15 #include <iostream>16 #include <algorithm>17 using namespace std;18 /*Let‘s fight!!!*/19 20 int n, x, y, dp[10005];21 22 int main(void) {23     ios::sync_with_stdio(false);24     while (cin >> n) {25         cin >> x >> y;26         int cnt = 0;27         vector<int> a;28         for (int i = 1; i <= n; i++) {29             int tmp;30             cin >> tmp;31             if (tmp <= y - x + 1) a.push_back(tmp - 1);32         }33         sort(a.begin(), a.end());34         a.erase(unique(a.begin(), a.end()), a.end());35         cnt = a.size();36         memset(dp, 0x3f, sizeof(dp));37         int V = y - x;38         dp[0] = 0;39         for (int i = 0; i < cnt; i++) {40             for (int j = a[i]; j <= V; j++) {41                   if (dp[j - a[i]] != 0x3f3f3f3f) dp[j] = min(dp[j], dp[j - a[i]] + a[i]);42             }43         }44         if (dp[V] == 0x3f3f3f3f) puts("IMPOSSIBLE");45         else puts("POSSIBLE");46 47     }48 49     return 0;50 }

 

Clash Credenz 2014 Wild Card Round题解