Clash Credenz 2014 Wild Card Round题解
A题
简单模拟。
/*************************************************************************
> File Name: A.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月01日 星期一 08时08分12秒
> Propose:
************************************************************************/ #include <cmath>
#include <string>
#include <cstdio>
#include <string>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ int n;
string s;
double a, f; int main(void) {
while (cin >> n) {
cin >> s;
cin >> a >> f; double sum = 0.0;
int m = (int)s.length();
bool flag = true;
for (int i = ; i < m; i++) {
if (s[i] == 'L') sum -= a;
else sum += a;
if (sum >= f || sum <= -f) {flag = false; break;}
}
printf("%s\n", flag ? "YES" : "NO");
} return ;
}
B题
判断最大值和剩下的值的和的关系
/*************************************************************************
> File Name: B.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月01日 星期一 14时26分17秒
> Propose:
************************************************************************/ #include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ int n, m; int main(void) {
ios::sync_with_stdio(false);
while (cin >> m >> n) {
long long sum = , t = -, a;
for (int i = ; i < m; i++) cin >> a, t = max(t, a), sum += a;
sum -= t;
if (t > sum + ) cout << "NO\n";
else cout << "YES\n";
}
return ;
}
C题
模拟。
/*************************************************************************
> File Name: C.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月01日 星期一 14时32分40秒
> Propose:
************************************************************************/
#include <map>
#include <cmath>
#include <string>
#include <vector>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ int vis[]; int main(void) {
ios::sync_with_stdio(false);
int n;
while (cin >> n) {
map<string, int> var;
vector<string> s(n + );
for (int i = ; i <= n; i++) cin >> s[i];
memset(vis, , sizeof(vis)); for (int i = ; i <= n; i++) {
if (var.find(s[i]) == var.end()) var[s[i]] = ;
else var[s[i]]++;
if (!vis[var[s[i]]]) vis[var[s[i]]] = i;
}
for (int i = ; i <= n && vis[i]; i++) cout << i << ' ' << s[vis[i]] << endl;
} return ;
}
D题
从后往前计算,判断当前点在左上或者右上或者左下或者右下,然后分别乘以不同的系数,并且更新点的位置。
/*************************************************************************
> File Name: D.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月01日 星期一 14时56分31秒
> Propose:
************************************************************************/ #include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ int t, a, b, c, d, x, y;
typedef long long LL; int main(void) {
ios::sync_with_stdio(false);
cin >> t;
while (t--) {
int n;
cin >> n;
cin >> a >> b >> c >> d;
cin >> x >> y; int times = ;
while ((<<times) < max(x, y)) times++;
LL ans = ;
while (times--) {
if (x <= (<<times)) {
if (y <= (<<times)) ans *= a;
else ans *= b, y -= <<times;
} else {
x -= <<times;
if (y <= (<<times)) ans *= c;
else ans *= d, y -= <<times;
}
}
cout << ans << endl;
} return ;
}
E题
比赛时候没有过。可以先枚举角度(从0到2*pi,每次加1e-7,加多了就会WA),求得系数。
/*************************************************************************
> File Name: E.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月01日 星期一 15时34分16秒
> Propose:
************************************************************************/ #include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ int main(void) {
/*double ans;
ans=0.0;
double pi = acos(-1.0);
for (double i = 0.0; i < 2 * pi; i += 0.0000001)
{
ans += sqrt(5.0 - 4.0 * cos(i));
}
ans /= 2 * pi * 10000000;
cout << ans << endl; */
int r;
while (cin >> r) cout << (int)(r * 2.12709) <<endl;
return ;
}
F题
因为y-x < 1e4,以此作为着手点。先去掉Ai中大于y-x+1的系数,然后去重。
之后就转化为完全背包。
/*************************************************************************
> File Name: F.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月01日 星期一 19时14分48秒
> Propose:
************************************************************************/
#include <set>
#include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ int n, x, y, dp[]; int main(void) {
ios::sync_with_stdio(false);
while (cin >> n) {
cin >> x >> y;
int cnt = ;
vector<int> a;
for (int i = ; i <= n; i++) {
int tmp;
cin >> tmp;
if (tmp <= y - x + ) a.push_back(tmp - );
}
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
cnt = a.size();
memset(dp, 0x3f, sizeof(dp));
int V = y - x;
dp[] = ;
for (int i = ; i < cnt; i++) {
for (int j = a[i]; j <= V; j++) {
if (dp[j - a[i]] != 0x3f3f3f3f) dp[j] = min(dp[j], dp[j - a[i]] + a[i]);
}
}
if (dp[V] == 0x3f3f3f3f) puts("IMPOSSIBLE");
else puts("POSSIBLE"); } return ;
}
H题
给n个不大于1e9的数,要求找出2个数使得这两个数进行没有进位的加法的结果最大。
思路:用Trie树维护每一个数,初始时树为空,没输入一个数,先在树中找某个数与之进行无进位加法可以得到的最大值,
更新最大值,然后将该数加进树中。
下面就是如何找到与某个数进行加法可以得到的最大值,从高位枚举到低位,肯定优先满足最高位最大,这样才能使得结果最大,
对于每一位,降序枚举进行加法可以得到的和,就是9到0,看能否满足,如果满足就跳出并判断下一位,并更新结果。
Accepted Code:
/*************************************************************************
> File Name: H.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月02日 星期二 20时27分32秒
> Propose:
************************************************************************/
#include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ #define rep(i, n) for (int i = (0); i < (n); i++)
#define per(i, n) for (int i = (n); i > 0; i--)
#define FOR(i, n) for (int i = (1); i <= (n); i++)
#define ROF(i, n) for (int i = (n); i >= (1); i--)
const int MAX_N = ;
int ch[MAX_N][], p[];
struct Trie {
int sz;
Trie() {
memset(ch[], -, sizeof(ch[]));
sz = ;
}
void insert(int num) {
int u = ;
for (int i = ; i >= ; i--) {
int id = num / p[i];
if (id >= ) id %= ;
if (ch[u][id] == -) {
memset(ch[sz], -, sizeof(ch[sz]));
ch[u][id] = sz++;
}
u = ch[u][id];
}
}
int find_max(int num) {
int u = , ans = ;
for (int i = ; i >= ; i--) {
int id = num / p[i];
if (id >= ) id %= ;
for (int j = ; j >= ; j--) {
int tmp = j - id;
tmp = (tmp + ) % ;
if (ch[u][tmp] != -) {
ans += p[i] * j;
u = ch[u][tmp];
break;
}
}
}
return ans;
}
}; int main(void) {
ios_base::sync_with_stdio(false);
p[] = ;
FOR (i, ) p[i] = p[i - ] * ;
int n;
while (cin >> n) {
Trie A;
int ans = -, num;
rep (i, n) {
cin >> num;
if (i != ) ans = max(ans, A.find_max(num));
A.insert(num);
}
cout << ans << endl;
} return ;
}
Clash Credenz 2014 Wild Card Round题解的更多相关文章
- VK-Cup2017 Wild Card Round 2
		
来自FallDream的博客,未经允许,请勿转载,谢谢. Cf的Vkcup外卡赛2 上次round2和ditoly翻车了 所以只好来打打了 规则是给一道比较特殊的题目,你要找出较优的解 Unive ...
 - ZOJ Monthly, June 2014 月赛BCDEFGH题题解
		
比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不 ...
 - Noip 2014酱油记+简要题解
		
好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...
 - uoj Goodbye Dingyou Round 题解
		
2.14 晚上的比赛, 现在改好了四题, 还差提答. 在这补个题解 新年的xor Description 给你 \(n\) , 然后要你构造 \([L, R], L<R\) 使得区间异或和为 \ ...
 - COCI 2015、2016 1st round 题解(官方)
		
官方题解: 官方代码: Code-KARTE: #include <cstdio> #include <iostream> #include <cstring> u ...
 - P6739 [BalticOI 2014 Day1] Three Friends 题解
		
目录 写在前面 Solution 何为字符串哈希(可跳过): Code 写在前面 P6739 [BalticOI 2014 Day1] Three Friends 听说这题可以用比较暴力的做法过,比如 ...
 - 2014上海全国邀请赛题解 HDOJ 5090-5099
		
HDOJ 5090 水题.从小到大排序,能够填充达到符合条件的.先填充好.填充之后进行调整. 传送门:pid=5090">点击打开链接 #include <cstdio> ...
 - 2014 百度之星题解 1002 - Disk Schedule
		
Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景. 磁盘 ...
 - 2014 北京邀请赛ABDHJ题解
		
A. A Matrix 点击打开链接 构造,结论是从第一行開始往下产生一条曲线,使得这条区间最长且从上到下递减, #include <cstdio> #include <cstrin ...
 
随机推荐
- Powerdesigner 生成数据字典
			
https://www.jianshu.com/p/f491d0d3c503http://blog.csdn.net/adparking/article/details/50402980http:// ...
 - Java驼峰和下划线互相转化
			
直接上代码 : package com.utils; public class ChangeChar { public static final char UNDERLINE = '_'; publi ...
 - Bitcoin 的基本原理
			
昨天读到了 Bitcoin 的中文介绍,觉得非常有意思.不过上面这篇文章解释的非常不靠谱,我花了一晚上去Bitcoin的官方网站 仔细研究了一下,总算理解了其原理.感觉非常有启发,尤其是对虚拟货币的流 ...
 - iOS之CATextLayer属性简介
			
1.CATextLayer简介 CATextLayer快速高效简单地来渲染纯文本.NSAttributedString /* The text layer provides simple text l ...
 - ArduinoUno和Leonardo的区别
			
学习过Arduino的同学对ArduinoUno和Lenardo的不同点会有所了解,但说起具体的区别估计还是很多人答不上来,今天我们就详细解释下Arduino Uno和Leonardo的不同. 我们从 ...
 - CAS去掉HTTPS认证
			
如何去掉HTTPS认证? 说明:默认情况下HTTP也是可以访问CAS SERVER的,但认证,登陆,退出等操作均没有任何的效果.所以必须作出下面的修改 1.进入WEB-INF\spring-confi ...
 - Activiti流程定义部署、删除
			
1.部署流程定义 部署流程定义也可以认为是增加流程定义. 首先创建流程引擎对象(公用的方法) private ProcessEngine processEngine = ProcessEngin ...
 - python基础-三元表达式/列表推导式/生成器表达式
			
1.三元表达式:如果成立返回if前的内容,如果不成立返回else的内容 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' ...
 - MySQL系列(十一)--外键约束foreign key的基本使用
			
有些时候,为了保证数据的完整性,我们会选择的使用外键约束,例如教师对应的表和课程表中老师的id,这种时候就要使用外键约束了. PS:这里不考虑表结构设计,三范式与反范式等设计问题,基于MySQL8.0 ...
 - 深入了解组件- -- 动态组件 & 异步组件
			
gitHub地址:https://github.com/huangpna/vue_learn/example里面的lesson11 一 在动态组件上使用keep-alive 在这之前我们已经有学习过用 ...