自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 八皇后问题两种方法

void dfs(int cur,int n){ if(cur==n) tot++; else for(int i=0;i<n;i++) { int ok=1; c[cur]=i; for(int j=0;j<cur;j++) { if(c[j]==c[cur]||c[j]-c[cur

2016-05-30 09:22:17 286

原创 子集生成 二进制法

个人感觉这个方法是最巧妙,也是最简单的。#include#include#includeusing namespace std;void dfs(int n,int s){ for(int i=0;i<n;i++){ if(s&(1<<i)) printf("%d ",i+1); } printf("\n");}int main(){

2016-05-30 08:37:19 283

原创 子集生成 位向量发法

#include#include#includeusing namespace std;void dfs(int n,int a[10],int cur){ if(cur==n){ for(int i=0;i<n;i++) if(a[i]) printf("%d ",i+1); printf("\n"); return ;

2016-05-30 08:07:19 267

原创 子集生成 增量构造法

#include#include#includeusing namespace std;void dfs(int cur,int a[10],int n,int p[3]){ for(int i=0;i<cur;i++) printf("%d ",p[a[i]]); printf("\n"); int pq=cur?a[cur-1]+1:0; for(in

2016-05-30 07:59:21 471

原创 枚举全排列

#include#includevoid dfs(int p[10],int a[10],int n,int cur){ if(cur==n){ for(int i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); return ; } for(int i=0;i<n;i++)

2016-05-30 07:34:43 349

原创 uva 10129 Play on Words

这个dfs感觉好简陋,但是只要能把联通部分的vis点上就行,顺序也不管了。dos是用来判断联通的,有3种情况,一种是不联通,那么从出度为1的起点开始,能把联通的部分连起来,不联通的访问不了,因为从起点开始,第二种情况是联通的欧拉道路,遍历一遍就行,虽然遍历的顺序不对,但是能把联通的结点都访问完,第三种情况是欧拉回路,那就同第二种情况了。总的来说就是先判断有没有欧拉道路或欧拉回路,有的话再判

2016-05-27 19:37:01 228

原创 欧拉道路与欧拉回路算法

若是有向图,把vis[u][v]=vis[v][u]=1改为vis[u][v]=1;void euler(int u){ for(int v=0;v<n;v++) { if(G[u][v]&&!vis[u][v]) { vis[u][v]=vis[v][u]=1; euler(v);

2016-05-26 14:38:36 451

原创 拓扑排序

#include#includeusing namespace std;const int maxn=100+5;int c[maxn];int n;int G[maxn][maxn];int topo[maxn];int t;int m;bool dfs(int u){ c[u]=-1; for(int v=0;v<n;v++) {

2016-05-26 13:52:58 166

原创 uva 816 Abbott's Revenge

#include#include#include#include#includeusing namespace std;struct Node{ int r,c,dir; Node(int r=0,int c=0,int dir=0): r(r),c(c),dir(dir) {};};const int maxn=100;const char *dirs="NES

2016-05-26 09:22:05 230

原创 uva 572 Oil Deposits

#include#include#includeusing namespace std;const int maxn=100+5;char pic[maxn][maxn];int buf[maxn][maxn];int m,n;void dfs(int r,int c,int id){ if(r=m||c=n) return ; if(pic[r][c]!='@'

2016-05-25 19:45:42 181

原创 uva 297 Quadtrees

本题关键点在于每一个黑色格子占一个像素,像题目里的图一个黑色格子由64个黑色像素组成,所以数组中有,64个1。#include#include#includeusing namespace std;const int len=32;const int maxn=1024+10;char s[maxn];int buf[len][len];int cnt=0;void draw

2016-05-25 19:24:18 191

原创 uva 699 The Falling Leaves

#include#include#includeusing namespace std;const int MAXN=1000+10;int sum[MAXN];void build(int p){ int v; scanf("%d",&v); if(v==-1) return ; sum[p]+=v; build(p-1); buil

2016-05-25 18:37:20 180

原创 uva 839 Not so Mobile

#include#includeusing namespace std;bool solve(int &W){ int w1,d1,w2,d2; bool b1=true,b2=true; scanf("%d%d%d%d",&w1,&d1,&w2,&d2); if(!w1) b1=solve(w1); if(!w2) b2=solve(w2);

2016-05-25 09:34:23 243

原创 uva 548 Tree

#include#include#includeusing namespace std;const int maxv=10000+10;int in_order[maxv],post_order[maxv],lch[maxv],rch[maxv];int n;bool read_list(int *a){ string line; if(!getline(cin,l

2016-05-25 08:44:34 185

原创 dp 矩阵取数问题

#include#includeusing namespace std;const int MAXN=500+5;typedef long long LL;LL a[MAXN][MAXN];void dp(int i,int j){ if(i==1&&j==1) a[i][j]=a[i][j]; else if(i==1) a[i][j]=a[i][j-1]+a[i]

2016-05-24 21:55:39 233

原创 uva 122 Trees on the level

#include#include#include#include#includeconst int MAXN=256+10;using namespace std;struct Node{ bool have_value; int v; Node *left,*right; Node():have_value(false),left(NULL),rig

2016-05-24 21:15:30 197

原创 uva 679 Dropping Balls

思维方式值得学习。#include#includeusing namespace std;int main(){ int t; while(scanf("%d",&t)&&t!=-1) { while(t--) { int D,I; while(scanf("%d%d",&D,&I)

2016-05-24 19:07:43 189

原创 uva 12657 Boxes in a Line

双向链表的两端各放一个0。#include#include#include#includeconst int MAXN=100000+10;int left[MAXN],right[MAXN];void Link(int L,int R){ right[L]=R;left[R]=L;}int main(){ int n,m,kase=0; while

2016-05-24 16:35:59 201

原创 uva 11988 Broken Keyboard (a.k.a. Beiju Text)

以前看这题看不懂,现在终于自己写出来了。。。#include#include#includeconst int MAXN=100000+10;char s[MAXN];int last,cur,next[MAXN];int main(){ while(scanf("%s",s+1)==1) { last=cur=0; next[0]

2016-05-23 22:00:41 196

原创 uva 442 Matrix Chain Multiplication

#include#include#include#includeusing namespace std;struct Matrix{ int a,b; Matrix(int a=0,int b=0):a(a),b(b) {};}m[26];stack s;int main(){ int n; cin>>n; for(int i=0;i<n;

2016-05-23 20:11:28 207

原创 uva 514 Rails

#include#include#includeusing namespace std;const int MAXN=1000+10;int n,target[MAXN];int main(){ while(scanf("%d",&n)==1&&n) { while(1) { scanf("%d",&target

2016-05-23 19:26:44 247

原创 uva 221 Urban Elevations

#include#include#includeusing namespace std;const int MAXN=100+5;struct Building{ int Id; double x,y,w,d,h; bool operator < (const Building &rhs) const { return x<rhs.x||(x==r

2016-05-23 18:55:52 240

原创 uva 814 The Letter Carrier's Rounds

#include#include#include#include#include#includeusing namespace std;void parse_address(const string &s,string &user,string &mta){ int k=(int)s.find('@'); user=s.substr(0,k); mta=s.

2016-05-23 09:08:54 210

原创 51nod 1057 N的阶乘

因为是数组每个元素存4个,所以输出时记得补位。#include#includeusing namespace std;const int MAXN=40000;int a[MAXN]={1,1};int main(){ int c=1,n,j; int carry; scanf("%d",&n); for(int i=2;i<=n;i++)

2016-05-22 21:17:06 187

原创 大数的四则运算与比较

只写了加,减法,乘法,除法原理类似。#include#include#include#includeusing namespace std;struct BigInteger{ static const int BASE=100000000; static const int WIDTH=8; vector s; BigInteger (long lo

2016-05-22 15:42:20 395

原创 大整数类BigInteger

#include#include#include#includeusing namespace std;struct BigInteger{ static const int BASE=100000000; static const int WIDTH=8; vector s; BigInteger (long long num=0) {*this=num

2016-05-22 09:59:27 368

原创 取随机数的方法

1.rand()/RAND_MAX 得到一个0~1的数,然后乘以你要的数的倍数再四舍五入即可。2.rand()%n的到0~n-1的随机数,但这有一个问题,若n大于RAND_MAX时,这个操作相当于没做,所以当RAND_MAX很大时,使用这个方法。注意,在随机数程序最开始的时候一般要执行一次srand(time(NULL)),目的是初始化随机数种子。

2016-05-22 08:49:35 450

原创 优先队列

以下代码是一个有线队列,重载了(),比较个位数,若a%10>b%10,排到队列最后,a的优先级低,也就是说个位数大的优先级低,反着记就行。#include#include#include#includeusing namespace std;struct cmp{ bool operator () (const int a,const int b) const {

2016-05-22 08:13:15 199

原创 uva 10815 Andy's First Dictionary

#include#include#include#includeusing namespace std;set dict;int main(){ string s,buf; while(cin>>s) { for(int i=0;i<s.length();i++){ if(isalpha(s[i])) s[i]=tolo

2016-05-20 21:34:23 191

原创 POJ 1208 The Blocks Problem

#include#include#include#includeusing namespace std;const int maxn=30;int n;vector pile[maxn];void find(int a,int &p,int &h){ for(p=0;p<n;p++) for(h=0;h<pile[p].size();h++)

2016-05-20 21:18:42 202

原创 结构体模版

看到这个内容,瞬间发现map,vector,set这些容器不就是个模版吗#include#includeusing namespace std;templatestruct Point{ T x; T y; Point(T x=0,T y=0): x(x),y(y) {}};templatePoint operator + (const Point &A,

2016-05-20 19:25:44 1843

原创 c++模版应用实例

#include#includeusing namespace std;struct Point{ int x,y; Point(int x=0,int y=0):x(x),y(y) {}};Point operator + (const Point &A,const Point &B){ return Point(A.x+B.x,A.y+B.y);}ost

2016-05-20 19:08:31 204

原创 运算符重载实例

#include#includeusing namespace std;struct Point{ int x,y; Point(int x=0,int y=0):x(x),y(y) {}};Point operator + (const Point &A,const Point &B){ return Point(A.x+B.x,A.y+B.y);}ost

2016-05-20 18:56:54 228

原创 stringstream

虽然很方便,但是string很慢,string stream更慢,应该谨慎使用。#include#include#includeusing namespace std;int main(){ string line; while(getline(cin,line)) { int sum=0,x; stringstream ss(

2016-05-20 18:47:46 239

原创 uva 253 Cube painting

一开始判断里面没加break;那就有一个疑问rbbbbr和grrrrr也是TRUE,因为我用vis来标记cube2的每一组面只判断一次,那面break就保证了cube1也只判断了一次,如果遇到相同就继续下一组的判断。#include#include#includeusing namespace std;typedef struct{ char c1,c2; int vis;

2016-05-18 21:34:37 217

原创 uva 220 Othello

未A,但是测试了好多数据,没有找出错误。#include#include#includeusing namespace std;using namespace std;char board[10][10];char FirstStep;int adj[9][9];int countW=0,countB=0;int num=0;int n;//存放合法路径typedef st

2016-05-18 19:02:07 344

原创 UVA 201 Squares

水题吧 一开始出了不仔细,初始化写在k循环里面了,花了好长时间找,无语。#include#include#includeusing namespace std;typedef struct{ int hnextx,hnexty; int vnextx,vnexty;}node;int main(){ int n,m; int count[10];

2016-05-16 20:50:19 351

原创 UVA 1189 Xiangqi

UVA的评测有点问题,数据太水了,感觉它上面的数据没有帅将死将军的,所以其他三字都是双向,而帅将是固定的,按照他的数据来看的话帅将上下都有可能,但数据里面没有帅杀死将的,所以不换也无所谓,只要保证其他三子,四个方向都能走就行,不要深究。。。#include#include#includeusing namespace std;int n,x,y;char a[15][15];int

2016-05-15 20:01:46 544

原创 分块查找

#include#includeusing namespace std;#define MAX 10typedef int keytype;typedef struct{ keytype key; int link;}Idxtype;int Idxsearch(Idxtype a[],int b,keytype s[],keytype key,int n){

2016-05-15 09:54:38 311

原创 二分查找

#include#includeusing namespace std;int BinartSearch(int a[],int n,int k){ int low=1; int high=n; int mid; while(low<=high) { mid=(low+high)/2; if(a[mid]==k) re

2016-05-15 08:38:36 209

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除