CodeChef--SEPT14小结
这套题目只做了几个相对简单的。其他的做起来比较吃力。
A 找下规律
/*************************************************************************
> File Name: A.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月06日 星期六 16时32分54秒
> Propose:
************************************************************************/ #include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ const int MOD = 1e9 + ;
typedef long long LL;
int t, n;
char s[]; int main(void) {
ios::sync_with_stdio(false);
cin >> t;
while (t--) {
cin >> s;
n = strlen(s);
LL res = ;
for (int i = ; i < n; i++) {
if ((i + ) % == ) res = (res * ) % MOD;
else res = (res * - ) % MOD;
if (s[i] == 'r') res = (res + ) % MOD;
}
cout << res << endl;
}
return ;
}
B 模拟
n, m = map(int, raw_input().split());
a = map(int, raw_input().split());
now = 1;
while m:
m -= 1;
Q = raw_input().split();
if Q[0] == 'R':
print a[(now + int(Q[1]) - 1) % n - 1]
elif Q[0] == 'C':
now = (now + int(Q[1])) % n;
else :
now = (now - int(Q[1]) + n) % n;
这题被我写烦了。。。是想烦了。
我是枚举中间一堆的个数。然后就是组合数学了。。。。。。。
/*************************************************************************
> File Name: C.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月06日 星期六 11时08分09秒
> Propose:
************************************************************************/ #include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ const int MOD = 1e9 + ;
typedef long long LL;
LL fact[], n; LL pow_mod(LL a, LL b) {
LL res = ;
while (b) {
if (b & ) res = (res * a) % MOD;
a = (a * a) % MOD;
b >>= ;
}
return res;
} void init() {
fact[] = ; fact[] = ;
int now = ;
for (int i = ; i <= ; i++, now++) fact[i] = (fact[i - ] * pow_mod(now, MOD - ) % MOD * i) % MOD;
} int main(void) {
ios::sync_with_stdio(false);
init();
while (cin >> n) {
if (n < ) {
cout << "" << endl;
continue;
}
LL res = ;
if (n % == ){
for (int i = ; i <= n - ; i += ) {
res = (res + fact[(n - i)/ - ]) % MOD;
}
} else {
for (int i = ; i <= n - ; i += ) {
res = (res + fact[(n - i)/ - ]) % MOD;
}
}
cout << res << endl;
} return ;
}
D
E
题解上这题也是个Easy..可是当时愣是没有看出来,知道突破点是k比较小。
正解是枚举数列中第一个和最后一个没有改变的位置, 这个不超过k^2,然后。。。
这里getchar_unlocked是getchar()的线程不安全版本。。好像已经被windows弃用。
还有,n*10可以表达为(n<<3) + (n<<1)
/*************************************************************************
> File Name: E.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月15日 星期一 21时04分57秒
> Propose:
************************************************************************/ #include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ const int MAX_N = ;
typedef long long LL;
#define rep(i, a, b) for (int i = (a); i <= (b); i++)
int n, k, a[MAX_N]; void read(int &res) {
char c = ' ';
res = ;
int sign = ;
while (c < '' || c > '') {if (c == '-') sign = -; c = getchar_unlocked();}
while (c >= '' && c <= '') res = (res<<) + (res<<) + c - '', c= getchar_unlocked();
res *= sign;
} int main(void) {
read(n), read(k);
rep (i, , n) read(a[i]); int a1 = 0x3f3f3f3f, d = 0x3f3f3f3f;
rep (i, , k+) rep (j, n-k+i-, n) {
int cnt = , tmp_d = (a[j] - a[i]) / (j - i), tmp_a1 = a[i] - (i - ) * tmp_d;
rep (t, , n) if (a[t] != tmp_a1 + (t - ) * tmp_d) cnt++;
if (cnt <= k) {
if (a1 > tmp_a1) a1 = tmp_a1, d = tmp_d;
else if (a1 == tmp_a1 && d > tmp_d) d = tmp_d;
}
} rep (i, , n) printf("%d%c", a1 + (i - ) * d, i == n ? '\n' : ' '); return ;
}
/*************************************************************************
> File Name: F.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月08日 星期一 13时07分43秒
> Propose:
************************************************************************/
#include <cmath>
#include <string>
#include <cstdio>
#include <vector>
#include <fstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ typedef long long LL;
LL N, M; /*
* (a / b) % c 等价于 (a % (b * c)) / b;
* 适用于bc不大而且b在c的剩余系中逆元不存在的情况
*/
LL sum(LL n) {
LL m = M * ;
n %= m;
return (n * ( * n % m * n % m * n % m * n % m + * n % m * n % m * n % m + * n % m * n % m - + m) % m) % m / ;
} int main(void) {
ios::sync_with_stdio(false);
int T;
cin >> T;
while (T--) {
cin >> N >> M;
if (N == ) {
cout << N % M << endl;
continue;
} else if (N == ) {
cout << (N + ) % M << endl;
continue;
} else if (N == ) {
cout << (N + + ) % M << endl;
continue;
} LL res = , i = , fst = , last = N, j;
while (true) {
LL r = N / (i + ), l = i;
j = N / i;
res = (res + (sum(last) - sum(r) + M) % M * (i % M) % M) % M;
if (r != fst || last != l)
res = (res + (sum(l) - sum(fst) + M) % M * (j % M) % M) % M;
if (l >= r) break;
i++;
last = r;
fst = l;
} cout << res << endl;
} return ;
}
需要维护每个区间内比右短点小的个数和比左端点小的个数,BIT系列。。是个不错的题。
/*************************************************************************
> File Name: E.cpp
> Author: Stomach_ache
> Mail: sudaweitong@gmail.com
> Created Time: 2014年09月08日 星期一 17时18分23秒
> Propose:
************************************************************************/ #include <cmath>
#include <string>
#include <cstdio>
#include <fstream>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
/*Let's fight!!!*/ #define rep(i, n) for (int i = (1); i <= (n); i++)
#define per(i, n) for (int i = (n); i >= (1); i--)
const int MAX_N = ;
typedef long long LL;
int N, M, w, A[MAX_N], c[MAX_N];
struct node {
int id, l, r, ltr, ltl, eql, eqr;
node () {}
node (int id, int l, int r):id(id), l(l), r(r),ltr(), ltl() {}
friend bool operator < (const node &x, const node &y) {
return x.id < y.id;
}
}Q[MAX_N]; int lowbit(int x) {
return x & -x;
} void add(int x) {
while (x <= w) {
c[x]++;
x += lowbit(x);
}
} int sum(int x) {
int res = ;
while (x > ) {
res += c[x];
x -= lowbit(x);
}
return res;
} int main(void) {
ios::sync_with_stdio(false);
while (cin >> N >> M) {
vector<int> var;
rep (i, N) {
cin >> A[i];
var.push_back(A[i]);
}
sort(var.begin(), var.end());
var.resize(unique(var.begin(), var.end()) - var.begin());
w = var.size(); memset(c, , sizeof(c));
LL res = ;
rep (i, N) {
int pos = lower_bound(var.begin(), var.end(), A[i]) - var.begin() + ;
res += i - - sum(pos - ) - (sum(pos) - sum(pos - ));
add(pos);
} // cerr << res << endl; vector<int> lft[MAX_N], rgt[MAX_N];
int x, y;
rep (i, M) {
cin >> x >> y;
if (x > y) swap(x, y);
Q[i] = node(i, x, y);
lft[x].push_back(i);
rgt[y].push_back(i);
} memset(c, , sizeof(c));
rep (i, N) {
int szl = lft[i].size(), szr = rgt[i].size();
for (int j = ; j < szl; j++) {
int id = lft[i][j];
int pos = lower_bound(var.begin(), var.end(), A[Q[id].r]) - var.begin() + ;
Q[id].eqr = sum(pos) - sum(pos - );
Q[id].ltr = sum(pos - );
} int pos = lower_bound(var.begin(), var.end(), A[i]) - var.begin() + ;
for (int j = ; j < szr; j++) {
int id = rgt[i][j];
Q[id].ltr = sum(pos - ) - Q[id].ltr;
Q[id].eqr = sum(pos) - sum(pos - ) - Q[id].eqr;
}
add(pos);
} memset(c, , sizeof(c));
per (i, N) {
int szl = lft[i].size(), szr = rgt[i].size();
for (int j = ; j < szr; j++) {
int id = rgt[i][j];
int pos = lower_bound(var.begin(), var.end(), A[Q[id].l]) - var.begin() + ;
Q[id].ltl = sum(pos - );
Q[id].eql = sum(pos) - sum(pos - );
}
int pos = lower_bound(var.begin(), var.end(), A[i]) - var.begin() + ;
for (int j = ; j < szl; j++) {
int id = lft[i][j];
Q[id].ltl = sum(pos - ) - Q[id].ltl;
Q[id].eql = sum(pos) - sum(pos - ) - Q[id].eql;
}
add(pos);
}
// cerr << "say hello\n"; sort (Q + , Q + M + );
rep (i, M) {
int l = Q[i].l, r = Q[i].r;
LL tmp = Q[i].ltr - Q[i].ltl - (r - l + - Q[i].ltr - Q[i].eqr) + (r - l + - Q[i].ltl - Q[i].eql);
if (A[r] > A[l]) tmp--;
else if (A[r] < A[l]) tmp++;
cout << res + tmp << endl;
}
} return ;
}
H
I
J
CodeChef--SEPT14小结的更多相关文章
- LTIME16小结(CodeChef)
题目链接 最后一题是Splay...还没有学会..蒟蒻!!! A /****************************************************************** ...
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- scikit-learn随机森林调参小结
在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- scikit-learn 梯度提升树(GBDT)调参小结
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
随机推荐
- JS 标签页切换
一 <!DOCTYPE html><html><head><meta charset="utf-8"/><title>自 ...
- python中使用xlrd、xlwt操作excel
python 对 excel基本的操作如下: # -*- coding: utf-8 -*- import xlrd import xlwt from datetime import date,dat ...
- BCB怎么调用DLL中的函数
推荐你看<BCB编写DLL终极手册>这篇文章如下片段:二. 静态调用 DLL使用 $BCB path\Bin\implib.exe 生成 Lib 文件,加入到工程文件中将该文件拷贝到当前目 ...
- 自己整理的一个访问SQLite3数据库的C++类
原文地址:自己整理的一个访问SQLite3数据库的C++类作者:vigra 近日,对SQLite3的使用进行了研究.真不愧是优秀的嵌入数据库,API接口也极其简捷.基本上只要使用以下几个接口就能完成数 ...
- input 的 placeholder 样式修改
input::-webkit-input-placeholder{ color:#999999; } input::-moz-placeholder{ /* Mozilla Firefox 19+ * ...
- System.Web.Mvc.EmptyResult.cs
ylbtech-System.Web.Mvc.EmptyResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Public ...
- H-ui 前端框架
H-ui 前端框架 架起设计与后端的桥梁轻量级前端框架,简单免费,兼容性好,服务中国网站. 首个付费版产品 H-ui.admin.Pro,盘他!
- 表单下拉框select
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- python tkiner实现自动打包程序
环境 python3.x 使用前请确保安装pyinstaller库 本程序还未完善,可以自行完善 若要使用加密,请自行安装cryptodome库 import tkinter as tk from t ...
- python 筛选序列中的元素
列表生成式 a = [1, 2, 3, 4, -1, -2] b = [i for i in a if a > 0] 如果数据量很大,会产生一个庞大的结果.这时可以用生成器表达式: b = (i ...