- 博客(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关注的人