1-偏差排列

斐波那契数列

#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} lint f[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n;
cin >> n;
f[] = , f[] = ;
for (int i = ; i <= n; i++) f[i] = f[i - ] + f[i - ];
cout << f[n] << endl;
return ;
}

递增N元组

先把每一行排序

dp[i][j]表示从第i行开始,且第i行选择第j个及以后的数字的方案数

#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI;
typedef map<int, int> MII; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} int mp[][];
lint dp[][]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n, m, x;
cin >> n >> m;
for (int i = ; i <= n; i++) {
for (int j = ; j < m; j++) {
cin >> mp[i][j];
}
sort(mp[i], mp[i] + m);
}
for (int i = ; i < m; i++) dp[n][i] = m - i;
for (int i = n - ; i >= ; i--) {
int p = m - ;
for (int j = m - ; j >= ; j--) {
dp[i][j] = dp[i][j + ];
while (mp[i + ][p - ] > mp[i][j] && p) p--;
if (mp[i][j] >= mp[i + ][p]) continue;
dp[i][j] += dp[i + ][p];
dp[i][j] %= ;
}
}
cout << dp[][] << endl;
return ;
}

逃离迷宫5

bfs...

#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI;
typedef map<int, int> MII; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} struct node {
int x, y, k;
node(int xx, int yy, int kk) : x(xx), y(yy), k(kk) {}
};
queue<node> q;
int d[][][];
string mp[];
const int dx[] = { -, , , };
const int dy[] = { , , , - }; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n;
cin >> n;
for (int i = ; i < n; i++) cin >> mp[i];
memset(d, 0x3F, sizeof(d));
while (!q.empty()) q.pop();
if (mp[][] == '.') d[][][] = , q.push(node(, , ));
else d[][][] = , q.push(node(, , ));
while (!q.empty()) {
node p = q.front();
q.pop();
for (int i = ; i < ; i++) {
int px = p.x + dx[i], py = p.y + dy[i];
if (px < || px >= n || py < || py >= n) continue;
if (mp[px][py] == '.') {
if (d[px][py][p.k] > d[p.x][p.y][p.k] + ) {
d[px][py][p.k] = d[p.x][p.y][p.k] + ;
q.push(node(px, py, p.k));
}
} else {
if (p.k == ) {
if (d[px][py][] > d[p.x][p.y][] + ) {
d[px][py][] = d[p.x][p.y][] + ;
q.push(node(px, py, ));
}
}
}
}
}
if (d[n - ][n - ][] != 0x3F3F3F3F || d[n - ][n - ][] != 0x3F3F3F3F) cout << min(d[n - ][n - ][], d[n - ][n - ][]) << endl;
else cout << - << endl;
return ;
}

最大割集

算出每个点相关的边的异或和,割<S,T>中边的异或和就是S集合中点的边异或和的异或和,因为点集内部的边在这些异或和中被计算了两次变成0,只剩下S到T的边。然后按w排序从大到小添加线性基、

#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<functional>
#include<math.h>
#include<iomanip>
//#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI;
typedef map<int, int> MII; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} template <typename T> class LnBase {
public:
int sz, szc;
T *x;
int *y;
LnBase() {
x = , sz = sizeof(T) << ;
szc = -, resize(sz);
}
void resize(int size) {
sz = size;
if (!x) delete (x);
x = new T[sz + ];
y = new int[sz + ];
memset(x, , sz * sizeof(T));
memset(y, , sz << );
}
T operator[](int h) {
return x[h];
}
//增加一个向量,若该向量能被已有向量线性表示,返回-1;否则返回该向量增加的是哪一个维度
int add(T v) {
for (int i = sz - ; i >= ; i--)
if (v & (T) << i) {
if (!x[i]) {
x[i] = v;
szc = -;
return i;
}
v ^= x[i];
}
return -;
}
//若该向量能被已有向量线性表示,返回1;否则返回0
int find(T v) {
for (int i = sz - ; i >= ; i--) {
if (v & (T) << i && x[i]) v ^= x[i];
if (!v) return ;
}
return ;
}
//线性基能表示出的最大向量
T max() {
T s = ;
for (int i = sz - ; i >= ; i--) {
if ((s ^ x[i]) > s) s ^= x[i];
}
return s;
}
//线性基能表示出的最小向量,为空返回-1
T min() {
for (int i = ; i < sz; i++) if (x[i]) return x[i];
return -;
}
//矩阵标准化
void canonicity() {
int i, j;
for (i = sz - ; i > ; i--)
for (j = i - ; j >= ; j--) if (x[i] & (T) << j) x[i] ^= x[j];
for (szc = i = ; i < sz; i++) if (x[i]) y[szc++] = i;
}
//线性基能表示出的第k大的向量
T kth(long long K) {
if (szc < ) canonicity();
if (K >= 1ll << szc) return -;
T s = ;
for (int i = szc - ; i >= ; i--) if (K & 1ll << i) s ^= x[y[i]];
return s;
}
};
LnBase<lint> lb;
pair<lint, lint> p[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n, m, u, v;
lint t;
long double sum = ;
cin >> n >> m;
memset(p, , sizeof(p));
for (int i = ; i < n; i++) {
cin >> p[i].first;
sum += p[i].first;
}
for (int i = ; i < m; i++) {
cin >> u >> v >> t;
u--, v--;
p[u].second ^= t, p[v].second ^= t;
}
sort(p, p + n);
long double sel = ;
for (int i = n - ; i >= ; i--) {
if (lb.add(p[i].second) != -) sel += p[i].first;
}
cout << setprecision() << fixed;
cout << ( * sel - sum) << endl;
return ;
}

[hihocoder][Offer收割]编程练习赛57的更多相关文章

  1. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  2. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  3. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  4. hihocoder offer收割编程练习赛8 C 数组分拆

    思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...

  5. hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)

    题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x ...

  6. hihoCoder [Offer收割]编程练习赛3 D子矩阵求和

    子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常 ...

  7. hihocoder [Offer收割]编程练习赛52 D 部门聚会

    看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半 ...

  8. hihocoder [Offer收割]编程练习赛14

    A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...

  9. hihocoder [Offer收割]编程练习赛8

    第一次做这种比赛,被自己坑的好惨... A.这道题的关键其实是如果有k和n满足kD+F>nL>kD则不能走无限远,分支看似难整理,其实比较简单,F>L根本就不用算了,明摆着就是Bsi ...

随机推荐

  1. Ajax_数据格式_JSON

    [JSON] 1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSO ...

  2. hdu 5040bfs+优先队列 需要存状态

    /* 剪枝:四秒后状态会变得和原来一样,所以四秒后如果再经过这个点肯定不是最优的舍去 易错点:在一个是从.到.这两个点都没有被照到并且不是摄像机,也可能需要等3秒,因为后面的结果可能再这三秒中发生改变 ...

  3. 【触发器】MySQL触发器使用详解

    MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器在MySQL中,创建触发器语法如下: ...

  4. android获取年月日时分秒

    Calendar calendar=Calendar.getInstance(); //获取当前时间,作为图标的名字 String year=calendar.get(Calendar.YEAR)+& ...

  5. Ubuntu 16.04使用NASM编译时用ld链接程序出现:i386 架构于输入文件 sandbox.o 与 i386:x86-64 输出不兼容(I386 architecture in the input file sandbox.o is not compatible with i386: x86-64 output)

    错误: 问题解决过程: 1.先确定CPU的架构 2.这是以64位架构的CPU,如果使用elf参数时,默认是以32位模式去处理,那么此时需要更精确的去指定这个模式,比如elf32(32位),elf64( ...

  6. python requests使用

    参考:http://cn.python-requests.org/zh_CN/latest/ 1.使用requests发送请求: >>> r = requests.get('http ...

  7. 如何基于udp实现tcp协议栈

    http://bbs.csdn.net/topics/280046868 使用套接字完成,按照tcp的方式在一个套接字里维持一个状态机. //定义枚举: enmu state{ CLOSED,//没有 ...

  8. Spring Web Flow 入门demo(二)与业务结合 附源代码

    第一部分demo仅仅介绍了简单的页面跳转,接下来我们要实现与业务逻辑相关的功能. 业务的逻辑涉及到数据的获取.传递.保存.相关的业务功能函数的调用等内容,这些功能的实现都可用Java 代码来完毕,但定 ...

  9. 用XMLRPC开服务进行server/client通信

    本文讲一下怎样用python的xmlrpc开服务,进行server/client的通信. 应用场景:1)需多client訪问应用程序给予应答情况--网页服务.  2)数据极大,希望载入一次.后面仅仅用 ...

  10. CentOS 7下安装Hadoop2.2

    这里就介绍CentOS的安装了,直接进入Hadoop2.2伪分布模式安装. 1.安装包下载 1.1.下载JDK1.7 眼下JDK的版本号是jdk1.8.0_25.这里下载的是jdk1.7.0_67. ...