A - Fox And Snake
模擬。
代碼如下:
#include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; int main() { int n, m, i, j; while(scanf("%d%d",&n,&m)!=EOF){ for(i=0;i B - Fox And Two Dots dfs判環。比賽的時候的flag變量定義了一個全局又定義了一個主函數裡的flag,然後調了半小時才找到錯誤原因。。。跪了。。。 代碼如下: #include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; char s[100][100]; int vis[100][100], n, m, d[100][100], flag; int jx[]= {0,0,1,-1}; int jy[]= {1,-1,0,0}; void dfs(int x, int y, char c, int ans) { int i, j, a, b; if(flag) return ; for(i=0; i<4; i++) { a=x+jx[i]; b=y+jy[i]; if(a>=0&&a=0&&b=3) { flag=1; return ; } } } if(flag) return ; } int main() { int i, j, ans; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0; i C - Fox And Names 拓撲排序裸題。。CF居然也出模板題了。。 代碼如下: #include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; char s[200][200]; int a[200], head[200], cnt, d[200], c[200], tot; struct node { int u, v, next; }edge[100000]; void add(int u, int v) { edge[cnt].v=v; edge[cnt].next=head[u]; head[u]=cnt++; } void topo() { int i, j; queueq; for(i=0;i<26;i++){ if(!d[i]){ q.push(i); } } while(!q.empty()){ int u=q.front(); q.pop(); c[tot++]=u; d[u]--; for(i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; if(d[v]!=-1){ d[v]--; if(d[v]==0) q.push(v); } } } if(tot<26) puts("Impossible"); else { for(i=0;i<26;i++){ printf("%c",c[i]+'a'); } } } int main() { int n, i, j, len1, len2, flag, f; while(scanf("%d",&n)!=EOF){ for(i=0;ilen2){ f=1; break; } } } if(f) puts("Impossible"); else{ tot=0; topo(); } } return 0; } D - Fox And Jumping 暴力。。。要求的是花費最少的集合使得該集合的gcd為1.由於數據只有300,所有的gcd可能出現的情況也不會很多,所以直接保存所有出現的gcd,然後暴力DP即可。 代碼如下: #include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; mapdp; struct node { LL l, c; }fei[400]; LL gcd(LL x, LL y) { return y==0?x:gcd(y,x%y); } int main() { int n, i, j; scanf("%d",&n); for(i=0;i::iterator it; for(i=0;i
dfs判環。比賽的時候的flag變量定義了一個全局又定義了一個主函數裡的flag,然後調了半小時才找到錯誤原因。。。跪了。。。
#include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; char s[100][100]; int vis[100][100], n, m, d[100][100], flag; int jx[]= {0,0,1,-1}; int jy[]= {1,-1,0,0}; void dfs(int x, int y, char c, int ans) { int i, j, a, b; if(flag) return ; for(i=0; i<4; i++) { a=x+jx[i]; b=y+jy[i]; if(a>=0&&a=0&&b=3) { flag=1; return ; } } } if(flag) return ; } int main() { int i, j, ans; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0; i C - Fox And Names 拓撲排序裸題。。CF居然也出模板題了。。 代碼如下: #include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; char s[200][200]; int a[200], head[200], cnt, d[200], c[200], tot; struct node { int u, v, next; }edge[100000]; void add(int u, int v) { edge[cnt].v=v; edge[cnt].next=head[u]; head[u]=cnt++; } void topo() { int i, j; queueq; for(i=0;i<26;i++){ if(!d[i]){ q.push(i); } } while(!q.empty()){ int u=q.front(); q.pop(); c[tot++]=u; d[u]--; for(i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; if(d[v]!=-1){ d[v]--; if(d[v]==0) q.push(v); } } } if(tot<26) puts("Impossible"); else { for(i=0;i<26;i++){ printf("%c",c[i]+'a'); } } } int main() { int n, i, j, len1, len2, flag, f; while(scanf("%d",&n)!=EOF){ for(i=0;ilen2){ f=1; break; } } } if(f) puts("Impossible"); else{ tot=0; topo(); } } return 0; } D - Fox And Jumping 暴力。。。要求的是花費最少的集合使得該集合的gcd為1.由於數據只有300,所有的gcd可能出現的情況也不會很多,所以直接保存所有出現的gcd,然後暴力DP即可。 代碼如下: #include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; mapdp; struct node { LL l, c; }fei[400]; LL gcd(LL x, LL y) { return y==0?x:gcd(y,x%y); } int main() { int n, i, j; scanf("%d",&n); for(i=0;i::iterator it; for(i=0;i
拓撲排序裸題。。CF居然也出模板題了。。
#include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; char s[200][200]; int a[200], head[200], cnt, d[200], c[200], tot; struct node { int u, v, next; }edge[100000]; void add(int u, int v) { edge[cnt].v=v; edge[cnt].next=head[u]; head[u]=cnt++; } void topo() { int i, j; queueq; for(i=0;i<26;i++){ if(!d[i]){ q.push(i); } } while(!q.empty()){ int u=q.front(); q.pop(); c[tot++]=u; d[u]--; for(i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; if(d[v]!=-1){ d[v]--; if(d[v]==0) q.push(v); } } } if(tot<26) puts("Impossible"); else { for(i=0;i<26;i++){ printf("%c",c[i]+'a'); } } } int main() { int n, i, j, len1, len2, flag, f; while(scanf("%d",&n)!=EOF){ for(i=0;ilen2){ f=1; break; } } } if(f) puts("Impossible"); else{ tot=0; topo(); } } return 0; }
暴力。。。要求的是花費最少的集合使得該集合的gcd為1.由於數據只有300,所有的gcd可能出現的情況也不會很多,所以直接保存所有出現的gcd,然後暴力DP即可。
#include #include #include #include #include #include #include #include #include using namespace std; #define LL __int64 #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; mapdp; struct node { LL l, c; }fei[400]; LL gcd(LL x, LL y) { return y==0?x:gcd(y,x%y); } int main() { int n, i, j; scanf("%d",&n); for(i=0;i::iterator it; for(i=0;i
[cpp] [cpp]&nb
//策略模式 //抽象出算法  
遞歸與尾遞歸(C語言),尾遞歸c語言在計算機科學領域中,遞歸
C++拾遺--多線程:多線程的引入 C++拾遺--多線程
PKU C++程序設計實習 學習筆記 1.7 內聯函數和
vc++2013中使用MySQL connector/C++