From 469f7db29c4e401f2f36455e7c4106a0a8d8a255 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Mon, 22 Aug 2016 13:34:27 +0800 Subject: [PATCH 01/32] Create SPFA.cpp A Template of SPFA algorithm. It really works. --- .ACM-Templates/SPFA.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .ACM-Templates/SPFA.cpp diff --git a/.ACM-Templates/SPFA.cpp b/.ACM-Templates/SPFA.cpp new file mode 100644 index 0000000..6423a5a --- /dev/null +++ b/.ACM-Templates/SPFA.cpp @@ -0,0 +1,35 @@ +namespace SPFA +{ +const int MAXN = 110; +int d[MAXN];/// distance +int v[MAXN];/// visit +int q[MAXN];/// 基于数组的队列(也可用queue等...) +int n;///点总数 +int m;///边总数 +int mp[MAXN][MAXN]; /// mp[i][j] 表示i<--> j 连通 从1开始 + +int spfa(int s,int t) +{ + for(int i=1;i<=n;i++) + d[i]=INF,v[i]=0; + int cnt=0; + q[cnt++]=1; + v[1]=1; + d[1]=0; + while(cnt>0) + { + int c=q[--cnt]; + v[c]=0; + for(int i=1;i<=n;i++) + { + if(mp[c][i]!=-1&&d[i]>d[c]+mp[c][i]) + { + d[i]=d[c]+mp[c][i]; + if(!v[i]) v[i]=1,q[cnt++]=i; + } + } + } + return d[t]; +} + +}/// End of NameSpace SPFA From e2a6e2e252ad27ab6d638e88d29995337be1b2a4 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Mon, 22 Aug 2016 13:35:38 +0800 Subject: [PATCH 02/32] Create 2544.cpp --- HDOJ/2544.cpp | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 HDOJ/2544.cpp diff --git a/HDOJ/2544.cpp b/HDOJ/2544.cpp new file mode 100644 index 0000000..d8a1542 --- /dev/null +++ b/HDOJ/2544.cpp @@ -0,0 +1,61 @@ +#include +#include +#include + +#define INF 0x3f3f3f3f + +using namespace std; + +namespace SPFA +{ +const int MAXN = 110; +int d[MAXN];/// distance +int v[MAXN];/// visit +int q[MAXN];/// 基于数组的队列(也可用queue等...) +int n;///点总数 +int m;///边总数 +int mp[MAXN][MAXN]; /// mp[i][j] 表示i<--> j 连通 从1开始 + +int spfa(int s,int t) +{ + for(int i=1;i<=n;i++) + d[i]=INF,v[i]=0; + int cnt=0; + q[cnt++]=1; + v[1]=1; + d[1]=0; + while(cnt>0) + { + int c=q[--cnt]; + v[c]=0; + for(int i=1;i<=n;i++) + { + if(mp[c][i]!=-1&&d[i]>d[c]+mp[c][i]) + { + d[i]=d[c]+mp[c][i]; + if(!v[i]) v[i]=1,q[cnt++]=i; + } + } + } + return d[t]; +} + +}/// End of NameSpace SPFA + + +int main() +{ + using namespace SPFA; + while(~scanf("%d%d",&n,&m)&&(n||m)) + { + memset(mp,-1,sizeof(mp)); + for(int i=0;i Date: Mon, 22 Aug 2016 14:01:07 +0800 Subject: [PATCH 03/32] Create 2066.cpp --- HDOJ/2066.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 HDOJ/2066.cpp diff --git a/HDOJ/2066.cpp b/HDOJ/2066.cpp new file mode 100644 index 0000000..245ff20 --- /dev/null +++ b/HDOJ/2066.cpp @@ -0,0 +1,82 @@ +#include +#include +#include +#include +using namespace std; + +#define INF 0x3f3f3f3f + +namespace SPFA +{ +const int MAXN = 1005; +int d[MAXN];/// distance [ From S to ... ] +int v[MAXN];/// visit +int q[MAXN];/// ???????(???queue?...) +int mp[MAXN][MAXN]; /// mp[i][j] ???<--> j ?? ?1?? +int n; + +int spfa(int s,int t) +{ + memset(d,0x3f,sizeof(d)); + memset(v,0,sizeof(v)); + /* + for(int i=1;i0) + { + int c=q[--cnt]; + v[c]=0; + for(int i=1;i<=n;i++) + { + if(mp[c][i]!=-1&&d[i]>d[c]+mp[c][i]) + { + d[i]=d[c]+mp[c][i]; + if(!v[i]) v[i]=1,q[cnt++]=i; + } + } + } + return d[t]; +} + +}/// End of NameSpace SPFA + +bool labled[SPFA::MAXN]; + +int main() +{ + using namespace SPFA; + int T,S,D; + while(scanf("%d %d %d",&T,&S,&D)==3) + { + memset(mp,0x3f,sizeof(mp)); + memset(labled,false,sizeof(labled)); + n=0; + for(int i=0;i Date: Mon, 22 Aug 2016 14:09:19 +0800 Subject: [PATCH 04/32] Update SPFA.cpp Edited. val m is needn't. --- .ACM-Templates/SPFA.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.ACM-Templates/SPFA.cpp b/.ACM-Templates/SPFA.cpp index 6423a5a..2ae8453 100644 --- a/.ACM-Templates/SPFA.cpp +++ b/.ACM-Templates/SPFA.cpp @@ -1,17 +1,20 @@ +/** SPFA 单源最短路径算法 不支持负环*/ namespace SPFA { -const int MAXN = 110; -int d[MAXN];/// distance +const int MAXN = 1005; +int d[MAXN];/// distance [ From S to ... ] int v[MAXN];/// visit int q[MAXN];/// 基于数组的队列(也可用queue等...) -int n;///点总数 -int m;///边总数 -int mp[MAXN][MAXN]; /// mp[i][j] 表示i<--> j 连通 从1开始 +int mp[MAXN][MAXN]; /// mp[i][j] ???<--> j ?? ?1?? +int n; int spfa(int s,int t) { - for(int i=1;i<=n;i++) - d[i]=INF,v[i]=0; + memset(d,0x3f,sizeof(d)); + memset(v,0,sizeof(v)); + /* + for(int i=1;i Date: Mon, 22 Aug 2016 14:29:33 +0800 Subject: [PATCH 05/32] Create 1874.cpp --- HDOJ/1874.cpp | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 HDOJ/1874.cpp diff --git a/HDOJ/1874.cpp b/HDOJ/1874.cpp new file mode 100644 index 0000000..0c89a11 --- /dev/null +++ b/HDOJ/1874.cpp @@ -0,0 +1,76 @@ +#include +#include +#include +#include +using namespace std; + +#define INF 0x3f3f3f3f + +namespace SPFA +{ +const int MAXN = 256; +int d[MAXN];/// distance [ From S to ... ] +int v[MAXN];/// visit +int q[MAXN];/// +int mp[MAXN][MAXN]; /// mp[i][j] i<--> j is connected. +int n; + +int spfa(int s,int t) +{ + memset(d,0x3f,sizeof(d)); + memset(v,0,sizeof(v)); + /* + for(int i=1;i0) + { + int c=q[--cnt]; + v[c]=0; + for(int i=1;i<=n;i++) + { + if(mp[c][i]!=INF&&d[i]>d[c]+mp[c][i]) + { + d[i]=d[c]+mp[c][i]; + if(!v[i]) v[i]=1,q[cnt++]=i; + } + } + } + return d[t]; +} + +}/// End of NameSpace SPFA + +int main() +{ + using namespace SPFA; + int N,M; + while(scanf("%d %d",&N,&M)==2) + { + memset(mp,0x3f,sizeof(mp)); + for(int i=0;icost) + { + mp[b][a]=mp[a][b]=cost; + } + } + int s,t; + scanf("%d %d",&s,&t); + if(s==t) + { + printf("0\n");continue; + } + ++s;++t; + SPFA::n=N; + int ans=spfa(s,t); + printf("%d\n",ans>=INF ? -1 : ans ); + } + return 0; +} From d308527b16fb9a9c09bf4463ca492124f2129289 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Mon, 22 Aug 2016 14:33:48 +0800 Subject: [PATCH 06/32] Update SPFA.cpp --- .ACM-Templates/SPFA.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.ACM-Templates/SPFA.cpp b/.ACM-Templates/SPFA.cpp index 2ae8453..f073cd7 100644 --- a/.ACM-Templates/SPFA.cpp +++ b/.ACM-Templates/SPFA.cpp @@ -6,9 +6,9 @@ int d[MAXN];/// distance [ From S to ... ] int v[MAXN];/// visit int q[MAXN];/// 基于数组的队列(也可用queue等...) int mp[MAXN][MAXN]; /// mp[i][j] ???<--> j ?? ?1?? -int n; +int n;/// n is the number of max Point . -int spfa(int s,int t) +void spfa(int StartPoint) /// d[i] is the min distance from StartPoint to i ( Both >=1 ) { memset(d,0x3f,sizeof(d)); memset(v,0,sizeof(v)); @@ -16,23 +16,24 @@ int spfa(int s,int t) for(int i=1;i0) { int c=q[--cnt]; v[c]=0; for(int i=1;i<=n;i++) { - if(mp[c][i]!=-1&&d[i]>d[c]+mp[c][i]) + /// Here : if your mp[i][j] use INF as infinite, then use mp[c][i]!=INF. + /// Or you may use mp[i][j]!=-1 && d[i] > d[c] + mp[c][i] + if( mp[c][i]!=INF && d[i]>d[c]+mp[c][i] ) { d[i]=d[c]+mp[c][i]; if(!v[i]) v[i]=1,q[cnt++]=i; } } } - return d[t]; } }/// End of NameSpace SPFA From 1c048e4ab29a1a46aae56f30c544160dae2f92b6 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Mon, 22 Aug 2016 14:35:18 +0800 Subject: [PATCH 07/32] Update SPFA.cpp --- .ACM-Templates/SPFA.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ACM-Templates/SPFA.cpp b/.ACM-Templates/SPFA.cpp index f073cd7..21d048f 100644 --- a/.ACM-Templates/SPFA.cpp +++ b/.ACM-Templates/SPFA.cpp @@ -5,7 +5,7 @@ const int MAXN = 1005; int d[MAXN];/// distance [ From S to ... ] int v[MAXN];/// visit int q[MAXN];/// 基于数组的队列(也可用queue等...) -int mp[MAXN][MAXN]; /// mp[i][j] ???<--> j ?? ?1?? +int mp[MAXN][MAXN]; /// mp[i][j] i<--> j is connected. int n;/// n is the number of max Point . void spfa(int StartPoint) /// d[i] is the min distance from StartPoint to i ( Both >=1 ) From a7286a6ecad01259f0692bb4e0e5c0e91868f010 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Tue, 23 Aug 2016 14:09:14 +0800 Subject: [PATCH 08/32] Create 1821_proverbs.cpp From http://www.cnblogs.com/proverbs/archive/2012/10/04/2711751.html --- POJ/1821_proverbs.cpp | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 POJ/1821_proverbs.cpp diff --git a/POJ/1821_proverbs.cpp b/POJ/1821_proverbs.cpp new file mode 100644 index 0000000..08e7979 --- /dev/null +++ b/POJ/1821_proverbs.cpp @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include + +#define N 120 +#define M 17000 + +using namespace std; + +struct RE +{ + int l,p,s; +} re[N]; + +int q[M],l[N],r[N],dp[N][17000],n,k; + +inline bool cmp(const RE &a,const RE &b) +{ + return a.sh&&dp[i-1][q[t-1]]-q[t-1]*re[i].p<=tmp) t--; + q[t++]=j; + } + for(int j=re[i].s,tmp; j<=r[i]; j++) + { + while(t>h&&j-q[h]>re[i].l) h++;//弹出不在范围中的元素 + dp[i][j]=max(dp[i-1][j],dp[i][j-1]); + dp[i][j]=max(dp[i][j],dp[i-1][q[h]]+(j-q[h])*re[i].p); + } + for(int j=r[i]+1; j<=n; j++) dp[i][j]=max(dp[i-1][j],dp[i][j-1]); + } + int ans=0; + for(int i=1; i<=n; i++) ans=max(ans,dp[k][i]); + printf("%d\n",ans); +} + +int main() +{ + while(scanf("%d%d",&n,&k)!=EOF) + { + read(); + go(); + } + return 0; +} From 58ff04bccc333f84173cbdb7890d4c3a43eecc0a Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Tue, 23 Aug 2016 14:11:26 +0800 Subject: [PATCH 09/32] Create 1821_ac_haohao.cpp From http://blog.csdn.net/ac_haohao/article/details/37993735 --- POJ/1821_ac_haohao.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 POJ/1821_ac_haohao.cpp diff --git a/POJ/1821_ac_haohao.cpp b/POJ/1821_ac_haohao.cpp new file mode 100644 index 0000000..f03e65d --- /dev/null +++ b/POJ/1821_ac_haohao.cpp @@ -0,0 +1,55 @@ +#include +#include +#include +#include +using namespace std; +int dp[110][16000+50]; + +struct person +{ + int l,p,s; +}P[110]; +int cmp(person p1,person p2) +{ + return p1.s=P[i].s+P[i].l)//这些木块涂不了 + continue; + while(front Date: Tue, 23 Aug 2016 16:40:25 +0800 Subject: [PATCH 10/32] Create 1821.cpp --- POJ/1821.cpp | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 POJ/1821.cpp diff --git a/POJ/1821.cpp b/POJ/1821.cpp new file mode 100644 index 0000000..59f3206 --- /dev/null +++ b/POJ/1821.cpp @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include +#include +using namespace std; +#define MAXWORKER 110 +#define MAXBENCH 16005 + +#define dprintf(x,args...) +struct _worker +{ + int L,P,S; +}; +bool operator < (const _worker& inca,const _worker& incb) +{ + return inca.S>>>>>> i=%d\n",i); + //list pbus; + static_list_front=0; + static_list[0]=max(0,worker[i].S-worker[i].L); + static_list_end=1; + + for(int j=1;j<=N;j++) + { + dprintf(">>> j=%d (i=%d)\n",j,i); + + dp[i][j]=max(dp[i-1][j],dp[i][j-1]); + + /// i-th Worker cannot reach j-th bench + /// !!! Must include 'equal' (=) !!! + if(worker[i].L+worker[i].S<=j) continue; + + while(static_list_front Date: Tue, 23 Aug 2016 16:55:32 +0800 Subject: [PATCH 11/32] deque is faster ! --- POJ/1821.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/POJ/1821.cpp b/POJ/1821.cpp index 59f3206..ce7028d 100644 --- a/POJ/1821.cpp +++ b/POJ/1821.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include using namespace std; #define MAXWORKER 110 @@ -20,10 +20,6 @@ bool operator < (const _worker& inca,const _worker& incb) _worker worker[MAXWORKER]; int dp[MAXWORKER][MAXBENCH]; -int static_list[MAXBENCH]; -int static_list_front; -int static_list_end; - int main() { int N,K; @@ -51,11 +47,8 @@ int main() for(int i=1;i<=K;i++) { dprintf(">>>>>>> i=%d\n",i); - //list pbus; - static_list_front=0; - static_list[0]=max(0,worker[i].S-worker[i].L); - static_list_end=1; - + deque pbus; + pbus.push_back(max(0,worker[i].S-worker[i].L)); for(int j=1;j<=N;j++) { dprintf(">>> j=%d (i=%d)\n",j,i); @@ -66,22 +59,21 @@ int main() /// !!! Must include 'equal' (=) !!! if(worker[i].L+worker[i].S<=j) continue; - while(static_list_front Date: Wed, 24 Aug 2016 17:44:32 +0800 Subject: [PATCH 12/32] Create 1047.java --- NYOJ/1047.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 NYOJ/1047.java diff --git a/NYOJ/1047.java b/NYOJ/1047.java new file mode 100644 index 0000000..9530547 --- /dev/null +++ b/NYOJ/1047.java @@ -0,0 +1,20 @@ +import java.io.*; +import java.math.BigInteger; +import java.util.Scanner; +public class Main +{ + public static void main(String[] args) + { + Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in))); + BigInteger a=BigInteger.ZERO; + BigInteger b=new BigInteger("1"); + int t; + t=sc.nextInt(); + for(int s=0; s Date: Tue, 30 Aug 2016 22:23:45 +0800 Subject: [PATCH 13/32] Create 1729_gwq5210.cpp From http://blog.csdn.net/gwq5210/article/details/47425759 --- POJ/1729_gwq5210.cpp | 210 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 POJ/1729_gwq5210.cpp diff --git a/POJ/1729_gwq5210.cpp b/POJ/1729_gwq5210.cpp new file mode 100644 index 0000000..b0497ef --- /dev/null +++ b/POJ/1729_gwq5210.cpp @@ -0,0 +1,210 @@ +/************************************************************************* + > File Name: 1729.cpp + > Author: gwq + > Mail: gwq5210@qq.com + > Created Time: 2015年08月11日 星期二 15时42分37秒 + ************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define INF (INT_MAX / 10) +#define clr(arr, val) memset(arr, val, sizeof(arr)) +#define pb push_back +#define sz(a) ((int)(a).size()) + +using namespace std; +typedef set si; +typedef vector vi; +typedef map mii; +typedef pair pii; +typedef long long ll; + +const double esp = 1e-5; + +#define N 35 + +struct Node; + +int n, vis[N][N][N][N]; +int sx1, sy1, sx2, sy2, ex1, ey1, ex2, ey2, cnt; +int dx[] = {0, -1, 0, 1}; +int dy[] = {1, 0, -1, 0}; +char direct[] = "ENWS"; +char mp[N][N]; + +int dist(int x1, int y1, int x2, int y2) +{ + return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); +} + +struct Node { + int x1, y1, x2, y2, dis, d1, d2, id, pre; + Node() {} + Node(int a, int b, int c, int d, int dd) :x1(a), y1(b), x2(c), y2(d), dis(dd) {} + void output(void) + { + printf("dis = %d\n", dis); + printf("x1 = %d, y1 = %d.\n", x1, y1); + printf("x2 = %d, y2 = %d.\n", x2, y2); + printf("-----------------\n"); + } + bool check(void) + { + if (check1() && check2()) { + return true; + } else { + return false; + } + } + bool check1(void) + { + if (x1 == ex1 && y1 == ey1) { + return true; + } else { + return false; + } + } + bool check2(void) + { + if (x2 == ex2 && y2 == ey2) { + return true; + } else { + return false; + } + } + bool operator <(const Node v) const + { + return this->dis < v.dis; + } +}way[1000010]; + +void bfs(void) +{ + priority_queue q; + clr(vis, -1); + Node v = Node(sx1, sy1, sx2, sy2, dist(sx1, sy1, sx2, sy2)); + cnt = 1; + v.d1 = -1; + v.d2 = -1; + v.id = 0; + v.pre = -1; + q.push(v); + way[0] = v; + vis[sx1][sy1][sx2][sy2] = v.dis; + while (!q.empty()) { + Node u = q.top(); + q.pop(); + //u.output(); + if (u.check()) { + printf("%.2f\n", sqrt(1.0 * u.dis)); + Node p = u; + string s1, s2; + while (p.pre != -1) { + if (p.d1 != '*') { + s1.pb(p.d1); + } + if (p.d2 != '*') { + s2.pb(p.d2); + } + p = way[p.pre]; + } + reverse(s1.begin(), s1.end()); + reverse(s2.begin(), s2.end()); + cout << s1 << endl; + cout << s2 << endl; + return; + } + for (int i = 0; i < 4; ++i) { + int nx1 = u.x1 + dx[i]; + int ny1 = u.y1 + dy[i]; + int d1 = direct[i]; + if (u.check1()) { + nx1 = u.x1; + ny1 = u.y1; + d1 = '*'; + } + if (!mp[nx1][ny1] || mp[nx1][ny1] == '#' || mp[nx1][ny1] == '*') { + ; + } else { + for (int j = 0; j < 4; ++j) { + int nx2 = u.x2 + dx[j]; + int ny2 = u.y2 + dy[j]; + int d2 = direct[j]; + if (u.check2()) { + nx2 = u.x2; + ny2 = u.y2; + d2 = '*'; + } + if (!mp[nx2][ny2] || mp[nx2][ny2] == '$' || mp[nx2][ny2] == '*') { + ; + } else { + int ndis = dist(nx1, ny1, nx2, ny2); + ndis = min(ndis, u.dis); + int vv = vis[nx1][ny1][nx2][ny2]; + if (vv == -1 || ndis > vis[nx1][ny1][nx2][ny2]) { + vis[nx1][ny1][nx2][ny2] = ndis; + v = Node(nx1, ny1, nx2, ny2, ndis); + v.d1 = d1; + v.d2 = d2; + v.pre = u.id; + v.id = cnt; + q.push(v); + way[cnt++] = v; + } + } + } + } + } + } + return; +} + +int main(int argc, char *argv[]) +{ + while (scanf("%d", &n) != EOF) { + if (!n) { + break; + } + clr(mp, 0); + for (int i = 1; i <= n; ++i) { + scanf("%s", mp[i] + 1); + for (int j = 1; j <= n; ++j) { + if (mp[i][j] == 'H') { + sx1 = i; + sy1 = j; + mp[i][j] = '$'; + } else if (mp[i][j] == 'S') { + ex1 = i; + ey1 = j; + mp[i][j] = '$'; + } else if (mp[i][j] == 'h') { + sx2 = i; + sy2 = j; + mp[i][j] = '#'; + } else if (mp[i][j] == 's') { + ex2 = i; + ey2 = j; + mp[i][j] = '#'; + } + } + } + bfs(); + } + return 0; +} From 8cc5bf385d7ce2c8799ed36c1f5e86f52f87b61a Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Wed, 31 Aug 2016 14:55:37 +0800 Subject: [PATCH 14/32] Create Readme.md --- NEUOJ/Readme.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 NEUOJ/Readme.md diff --git a/NEUOJ/Readme.md b/NEUOJ/Readme.md new file mode 100644 index 0000000..3fff972 --- /dev/null +++ b/NEUOJ/Readme.md @@ -0,0 +1,2 @@ +# 东北大学 NEUOJ +[Goto Home Page](http://acm.neu.edu.cn "东北大学ACM-ICPC官网") From 413d7b91e0c13d775f6c27c1d1d0d46b5bb9c7e6 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Wed, 31 Aug 2016 14:57:49 +0800 Subject: [PATCH 15/32] Update Readme.md --- NEUOJ/Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEUOJ/Readme.md b/NEUOJ/Readme.md index 3fff972..363afe8 100644 --- a/NEUOJ/Readme.md +++ b/NEUOJ/Readme.md @@ -1,2 +1,3 @@ # 东北大学 NEUOJ [Goto Home Page](http://acm.neu.edu.cn "东北大学ACM-ICPC官网") +[Online Judge Home Page](http://acm.neu.edu.cn/hustoj/ "Welcome to Online Judge") From 3b6c42acbb4e2dd67530b2ca32776324f509d39a Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Wed, 31 Aug 2016 15:15:07 +0800 Subject: [PATCH 16/32] Create 2406.cpp --- POJ/2406.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 POJ/2406.cpp diff --git a/POJ/2406.cpp b/POJ/2406.cpp new file mode 100644 index 0000000..c36624f --- /dev/null +++ b/POJ/2406.cpp @@ -0,0 +1,39 @@ +#include +#include +#include +using namespace std; + +void getfill(char* s,int L,int* f) +{ + //memset(f,0,sizeof(f)); //根据其前一个字母得到 + for(int i=1;i Date: Wed, 31 Aug 2016 15:31:55 +0800 Subject: [PATCH 17/32] Create 1870.cpp --- HDOJ/1870.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 HDOJ/1870.cpp diff --git a/HDOJ/1870.cpp b/HDOJ/1870.cpp new file mode 100644 index 0000000..5d690e2 --- /dev/null +++ b/HDOJ/1870.cpp @@ -0,0 +1,21 @@ +#include +#include +#include +using namespace std; + +char buffer[1024]; +int main() +{ + while(scanf("%s",buffer)==1) + { + int idt=strstr(buffer,"B")-buffer; + int cnt=0; + for(int i=idt-1;i>=0;i--) + { + if(buffer[i]=='(') cnt++; + else cnt--; + } + printf("%d\n",cnt); + } + return 0; +} From d765b1f1d1839298a6da3a4317ab692025aafecf Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Wed, 31 Aug 2016 20:30:19 +0800 Subject: [PATCH 18/32] Create 1276_coder.cpp From http://www.acmerblog.com/hdu-1276-%E5%A3%AB%E5%85%B5%E9%98%9F%E5%88%97%E8%AE%AD%E7%BB%83%E9%97%AE%E9%A2%98-1643.html --- HDOJ/1276_coder.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 HDOJ/1276_coder.cpp diff --git a/HDOJ/1276_coder.cpp b/HDOJ/1276_coder.cpp new file mode 100644 index 0000000..aa5834b --- /dev/null +++ b/HDOJ/1276_coder.cpp @@ -0,0 +1,82 @@ +#include +using namespace std; +int f[5009]; +int main() +{ + int t; + int n,i; + + while(cin>>t) + { + while(t--) + { + cin>>n; + for(i=1;i<=n;i++) + f[i]=i; + int t; + if(n<=3) + { + printf("1"); + for(i=2;i<=n;i++) + printf(" %d",i); + printf("\n"); + continue; + } + while(1) + { + int leap=0; + for(i=1;i<=n;i++) + { + if(f[i]!=-1) + { + leap++; + } + if(leap==2) + { + leap=0; + f[i]=-1; + } + } + t=0; + for(i=1;i<=n;i++) + if(f[i]!=-1) + t++; + + if(t<=3) + break; + + leap=0; + for(i=1;i<=n;i++) + { + if(f[i]!=-1) + leap++; + if(leap==3) + { + f[i]=-1; + leap=0; + } + } + t=0; + for(i=1;i<=n;i++) + if(f[i]!=-1) + t++; + if(t<=3) + break; + + } + for(i=1;i<=n;i++) + if(f[i]!=-1) + { + printf("%d",f[i]); + break; + } + i++; + for(;i<=n;i++) + if(f[i]!=-1) + printf(" %d",f[i]); + printf("\n"); + } + } + + return 0; +} From f10d9ad19c7064619b11ca969133b5642911ddf1 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Thu, 1 Sep 2016 20:21:44 +0800 Subject: [PATCH 19/32] Create 2697_sdj222555.cpp --- POJ/2697_sdj222555.cpp | 150 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 POJ/2697_sdj222555.cpp diff --git a/POJ/2697_sdj222555.cpp b/POJ/2697_sdj222555.cpp new file mode 100644 index 0000000..80c6557 --- /dev/null +++ b/POJ/2697_sdj222555.cpp @@ -0,0 +1,150 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#define MAXN 100005 +#define MAXM 1000005 +using namespace std; +struct Trie +{ + int flag; + int next[3]; + void init() + { + memset(next, 0, sizeof(next)); + flag = 0; + } +} trie[MAXM]; +int e; +void init() +{ + for(int i = 0; i < MAXM; i++) trie[i].init(); + e = 0; +} +int getid(char c) +{ + if(c == '*') return 0; + else if(c == 'b') return 1; + else return 2; +} +void make_trie(char s[6][6]) +{ + int u = 0, index; + for(int i = 0; i < 4; i++) + for(int j = 0; j < 4; j++) + { + index = getid(s[i][j]); + if(!trie[u].next[index]) trie[u].next[index] = ++e; + u = trie[u].next[index]; + } + trie[u].flag = 1; +} +bool match(char s[6][6]) +{ + int u = 0, index; + for(int i = 0; i < 4; i++) + for(int j = 0; j < 4; j++) + { + index = getid(s[i][j]); + u = trie[u].next[index]; + } + return trie[u].flag; +} +char s1[6][6]; +char s2[6][6]; +char tmp[22]; +int xx[] = {0, 1, 0, -1, 1, 1, -1, -1}; +int yy[] = {1, 0, -1, 0, -1, 1, -1, 1}; +struct P +{ + char s[6][6]; + int num; + P() {} + P(char _s[6][6], int _num) + { + num = _num; + for(int i = 0; i < 4; i++) + for(int j = 0; j < 4; j++) + s[i][j] = _s[i][j]; + } +} q[MAXM]; +bool findit(P tp) +{ + for(int i = 0; i < 4; i++) + for(int j = 0; j < 4; j++) + if(tp.s[i][j] != s2[i][j]) return false; + return true; +} +bool isok(int x, int y, char s[6][6]) +{ + if(x < 0 || y < 0 || x >= 4 || y >= 4 || s[x][y] != '*') return false; + return true; +} +void bfs() +{ + int ans = -1; + int h = 0, t = 0; + q[t++] = P(s1, 0); + make_trie(s1); + while(h < t) + { + P tp = q[h++]; + if(findit(tp)) + { + ans = tp.num; + break; + } + char fk; + if(tp.num % 2 == 0) fk = 'w'; + else fk = 'b'; + for(int i = 0; i < 4; i++) + for(int j = 0; j < 4; j++) + { + if(tp.s[i][j] == fk) + { + for(int k = 0; k < 8; k++) + { + int tx = i, ty = j; + tx += xx[k]; + ty += yy[k]; + while(isok(tx, ty, tp.s)) + { + tx += xx[k]; + ty += yy[k]; + } + tx -= xx[k]; + ty -= yy[k]; + swap(tp.s[i][j], tp.s[tx][ty]); + + if(!match(tp.s)) + { + + + q[t++] = P(tp.s, tp.num + 1); + make_trie(tp.s); + } + swap(tp.s[i][j], tp.s[tx][ty]); + } + } + } + + } + printf("%d\n", ans); +} +int main() +{ + int T; + scanf("%d", &T); + while(T--) + { + init(); + for(int i = 0; i < 4; i++) scanf("%s", s1[i]); + for(int i = 0; i < 4; i++) scanf("%s", s2[i]); + bfs(); + } + return 0; +} From f920a379567b0c21e0be73cb8ecc964973063adb Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Thu, 1 Sep 2016 20:22:43 +0800 Subject: [PATCH 20/32] Create 2531_martin31hao.cpp From http://blog.csdn.net/martin31hao/article/details/8098302 --- POJ/2531_martin31hao.cpp | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 POJ/2531_martin31hao.cpp diff --git a/POJ/2531_martin31hao.cpp b/POJ/2531_martin31hao.cpp new file mode 100644 index 0000000..91cdb70 --- /dev/null +++ b/POJ/2531_martin31hao.cpp @@ -0,0 +1,45 @@ +#include +#include +using namespace std; + +const int maxn = 30; +int n, ans; +int a[maxn][maxn]; +int dep[maxn]; + +void dfs(int id, int data) +{ + dep[id] = 1; + int tmp = data; + for(int i = 1; i <= n; i ++) + { + if(dep[i] == 0) + tmp += a[i][id]; + else + tmp -= a[i][id]; + } + if(ans < tmp) + ans = tmp; + for(int i = id + 1; i <= n; i ++) + { + if(tmp > data) + { + dfs(i, tmp); + dep[i] = 0; + } + } +} + +int main() +{ + while(~scanf("%d", &n)) + { + for(int i = 1; i <= n; i ++) + for(int j = 1; j <= n; j ++) + scanf("%d", &a[i][j]); + memset(dep, 0, sizeof(dep)); + ans = 0; + dfs(1, 0); + printf("%d\n", ans); + } +} From 6468b133c5074f0d14ce2918f9a0b6b3d68f091d Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Thu, 1 Sep 2016 20:23:38 +0800 Subject: [PATCH 21/32] Create 1661_jdplus.cpp --- POJ/1661_jdplus.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 POJ/1661_jdplus.cpp diff --git a/POJ/1661_jdplus.cpp b/POJ/1661_jdplus.cpp new file mode 100644 index 0000000..9acb170 --- /dev/null +++ b/POJ/1661_jdplus.cpp @@ -0,0 +1,97 @@ +#include +#include + +#define MAXN 1010 +#define INF 9000000 + +typedef struct platform{ + int x1; + int x2; + int high; +}Platform; + +int compare (const void * p, const void * q){ + Platform * p1 = (Platform *)p; + Platform * q1 = (Platform *)q; + return p1->high - q1->high; +} + +int Min (int a, int b){ + return (a < b) ? a : b; +} + +int N, X, Y, MAX; +Platform plat[MAXN]; +int dp[MAXN][2]; //dp[i][0]、dp[i][1]分别表示从第i个平台左、右边到地面的最短时间 + +void LeftMinTime (int i){ //计算从平台i左边到地面的最短时间 + int k = i - 1; + while (k > 0 && plat[i].high - plat[k].high <= MAX){ + //如果平台i左边下面有平台,且两者相距不超过MAX + if (plat[i].x1 >= plat[k].x1 && plat[i].x1 <= plat[k].x2){ + dp[i][0] = plat[i].high - plat[k].high + + Min (plat[i].x1 - plat[k].x1 + dp[k][0], plat[k].x2 - plat[i].x1 + dp[k][1]); + return; + } + else + --k; + } + //如果平台i左边下面没有平台,或者两者相距超过了MAX + if (plat[i].high - plat[k].high > MAX) + dp[i][0] = INF; + else + dp[i][0] = plat[i].high; +} + +void RightMinTime (int i){ //计算从平台i右边到地面的最短时间 + int k = i - 1; + while (k > 0 && plat[i].high - plat[k].high <= MAX){ + //如果平台i右边下面有平台,且两者相距不超过MAX + if (plat[i].x2 >= plat[k].x1 && plat[i].x2 <= plat[k].x2){ + dp[i][1] = plat[i].high - plat[k].high + + Min (plat[i].x2 - plat[k].x1 + dp[k][0], plat[k].x2 - plat[i].x2 + dp[k][1]); + return; + } + else + --k; + } + //如果平台i右边下面没有平台,或者两者相距超过了MAX + if (plat[i].high - plat[k].high > MAX) + dp[i][1] = INF; + else + dp[i][1] = plat[i].high; +} + +int ShortestTime (){ + int i, j; + + for (i=1; i<=N+1; ++i){ + LeftMinTime (i); + RightMinTime (i); + } + return Min (dp[N+1][0], dp[N+1][1]); +} + +int main(void){ + int t; + int i; + while (scanf ("%d", &t) != EOF){ + while (t-- != 0){ + scanf ("%d%d%d%d", &N, &X, &Y, &MAX); + for (i=1; i<=N; ++i){ + scanf ("%d%d%d", &plat[i].x1, &plat[i].x2, &plat[i].high); + } + plat[0].high = 0; + plat[0].x1 = -20000; + plat[0].x2 = 20000; + plat[N+1].high = Y; + plat[N+1].x1 = X; + plat[N+1].x2 = X; + //根据平台高度按从低到高排序 + qsort (plat, N+2, sizeof(Platform), compare); + printf ("%d\n", ShortestTime()); + } + } + + return 0; +} From 750607e53b81dfdbc466694c032c2eba39ae55a3 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Thu, 1 Sep 2016 20:24:35 +0800 Subject: [PATCH 22/32] Create 2104_famousdt.cpp From http://blog.csdn.net/famousdt/article/details/7064866 --- POJ/2104_famousdt.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 POJ/2104_famousdt.cpp diff --git a/POJ/2104_famousdt.cpp b/POJ/2104_famousdt.cpp new file mode 100644 index 0000000..332353f --- /dev/null +++ b/POJ/2104_famousdt.cpp @@ -0,0 +1,73 @@ +/*==========================================================*\ +| 划分树 +\*==========================================================*/ +#define MAX_SIZE 100005 +int sorted[MAX_SIZE];//已经排好序的数据 +int toleft[25][MAX_SIZE]; +int tree[25][MAX_SIZE]; +void build_tree(int left, int right, int deep) +{ + int i; + if (left == right) return ; + int mid = (left + right) >> 1; + int same = mid - left + 1; //位于左子树的数据 + for (i = left; i <= right; ++i) {//计算放于左子树中与中位数相等的数字个数 + if (tree[deep][i] < sorted[mid]) { + --same; + } + } + int ls = left; + int rs = mid + 1; + for (i = left; i <= right; ++i) { + int flag = 0; + if ((tree[deep][i] < sorted[mid]) || (tree[deep][i] == sorted[mid] && same > 0)) { + flag = 1; + tree[deep + 1][ls++] = tree[deep][i]; + if (tree[deep][i] == sorted[mid]) + same--; + } else { + tree[deep + 1][rs++] = tree[deep][i]; + } + toleft[deep][i] = toleft[deep][i - 1]+flag; + } + build_tree(left, mid, deep + 1); + build_tree(mid + 1, right, deep + 1); +} +int query(int left, int right, int k, int L, int R, int deep) +{ + if (left == right) + return tree[deep][left]; + int mid = (L + R) >> 1; + int x = toleft[deep][left - 1] - toleft[deep][L - 1];//位于left左边的放于左子树中的数字个数 + int y = toleft[deep][right] - toleft[deep][L - 1];//到right为止位于左子树的个数 + int ry = right - L - y;//到right右边为止位于右子树的数字个数 + int cnt = y - x;//[left,right]区间内放到左子树中的个数 + int rx = left - L - x;//left左边放在右子树中的数字个数 + if (cnt >= k) { + //printf("sss %d %d %d\n", xx++, x, y); + return query(L + x, L + y - 1, k, L, mid, deep + 1); + } + else { + //printf("qqq %d %d %d\n", xx++, x, y); + return query(mid + rx + 1, mid + 1 + ry, k - cnt, mid + 1, R, deep + 1); + } +} +int main() +{ + int m, n; + int a, b, k; + int i; + while (scanf("%d%d", &m, &n) == 2) { + for (i = 1; i <= m; ++i) { + scanf("%d", &sorted[i]); + tree[0][i] = sorted[i]; + } + sort(sorted + 1, sorted + 1 + m); + build_tree(1, m, 0); + for (i = 0; i < n; ++i) { + scanf("%d%d%d", &a, &b, &k); + printf("%d\n", query(a, b, k, 1, m, 0)); + } + } + return 0; +} From f4b21db49c7b2f9ab7035d48456dfaff882aac2c Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Thu, 1 Sep 2016 20:26:46 +0800 Subject: [PATCH 23/32] Update 2104_famousdt.cpp --- POJ/2104_famousdt.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/POJ/2104_famousdt.cpp b/POJ/2104_famousdt.cpp index 332353f..c195808 100644 --- a/POJ/2104_famousdt.cpp +++ b/POJ/2104_famousdt.cpp @@ -1,3 +1,9 @@ +#include +#include +#include +#include +using namespace std; + /*==========================================================*\ | 划分树 \*==========================================================*/ From 2b2e163f376cb1ebb407d2cfba84efc7c042f7e2 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Thu, 1 Sep 2016 20:28:20 +0800 Subject: [PATCH 24/32] Create 1141_lijiecsu.cpp From http://blog.csdn.net/lijiecsu/article/details/7589877 --- POJ/1141_lijiecsu.cpp | 87 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 POJ/1141_lijiecsu.cpp diff --git a/POJ/1141_lijiecsu.cpp b/POJ/1141_lijiecsu.cpp new file mode 100644 index 0000000..57d3883 --- /dev/null +++ b/POJ/1141_lijiecsu.cpp @@ -0,0 +1,87 @@ +#include +#include +using namespace std; + +int d[100][100]; //d[i][j]表示输入字符串从下标i到下标j至少需要加的括号数 +int c[100][100]={-1}; //c[i][j]表示从下标i到下标j的子串分割的下标,-1表示不分割 +int len; //输入括号串的长度 +string s; //输入的括号串 + +void dp() +{ + int i,j,k,l; + int min; + + for(i=0; ij) return; + if(i==j) + { + if(s[i]=='(' || s[i]==')') cout<<"()"; + else cout<<"[]"; + } + else + { + if(c[i][j]>=0) //从i到j从c[i][j]处分割 + { + print(i, c[i][j]); + print(c[i][j]+1, j); + } + else + { + if(s[i]=='(') + { + cout<<"("; + print(i+1, j-1); + cout<<")"; + } + else + { + cout<<"["; + print(i+1, j-1); + cout<<"]"; + } + } + } +} + +int main() +{ + + cin>>s; //输入括号序列 + + len=s.size(); + dp(); + print(0, len-1); + cout< Date: Thu, 1 Sep 2016 20:32:01 +0800 Subject: [PATCH 25/32] Create 2526_xuechelingxiao.cpp From http://blog.csdn.net/xuechelingxiao/article/details/40680981 --- POJ/2526_xuechelingxiao.cpp | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 POJ/2526_xuechelingxiao.cpp diff --git a/POJ/2526_xuechelingxiao.cpp b/POJ/2526_xuechelingxiao.cpp new file mode 100644 index 0000000..d4af737 --- /dev/null +++ b/POJ/2526_xuechelingxiao.cpp @@ -0,0 +1,48 @@ +#include +#include +#include +using namespace std; + +struct Point { + double x, y; +} P[20010], o; + +int cmp(Point a, Point b) { + if(a.x == b.x) + return a.y < b.y; + return a.x < b.x; +} + +int main() +{ + int n; + int T; + scanf("%d", &T); + while(T--) { + bool flag = true; + scanf("%d", &n); + for(int i = 1; i <= n; ++i) { + scanf("%lf%lf", &P[i].x, &P[i].y); + } + sort(P+1, P+n+1, cmp); + o.x = (P[1].x+P[n].x)/2; + o.y = (P[1].y+P[n].y)/2; + for(int i = 2; i <= n; ++i) { + double x = (P[i].x+P[n-i+1].x)/2; + double y = (P[i].y+P[n-i+1].y)/2; + if(x != o.x || y != o.y) { + flag = false; + //printf("%d\n", i); + break; + } + } + if(flag) { + printf("yes\n"); + } + else { + printf("no\n"); + } + } + + return 0; +} From 74f43c6ec708480857d0e358eed0b6bf6624a697 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Thu, 1 Sep 2016 20:32:53 +0800 Subject: [PATCH 26/32] Create 1276_libin56842.cpp --- POJ/1276_libin56842.cpp | 55 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 POJ/1276_libin56842.cpp diff --git a/POJ/1276_libin56842.cpp b/POJ/1276_libin56842.cpp new file mode 100644 index 0000000..42695db --- /dev/null +++ b/POJ/1276_libin56842.cpp @@ -0,0 +1,55 @@ +#include +#include +#include +using namespace std; + +struct node +{ + int n,v; +} a[20]; + +int dp[100010]; + +int main() +{ + int sum,n,i,j,k; + while(~scanf("%d%d",&sum,&n)) + { + for(i = 1; i<=n; i++) + scanf("%d%d",&a[i].n,&a[i].v); + if(!sum) + { + printf("0\n"); + continue; + } + if(!n) + { + printf("0\n"); + continue; + } + memset(dp,0,sizeof(dp)); + dp[0] = 1; + int MAX = 0,tem; + for(i = 1; i<=n; i++) + { + for(j = MAX;j>=0;j--) + { + if(dp[j]) + { + for(k = 1;k<=a[i].n;k++) + { + tem = j+k*a[i].v; + if(tem>sum) + continue; + dp[tem] = 1; + if(tem>MAX) + MAX = tem; + } + } + } + } + printf("%d\n",MAX); + } + + return 0; +} From bacea42335855e2768f38c6be2c425fa2f61686d Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Fri, 2 Sep 2016 13:28:14 +0800 Subject: [PATCH 27/32] Create 1003_caesar_199.cpp From https://vijos.org/p/1003/solution --- VIJOS/1003_caesar_199.cpp | 131 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 VIJOS/1003_caesar_199.cpp diff --git a/VIJOS/1003_caesar_199.cpp b/VIJOS/1003_caesar_199.cpp new file mode 100644 index 0000000..00e0429 --- /dev/null +++ b/VIJOS/1003_caesar_199.cpp @@ -0,0 +1,131 @@ +#include +#include +#include +#include +using namespace std; +const char* alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +long long a; +long long stand[15]; + +long long jia(stringstream&); +long long cheng(stringstream&); + +long long pow (long long a, long long b) { + long long ans = 1; + for (int i = 0; i < b; i++) ans *= a; + return ans; +} + +bool check () { + string line; getline(cin, line); + for (a = 0; a < 10; a++) { + stringstream ss(line); + if (jia(ss) != stand[a]) return false; + } + return true; +} + +int main () +{ + int n; + string line; + getline(cin, line); + for (a = 0; a < 10; a++) { + stringstream ss(line); + stand[a] = jia(ss); + } + cin >> n; + getchar(); + for(int i = 0; i < n; i++) + if (check()) cout << alph[i]; + return 0; +} + +long long pan(stringstream& ss) { + long long num = 0; + char c = 0; + ss >> c; + if (c == 'a') return (long long)a; + else { + ss.putback(c); + ss >> num; + return num; + } +} + +long long getnum(stringstream& ss) { + long long b = 0; + char c = 0; + b = pan(ss); + ss >> c; + while (c == '^') { + long long d; + d = pan(ss); + b = pow(b, d); + c = 0; + ss >> c; + } + ss.putback(c); + return b; +} + +long long cheng (stringstream& ss) { + char c = 0; + long long ans = 0; + long long num = 0; + ss >> c; + if (c == '(') ans = jia(ss); + else { + ss.putback(c); + ans = getnum(ss); + } + while (ss >> c) { + switch (c) { + case ' ' : + continue; + case '*' : + ss >> c; + if (c == '(') num = jia(ss); + else { + ss.putback(c); + num = getnum(ss); + } + ans *= num; + break; + default : + ss.putback(c); + return ans; + } + } + return ans; +} + +long long jia (stringstream& ss) { + char c = 0; + long long ans = 0; + ans = cheng(ss); + while (ss >> c) { + switch (c) { + case ' ' : + continue; + case '+' : + ans += cheng(ss); + break; + case '-' : + ans -= cheng(ss); + break; + case ')' : + ss >> c; + while (c == '^') { + long long b; + b = pan(ss); + ans = pow(ans, b); + c = 0; + ss >> c; + } + ss.putback(c); + return ans; + } + } + return ans; +} From c32baa05770a22af2cf98dffd59562184e8f0bdd Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Fri, 2 Sep 2016 13:29:27 +0800 Subject: [PATCH 28/32] Create 1004_caesar_199.cpp --- QUSTOJ/1004_caesar_199.cpp | 131 +++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 QUSTOJ/1004_caesar_199.cpp diff --git a/QUSTOJ/1004_caesar_199.cpp b/QUSTOJ/1004_caesar_199.cpp new file mode 100644 index 0000000..00e0429 --- /dev/null +++ b/QUSTOJ/1004_caesar_199.cpp @@ -0,0 +1,131 @@ +#include +#include +#include +#include +using namespace std; +const char* alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +long long a; +long long stand[15]; + +long long jia(stringstream&); +long long cheng(stringstream&); + +long long pow (long long a, long long b) { + long long ans = 1; + for (int i = 0; i < b; i++) ans *= a; + return ans; +} + +bool check () { + string line; getline(cin, line); + for (a = 0; a < 10; a++) { + stringstream ss(line); + if (jia(ss) != stand[a]) return false; + } + return true; +} + +int main () +{ + int n; + string line; + getline(cin, line); + for (a = 0; a < 10; a++) { + stringstream ss(line); + stand[a] = jia(ss); + } + cin >> n; + getchar(); + for(int i = 0; i < n; i++) + if (check()) cout << alph[i]; + return 0; +} + +long long pan(stringstream& ss) { + long long num = 0; + char c = 0; + ss >> c; + if (c == 'a') return (long long)a; + else { + ss.putback(c); + ss >> num; + return num; + } +} + +long long getnum(stringstream& ss) { + long long b = 0; + char c = 0; + b = pan(ss); + ss >> c; + while (c == '^') { + long long d; + d = pan(ss); + b = pow(b, d); + c = 0; + ss >> c; + } + ss.putback(c); + return b; +} + +long long cheng (stringstream& ss) { + char c = 0; + long long ans = 0; + long long num = 0; + ss >> c; + if (c == '(') ans = jia(ss); + else { + ss.putback(c); + ans = getnum(ss); + } + while (ss >> c) { + switch (c) { + case ' ' : + continue; + case '*' : + ss >> c; + if (c == '(') num = jia(ss); + else { + ss.putback(c); + num = getnum(ss); + } + ans *= num; + break; + default : + ss.putback(c); + return ans; + } + } + return ans; +} + +long long jia (stringstream& ss) { + char c = 0; + long long ans = 0; + ans = cheng(ss); + while (ss >> c) { + switch (c) { + case ' ' : + continue; + case '+' : + ans += cheng(ss); + break; + case '-' : + ans -= cheng(ss); + break; + case ')' : + ss >> c; + while (c == '^') { + long long b; + b = pan(ss); + ans = pow(ans, b); + c = 0; + ss >> c; + } + ss.putback(c); + return ans; + } + } + return ans; +} From e06d1d1443a885d7b6a3cd2a43d7ec896103ad04 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Sun, 4 Sep 2016 12:57:59 +0800 Subject: [PATCH 29/32] Create 2676_tanhehe.cpp From http://www.cnblogs.com/tanhehe/p/3243073.html --- POJ/2676_tanhehe.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 POJ/2676_tanhehe.cpp diff --git a/POJ/2676_tanhehe.cpp b/POJ/2676_tanhehe.cpp new file mode 100644 index 0000000..ddedde0 --- /dev/null +++ b/POJ/2676_tanhehe.cpp @@ -0,0 +1,66 @@ +#include +#include +#include +#include + +using namespace std; + +struct node { + int x, y; +}q[9*9+10]; + +bool row[10][10], col[10][10], sq[4][4][10]; +int G[10][10], cnt; + +bool dfs(int cn) { + if(cn < 0) return true; + + int x = q[cn].x, y = q[cn].y; + + for(int k=1; k<=9; k++) { + if(row[x][k] || col[y][k] || sq[x/3][y/3][k]) continue; + row[x][k] = col[y][k] = sq[x/3][y/3][k] = true; + + G[x][y] = k; + if(dfs(cn-1)) return true; + + row[x][k] = col[y][k] = sq[x/3][y/3][k] = false; + } + + return false; +} + + +int main() { + int T; + scanf("%d", &T); + + while(T--) { + cnt = 0; + memset(row, false, sizeof(row)); + memset(col, false, sizeof(col)); + memset(sq, false, sizeof(sq)); + + for(int i=0; i<9; i++) { + for(int j=0; j<9; j++) { + scanf("%1d", &G[i][j]); + int k = G[i][j]; + if(k != 0) { + row[i][k] = col[j][k] = sq[i/3][j/3][k] = true; + } + else q[cnt++] = (node){i, j}; + } + } + + dfs(cnt-1); + + for(int i=0; i<9; i++) { + for(int j=0; j<9; j++) { + printf("%d", G[i][j]); + } + putchar('\n'); + } + } + + return 0; +} From 435776b825c011a67b33de61ff0abdc037b87b6e Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Sun, 4 Sep 2016 13:05:46 +0800 Subject: [PATCH 30/32] Create 1442_lyhvoyage.cpp From http://blog.csdn.net/lyhvoyage/article/details/18360655 --- POJ/1442_lyhvoyage.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 POJ/1442_lyhvoyage.cpp diff --git a/POJ/1442_lyhvoyage.cpp b/POJ/1442_lyhvoyage.cpp new file mode 100644 index 0000000..67f46c8 --- /dev/null +++ b/POJ/1442_lyhvoyage.cpp @@ -0,0 +1,62 @@ +#include +#include +using namespace std; +int a[30010], u[30010]; +int main() +{ + int n, m, i, j, k, x, ans; + while(~scanf("%d%d",&m,&n)) + { + priority_queue, less > que1; //队列中的元素从大到小排序 + priority_queue, greater > que2; //队列中的元素从小到大排序 + for(i = 1; i <= m; i++) + scanf("%d",&a[i]); + for(j = 1; j <= n; j++) + scanf("%d",&u[j]); + i = 0; + j = k = 1; + while(j <= n) + { + if(i == u[j]) //弹出第k小的数 + { + j++; + if(que1.size() < k) //que1里的元素不够k个 + { + x = que2.top(); + que1.push(x); + que2.pop(); + } + ans = que1.top(); + printf("%d\n",ans); + k++; //每次弹出一个数后,k的值都要加1 + } + else + { + i++; + //que1里的元素不够k个 + if(que1.size() < k) + { + que2.push(a[i]); + x = que2.top(); + que2.pop(); + que1.push(x); //先把a[i]压入que2,再从que2里取出最小值,压入que1 + } + + //如果que1的元素达到k个,且要压入队列的值比que1中的当前最大值大,说明que1中当前的最大值并不是第k小 + else if(que1.top() > a[i]) + { + x = que1.top(); + que1.pop(); + que2.push(x); + que1.push(a[i]); + } + //que1中的元素个数达到k个,且要压入队列的值比que1中的当前最大值小,说明que1中当前的最大值就是是第k小,则把a[i]直接压入que2中 + else + { + que2.push(a[i]); + } + } + } + } + return 0; +} From cd23deebe3a2621e66a557e9f8c4bd78111b3533 Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Sun, 4 Sep 2016 13:33:19 +0800 Subject: [PATCH 31/32] A Small tool help upload codes --- .SmallCode/GitHubURLHelper.cpp | 83 ++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 .SmallCode/GitHubURLHelper.cpp diff --git a/.SmallCode/GitHubURLHelper.cpp b/.SmallCode/GitHubURLHelper.cpp new file mode 100644 index 0000000..df1702e --- /dev/null +++ b/.SmallCode/GitHubURLHelper.cpp @@ -0,0 +1,83 @@ +#include +#include +#include +#include +using namespace std; + +char clipbuffer[1024]; +char uname[1024]; +char cmessage[1024]; +char fname[1024]; +int tid; +void GetClipData() +{ + OpenClipboard(NULL); + HANDLE hClipboardData=GetClipboardData(CF_TEXT); + char* pchData=(char*)GlobalLock(hClipboardData); + strcpy(clipbuffer,pchData); + GlobalUnlock(hClipboardData); + CloseClipboard(); +} + +void SplitData() +{ + char* p=strstr(clipbuffer,"://")+3; + p=strstr(p,"/"); + char* q=strstr(p+1,"/"); + strncpy(uname,p+1,q-p-1); + sprintf(cmessage,"From %s",clipbuffer); +} + +void GetFileNum() +{ + printf("Please input Problem ID:\n"); + scanf("%d%*c",&tid); + sprintf(fname,"%d_%s.cpp",tid,uname); +} + +void SetClip(const char* inc) +{ + OpenClipboard(NULL); + EmptyClipboard(); + HGLOBAL hClipboardData; + hClipboardData=GlobalAlloc(GMEM_DDESHARE,strlen(inc)+1); + char* pchData; + pchData=(char*)GlobalLock(hClipboardData); + strcpy(pchData,inc); + GlobalUnlock(hClipboardData); + SetClipboardData(CF_TEXT,hClipboardData); + CloseClipboard(); +} + +void PrintFileName() +{ + SetClip(fname); + printf("File Name Set.\n"); +} +void PrintCommentMessage() +{ + SetClip(cmessage); + printf("Comment Message Set.\n"); +} +void ShowClip() +{ + printf("Data In Clipboard...\n"); + printf("%s\n",clipbuffer); +} +void GPause() +{ + getchar(); +} +int main() +{ + printf("Link Start!\n"); + GetClipData(); + ShowClip(); + SplitData(); + GetFileNum(); + PrintFileName(); + GPause(); + PrintCommentMessage(); + return 0; +} + From 5fc13c41378b95bf613e9eb71b0478908df34adf Mon Sep 17 00:00:00 2001 From: Kirito <1362050620@qq.com> Date: Sun, 4 Sep 2016 14:06:22 +0800 Subject: [PATCH 32/32] Create 3939_seekforcode.cpp From http://blog.csdn.net/seekforcode/article/details/51322351 --- POJ/3939_seekforcode.cpp | 85 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 POJ/3939_seekforcode.cpp diff --git a/POJ/3939_seekforcode.cpp b/POJ/3939_seekforcode.cpp new file mode 100644 index 0000000..50704d1 --- /dev/null +++ b/POJ/3939_seekforcode.cpp @@ -0,0 +1,85 @@ +#include +#include +#include +using namespace std; +int weekday(int y,int m,int d) +{ + + + int tm=m>=3?(m-2):(m+10); + + + int ty=m>=3?y:(y-1); + + + return (ty+ty/4-ty/100+ty/400+(int)(2.6*tm-0.2)+d)%7; +} +int preoperate() +{ +int year,mon,da,cont=0; +for(year=1753;year<=1753+400;year++) +{ +for(mon=1;mon<=12;mon++) +{ +for(da=1;da<=21;da=da+10) +{ +if(weekday(year,mon,da)==1) +cont++; +} +} +} +return cont; +} +void gotowhat(int y,int m,int d,int howmany) +{ +int cont=howmany; +int year,mon,da; +year=y; +for(mon=m;mon<=12;mon++) +{ +for(da=(mon==m?d:1);da<=21;da=da+10) +{ + int tag=weekday(year,mon,da); +if(tag==1) +cont--; +if(cont==0) +{ +cout<>t; +while(t--) +{ +cin>>y>>m>>d>>number; +st=number%2058; +ts=number/2058; +y+=400*ts; + number=number-2058*ts; +gotowhat(y,m,d,number); +} +return 0; +}