diff --git a/HDOJ/4102_autoAC.cpp b/HDOJ/4102_autoAC.cpp new file mode 100644 index 0000000..c578bab --- /dev/null +++ b/HDOJ/4102_autoAC.cpp @@ -0,0 +1,177 @@ +#include +#include +#include +#include +using namespace std; +#define N 8005 +#define EPS 1e-8 +struct TPoint { + int x, y; + TPoint() { + } + TPoint(const int &_x, const int &_y) : + x(_x), y(_y) { + } + bool operator ==(const TPoint &b) const { + return (x == b.x && y == b.y); + } + TPoint operator-(const TPoint &b) const { + return TPoint(x - b.x, y - b.y); + } +}; +TPoint p[N], hull[N],r; +int tn; +double cross(const TPoint & a, const TPoint & b, const TPoint & c) { + return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x); +} +double len(const TPoint &a) { + return sqrt((double) (a.x * a.x + a.y * a.y)); +} +double dis(const TPoint &a, const TPoint &b) { + return len(b - a); +} +bool graham_cmp(const TPoint &b, const TPoint &c) { + double tmp = cross(b, c, p[0]); + if (tmp > EPS) + return true; + if (fabs(tmp) < EPS && (dis(b, p[0]) < dis(c, p[0]))) + return true; + return false; +} +int graham_scan(int n) { + int top, i, k = 0; + for (i = 1; i < n; ++i) { + if ((p[k].y - p[i].y < EPS) || (fabs((double)p[i].y - p[k].y) < EPS && p[k].x + - p[i].x > EPS)) + k = i; + } + swap(p[0], p[k]); + sort(p + 1, p + n, graham_cmp); + hull[0] = p[0], hull[1] = p[1], hull[2] = p[2]; + if (n < 3) + return n; + else + top = 3; + for (i = 3; i < n; ++i) { + while (top >= 2 && cross(hull[top - 2], hull[top - 1], p[i]) < EPS) + --top; + hull[top++] = p[i]; + } + return top; +} +inline double dis_p2_line(TPoint & a,TPoint & b,TPoint & p) +{ return fabs(cross(a,p,b))/dis(a,b); } +struct node { + int x1, x2, y1, y2; + int level; + bool flag; +} a[2005]; +int Max(int a, int b) { + return a > b ? a : b; +} +int Min(int a, int b) { + return a < b ? a : b; +} +int main() { + int i, j, n; + int level, t, x, y; + while (scanf("%d", &n) != EOF) { + for (i = 0; i < n; ++i) { + scanf("%d%d%d%d", &a[i].x1, &a[i].y1, &a[i].x2, &a[i].y2); + a[i].flag = false; + a[i].x1 *= 2; + a[i].y1 *= 2; + a[i].x2 *= 2; + a[i].y2 *= 2; + if (a[i].x1 > a[i].x2) { + t = a[i].x1; + a[i].x1 = a[i].x2; + a[i].x2 = t; + } + if (a[i].y1 > a[i].y2) { + t = a[i].y1; + a[i].y1 = a[i].y2; + a[i].y2 = t; + } + } + a[0].level = 1; + a[0].flag = true; + for (i = 1; i < n; ++i) { + level = 1; + for (j = i-1; j >= 0; --j) { + if (level >= a[j].level + 1) + continue; + if (a[i].x2 <= a[j].x1) + continue; + if (a[j].x2 <= a[i].x1) + continue; + if (a[i].y2 <= a[j].y1) + continue; + if (a[j].y2 <= a[i].y1) + continue; + level = a[j].level + 1; + } + a[i].level = level; + tn = 0; + for (j = 0; j < i; ++j) { + if (level != a[j].level + 1) + continue; + if (a[i].x2 <= a[j].x1) + continue; + if (a[j].x2 <= a[i].x1) + continue; + if (a[i].y2 <= a[j].y1) + continue; + if (a[j].y2 <= a[i].y1) + continue; + int x1,x2,y1,y2; + x1 = Max(a[i].x1,a[j].x1); + x2 = Min(a[i].x2,a[j].x2); + y1 = Max(a[i].y1,a[j].y1); + y2 = Min(a[i].y2,a[j].y2); + p[tn].x = x1; + p[tn++].y = y1; + p[tn].x = x1; + p[tn++].y = y2; + p[tn].x = x2; + p[tn++].y = y1; + p[tn].x = x2; + p[tn++].y = y2; + } + if(tn==0) + { + a[i].flag=true; + continue; + } + p[tn].x=((a[i].x1+a[i].x2)>>1); + p[tn++].y=((a[i].y1+a[i].y2)>>1); + tn=graham_scan(tn); + a[i].flag=true; + for(j=0;j>1),((a[i].y1+a[i].y2)>>1))) + { + a[i].flag=false; + a[i].level=-1; + break; + } + r=TPoint(((a[i].x1+a[i].x2)>>1),((a[i].y1+a[i].y2)>>1)); + double s=fabs(dis_p2_line(hull[j],hull[(j+1)%tn],r)); + if(s +#include +#include +#include +#include +#include +#include +using namespace std; +int a,b; +double c,d,t,pi; +bool flag; +int main() +{ + pi = 3.1416926536; + while(scanf("%d%d%lf",&a,&b,&c)!=EOF && (a!=0 || b !=0 || fabs(c)>0.0000001)) + { + printf("%d\n",a - 1); + } + return 0; +} diff --git a/HDOJ/4104_autoAC.cpp b/HDOJ/4104_autoAC.cpp new file mode 100644 index 0000000..4958f7d --- /dev/null +++ b/HDOJ/4104_autoAC.cpp @@ -0,0 +1,25 @@ +#include +#include +#include +using namespace std; +int a[1005],sum[1005]; +int main() +{ + int n,i; + while(scanf("%d",&n)!=EOF) + { + memset(sum,0,sizeof(sum)); + for(i=1;i<=n;i++) + scanf("%d",&a[i]); + sort(a+1,a+1+n); + for(i=1;i<=n;i++) + sum[i]=sum[i-1]+a[i]; + for(i=1;i<=n;i++) + { + if(a[i]>sum[i-1]+1) + break; + } + printf("%d\n",sum[i-1]+1); + } + return 0; +} diff --git a/HDOJ/4105_autoAC.cpp b/HDOJ/4105_autoAC.cpp new file mode 100644 index 0000000..cf0cdad --- /dev/null +++ b/HDOJ/4105_autoAC.cpp @@ -0,0 +1,53 @@ +#include +#include +#include +using namespace std; +char a[5000]; +int main() +{ + int i,j,k,n,m,b,c; + while (1) + { + if (scanf("%d",&n)==EOF) break; + scanf("%s",a); + for (i=0;ia[i]) b=a[i]; + else + { + i++; + b=a[i]; + } + } + else + { + if (a[i]>b) c=a[i]; + else + { + if (a[i]==0) + { + while (a[i]==0) i++; + b=0; + c=a[i]; + } + else + { + i++; + c=a[i-1]*10+a[i]; + } + } + } + if (i>=n) break; + ans++;f=!f; + } + cout< +#include +#include +using namespace std; +const int inf=99999999; +struct{ + int v, cap, cost, next, re; +}edge[10005]; +int n,ans; +int k,edgeHead[1050]; +int que[10050],pre[1050],dis[1050]; +bool vis[1050]; +int wei[1050]; +int min(int a,int b){ + return a>b?b:a; +} +int max(int a,int b){ + return a>b?a:b; +} +void addEdge(int u,int v,int ca,int co){ + edge[k].v=v; + edge[k].cap=ca; + edge[k].cost=co; + edge[k].next=edgeHead[u]; + edge[k].re=k + 1; + edgeHead[u]=k ++; + edge[k].v=u; + edge[k].cap=0; + edge[k].cost=-co; + edge[k].next=edgeHead[v]; + edge[k].re=k - 1; + edgeHead[v]=k ++; +} +bool spfa(){ + int i, head = 0, tail = 1; + for(i = 0; i <= n; i ++){ + dis[i] = inf; + vis[i] = false; + } + dis[0] = 0; + que[0] = 0; + vis[0] = true; + while(head != tail){ + int u = que[head]; + for(i = edgeHead[u]; i != 0; i = edge[i].next){ + int v = edge[i].v; + if(edge[i].cap && dis[v] >dis[u] + edge[i].cost){ + dis[v] = dis[u] + edge[i].cost; + pre[v] = i; + if(!vis[v]){ + vis[v] = true; + que[tail ++] = v; + if(tail == 10000) tail = 0; + } + } + } + vis[u] = false; + head++; + if(head ==10000) head = 0; + } + if(dis[n] ==inf) return false; + return true; +} +void end(){ + int u, p; + for(u = n; u != 0; u = edge[edge[p].re].v){ + p = pre[u]; + edge[p].cap -= 1; + edge[edge[p].re].cap += 1; + ans += edge[p].cost; + } +} +int main(){ + int i,j,v,lim,m,sum; + while(scanf("%d %d %d",&v,&m,&lim)!=EOF){ + k=1; + sum=0; + memset(edgeHead,0,sizeof(edgeHead)); + for(i=1;i<=v;i++){ + scanf("%d",&wei[i]); + sum+=wei[i]; + } + if(m<=lim){ + printf("%d\n",sum); + continue; + } + n=v-m+2; + for(i=0;i<=n;i++){ + addEdge(i,i+1,lim,0); + } + for(i=1;i<=v;i++){ + addEdge(max(1,i-m+1),min(n-1,i)+1,1,-wei[i]); + } + ans=0; + n++; + while(spfa()) + end(); + printf("%d\n",-ans); + } + return 0; +} diff --git a/HDOJ/4107_autoAC.cpp b/HDOJ/4107_autoAC.cpp new file mode 100644 index 0000000..e872dda --- /dev/null +++ b/HDOJ/4107_autoAC.cpp @@ -0,0 +1,113 @@ +#include +#include +#include +#include +#define N 200005 +struct cam +{ + int x; + int y; + int min; + int max; + int v; +}list[N*4]; +int n,m,p; +int Min(int x,int y) +{ + return xy?x:y; +} +void build(int k,int x,int y) +{ + list[k].x=x; + list[k].y=y; + list[k].min=list[k].max=list[k].v=0; + if(x==y) + return; + int mid=(x+y)/2; + build(k<<1,x,mid); + build(k<<1|1,mid+1,y); +} +void lazy(int k) +{ + int v=list[k].v; + if(v>0) + { + list[k<<1].v+=v; + list[k<<1].min+=v; + list[k<<1].max+=v; + list[k<<1|1].v+=v; + list[k<<1|1].min+=v; + list[k<<1|1].max+=v; + list[k].v=0; + } +} +void update(int k,int a,int b,int c) +{ + if(list[k].x==a&&list[k].y==b&&(list[k].min>=p||list[k].max0) + lazy(k); + int mid=(list[k].x+list[k].y)/2; + if(a>mid) + update(k<<1|1,a,b,c); + else if(b<=mid) + update(k<<1,a,b,c); + else + { + update(k<<1,a,mid,c); + update(k<<1|1,mid+1,b,c); + } + list[k].max=Max(list[k<<1].max,list[k<<1|1].max); + list[k].min=Min(list[k<<1].min,list[k<<1|1].min); +} +int query(int k,int id) +{ + if(list[k].x==id&&list[k].y==id) + return list[k].v; + if(list[k].v>0) + lazy(k); + int mid=(list[k].x+list[k].y)/2; + if(id<=mid) + return query(k<<1,id); + else + return query(k<<1|1,id); +} +int main() +{ + int i,a,b,c; + while(scanf("%d%d%d",&n,&m,&p)!=EOF) + { + build(1,1,n); + while(m--) + { + scanf("%d%d%d",&a,&b,&c); + update(1,a,b,c); + } + for(i=1;i<=n;i++) + { + if(i==n) + printf("%d\n",query(1,i)); + else + printf("%d ",query(1,i)); + } + } + return 0; +} diff --git a/HDOJ/4109_autoAC.cpp b/HDOJ/4109_autoAC.cpp new file mode 100644 index 0000000..4fdcc2b --- /dev/null +++ b/HDOJ/4109_autoAC.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +using namespace std; +struct node +{ + int y,t; +}edge[10009]; +int T[1009]; +vector v[1009]; int n,m; +int in[1009]; +void solve() +{ + queue q; + for(int i=0;i +#include +#include +#include +using namespace std; +int dp[55][55000]; +int a[55]; +int DP(int a,int b) +{ + if(dp[a][b]!=-1) return dp[a][b]; + if(b==1) return dp[a][b]=DP(a+1,0); + dp[a][b]=0; + if(a>=1&&!DP(a-1,b)) + dp[a][b]=1; + if(a>=1&&b&&!DP(a-1,b+1)) + dp[a][b]=1; + if(a>=2&&((b&&!DP(a-2,b+3))||(b==0&&!DP(a-2,2)))) + dp[a][b]=1; + if(b>=2&&!DP(a,b-1)) + dp[a][b]=1; + return dp[a][b]; +} +int main() +{ + memset(dp,-1,sizeof(dp)); + int t,test=1,n,i,j,k; + scanf("%d",&t); + while(t--) + { + scanf("%d",&n); + for(j=0,k=0,i=0;i +#include +int main() +{ + int T; + int iCase=0; + int n,m,k; + scanf("%d",&T); + while(T--) + { + iCase++; + scanf("%d%d%d",&n,&m,&k); + int t1=n,t2,t3=n; + if(mt3)t3=m; + if(k>t3)t3=k; + t2=n+m+k-t1-t3; + n=t1;m=t2;k=t3; + int res=0; + if(n>1)res+=(int)(log(1.0*n)/log(2.0)+0.999); + if(m>1)res+=(int)(log(1.0*m)/log(2.0)+0.999); + if(k>1)res+=(int)(log(1.0*k)/log(2.0)+0.999); + long long res1=(long long)n*m*k-1; + printf("Case #%d: %I64d %d\n",iCase,res1,res); + } + return 0; +} diff --git a/HDOJ/4114_autoAC.cpp b/HDOJ/4114_autoAC.cpp new file mode 100644 index 0000000..d109bc9 --- /dev/null +++ b/HDOJ/4114_autoAC.cpp @@ -0,0 +1,88 @@ +#include +#include +#include +#include +using namespace std; +#define INF 0x3f3f3f3f +typedef long long LL; +const int N=55; +int adj[N][N]; +int pos[N],T[N],FT[N],pass[N]; +int dis[N][1<<8][1<<8]; +int n,m,K; +void floyed() +{ + for(int k=1;k<=n;k++) + { + for(int i=1;i<=n;i++) if(i!=k) + { + for(int j=1;j<=n;j++) if(j!=i&&j!=k) + { + adj[i][j]=min(adj[i][j],adj[i][k]+adj[k][j]); + } + } + } +} +int fun() +{ + int ans=INF; + dis[1][0][0]=0; + for(int s1=0;s1<(1< +#include +#include +#include +#include +#include +using namespace std; +const int MAXN=22000; +bool visit[MAXN]; +queueq1,q2; +vector >adj; +vector >radj; +vector >dag; +int n,m,cnt; +int id[MAXN],order[MAXN],ind[MAXN]; +void dfs(int u) +{ + visit[u]=true; + int i,len=adj[u].size(); + for(i=0;i=0;i--) + if(!visit[order[i]]) + { + cnt++; + rdfs(order[i]); + } +} +bool solvable() +{ + for(int i=0;ib[i])swap(a[i],b[i]); + } + adj.assign(2*n,vector()); + radj.assign(2*n,vector()); + bool flag=true; + while(m--) + { + scanf("%d%d%d",&x,&y,&z); + x--; + y--; + if(!flag)continue; + if(x==y) + { + if(z==1)flag=false; + continue; + } + if(z==0) + { + if(a[x]!=a[y]) + { + add(2*x,2*y+1); + add(2*y,2*x+1); + } + if(a[x]!=b[y]) + { + add(2*x,2*y); + add(2*y+1,2*x+1); + } + if(b[x]!=a[y]) + { + add(2*x+1,2*y+1); + add(2*y,2*x); + } + if(b[x]!=b[y]) + { + add(2*x+1,2*y); + add(2*y+1,2*x); + } + } + else if(z==1) + { + if(a[x]==a[y]) + { + add(2*x,2*y+1); + add(2*y,2*x+1); + } + if(a[x]==b[y]) + { + add(2*x,2*y); + add(2*y+1,2*x+1); + } + if(b[x]==a[y]) + { + add(2*x+1,2*y+1); + add(2*y,2*x); + } + if(b[x]==b[y]) + { + add(2*x+1,2*y); + add(2*y+1,2*x); + } + } + } + if(!flag) + { + printf("Case #%d: no\n",iCase); + continue; + } + korasaju(); + if(solvable())printf("Case #%d: yes\n",iCase); + else printf("Case #%d: no\n",iCase); + } + return 0; +} diff --git a/HDOJ/4117_autoAC.cpp b/HDOJ/4117_autoAC.cpp new file mode 100644 index 0000000..fe09fb7 --- /dev/null +++ b/HDOJ/4117_autoAC.cpp @@ -0,0 +1,244 @@ +#pragma comment(linker, "/STACK:1024000000,1024000000") +#include +#include +#include +using namespace std; +#define D(x) +const int MAX_CHILD_NUM = 26; +const int MAX_NODE_NUM = 3 * (int)1e5 + 10; +const int MAX_LEN = 3 * (int)1e5 + 10; +const int MAX_N = 2 * (int)1e4 + 10; +#define MAX_EDGE_NUM MAX_NODE_NUM * 2 +struct Edge +{ + int v, next; + Edge() + {} + Edge(int v, int next):v(v), next(next) + {} +} edge[MAX_EDGE_NUM]; +int head[MAX_NODE_NUM]; +int edge_cnt; +void init_edge() +{ + memset(head, -1, sizeof(head)); + edge_cnt = 0; +} +void add_edge(int u, int v) +{ + edge[edge_cnt] = Edge(v, head[u]); + head[u] = edge_cnt++; +} +struct Trie +{ + int next[MAX_NODE_NUM][MAX_CHILD_NUM]; + int fail[MAX_NODE_NUM]; + int count[MAX_NODE_NUM]; + int node_cnt; + int root; + bool vis[MAX_NODE_NUM]; //set it to false + void init() + { + node_cnt = 0; + root = newnode(); + } + int newnode() + { + for (int i = 0; i < MAX_CHILD_NUM; i++) + next[node_cnt][i] = -1; + count[node_cnt++] = 0; + return node_cnt - 1; + } + int get_id(char a) + { + return a - 'a'; + } + void insert(char buf[], int index) + { + int now = root; + for (int i = 0; buf[i]; i++) + { + int id = get_id(buf[i]); + if (next[now][id] == -1) + next[now][id] = newnode(); + now = next[now][id]; + } + count[now] = index; + } + void build() + { + queueQ; + fail[root] = root; + for (int i = 0; i < MAX_CHILD_NUM; i++) + if (next[root][i] == -1) + next[root][i] = root; + else + { + fail[next[root][i]] = root; + Q.push(next[root][i]); + } + while (!Q.empty()) + { + int now = Q.front(); + Q.pop(); + for (int i = 0; i < MAX_CHILD_NUM; i++) + if (next[now][i] == -1) + next[now][i] = next[fail[now]][i]; + else + { + fail[next[now][i]]=next[fail[now]][i]; + Q.push(next[now][i]); + } + } + } + void build_fail_tree() + { + init_edge(); + for (int i = 1; i < node_cnt; i++) + { + add_edge(i, fail[i]); + add_edge(fail[i], i); + } + } +}ac; +const int MAX_INTERVAL = MAX_LEN; +struct SegmentTree +{ + struct Node + { + int l, r; + Node *pleft, *pright; + int value; + }tree[MAX_INTERVAL *4]; + int node_cnt; + void init() + { + node_cnt = 0; + } + Node* new_node() + { + node_cnt++; + return tree + node_cnt; + } + void build_tree(Node *proot, int s, int e) + { + proot->l = s; + proot->r = e; + proot->value = 0; + if (s == e) + { + proot->pleft = proot->pright = NULL; + return; + } + int mid = (s + e) / 2; + build_tree(proot->pleft = new_node(), s, mid); + build_tree(proot->pright = new_node(), mid + 1, e); + } + void pull_up(Node *proot) + { + } + void push_down(Node *proot) + { + } + void update(Node *proot, int start, int end, int value) + { + if (start > proot->r || end < proot->l) + return; + start = max(start, proot->l); + end = min(end, proot->r); + if (start == proot->l && end == proot->r) + { + proot->value = max(proot->value, value); + return; + } + push_down(proot); + update(proot->pleft, start, end, value); + update(proot->pright, start, end, value); + pull_up(proot); + } + int query(Node *proot, int start, int end) + { + int ret = proot->value; + if (start > proot->r || end < proot->l) + return 0; + start = max(start, proot->l); + end = min(end, proot->r); + if (start == proot->l && end == proot->r) + { + return ret; + } + push_down(proot); + ret = max(ret, query(proot->pleft, start, end)); + ret = max(ret, query(proot->pright, start, end)); + pull_up(proot); + return ret; + } +}tree; +char st[MAX_LEN]; +int pos[MAX_N]; +int dfn[MAX_LEN][2]; +int dfn_cnt; +int n; +int weight[MAX_N]; +void dfs(int u, int parent) +{ + dfn[u][0] = ++dfn_cnt; + for (int i = head[u]; i != -1; i = edge[i].next) + { + int v = edge[i].v; + if (v != parent) + { + dfs(v, u); + } + } + dfn[u][1] = dfn_cnt; +} +int work() +{ + int ret = 0; + tree.init(); + tree.build_tree(tree.tree, 0, dfn_cnt); + for (int i = 0; i < n; i++) + { + int u = ac.root; + int temp = 0; + for (int j = pos[i]; j < pos[i + 1]; j++) + { + u = ac.next[u][ac.get_id(st[j])]; + temp = max(temp, tree.query(tree.tree, dfn[u][0], dfn[u][0]) + weight[i]); + } + tree.update(tree.tree, dfn[u][0], dfn[u][1], temp); + ret = max(ret, temp); + } + return ret; +} +void input() +{ + scanf("%d", &n); + int temp = 0; + for (int i = 0; i < n; i++) + { + scanf("%s%d", st + temp, &weight[i]); + pos[i] = temp; + ac.insert(st + temp, i); + int len = strlen(st + temp); + temp += len; + } + pos[n] = temp; +} +int main() +{ + int t; + scanf("%d", &t); + for (int i = 1; i <= t; i++) + { + ac.init(); + input(); + ac.build(); + ac.build_fail_tree(); + dfn_cnt = 0; + dfs(0, -1); + printf("Case #%d: %d\n", i, work()); + } + return 0; +} diff --git a/HDOJ/4118_autoAC.cpp b/HDOJ/4118_autoAC.cpp new file mode 100644 index 0000000..812fc9b --- /dev/null +++ b/HDOJ/4118_autoAC.cpp @@ -0,0 +1,68 @@ +#pragma comment(linker, "/STACK:10240000000000,10240000000000") +#include +#include +#include +#include +#include +#include +#define MAXN 101005 +#define MAXM 400005 +#define INF 1000000000 +using namespace std; +struct EDGE +{ + int v, next; + long long w; +}edge[MAXM]; +int head[MAXN], e; +int n; +int num[MAXN]; +long long ans; +void init() +{ + ans = 0; + memset(head, -1, sizeof(head)); + e = 0; + memset(num, 0, sizeof(num)); +} +void add(int u, int v, long long w) +{ + edge[e].v = v; + edge[e].w = w; + edge[e].next = head[u]; + head[u] = e++; +} +void dfs(int u, int fa) +{ + num[u] = 1; + for(int i = head[u]; i != -1; i = edge[i].next) + { + int v = edge[i].v; + if(v != fa) + { + dfs(v, u); + num[u] += num[v]; + long long tmp = min(num[v], n - num[v]); + ans += tmp * edge[i].w * 2LL; + } + } +} +int main() +{ + int T, cas = 0, x, y, z; + scanf("%d", &T); + while(T--) + { + scanf("%d", &n); + init(); + for(int i = 1; i < n; i++) + { + scanf("%d%d%d", &x, &y, &z); + add(x, y, z); + add(y, x, z); + } + dfs(1, 0); + printf("Case #%d: %I64d\n", ++cas, ans); + } + return 0; +} diff --git a/HDOJ/4119_autoAC.cpp b/HDOJ/4119_autoAC.cpp new file mode 100644 index 0000000..8f87fb0 --- /dev/null +++ b/HDOJ/4119_autoAC.cpp @@ -0,0 +1,111 @@ +#include +#include +#include +#include +using namespace std; +struct Point +{ + int x,y; + Point(){} + Point(int x,int y):x(x),y(y){} + bool operator <(const Point& S)const + { + return x Dic; + scanf("%d",&z); + while(z--) + { + Dic.clear(); + scanf("%d",&n); + for(int i=1;i<=n;i++) + scanf("%s",map[i]+1); + int top = 0; + for(int i=1;i<=n;i++) + { + scanf("%s",map[0]+1); + for(int j=1;j<=n;j++) + if(map[0][j] == '*') + P[0][top++] = Point(i,j); + } + for(int i=1;i<=3;i++) + for(int j=0;j +#include +#include +#include +#include +#include +#define LL __int64 +const int N = 10005; +using namespace std; +int a[N], n, k, s, t; +int Ans() +{ + int i; + for( i = 1; i <= k; i ++ ) + if( a[i] < 0 ) + return 0; + for( i = 1; i < k; i ++ ) + { + a[i] -= a[i+1]; + if( a[i] ) + { + n --; + t -= a[i] * i; + } + } + s = a[k]; + a[k] = 0; + for( i = 1; i < k; i ++ ) + if( a[i] < 0 ) + return 0; + if( n < 0 || s < n) + return 0; + if( n == 0 ) + { + if( t == 0 && s == 0 ) + return 1; + else + return 0; + } + if( n == 1 ) + { + if( t%s == 0 && t/s >= k ) + { + a[t/s] = s; + return 1; + } + else + return 0; + } + int ans(0), j, tt, mm = ( n*n-n ) / 2; + for( i = k; i*s <= t-mm; i ++ ) + { + tt = t-mm - i*s; + if( tt == 0 ) + { + for( j = 1; j < n; j ++ ) + a[k+j] = 1; + a[k] = s-n+1; + ans ++; + } + else if( tt > 1 && n > 2 ) + return 2; + else if( tt > 1 && n == 2 ) + { + tt += mm; + for( j = 1; j < s; j ++ ) + { + if( j > tt ) + break; + else if( ans > 1 ) + return 2; + if( tt%j == 0 ) + { + a[ tt/j + i ] = j; + a[i] = s-j; + ans ++; + } + } + } + else if( s > n ) + return 2; + else + { + for( j = 1; j < n-1; j ++ ) + a[k+j] = 1; + a[k+n] = 1; + a[k] = s-n+1; + ans ++; + } + if( ans > 1 ) + return 2; + } + return ans; +} +int main() +{ + int ca, cs, i, pre, now; + scanf( "%d", &ca ); + for( cs = 1; cs <= ca; cs ++ ) + { + memset( a, 0, sizeof(a) ); + scanf( "%d%d", &n, &k ); + scanf( "%d", &t ); + pre = t; + for( i = 1; i <= k; i ++ ) + { + scanf( "%d", &now ); + a[i] = pre - now; + pre = now; + } + printf( "Case #%d:\n", cs ); + now = Ans(); + if( now < 1 ) + printf( "No Solution\n" ); + else if( now > 1 ) + printf( "Multiple Solutions\n" ); + else + { + printf( "Unique Solution\n" ); + for( i = 1; i < N; i ++ ) + if( a[i] ) + printf( "%d %d\n", i, a[i] ); + } + } + return 0; +} diff --git a/HDOJ/4121_autoAC.cpp b/HDOJ/4121_autoAC.cpp new file mode 100644 index 0000000..ba1dbf5 --- /dev/null +++ b/HDOJ/4121_autoAC.cpp @@ -0,0 +1,160 @@ +#include +#include +using namespace std ; +int abs(int x) +{ + return x>0?x:-x ; +} +char map[11][11] ; +int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}} ; +int RGX,RGY ; +int xx,yy ; +int ok(int x,int y) +{ + if(y!=RGY) + return 1 ; + for(int i=x+1 ;i> chr >> a >> b ; + map[a][b]=chr ; + if(chr=='G') + { + RGX=a ;RGY=b ; + } + } + int flag ; + for(int i=0 ;i<4 ;i++) + { + flag=0 ; + xx=x+dir[i][0] ; + yy=y+dir[i][1] ; + if(xx<1 || xx>3){flag=1 ;continue ;} + if(yy<4 || yy>6){flag=1 ;continue ;} + if(!ok(xx,yy)){flag=1 ;continue ;} + char t=map[xx][yy] ; + map[xx][yy]='0' ; + for(int j=1 ;j<=10 ;j++) + { + for(int k=1 ;k<=9 ;k++) + { + if(map[j][k]=='R') + { + if(cha(j,k)) + flag=1 ; + } + if(map[j][k]=='H') + { + if(hor(j,k)) + flag=1 ; + } + if(map[j][k]=='C') + { + if(can(j,k)) + flag=1 ; + } + } + } + if(!flag) + break ; + map[xx][yy]=t ; + } + if(flag) + puts("YES") ; + else + puts("NO") ; + } + return 0 ; +} diff --git a/HDOJ/4122_autoAC.cpp b/HDOJ/4122_autoAC.cpp new file mode 100644 index 0000000..43d01b8 --- /dev/null +++ b/HDOJ/4122_autoAC.cpp @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define INF 99999999 +using namespace std; +const int MAX=2500+10; +char mon[5]; +int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; +struct Node{ + int num,t; +}order[MAX],q[MAX*4]; +int MON(char *m){ + if(strcmp(m,"Jan") == 0)return 1; + if(strcmp(m,"Feb") == 0)return 2; + if(strcmp(m,"Mar") == 0)return 3; + if(strcmp(m,"Apr") == 0)return 4; + if(strcmp(m,"May") == 0)return 5; + if(strcmp(m,"Jun") == 0)return 6; + if(strcmp(m,"Jul") == 0)return 7; + if(strcmp(m,"Aug") == 0)return 8; + if(strcmp(m,"Sep") == 0)return 9; + if(strcmp(m,"Oct") == 0)return 10; + if(strcmp(m,"Nov") == 0)return 11; + return 12; +} +bool LeapYear(int &year){ + return year%4 == 0 && year%100 || year%400 == 0; +} +int Time(int &year,int Mon,int &d,int &h){ + int t=0; + for(int i=2000;i=a)--tail; + q[tail].num=a,q[tail++].t=i; + while(p +#include +#include +using namespace std; +#include +#include +#define N 50010 +#define M 510 +#define inf 200000000 +int w[N],edge,id[N],an[M]; +__int64 dp[N][2],dis[N]; +struct qq{ + int id; + __int64 l; +}q[M]; +bool cmp(const qq &a,const qq &b){ + return a.ldp[u][0]){ + dp[u][1]=dp[u][0]; + id[u]=v,dp[u][0]=dp[v][0]+e[i].l; + } + else if(dp[v][0]+e[i].l>dp[u][1]) dp[u][1]=dp[v][0]+e[i].l; + } + } +} +void dfs2(int u,int no,__int64 l){ + dis[u]=max(l,dp[u][0]); + for(int i=w[u];i!=-1;i=e[i].next){ + int v=e[i].v; + if(v!=no){ + if(v==id[u]) dfs2(v,u,max(l,dp[u][1])+e[i].l); + else dfs2(v,u,dis[u]+e[i].l); + } + } +} +int dp_max[N][20],dp_min[N][20]; +__int64 p[20]; +int max_id(int x,int y){ + return dis[x]>dis[y]?x:y; +} +int min_id(int x,int y){ + return dis[x]>dis[y]?y:x; +} +int log(int x){ + int i=0; + while(p[i]<=x) i++; + return i-1; +} +int get_max_id(int x,int y){ + int t=log(y-x+1); + return max_id(dp_max[x][t],dp_max[y-p[t]+1][t]); +} +int get_min_id(int x,int y){ + int t=log(y-x+1); + return min_id(dp_min[x][t],dp_min[y-p[t]+1][t]); +} +__int64 get_min(int x,int y){ + return dis[get_min_id(x,y)]; +} +__int64 get_max(int x,int y){ + return dis[get_max_id(x,y)]; +} +void RMQ(int n){ + int i,j,l=n,t=0; + p[0]=1; + for(i=1;i<18;i++) + p[i]=p[i-1]<<1; + t=log(n); + for(i=1;i<=n;i++) + dp_max[i][0]=dp_min[i][0]=i; + for(i=1;i<=t;i++){ + l=n-p[i]+1; + for(j=1;j<=l;j++){ + dp_max[j][i]=max_id(dp_max[j][i-1],dp_max[j+p[i-1]][i-1]); + dp_min[j][i]=min_id(dp_min[j][i-1],dp_min[j+p[i-1]][i-1]); + } + } +} +int main(){ + int n,m,a,b; + __int64 c; + while(scanf("%d%d",&n,&m)){ + if(!n&&!m) break; + edge=0; + memset(w,-1,sizeof(int)*(n+1)); + for(int i=1;i +#include +char s[2000000],ss[10000]; +int sta[700000],top,root,ch[700000][2],cnt; +int zhu[700000],C[700000]; +inline void f() +{ + zhu[root]=0;cnt=0; + sta[0]=root,top=1; + if(!ch[root][0]&&!ch[root][1]) + { + s[0]=root%2+'0'; + return; + } + int t=root; + while(t-root||((zhu[t]==1&&ch[t][1])||zhu[t]==0)) + { + s[cnt++]=t%2+'0'; + if(top<0) + return; + if(zhu[t]==0) + { + if(ch[t][0]) + { + zhu[t]=1; + t=ch[t][0]; + zhu[t]=0; + sta[top++]=t; + } + else if(ch[t][1]) + { + zhu[t]=2; + t=ch[t][1]; + zhu[t]=0; + sta[top++]=t; + } + else if(t==root) + return ; + else + zhu[t]=2,t=sta[--top-1]; + } + else if(zhu[t]==1) + { + if(ch[t][1]) + { + zhu[t]=2; + t=ch[t][1]; + zhu[t]=0; + sta[top++]=t; + } + else if(t==root) + return ; + else + t=sta[--top-1]; + } + else if(t==root) + return ; + else + t=sta[--top-1]; + } + s[cnt++]=root%2+'0'; +} +int P[10000]; +inline void scan(int &u) +{ + char c; + while(c=getchar(),c<'0'||c>'9'); + u=c-'0'; + while(c=getchar(),c<='9'&&c>='0') + u=u*10+c-'0'; +} +int ff(int l) +{ + int i,j,ans=0; + P[0]=-1; + for(i=1,j=-1;i=1) + ans+=C[n],n-=n&(-n); + return ans; +} +void update(int n) +{ + while(n<=N) + C[n]++,n+=n&(-n); +} +void insert(int n) +{ + update(n); + int t=cal(n); + if(!root) + { + root=n; + Min=Max=n; + return; + } + if(n>Max) + { + ch[Max][1]=n; + Max=n; + return; + } + if(nn?Max:n; + while(l>1; + if(cal(mid)==t-1) + r=mid; + else + l=mid+1; + } + l=r; + if(!ch[l][1]) + { + ch[l][1]=n; + return; + } + l=n+1,r=N; + while(l>1; + if(cal(mid)-t) + r=mid; + else + l=mid+1; + } + ch[r][0]=n; +} +int main() +{ + int t,n,i,j; + scanf("%d",&t); + for(int ii=1;ii<=t;ii++) + { + memset(ch,0,sizeof(ch)); + memset(C,0,sizeof(C)); + Min=1000000,Max=0; + root=0; + scanf("%d",&n);N=n; + for(i=1;i<=n;i++) + scanf("%d",&j),insert(j); + f(); + scanf("%s",ss); + printf("Case #%d: %d\n",ii,ff(strlen(ss))); + } +} diff --git a/HDOJ/4126_autoAC.cpp b/HDOJ/4126_autoAC.cpp new file mode 100644 index 0000000..c262499 --- /dev/null +++ b/HDOJ/4126_autoAC.cpp @@ -0,0 +1,117 @@ +#include +#include +#include +#include +using namespace std; +const int maxn = 3003; +const int maxm = maxn * maxn; +const int inf = 1000000000; +int n, m; +__int64 mst; +int map[maxn][maxn]; +int dp[maxn][maxn]; +int dis[maxn], pre[maxn]; +bool vis[maxn]; +vector edge[maxn]; +int minz(int a, int b) +{ + return a < b ? a : b; +} +void init() +{ + int i, j; + for(i = 0; i < n; i++) + { + for(j = 0; j < n; j++) + map[i][j] = dp[i][j] = inf; + edge[i].clear(); + vis[i] = 0; + pre[i] = -1; + dis[i] = inf; + } +} +void input() +{ + int x, y, z; + while(m--) + { + scanf("%d%d%d", &x, &y, &z); + map[x][y] = map[y][x] = z; + } +} +void prim() +{ + int i, j, k; + for(i = 1; i < n; i++) + { + dis[i] = map[0][i]; + pre[i] = 0; + } + dis[0] = inf; + vis[0] = 1; + pre[0] = -1; + mst = 0; + for(i = 0; i < n-1; i++) + { + k = 0; + for(j = 1; j < n; j++) + if(!vis[j] && dis[k] > dis[j]) + k = j; + vis[k] = 1; + mst += dis[k]; + if(pre[k] != -1) + edge[k].push_back(pre[k]), + edge[pre[k]].push_back(k); + for(j = 1; j < n; j++) + if(!vis[j] && dis[j] > map[k][j] ) + dis[j] = map[k][j], pre[j] = k; + } +} +int dfs(int pos, int u, int fa) +{ + int i, ans = inf; + for(i = 0; i < edge[u].size(); i++) + { + int v = edge[u][i]; + if(v == fa) continue; + int tmp = dfs(pos, v, u); + ans = minz(ans, tmp); + dp[u][v] = dp[v][u] = minz(dp[u][v], tmp); + } + if(pos != fa) + ans = minz(ans, map[pos][u]); + return ans; +} +void solve() +{ + int i; + for(i = 0; i < n; i++) + dfs(i, i, -1); +} +void query() +{ + int x, y, z; + double sum = 0; + scanf("%d", &m); + for(int ii = 1; ii <= m; ii++) + { + scanf("%d%d%d", &x, &y, &z); + if(pre[x] != y && pre[y] != x) + sum += mst * 1.0; + else + sum += mst * 1.0 - map[x][y] + minz(dp[x][y], z); + } + printf("%.4f\n", sum/m); +} +int main() +{ + while( ~scanf("%d%d", &n, &m) && n + m) + { + init(); + input(); + prim(); + solve(); + query(); + } + return 0; +} diff --git a/HDOJ/4127_autoAC.cpp b/HDOJ/4127_autoAC.cpp new file mode 100644 index 0000000..57f959e --- /dev/null +++ b/HDOJ/4127_autoAC.cpp @@ -0,0 +1,118 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define inf 1<<30 +#define M 60005 +#define N 10005 +#define maxn 300005 +#define eps 1e-10 +#define zero(a) fabs(a)(b)?(a):(b)) +#define pb(a) push_back(a) +#define mem(a,b) memset(a,b,sizeof(a)) +#define LL long long +#define lson step<<1 +#define rson step<<1|1 +#define MOD 1000000009 +using namespace std; +int maze[10][10]; +int n; +int way[4][2]={0,1,0,-1,1,0,-1,0}; +int vis[10][10]; +bool check(int x,int y) +{ + if(x<0||y<0||x>=n||y>=n) return false; + return true; +} +void floodfill(int x,int y,int c) +{ + vis[x][y]=1; + for(int i=0;i<4;i++) + { + int tx=x+way[i][0]; + int ty=y+way[i][1]; + if(!check(tx,ty)) continue; + if(vis[tx][ty]==1) continue; + if(maze[tx][ty]==c) floodfill(tx,ty,c); + else vis[tx][ty]=2; + } +} +int get_cnt(int col) +{ + int cnt=0; + for(int i=0;idepth) return false; + for(int i=0;i<6;i++) + { + int tmp[10][10]; + memcpy(tmp,vis,sizeof(vis)); + if(get_cnt(i)==0) continue; + if(IDAstar(dep+1)) return true; + memcpy(vis,tmp,sizeof(vis)); + } + return false; +} +int main() +{ + while(scanf("%d",&n)!=EOF&&n) + { + for(int i=0;i +#include +#include +#include +using namespace std; +struct Node +{ + long long s,t; +}node[11000]; +int cmp(const void *a,const void *b) +{ + return ((Node *)b)->s-((Node *)a)->s; +} +long long S[11000],T[11000],N; +int ff(int s,int t) +{ + if(N==1) + return 1; + if(N==2) + { + if((T[1]-t)*(S[2]-s)<(S[1]-s)*(T[2]-t)) + return 1; + return 2; + } + int l=2,r=N-1,mid; + while(l>1; + if((T[mid]-t)*(S[mid-1]-s)<=(T[mid-1]-t)*(S[mid]-s)&&(T[mid]-t)*(S[mid+1]-s)<=(T[mid+1]-t)*(S[mid]-s)) + l=r=mid; + else if((T[mid]-t)*(S[mid-1]-s)<(T[mid-1]-t)*(S[mid]-s)&&(T[mid]-t)*(S[mid+1]-s)>=(T[mid+1]-t)*(S[mid]-s)) + l=mid+1; + else + r=mid-1; + } + if((T[1]-t)*(S[r]-s)<(T[r]-t)*(S[1]-s)) + r=1; + if((T[N]-t)*(S[r]-s)<(T[r]-t)*(S[N]-s)) + r=N; + return r; +} +int q[11000],f,r,qq[11000]; +int main() +{ + long long n,s,w,d,L,j; + int i,t; + double ans; + scanf("%d",&t); + while(t--) + { + scanf("%I64d%I64d%I64d%I64d",&n,&d,&L,&w); + for(i=1,s=0;i<=n;i++) + scanf("%I64d%I64d",&node[i].s,&node[i].t),s+=d*node[i].t,w-=node[i].s*d; + L-=d*n; + if(L<0||w<0) + { + printf("No solution\n"); + continue; + } + qsort(node+1,n,sizeof(Node),cmp); + for(i=1,f=1,r=0;i<=n;i++) + { + while(f<=r&&node[i].tw;i++); + if(i>n) + { + printf("No solution\n"); + continue; + } + else if(L*(node[q[1]].s)<=w) + { + printf("%.2f\n",s+L*node[q[1]].t+0.0); + continue; + } + r=i; + S[1]=node[q[1]].s,T[1]=node[q[1]].t; + for(i=2,N=1,qq[1]=q[1];i1&&((node[qq[N-1]].t-node[qq[N]].t)*(node[qq[N]].s-node[q[i]].s)<=(node[qq[N]].t-node[q[i]].t)*(node[qq[N-1]].s-node[qq[N]].s))) + N--; + qq[++N]=q[i]; + } + for(i=1;i<=N;i++) + S[i]=node[qq[i]].s,T[i]=node[qq[i]].t; + for(ans=4000000000,i=r;i<=n;i++) + { + j=ff(node[q[i]].s,node[q[i]].t); + j=qq[j]; + double tt=L*node[q[i]].t+(w-L*node[q[i]].s)*((node[q[i]].t-node[j].t+0.0)/(node[q[i]].s-node[j].s+0.0)); + if(tt +#include +#include +#include +#include +#include +#include +using namespace std; +const int maxn = 50000; +struct node +{ + int s; + int e; + int v; +}seg[maxn+5]; +struct hashnode +{ + int rv; + int id; +}index[maxn*2+5]; +bool cmp(const hashnode &a, const hashnode &b) +{ + return a.rv0; i-=lowbit(i)) + { + f[i] += d; + } +} +inline void update(int l, int r, int d) +{ + _update(l-1, -d); + _update(r, d); +} +inline int getpt(int x, int n) +{ + int i, s = 0; + for (i=x; i<=n; i+=lowbit(i)) + { + s += f[i]; + } + return s; +} +int bs(int v, int s, int t) +{ + int l=s-1, r=t+1, m, ans; + while(l<=r) + { + m = (l+r)>>1; + if (v<=index[m].rv) + { + ans = m; + r = m-1; + } + else l = m+1; + } + return index[ans].id; +} +int main() +{ + int t; + int len; + double amt; + int n; + int i, j; + int a, b; + int end; + double ans; + scanf("%d", &t); + while(t--) + { + scanf("%d %lf", &len, &amt); + scanf("%d", &n); + index[1].rv = 0; + index[2].rv = len; + for (i=0,j=3; i1e-6; i++) + { + a = index[i+1].rv-index[i].rv; + b = getpt(i, end); + if (a*1.0>amt/b) + { + ans += amt/b; + amt = 0; + } + else + { + ans += a; + amt -= a*b; + } + } + printf("%.2lf\n", ans); + } + return 0; +} diff --git a/HDOJ/4133_autoAC.cpp b/HDOJ/4133_autoAC.cpp new file mode 100644 index 0000000..a8d3724 --- /dev/null +++ b/HDOJ/4133_autoAC.cpp @@ -0,0 +1,37 @@ +#include +__int64 prime[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47}; +__int64 n,cnter,ans; +void dfs(__int64 cur,__int64 cnt,__int64 power,__int64 sub) +{ + __int64 i; + if(cur>n) + return; + if(cnt==cnter&&curcnter) + { + ans=cur; + cnter=cnt; + } + __int64 p=prime[sub]; + for(i=1;i<=power;i++) + { + if(cur*p>n) + break; + dfs(cur*p,cnt*(i+1),i,sub+1); + p=p*prime[sub]; + } +} +int main() +{ + int t,T; + scanf("%d",&T); + for(t=1;t<=T;t++) + { + scanf("%I64d",&n); + cnter=0,ans=0; + dfs(1,1,50,0); + printf("Case #%d: %I64d\n",t,ans); + } + return 0; +} diff --git a/HDOJ/4134_autoAC.cpp b/HDOJ/4134_autoAC.cpp new file mode 100644 index 0000000..57458c7 --- /dev/null +++ b/HDOJ/4134_autoAC.cpp @@ -0,0 +1,31 @@ +#include +int a[110]; +int main(){ + int t; + scanf("%d",&t); + int ca = 1; + while(t--){ + int n; + scanf("%d",&n); + int i,j; + for(i=1;i<=n;i++)scanf("%d",&a[i]); + int win = 0; + i = 1,j = n; + while(1){ + if(j-i+1==2){ + if(a[1]>a[2])win = 1; + else win = 2; + break; + } + int ii = i,jj = j; + while(ii<=jj){ + a[ii++] += a[jj--]; + } + i = 1,j = (j+1)/2; + } + printf("Case #%d: ",ca++); + if(win==1)puts("Alice"); + else if(win==2)puts("Bob"); + } + return 0; +} diff --git a/HDOJ/4135_autoAC.cpp b/HDOJ/4135_autoAC.cpp new file mode 100644 index 0000000..ebca124 --- /dev/null +++ b/HDOJ/4135_autoAC.cpp @@ -0,0 +1,43 @@ +#include +#include +#include +#include +using namespace std; +long long a,b,n; +vector vt; +long long solve(long long x,long long n){ + vt.clear(); + long long i,j; + for(i=2;i*i<=n;i++) + if(n%i==0){ + vt.push_back(i); + while(n%i==0) + n/=i; + } + if(n>1) + vt.push_back(n); + long long sum=0,val,cnt; + for(i=1;i<(1<>a>>b>>n; + cout<<"Case #"<<++cases<<": "< +#include +#include +#include +#include +using namespace std; +#define eps 1e-10 +#define N 100015 +#define db double +db ans,p1,p2,win1,win2,win_num[2][2][2],dp[2][2][2]; +int sign(db x){ + return (x > eps) - (x < -eps); +} +void dfs(int pl1,db p,int pl2,int v,int s){ + if((pl1 == 6&&pl2 <= 4)||pl1 == 7){ + win_num[s][0][v] += p*(pl1+pl2)*5.; + dp[s][0][v] += p; + return ; + } + if((pl2 == 6&&pl1 <= 4)||pl2 == 7){ + win_num[s][1][v] += p*(pl1+pl2)*5.; + dp[s][1][v] += p; + return ; + } + if(v) dfs(pl1,p*p2,pl2+1,v^1,s),dfs(pl1+1,p*(1.-p2),pl2,v^1,s); + else dfs(pl1+1,p*p1,pl2,v^1,s),dfs(pl1,p*(1.-p1),pl2+1,v^1,s); +} +void dfs2(int l1,int l2,db pl1,db p,db pl2,int v){ + if(l1 == 3||l2 == 3){ + ans += p*(pl1+pl2); + return ; + } + dfs2(l1+1,l2,pl1+win_num[v][0][0],dp[v][0][0]*p,pl2,0); + dfs2(l1+1,l2,pl1+win_num[v][0][1],dp[v][0][1]*p,pl2,1); + dfs2(l1,l2+1,pl1,dp[v][1][0]*p,pl2+win_num[v][1][0],0); + dfs2(l1,l2+1,pl1,dp[v][1][1]*p,pl2+win_num[v][1][1],1); +} +char s[256]; +int main() +{ + int T,cas = 1; + int i,j,k; + scanf("%d",&T); + while(T--) + { + scanf("%s%s%lf",&s,&s,&p1); + scanf("%s%s%lf",&s,&s,&p2); + p1 /= 100.; + p2 /= 100.; + ans = 0.; + for(i = 0; i < 2; i ++) for(j = 0; j < 2; j ++) for(k = 0; k < 2; k ++) win_num[i][j][k] = dp[i][j][k] = 0.; + dfs(0,1.,0,0,0); + dfs(0,1.,0,1,1); + for(i = 0; i < 2; i ++) for(j = 0; j < 2; j ++) for(k = 0; k < 2; k ++) if(sign(dp[i][j][k])) win_num[i][j][k] /= dp[i][j][k]; + dfs2(0,0,0.,1.,0.,0); + printf("Case #%d: %.6lf\n",cas++,ans); + } + return 0; +} diff --git a/HDOJ/4137_autoAC.cpp b/HDOJ/4137_autoAC.cpp new file mode 100644 index 0000000..cacf64a --- /dev/null +++ b/HDOJ/4137_autoAC.cpp @@ -0,0 +1,33 @@ +#include +#include +#include +#include +using namespace std; +struct node{ + int id; + int v; +}p[33]; +bool cmp(node a,node b){ + return a.v +#include +using namespace std; +__int64 dp[100][30][30]; +int ans[100]; +int main(){ + memset(dp,0,sizeof(dp)); + dp[0][1][0]=1; + for(int i=2;i<=75;i++){ + for(int j=1;j<=27;j++){ + for(int k=0;k<=20;k++){ + __int64 val=0; + if(j==1){ + if(k==0) continue; + for(int jj=2;jj<=27;jj++){ + if(i>=j) val+=dp[i-j][jj][k-1]; + } + }else{ + for(int jj=1;jj<=27;jj++){ + if(i>=j) val+=dp[i-j][jj][k]; + } + } + dp[i][j][k]=val; + } + } + } + int t,cas=0; + scanf("%d",&t); + while(t--){ + int V,W; + __int64 I; + scanf("%d%d%I64d",&V,&W,&I); + printf("Case #%d: ",++cas); + W-=1; + I-=1; + ans[0]=-1; + for(int i=2;i<=27;i++){ + if(I>=dp[V][i][W]){ + I-=dp[V][i][W]; + }else{ + V-=i; + ans[0]=i; + break; + } + } + if(ans[0]==-1){ + puts("Corrupted!"); + continue; + } + int cnt=1; + bool flag=false; + while(true){ + for(int i=1;i<=27;i++){ + if(flag&&(i==1)) continue; + if((W==0)&&(i==1)) continue; + flag=false; + if(I>=dp[V][i][W]){ + I-=dp[V][i][W]; + }else{ + V-=i; + if(i==1){W-=1;flag=true;} + ans[cnt++]=i; + break; + } + } + if(V==0) break; + } + for(int i=0;i +#include +#include +#include +#include +using namespace std; +#define N 1000005 +#define LL long long +int max(int a,int b){return a>b?a:b;} +LL cnt[N]; +void gao(int n,int p){ + int i; + int a=1; + for(i=2;i*i<=n;i+=a,a=2){ + if(n%i==0){ + while(n%i==0){ + cnt[i] += p; + n/=i; + } + } + } + if(n>1)cnt[n] += p; +} +int main(){ + int t; + scanf("%d",&t); + int ca=1; + while(t--){ + int n,m; + scanf("%d%d",&n,&m); + int i,j; + int a,b; + memset(cnt,0,sizeof(cnt)); + int maxm = 0; + for(i=0;i 0){ + while(cnt[i]--){ + x *= i; + } + } else if(cnt[i]<0){ + while(cnt[i]++){ + y *= i; + } + } + } + printf("Case #%d: %d / %d\n",ca++,x,y); + } + return 0; +} diff --git a/HDOJ/4140_autoAC.cpp b/HDOJ/4140_autoAC.cpp new file mode 100644 index 0000000..00cd96e --- /dev/null +++ b/HDOJ/4140_autoAC.cpp @@ -0,0 +1,80 @@ +#include +#include +#define N 1000000 +char str[N]; +int x; +int pow(int a,int b) +{ + int res = 1; + while(b--) + res *= a; + return res; +} +int solve() +{ + int res = 0,add = 0,flag = 1,c,e; + int i = 0,j = 0; + int len = strlen(str); + for(--len; str[len]!='+' && str[len] != '-' && len >= 0; --len); + if(str[0] == '-') + { + flag = -1; + i = 1; + } + for(;i < len; ++i) + { + c = 0; + for(j = i; str[j] != 'X'; ++j) + c = c*10 + str[j] - '0'; + if(i == j) + c = 1; + ++j; + if(str[j] == '^') + { + e = 0; + for(++j;str[j] != '+' && str[j] !='-';++j) + e = e * 10 + str[j] - '0'; + } + else + e = 1; + res += c* flag*pow(x,e); + if(str[j] == '+') + flag = 1; + else + flag = -1; + i = j; + } + c = 0; + for(j = i;str[j] && str[j] != 'X'; ++j) + c = c * 10 + str[j] - '0'; + if(!str[j]) + res += c * flag; + else + { + if(i == j) + c = 1; + ++j; + if(!str[j]) + res += c * x * flag; + else + { + ++ j; + e = 0; + for(;str[j];++j) + e = e * 10 + str[j] - '0'; + res += c * flag * pow(x,e); + } + } + return res; +} +int main() +{ + int t,sp = 0; + scanf("%d",&t); + while(t--) + { + scanf("%d%s",&x,str); + printf("Case #%d: %d\n",++sp, solve()); + } + return 0; +} diff --git a/HDOJ/4141_autoAC.cpp b/HDOJ/4141_autoAC.cpp new file mode 100644 index 0000000..a49cd8e --- /dev/null +++ b/HDOJ/4141_autoAC.cpp @@ -0,0 +1,49 @@ +#include +#include +#include +using namespace std; +#define N 1010 +int vis[N][N],height[N][N]; +int m,n,cnt; +int mo[][2] = {0,1, 0,-1, 1,0, -1,0}; +bool ok(int x,int y,int c) +{ + return x > 0 && x <= m && y > 0 && y <= n && height[x][y] >= c; +} +bool boundary(int x,int y) +{ + return x == 1 || y == 1 || x == m || y == n; +} +void dfs(int x,int y,int c) +{ + height[x][y] = 0; + if(boundary(x,y)) + ++cnt; + int s,t; + for(int i = 0; i < 4; ++i) + { + s = x + mo[i][0]; + t = y + mo[i][1]; + if(ok(s,t,c)) + dfs(s,t,height[s][t]); + } +} +int main() +{ + int t,a; + int x,y; + int sp = 0; + scanf("%d",&t); + while(t--) + { + int i,j; + scanf("%d%d%d%d",&m,&n,&x,&y); + for( i = 1 ; i <= m; ++i) + for( j = 1 ; j <= n; ++j) + scanf("%d",&height[i][j]); + cnt = 0; + dfs(x,y,height[x][y]); + printf("Case #%d: %d\n",++sp,cnt); + } + return 0; +} diff --git a/HDOJ/4142_autoAC.cpp b/HDOJ/4142_autoAC.cpp new file mode 100644 index 0000000..75abe55 --- /dev/null +++ b/HDOJ/4142_autoAC.cpp @@ -0,0 +1,30 @@ +#include +#include +#include +using namespace std; +int main() +{ + int n, p=1; + scanf("%d", &n); + while(n--) + { + int a, b, c; + scanf("%d%d%d", &a, &b, &c); + if(a > b) + swap(a, b); + if(b > c) + swap(b, c); + if(a > b) + swap(a, b); + printf("Case #%d: ", p++); + if(a+b <= c) + printf("invalid!\n"); + else if(a==b && b==c) + printf("equilateral\n"); + else if(a==b || b==c) + printf("isosceles\n"); + else + printf("scalene\n"); + } + return 0; +} diff --git a/HDOJ/4143_autoAC.cpp b/HDOJ/4143_autoAC.cpp new file mode 100644 index 0000000..6a8ace0 --- /dev/null +++ b/HDOJ/4143_autoAC.cpp @@ -0,0 +1,27 @@ +#include"stdio.h" +#include"math.h" +int main() +{ + int i; + int t; + int n; + int x; + int T; + scanf("%d",&T); + while(T--) + { + scanf("%d",&n); + x=-1; + t=(int)sqrt(n); + for(i=t;i>0;i--) + { + if(n%i==0&&(n/i-i)%2==0&&(n/i-i)/2>0) + { + x=(n/i-i)/2; + break; + } + } + printf("%d\n",x); + } + return 0; +} diff --git a/HDOJ/4144_autoAC.cpp b/HDOJ/4144_autoAC.cpp new file mode 100644 index 0000000..13fb148 --- /dev/null +++ b/HDOJ/4144_autoAC.cpp @@ -0,0 +1,33 @@ +#include +#include +int num(char c) +{ + if(c>='A' && c<='Z') + return 0; + else return 1; +} +int main() +{ + int n,i,k; + char a[10005]; + while(~scanf("%d%s",&n,a)) + { + for(i = 0;i +#include +#include +#include +using namespace std; +#define N 100010 +struct enemy +{ + int x, y, da, db; +}p[N], c1, c2; +bool cmp(enemy a, enemy b) +{ + return a.da < b.da; +} +int dist(enemy a, enemy b) +{ + return ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)); +} +int main() +{ + int ncase; + int num; + int ans, res, onlyb; + scanf("%d", &ncase); + while(ncase--) + { + scanf("%d%d%d%d", &c1.x, &c1.y, &c2.x, &c2.y); + scanf("%d", &num); + for(int i = 0; i < num; ++i) + { + scanf("%d%d", &p[i].x, &p[i].y); + p[i].da = dist(c1, p[i]); + p[i].db = dist(c2, p[i]); + } + sort(p, p + num, cmp); + res = p[num - 1].da; + ans = 0; + for(int i = num - 2; i >= 0; --i) + { + ans = max(ans, p[i + 1].db); + res = min(res, ans + p[i].da); + } + ans = max(ans, p[0].db); + res = min(res, ans); + printf("%d\n", res); + } + return 0; +} diff --git a/HDOJ/4146_autoAC.cpp b/HDOJ/4146_autoAC.cpp new file mode 100644 index 0000000..317c8f3 --- /dev/null +++ b/HDOJ/4146_autoAC.cpp @@ -0,0 +1,44 @@ +#include +#include +int main() +{ + int s,n,m,x,y,i,j,count,sum=1; + char str[1001][1001]; + int a[1001],b[1001]; + scanf("%d",&s); + while(s--) + { + memset(a,0,sizeof(a)); + memset(b,0,sizeof(b)); + count=0; + scanf("%d",&n); + for(i=0;i +#include +int main() +{ + char str[10001]; + int s,b,d,f,F,i,j,len,sum,min; + while(scanf("%d %d %d %d %d",&s,&b,&d,&f,&F)!=EOF) + { + min=99999; + for(j=1;j<=s;j++) + { + sum=0; + scanf("%s",str); + len=strlen(str); + for(i=0;i<=len-1;i++) + { + if(str[i]=='A') + { + sum=sum+b+d+f; + } + if(str[i]=='B') + { + sum=sum+2*b+2*d+F; + } + if(str[i]=='C') + { + sum=sum+3*b+3*d+2*F; + } + } + if(min>sum) {min=sum;} + } + printf("%d\n",min); + } + return 0; +} diff --git a/HDOJ/4148_autoAC.cpp b/HDOJ/4148_autoAC.cpp new file mode 100644 index 0000000..5f56c04 --- /dev/null +++ b/HDOJ/4148_autoAC.cpp @@ -0,0 +1,33 @@ +#include +#include +#include +using namespace std; +char s[31][10000]; +int main() +{ + int n,i,j,len; + s[1][0]='1'; + s[1][2]='\0'; + for(i=2;i<31;i++) + { + len=strlen(s[i-1]); + int sum=1,k=0; + for(j=0;j>n&&n) + { + len=strlen(s[n]); + cout< +using namespace std; +int x[10]; +int main() +{ + int m, p; + int i; + int t; + scanf("%d", &t); + while(t--) + { + for (i=1; i<=9; i++) scanf("%d", &x[i]); + m = 0; + p = 0; + int k=0; + while(1) + { + for (i=1; i<=8; i++) + { + if (x[i]!=0) break; + } + p >>= 1; + if (i>8 && p==0 && x[9]==0) break; + int ct = 0; + for (i=1; i<=8; i++) + { + if (x[i]&1) ct++; + } + int y = (ct&1); + int z = ((x[9]&1)+(p&1))&1; + int tm = y^z; + if (tm) + { + p += (8-ct); + } + else + { + p += ct; + } + m += (tm<>=1; + } + printf("%d\n", m); + } + return 0; +} diff --git a/HDOJ/4150_autoAC.cpp b/HDOJ/4150_autoAC.cpp new file mode 100644 index 0000000..6a4daed --- /dev/null +++ b/HDOJ/4150_autoAC.cpp @@ -0,0 +1,32 @@ +#include +#include +int main() +{ + char a[1000001],b[100001]; + int s,i,j,p,count,len1,len2; + scanf("%d",&s); + while(s--) + { + count=0; + scanf("%s %s",a,b); + len1=strlen(a); + len2=strlen(b); + for(i=0;i<=len1-1;i++) + { + p=i; + for(j=0;j<=len2-1;j++) + { + if(a[p]==b[j]) {p++;} + else + break; + } + if(j==len2) + { + count++; + i=i+len2-1; + } + } + printf("%d\n",count); + } + return 0; +} diff --git a/HDOJ/4151_autoAC.cpp b/HDOJ/4151_autoAC.cpp new file mode 100644 index 0000000..827206f --- /dev/null +++ b/HDOJ/4151_autoAC.cpp @@ -0,0 +1,53 @@ +#include"stdio.h" +int main() +{ + int n; + int t1[10]; + int ans; + int i,j; + int a,b,t; + int num[10],k; + int hash[10]; + int fac[10]; + fac[0]=1; + for(i=1;i<10;i++) fac[i]=fac[i-1]*i; + t1[0]=1; + for(i=1;i<10;i++) t1[i]=9*fac[9]/fac[9-(i-1)]; + while(scanf("%d",&n)!=-1) + { + if(n<=0) {printf("0\n");continue;} + if(n<10) {printf("%d\n",n-1);continue;} + k=0; + while(n) + { + num[k++]=n%10; + n/=10; + } + a=0; + b=k-1; + while(a +# include +int d[20]= {1},a[22][22],c[22],fn[22],n,m; +int yes() +{ + for (int i(1); i<=n; i++) + { + if (c[i]=0; i--) + { + memset(c,0,sizeof(c)); + int num = 0; + for (int j(1); j<=m; j++) + { + if (i&d[j-1]) + { + num++; + for (int k(1); k<=n; k++) c[k] += a[j][k]; + } + } + if (yes() && num >= ans) + { + ans = num; + ansi = i; + } + } + printf("%d",ans); + for (int i(0); imax) + max=mark[i]; + } + s1=max; + double ans; + ans=0.01; + for(i=0;i<=s2;i++) + { + ans+=(i*1.0/s2)*(mark[s2-i]*1.0/s1); + } + printf("%.6f\n",ans); + } + return 0; +} diff --git a/HDOJ/4154_autoAC.cpp b/HDOJ/4154_autoAC.cpp new file mode 100644 index 0000000..32ab355 --- /dev/null +++ b/HDOJ/4154_autoAC.cpp @@ -0,0 +1,52 @@ +#include +#include +int f[1450]={0}; +int main() +{ + int cmp(const void *a,const void *b); + int t,i,max,p; + while(scanf("%d",&t),t!=0) + { + max=0; + p=0; + for(i=0;i100) + { + printf("IMPOSSIBLE\n"); + p=1; + } + else + { + for(i=1;imax) + { + max=f[i]-f[i-1]; + if(max>200) + { + p=1; + break; + } + } + } + if(p==0) + { + printf("POSSIBLE\n"); + } + else + { + printf("IMPOSSIBLE\n"); + } + } + } + return 0; +} +int cmp(const void *a,const void *b) +{ + return *(int *)a-* (int*)b; +} diff --git a/HDOJ/4155_autoAC.cpp b/HDOJ/4155_autoAC.cpp new file mode 100644 index 0000000..1e4088e --- /dev/null +++ b/HDOJ/4155_autoAC.cpp @@ -0,0 +1,50 @@ +#include +#include +#define MAXD 16000 +int sg[MAXD], h[7]; +char b[30]; +int dfs(int st) +{ + if(sg[st] != -1) + return sg[st]; + int i, j, k, s[10], sum = 0; + memset(s, 0, sizeof(s)); + for(i = 1; i <= 6; i ++) + sum += h[i] * i; + for(i = 1; i <= 6; i ++) + if(h[i] < 4 && i + sum <= 31) + { + ++ h[i]; + for(j = 1, k = 0; j <= 6; j ++) + k = k * 5 + h[j]; + s[dfs(k)] = 1; + -- h[i]; + } + for(i = 0; s[i]; i ++); + return sg[st] = i; +} +void solve() +{ + int i, j, k, turn; + memset(h, 0, sizeof(h)); + for(i = 0; b[i]; i ++) + ++ h[b[i] - '0']; + turn = i % 2; + for(i = 1, j = 0; i <= 6; i ++) + j = j * 5 + h[i]; + k = dfs(j); + printf("%s ", b); + if(turn == 0) + printf("%s\n", k == 0 ? "B" : "A"); + else + printf("%s\n", k == 0 ? "A" : "B"); +} +int main() +{ + memset(sg, -1, sizeof(sg)); + while(scanf("%s", b) == 1) + { + solve(); + } + return 0; +} diff --git a/HDOJ/4156_autoAC.cpp b/HDOJ/4156_autoAC.cpp new file mode 100644 index 0000000..5400fc8 --- /dev/null +++ b/HDOJ/4156_autoAC.cpp @@ -0,0 +1,8 @@ +#include +int main(){ + for(int a,b,c,t;scanf("%d%d%d",&a,&b,&c)&&(a||b||c);){ + if(ac)&&(a+c>b)&&(b+c>a)&&a*a==b*b+c*c?"right":"wrong"); + } +} diff --git a/HDOJ/4158_autoAC.cpp b/HDOJ/4158_autoAC.cpp new file mode 100644 index 0000000..36c7b43 --- /dev/null +++ b/HDOJ/4158_autoAC.cpp @@ -0,0 +1,65 @@ +#include +#include +#include +#include +using namespace std; +int map[21][21]; +bool vis[21][21]; +int dx[4]= {1,-1,0,0}; +int dy[4]= {0,0,-1,1}; +int cb,cw,n; +struct point +{ + int x,y; +}p,t; +void bfs(int x,int y) +{ + p.x=x,p.y=y; + queue q; + q.push(p); + int num=0; + vis[p.x][p.y]=true; + int r2=-1,r3=-1; + while(!q.empty()) + { + t=q.front(); + num++; + q.pop(); + for(int i=0; i<4; i++) + { + p.x=t.x+dx[i]; + p.y=t.y+dy[i]; + if(vis[p.x][p.y]) continue; + if(p.x<1||p.x>n||p.y<1||p.y>n) continue; + if(map[p.x][p.y]==1) r2=1; + else if(map[p.x][p.y]==2) r3=1; + else q.push(p),vis[p.x][p.y]=true; + } + } + if(r2==1&&r3==1) return ; + if(r3==-1) cb+=num; + else if(r2==-1) cw+=num; + return ; +} +int main() +{ + int b,w,x,y; + while(scanf("%d",&n)==1&&n) + { + memset(map,0,sizeof(map)); + memset(vis,false,sizeof(vis)); + cb=cw=0; + scanf("%d%d",&b,&w); + for(int i=0; icw) printf("Black wins by %d\n",cb-cw); + else printf("White wins by %d\n",cw-cb); + } + return 0; +} diff --git a/HDOJ/4159_autoAC.cpp b/HDOJ/4159_autoAC.cpp new file mode 100644 index 0000000..f4ee566 --- /dev/null +++ b/HDOJ/4159_autoAC.cpp @@ -0,0 +1,40 @@ +#include"stdio.h" +#include"math.h" +double jie(int n) +{ + double y=1; + int i; + for(i=2;i<=n;i++) + y*=i; + return y; +} +double c(int n,int x) +{ + double z; + z=jie(n)/jie(x)/jie(n-x); + return z; +} +int main() +{ + double ans; + int n; + int s; + double x,y; + int i; + while(scanf("%d%d",&n,&s)!=-1) + { + if(s>n) + { + printf("100.00000\n"); + continue; + } + x=y=0; + for(i=0;i +#include +#include +#define max 510 + struct d + { + int w,l,h; + }doll[max]; +int match[max][max]; +int link[max]; +bool used[max]; + int n; +bool dfs(int u) +{ + for(int v=1;v<=n;v++) + if(match[u][v]==1&&!used[v]) + { + used[v]=true; + if(link[v]==-1||dfs(link[v])) + { + link[v]=u; + return true; + } + } + return false; +} +int Xiong() +{ + int res=0; + memset(link,-1,sizeof(link)); + for(int i=1;i<=n;i++) + { + memset(used,false,sizeof(used)); + if(dfs(i)) + res++; + } + return res; +} +int main() +{ + int i,j; + while(scanf("%d",&n)==1&&n) + { + for(i=1;i<=n;i++) + scanf("%d%d%d",&doll[i].w,&doll[i].l,&doll[i].h); + memset(match,0,sizeof(match)); + for(i=1;i<=n;i++) + for(j=1;j<=n;j++) + if(doll[i].w>doll[j].w&&doll[i].l>doll[j].l&&doll[i].h>doll[j].h) + match[i][j]=1; + printf("%d\n",n-Xiong()); + } + return 0; +} diff --git a/HDOJ/4161_autoAC.cpp b/HDOJ/4161_autoAC.cpp new file mode 100644 index 0000000..d4639e5 --- /dev/null +++ b/HDOJ/4161_autoAC.cpp @@ -0,0 +1,43 @@ +#include +int sum=-1; +int dif(int a[],int n) +{ + int i,s=0; + bool zero=true; + sum++; + for(i=0;i1000) + return -1; + dif(a,n); +} +int main() +{ + int a[21]; + int n,temp=1; + while(scanf("%d",&n)!=EOF && n) + { + sum=-1; + for(int i=0;i +#include +using namespace std; +int b[300100],len; +char c[300100]; +inline int ca(int x) +{return x0) i+=k+1; else j+=k+1; + if(i==j) j++; + k=0; + } + } + return i>j?j:i; +} +int main() +{ + while(scanf("%s",c)==1) + { + len=strlen(c);c[len]=c[0];c[len+1]='\0'; + for(int i=0;ic[i+1]) b[i]+=8; + } + int k=minp(); + for(int l=0;l +#include +#include +using namespace std; +typedef struct +{ + int p,d; +}Data; +Data dt[1000003]; +bool cmp1(Data d1,Data d2) +{ + if(d1.p==d2.p) return d1.dd2.d; + return d1.p>d2.p; +} +bool cmp3(Data d1,Data d2) +{ + return d1.dd2.d; +} +void print() +{ + static int cnt=0; + printf("Case %d\n",++cnt); +} +int main() +{ + int n,k1,k2; + while(scanf("%d %d %d",&n,&k1,&k2),n&&k1&&k2) + { + for(int i=0;i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +#define N 210 +#define inf 50000000 +int dir[8][2] = { { 0, 1 }, { 1, 1 }, { 1, 0 }, { 1, -1 }, { 0, -1 }, + { -1, -1 }, { -1, 0 }, { -1, 1 } }; +int T = 1, n, m, idx, tot; +int maz[N][N], done[N * N], ans[N * N]; +char Map[N][N]; +struct position { + int x, y; +} u, v, qu[N * N]; +void bfs(int x, int y) { + maz[x][y] = idx; + Map[x][y] = '0'; + u.x = x; + u.y = y; + int l = 0, r = 1; + qu[0] = u; + while (l < r) { + u = qu[l++]; + for (int i = 0; i < 8; i++) { + v.x = u.x + dir[i][0]; + v.y = u.y + dir[i][1]; + if (v.x >= 1 && v.x <= n && v.y >= 1 && v.y <= m + && Map[v.x][v.y] == '1') { + maz[v.x][v.y] = idx; + Map[v.x][v.y] = '0'; + qu[r++] = v; + } + } + } + if (r < 5) + done[idx] = 1; +} +void solve(int x, int y) { + u.x = x; + u.y = y; + int i = 1, to = 6; + qu[0] = u; + for (;;) { + int flag = 0; + for (int j = to; j != to || !flag; j = (j + 1) % 8) { + if (j == to) + flag = 1; + v.x = u.x + dir[j][0]; + v.y = u.y + dir[j][1]; + if (v.x >= 1 && v.x <= n && v.y >= 1 && v.y <= m + && maz[v.x][v.y] == maz[x][y]) { + u.x = u.x + dir[(j + 7) % 8][0]; + u.y = u.y + dir[(j + 7) % 8][1]; + for (j = 0; j < 8; j++) { + if (v.x + dir[j][0] == u.x && v.y + dir[j][1] == u.y) { + to = j; + break; + } + } + qu[i++] = v; + u = v; + if (i >= 4 && qu[0].x == qu[i - 2].x && qu[0].y == qu[i - 2].y + && qu[1].x == qu[i - 1].x && qu[1].y == qu[i - 1].y) { + ans[tot++] = i - 2; + return; + } + break; + } + } + } +} +int main() { + while (~scanf("%d%d", &n, &m)) { + if (!n && !m) + break; + for (int i = 1; i <= n; i++) + scanf("%s", Map[i] + 1); + idx = 0; + memset(maz, 0, sizeof(maz)); + for (int i = 1; i <= n; i++) { + for (int j = 1; j <= m; j++) { + if (Map[i][j] == '1') { + idx++; + done[idx] = 0; + bfs(i, j); + } + } + } + tot = 0; + for (int i = 1; i <= n; i++) { + for (int j = 1; j <= m; j++) { + if (maz[i][j] && !done[maz[i][j]]) { + done[maz[i][j]] = 1; + solve(i, j); + } + } + } + printf("Case %d\n", T++); + if (tot) { + sort(ans, ans + tot); + for (int i = 0; i < tot; i++) + printf("%d%s", ans[i], (i == tot - 1) ? "\n" : " "); + } else + printf("no objects found\n"); + } + return 0; +} diff --git a/HDOJ/4165_autoAC.cpp b/HDOJ/4165_autoAC.cpp new file mode 100644 index 0000000..397e9c0 --- /dev/null +++ b/HDOJ/4165_autoAC.cpp @@ -0,0 +1,30 @@ +#include +#include +#include +#include +#include +#include +#include +using namespace std; +#define clr(x) memset(x,0,sizeof(x)) +long long dp[31][31]; +bool inti(){ + clr(dp); + for(int i=0;i<=30;i++){ + dp[i][0]=1; + } + for(int i=1;i<=30;i++){ + for(int j=1;j<=i;j++){ + dp[i][j]=dp[i-1][j]+dp[i][j-1]; + } + } + return true; +} +int main(){ + inti(); + int i,j,k,m,n; + while(cin>>n&&n){ + cout< +#include +#include +#include +using namespace std; +const int maxn = 1005; +const int inf = 1<<29; +struct nd{ + int x,y,d,t,id; +}; +int has[maxn][maxn][4]; +int ans[maxn][maxn][4]; +int vis[maxn][maxn][4]; +int dx[] = {0,-1,0,1}; +int dy[] = {1,0,-1,0}; +char as[maxn][maxn],E[10],dd[128]; +int N,M,m,mn,cnt; +int si,sj,di,dj; +bool nok(int x,int y){ + if(x<0||y<0||x==N||y==M||as[x][y]=='*')return true; + return false; +} +void bfs(int x,int y,int d) +{ + nd k,t; + int a,b,c,i; + cnt = 0; + for(a = 0; a < N; ++ a) + for(b = 0; b < M; ++ b) + for(c = 0; c < 4; ++ c) + has[a][b][c]=inf,ans[a][b][c]=0; + has[x][y][d]=0; ans[x][y][d]=1; + if(x==di&&y==dj)return; + queueque; + t.x=x;t.y=y;t.d=d;t.t=0; t.id = cnt; vis[x][y][d]=cnt++; + que.push(t); + while(!que.empty()){ + t = que.front(); que.pop(); + if(t.id ^ vis[t.x][t.y][t.d])continue; + for(i = 0; i < 4; ++ i){ + k = t; k.t++; k.d = i; + k.x += dx[i]; k.y += dy[i]; + if(nok(k.x,k.y))continue; + if(i^t.d)k.t++; + if((i+2)%4==t.d)k.t++; + if(k.t>has[k.x][k.y][k.d]||k.t>mn)continue; + if(k.t==has[k.x][k.y][k.d]){ + ans[k.x][k.y][k.d] += ans[t.x][t.y][t.d]; + if(ans[k.x][k.y][k.d]>=m)ans[k.x][k.y][k.d]-=m; + if((i+2)%4==t.d){ + ans[k.x][k.y][k.d] += ans[t.x][t.y][t.d]; + if(ans[k.x][k.y][k.d]>=m)ans[k.x][k.y][k.d]-=m; + } + }else{ + ans[k.x][k.y][k.d]=ans[t.x][t.y][t.d]; + if((i+2)%4==t.d)ans[k.x][k.y][k.d] += ans[t.x][t.y][t.d]; + if(ans[k.x][k.y][k.d]>=m)ans[k.x][k.y][k.d]-=m; + } + has[k.x][k.y][k.d] = k.t; + if(k.x==di && k.y==dj){ + if(has[k.x][k.y][k.d]= m)k -= m; + } + } + if(mn==inf)printf("Case %d: %d -1\n",++cas,m); + else printf("Case %d: %d %d\n",++cas,m,k); + } + return 0; +} diff --git a/HDOJ/4167_autoAC.cpp b/HDOJ/4167_autoAC.cpp new file mode 100644 index 0000000..f8568f0 --- /dev/null +++ b/HDOJ/4167_autoAC.cpp @@ -0,0 +1,40 @@ +#include +#include +#include +#include +using namespace std; +int main() +{ + cin.sync_with_stdio(false); + int n,maxlen,cas=1; + while(cin>>n>>maxlen) + { + if(n==0&&maxlen==0) break; + cout<<"Case "<myset; + getline(cin,s); + for(int i=0;i>a;while(oss>>b); + s=a[0]+b; + for(int i=0;imaxlen) s.erase(maxlen); + while(myset.find(s+add)!=myset.end()) + { + add.clear(); + if(id>9) add+=48+id/10;add+=48+id%10; + if(add.length()+s.length()>maxlen) + s.erase(maxlen-add.length()); + id++; + } + myset.insert(s+add);cout< +#include +#include +using namespace std; +const int N = 150010; +vector g[N]; +int n,dp[310],K,w[N]; +void init() +{ + for(int i=0;i<=n;i++) + g[i].clear(); +} +int dfs(int u) +{ + int size=g[u].size(); + int t=0; + int cur[310]; + for(int i=1;i<=K;i++) + dp[i]=cur[i]=-INT_MAX; + cur[0]=dp[0]=0; + for(int i=0;i=0;j--) + { + for(int k=1;k<=now;k++) + { + if(k+j>K) + break; + cur[k+j]=max(cur[k+j],dp[k]+cur[j]); + } + } + t+=now; + } + if(size==0) + t++; + cur[1]=max(cur[1],w[u]); + for(int i=0;i<=K;i++) + dp[i]=cur[i]; + return t; +} +int main() +{ + int x,root; + while(scanf("%d %d",&n,&K)==2) + { + init(); + for(int i=1;i<=n;i++) + { + scanf("%d %d",&x,&w[i]); + if(x==0) + root=i; + else + g[x].push_back(i); + } + dfs(root); + if(dp[K]==-INT_MAX) + printf("impossible\n"); + else printf("%d\n",dp[K]); + } + return 0; +} diff --git a/HDOJ/4170_autoAC.cpp b/HDOJ/4170_autoAC.cpp new file mode 100644 index 0000000..460fca8 --- /dev/null +++ b/HDOJ/4170_autoAC.cpp @@ -0,0 +1,56 @@ +#include +#include +#include +#define eps 1e-6 +using namespace std; +struct point +{ + int x,y; +}a[10],v[10],s; +double t,ans; +int N,sv,i,p[10],T[3],js=1; +double crosstime(double x0,double y0,double v0,double x1,double y1,double vx,double vy) +{ + double a,b,c,t; + a=vx*vx+vy*vy-v0*v0; + b=2*(vx*(x1-x0)+vy*(y1-y0)); + c=(x1-x0)*(x1-x0)+(y1-y0)*(y1-y0); + if(a-eps) return -c/b; + if(a +#include +#include +#include +#include +using namespace std; +const int N = 100010; +__int64 num[N],dis[N],num1 = 0,head[N]; +struct edge +{ + int rp,value,next; +}ee[N]; +void init() +{ + num1 = 0; + memset(num,0,sizeof(num)); + memset(dis,0,sizeof(dis)); + memset(head,-1,sizeof(head)); +} +void addedge(int x,int y,int v) +{ + ee[num1].rp = y; + ee[num1].value = v; + ee[num1].next = head[x]; + head[x] = num1++; +} +void bfs(int x) +{ + queue qq; + qq.push(x); + while(!qq.empty()) + { + int y = qq.front(); + qq.pop(); + for(int i = head[y];i != -1;i = ee[i].next) + { + int k = ee[i].rp; + dis[k] = dis[y] + ee[i].value; + qq.push(k); + } + } +} +int main() +{ + int n; + while(~scanf("%d",&n)) + { + init(); + for(int i = 0;i <= n;++i) + { + scanf("%I64d",&num[i]); + } + int x,y,value; + __int64 sum = 0; + for(int i = 1;i <= n;++i) + { + scanf("%d%d%d",&x,&y,&value); + addedge(x,y,value); + sum += value; + } + bfs(0); + __int64 mmin = 2000000000; + __int64 ss = 0; + for(int i = 0;i <= n;++i) + { + ss = (sum - dis[i]) * 2 + num[i] + dis[i]; + if(ss < mmin) + { + mmin = ss; + } + } + printf("%I64d\n",mmin); + } + return 0; +} diff --git a/HDOJ/4173_autoAC.cpp b/HDOJ/4173_autoAC.cpp new file mode 100644 index 0000000..8d3d07e --- /dev/null +++ b/HDOJ/4173_autoAC.cpp @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +const double eps(1e-8); +typedef long long lint; +const int maxn = 200 +5; +paircon[maxn]; +int main(){ + int n; + while(cin >> n){ + for(int i = 1 ; i <= n ; i++) scanf("%lf%lf",&con[i].first,&con[i].second); + int ans = 0; + for(int i = 1 ; i <= n ; i++){ + for(int j = 1 ; j <= n ; j++){ + pair t; + t.first = (con[i].first + con[j].first) / 2.0; + t.second = (con[i].second + con[j].second) / 2.0; + int cnt = 0; + for(int k = 1 ; k <= n ; k++){ + double dis = pow(t.first - con[k].first,2) + pow(t.second - con[k].second,2); + if(dis <= 6.25 + eps) cnt++; + } + ans = max(ans , cnt); + } + } + cout << ans << endl; + } + return 0; +} diff --git a/HDOJ/4174_autoAC.cpp b/HDOJ/4174_autoAC.cpp new file mode 100644 index 0000000..18192e5 --- /dev/null +++ b/HDOJ/4174_autoAC.cpp @@ -0,0 +1,55 @@ +#include +#include +int main() +{ + int n,len,num[111],flag,k,b,i; + char a[111]; + scanf("%d",&n); + while(n--) + { + flag=0; + scanf("%s",a); + len=strlen(a); + for(i=0;i +#include +#include +#include +using namespace std; +struct point +{ + int pos,value; +}pp[27][1010]; +int dp[27][1010]; +int main() +{ + int numcase; + scanf("%d",&numcase); + for(int k = 1;k <= numcase;++k) + { + int numl,numc,len,i,j,p; + memset(dp,0,sizeof(dp)); + scanf("%d%d%d",&numl,&numc,&len); + for(i = 1;i <= numl;++i) + { + for(j = 1;j <= numc;++j) + { + scanf("%d%d",&pp[i][j].pos,&pp[i][j].value); + } + } + int mmin = 200000000; + for(i = 1;i <= numl;++i) + { + for(j = 1;j <= numc;++j) + { + mmin = 200000000; + for(p = 1;p <= numc;++p) + { + dp[i][j] = dp[i-1][p] + abs(pp[i][j].pos - pp[i-1][p].pos) + pp[i][j].value; + if(dp[i][j] < mmin) + { + mmin = dp[i][j]; + } + } + dp[i][j] = mmin; + } + } + mmin = 200000000; + for( i = 1;i <= numc;++i) + { + dp[numl][i] = dp[numl][i] + abs(len - pp[numl][i].pos); + if(dp[numl][i] < mmin) + { + mmin = dp[numl][i]; + } + } + printf("%d\n",mmin); + } + return 0; +} diff --git a/HDOJ/4176_autoAC.cpp b/HDOJ/4176_autoAC.cpp new file mode 100644 index 0000000..618ae47 --- /dev/null +++ b/HDOJ/4176_autoAC.cpp @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include +#include +using namespace std; +int main() +{ + int k; + int n; + cin>>k; + int a[55]; + int cas=1; + while(k--) + { + cin>>n; + for(int i=0;i +inline int ab(int x) { return x >= 0 ? x : -x ;} +int cal(int x,int y,int z,int &k) +{ + if(ab(x-y)==ab(y-z)) { + k = y; return ab(x-y); + } + else if(ab(x-z)==ab(y-z)) { + k = z; return ab(x-z); + } + else if(ab(x-y)==ab(z-x)) { + k = x; return ab(x-y); + } + else { k = -1 ; return -1;} +} +int tx[8] , ti[8]; +int h[4] , m[4] , re[4]; +int main() +{ + int T; + scanf("%d",&T); + while(T--) + { + int re[4] , dis; + for(int i=1;i<=3;i++){ + scanf("%d:%d",&h[i],&m[i]); + } + for(int i=1;i<=3;i++) + { + re[i] = h[i]*60+m[i]; + } + int ok = 0; + tx[1] = cal(re[1],re[2],re[3],ti[1]); + tx[2] = cal(re[1]+720,re[2],re[3],ti[2]); + tx[3] = cal(re[1],re[2]+720,re[3],ti[3]); + tx[4] = cal(re[1],re[2],re[3]+720,ti[4]); + tx[5] = cal(re[1]-720,re[2],re[3],ti[5]); + tx[6] = cal(re[1],re[2]-720,re[3],ti[6]); + tx[7] = cal(re[1],re[2],re[3]-720,ti[7]); + for(int i=1;i<=7;i++) + { + if(tx[i] > 0) + { + ok = 1; + if(tx[i] == 4*60) { + printf("Look at the sun\n"); + break; + } + else { + printf("The correct time is %d:%02d\n", + ti[i]/60,ti[i]%60); + break; + } + } + } + if(!ok) printf("Look at the sun\n"); + } + return 0; +} diff --git a/HDOJ/4178_autoAC.cpp b/HDOJ/4178_autoAC.cpp new file mode 100644 index 0000000..a1699e0 --- /dev/null +++ b/HDOJ/4178_autoAC.cpp @@ -0,0 +1,43 @@ +#include +#include +int main() +{ + char inf[50],ans[5]; + int t,n,cnt,cas = 0,f,i,j,y[5]; + scanf("%d",&t); + while(t--) + { + scanf("%d",&n); + memset(y,0,sizeof(y)); + gets(inf); + for(j = 0; j < n; ++j) + { + cnt = f = 0; + gets(inf); + for(i = 0; inf[i] != ' ' && inf[i]; ++i); + for(; inf[i]; ++i){ + if(inf[i-1] == ' ' && inf[i] == 'y'){ + if(cnt == 0) + ++y[1]; + else + ++y[2]; + ++cnt; + f = 1; + } + else if(inf[i-1] ==' ' && inf[i] =='n'){ + ++cnt; + } + } + if(cnt == 0) + ++y[4]; + else if(!f) + ++y[3]; + } + printf("Roll-call: %d\n",++cas); + printf("Present: %d out of %d\n",y[1],n); + printf("Needs to study at home: %d out of %d\n",y[2],n); + printf("Needs remedial work after school: %d out of %d\n",y[3],n); + printf("Absent: %d out of %d\n",y[4],n); + } + return 0; +} diff --git a/HDOJ/4179_autoAC.cpp b/HDOJ/4179_autoAC.cpp new file mode 100644 index 0000000..0176901 --- /dev/null +++ b/HDOJ/4179_autoAC.cpp @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include +using namespace std; +const int N = 11111; +const int M = 55555; +int eh[2][N], ec[2]; +struct Edge { + int id, nx, df; + double l; + Edge() {} + Edge(int id, int nx, int df, double l) : id(id), nx(nx), df(df), l(l) {} +} edge[2][M << 1]; +inline void init() { + memset(eh, -1, sizeof(eh)); + memset(ec, 0, sizeof(ec)); +} +inline void addedge(int u, int v, int df, double l, int id) { + edge[id][ec[id]] = Edge(v, eh[id][u], df, l); + eh[id][u] = ec[id]++; +} +int x[N], y[N], z[N]; +template inline T sqr(T a) { return a * a;} +int st[M << 1], ed[M << 1]; +inline int getdf(int a, int b) { + if (z[a] >= z[b]) return 0; + double len = sqrt(sqr((double) x[a] - x[b]) + sqr((double) y[a] - y[b])); + return (int) floor(100.0 * (z[b] - z[a]) / len); +} +inline double getdis(int a , int b) { return sqrt(sqr((double) x[a] - x[b]) + sqr((double) y[a] - y[b]) + sqr((double) z[a] - z[b]));} +const double FINF = 1e50; +double dis[2][N]; +int q[M << 1]; +bool vis[N]; +void spfa(int s, int id) { + for (int i = 0; i < N; i++) dis[id][i] = FINF; + int qh, qt; + qh = qt = 0; + dis[id][s] = 0; + q[qt++] = s; + vis[s] = true; + while (qh < qt) { + int cur = q[qh++]; + vis[cur] = false; + for (int i = eh[id][cur]; ~i; i = edge[id][i].nx) { + if (dis[id][edge[id][i].id] > dis[id][cur] + edge[id][i].l) { + dis[id][edge[id][i].id] = dis[id][cur] + edge[id][i].l; + if (!vis[edge[id][i].id]) q[qt++] = edge[id][i].id, vis[edge[id][i].id] = true; + } + } + } +} +int main() { + int n, m; + while (~scanf("%d%d", &n, &m) && (n || m)) { + for (int i = 1; i <= n; i++) scanf("%d%d%d", &x[i], &y[i], &z[i]); + for (int i = 0; i < m; i++) scanf("%d%d", &st[i], &ed[i]); + int A, B, D; + scanf("%d%d%d", &A, &B, &D); + init(); + for (int i = 0; i < m; i++) { + double tmp = getdis(st[i], ed[i]); + int df = getdf(st[i], ed[i]); + if (df <= D) { + addedge(st[i], ed[i], df, tmp, 0); + addedge(ed[i], st[i], df, tmp, 1); + } + df = getdf(ed[i], st[i]); + if (df <= D) { + addedge(ed[i], st[i], df, tmp, 0); + addedge(st[i], ed[i], df, tmp, 1); + } + } + spfa(A, 0); + spfa(B, 1); + double ans = FINF; + for (int i = 1; i <= n; i++) { + for (int t = eh[0][i]; ~t; t = edge[0][t].nx) { + if (edge[0][t].df == D) ans = min(ans, dis[0][i] + edge[0][t].l + dis[1][edge[0][t].id]); + } + } + if (ans < FINF) printf("%.1f\n", ans); + else puts("None"); + } + return 0; +} diff --git a/HDOJ/4180_autoAC.cpp b/HDOJ/4180_autoAC.cpp new file mode 100644 index 0000000..efd5121 --- /dev/null +++ b/HDOJ/4180_autoAC.cpp @@ -0,0 +1,50 @@ +#include +#define EPS 1e-20 +__int64 exgcd(__int64 a,__int64 b,__int64 &x,__int64 &y) +{ + if(b == 0LL) + { + x = 1LL; + y = 0LL; + return a; + } + __int64 d = exgcd(b,a%b,x,y); + __int64 t = x; + x = y; + y = t - a / b * y; + return d; +} +int main() +{ + __int64 t,a,b,x,y,c1,d1,c2,d2,d; + scanf("%I64d",&t); + while(t--) + { + scanf("%I64d/%I64d",&a,&b); + x = y = 0; + d = exgcd(a,b,x,y); + if(d != 1) + { + printf("%I64d/%I64d\n",a/d,b/d); + continue; + } + if(a == 1) + { + printf("1/%I64d\n",b-1); + continue; + } + while(x < 0) + x += b; + d1 = x; + c1 = (a * d1 - 1LL) / b; + while(y < 0) + y += a; + c2 = y; + d2 = (b * c2 - 1LL) / a; + if(d1 > d2) + printf("%I64d/%I64d\n",c1,d1); + else + printf("%I64d/%I64d\n",c2,d2); + } + return 0; +} diff --git a/HDOJ/4182_autoAC.cpp b/HDOJ/4182_autoAC.cpp new file mode 100644 index 0000000..f9e393b --- /dev/null +++ b/HDOJ/4182_autoAC.cpp @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +using namespace std ; +#define maxn 201 +#define INF 10000000 +struct node +{ + int e , d ; +}qe[maxn] ; +int dp[maxn][maxn] , k ; +int cmp( node a , node b ) +{ + return a.d > b.d ; +} +bool check( int n , int m ) +{ + int i , j ; + for( i = 0 ; i <= n ;i++ ) + for( j = 0 ; j <= m ;j++ ) + dp[i][j] = INF ; + dp[0][0] = 0 ; + for( i = 1 ; i <= n ;i++ ) + { + dp[i][0] = dp[i-1][0]+qe[i].e ; + for( j = 1 ; j <= m && j <= i;j++ ) + { + dp[i][j] = dp[i-1][j]+qe[i].e ; + dp[i][j] = min( dp[i][j],dp[i-1][j-1]+j*qe[i].d) ; + } + } + return dp[n][m] <= k ; +} +int main() +{ + int i , j , n , m ,ans ,case1 = 0 , tot ; + while( scanf("%d%d",&n , &k ) != EOF) + { + if( n == k && k == 0 ) break ; + tot = 0 ; + for( i = 1 ; i <= n ;i++ ) { + scanf("%d%d" , &qe[i].e,&qe[i].d) ; + tot += qe[i].e ; + } + sort(qe+1,qe+1+n,cmp) ; + ans = -1 ; + if( tot <= k ) ans = 0 ; + for( i = n ; i >= 0 ;i-- ) + { + if(check(n,i)) + { + ans = i ; + break ; + } + } + if( ans == -1 )printf("%d: Mission Impossible\n",++case1) ; + else printf("%d: %d\n",++case1,ans) ; + } +} diff --git a/HDOJ/4183_autoAC.cpp b/HDOJ/4183_autoAC.cpp new file mode 100644 index 0000000..838e4e5 --- /dev/null +++ b/HDOJ/4183_autoAC.cpp @@ -0,0 +1,152 @@ +#include +#include +#include +#include +#include +using namespace std; +int head[10000], s, t, nv, maxint=99999999, cnt; +int cur[400], num[400], d[400], q[100000], pre[400]; +struct Node +{ + double q; + int x, y, r; +}dian[1000]; +int cmp(Node x, Node y) +{ + return x.q=f2) + { + int u=q[f2++]; + for(i=head[u];i!=-1;i=edge[i].next) + { + int v=edge[i].v; + if(d[v]==-1) + { + d[v]=d[u]+1; + num[d[v]]++; + q[f1++]=v; + } + } + } +} +void isap() +{ + memcpy(cur,head,sizeof(cur)); + bfs(); + int flow=0, u=pre[s]=s, i; + while(d[s]edge[cur[i]].cap) + { + f=edge[cur[i]].cap; + pos=i; + } + } + for(i=s;i!=t;i=edge[cur[i]].v) + { + edge[cur[i]].cap-=f; + edge[cur[i]^1].cap+=f; + } + flow+=f; + u=pos; + } + for(i=cur[u];i!=-1;i=edge[i].next) + { + if(d[edge[i].v]+1==d[u]&&edge[i].cap) + { + break; + } + } + if(i!=-1) + { + cur[u]=i; + pre[edge[i].v]=u; + u=edge[i].v; + } + else + { + if(--num[d[u]]==0) break; + int mind=nv; + for(i=head[u];i!=-1;i=edge[i].next) + { + if(mind>d[edge[i].v]&&edge[i].cap) + { + cur[u]=i; + mind=d[edge[i].v]; + } + } + d[u]=mind+1; + num[d[u]]++; + u=pre[u]; + } + } + if(flow>=2) + printf("Game is VALID\n"); + else + printf("Game is NOT VALID\n"); +} +int main() +{ + int i, j, n, x, y, r, T; + scanf("%d",&T); + while(T--) + { + memset(head,-1,sizeof(head)); + cnt=0; + scanf("%d",&n); + for(i=0;isqrt((dian[0].x-dian[n-1].x)*(dian[0].x-dian[n-1].x)*1.0+(dian[0].y-dian[n-1].y)*(dian[0].y-dian[n-1].y)*1.0)) + { + printf("Game is VALID\n"); + continue ; + } + for(i=0;isqrt((dian[i].x-dian[j].x)*(dian[i].x-dian[j].x)+(dian[i].y-dian[j].y)*(dian[i].y-dian[j].y))) + { + add(i,j,1); + } + } + } + s=0; + t=n-1; + nv=t+1; + isap(); + } + return 0; +} diff --git a/HDOJ/4185_autoAC.cpp b/HDOJ/4185_autoAC.cpp new file mode 100644 index 0000000..df46655 --- /dev/null +++ b/HDOJ/4185_autoAC.cpp @@ -0,0 +1,75 @@ +#include +#include +#include +#include +using namespace std; +int map[700][700],p[700][700],vis[700],x[700],y[700],t,n,num,k; +char s[700][700]; +bool search(int i) +{ + int j; + for(j=0;j +#include +#include +#include +#include +#define MOD 100000007 +#define PRIME_SIZE 500005 +#define _int64 long long +using namespace std; +int prime[PRIME_SIZE], phi[PRIME_SIZE]; +bool primes[PRIME_SIZE]; +void Euler_primes_phi_mu() +{ + phi[1]=1; + for (int i=2; i>=1, a=(a*a)%MOD) if (n&1) ans=(ans*a)%MOD; + return ans; +} +_int64 polay(int n, int base) +{ + _int64 ans=0; + for (int i=1; i*i<=n; i++) + if (n%i==0) + { + ans=(ans+pow_mod(base, i)*phi[n/i])%MOD; + if (i*i!=n) + ans=(ans+pow_mod(base, n/i)*phi[i])%MOD; + } + ans=(ans*pow_mod(n, MOD-2))%MOD; + return ans; +} +int ne[PRIME_SIZE], N[PRIME_SIZE], d[PRIME_SIZE]; +void Pre_next(int *s, int len) +{ + int i, j=0; + for (ne[0]=-1, i=2; i<=len; i++) + { + while (j>-1 && s[i-1]!=s[j]) j=ne[j]; + ne[i]=++j; + } +} +int main() +{ + Euler_primes_phi_mu(); + int n, m, i; + while (scanf("%d %d", &m, &n), ~m) + { + for (i=1; i<=n; i++) scanf("%d", &N[i]); + sort(N+1, N+n+1); N[n+1]=N[1]+360000; + for (i=1; i<=n; i++) d[i-1]=N[i+1]-N[i]; + Pre_next(d, n); + int dif=n-ne[n]; + _int64 gcd; + if (n%dif==0) gcd=GCD(n, dif); + else gcd=n; + _int64 ans=polay(n/gcd, pow_mod(m, gcd)); + printf("%I64d\n", ans); + } + return 0; +} diff --git a/HDOJ/4189_autoAC.cpp b/HDOJ/4189_autoAC.cpp new file mode 100644 index 0000000..2127a66 --- /dev/null +++ b/HDOJ/4189_autoAC.cpp @@ -0,0 +1,139 @@ +#include +#include +#include +#include +#include +using namespace std; +#define N 100010 +#define M 260010 +typedef long long LL; +struct node{ + LL x,y; + int id; +}w[150010]; +LL ty[150010],ans[100010]; +int ny; +struct Tree{ + int l,r; + LL val; +}tree[1050010]; +bool cmp1(const node &a,const node &b){ + if(a.x!=b.x) return a.xb.y; + return a.idb.x; + if(a.y!=b.y) return a.yb.x; + if(a.y!=b.y) return a.y>b.y; + return a.id>1; + if(ty[mid]y) r=mid-1; + else return mid+1; + } +} +void build(int L,int R,int x){ + tree[x].l=L; + tree[x].r=R; + tree[x].val=1000000000000; + if(L==R) return ; + int mid=(L+R)>>1; + build(L,mid,x<<1); + build(mid+1,R,x<<1|1); +} +LL find(int L,int R,int x){ + if(tree[x].l>=L&&tree[x].r<=R) + return tree[x].val; + int mid=(tree[x].l+tree[x].r)>>1; + if(R<=mid) return find(L,R,x<<1); + if(L>mid) return find(L,R,x<<1|1); + return min(find(L,mid,x<<1),find(mid+1,R,x<<1|1)); +} +void update(int id,int x,LL val){ + if(tree[x].l==tree[x].r){ + tree[x].val=min(tree[x].val,val); + return ; + } + int mid=(tree[x].l+tree[x].r)>>1; + if(id<=mid) update(id,x<<1,val); + else update(id,x<<1|1,val); + tree[x].val=min(tree[x<<1].val,tree[x<<1|1].val); +} +int main(){ + int n,q,cs=0; + while(scanf("%d",&n)&&n!=-1){ + if(cs) printf("\n"); + else cs=1; + for(int i=0;i +#include +#include +#define size 500010 +using namespace std; +int n,m; +int a[size]; +int ok(int x) +{ + int i = 0 , t = 0; + while ( i < n) + { + t += ceil(a[i]*1.0 / x ); + i++; + } + if(t > m) return 0; + else return 1; +} +int find_ans(int low , int heigh) +{ + int mid , ans; + while (low < heigh) + { + mid = (low + heigh) /2; + int temp = ok(mid); + if( ok(mid) == 0 ) { low = mid + 1; } + else { heigh = mid ;} + } + return heigh; +} +int main() +{ + int max; + while ( scanf("%d%d",&n,&m) != EOF && n!=-1 && m!=-1) + { + int avg = m/n; + max = 0; + for(int i=0;i max) max = a[i]; + } + if( n == m ) printf("%d\n",max); + else + printf("%d\n",find_ans(1, max)); + } + return 0; +} diff --git a/HDOJ/4191_autoAC.cpp b/HDOJ/4191_autoAC.cpp new file mode 100644 index 0000000..6cb83c1 --- /dev/null +++ b/HDOJ/4191_autoAC.cpp @@ -0,0 +1,57 @@ +#include +#include +#include +#include +#define DB double +using namespace std; +const int MAXN = 20; +DB dp[MAXN][MAXN]; +void init(){ + for(int i = 0;i <= 10; i++) + for(int j = 0; j <= 10; j++) + dp[i][j] = 0.0; +} +int main() +{ + DB p; + while(scanf("%lf",&p) != EOF){ + if(p == -1.0) break; + init(); + for(int i = 0; i < 3; i++) dp[4][i] = 1.0; + dp[3][3] = p * p / (1 - p * (1 - p) * 2); + for(int i = 3; i >= 0; i--) + for(int j = 3; j >= 0;j--){ + if(i == 3 && j == 3) continue; + dp[i][j] = p * dp[i+1][j] + (1 - p) * dp[i][j + 1]; + } + DB gp = dp[0][0]; + init(); + for(int i = 0; i < 6; i++) dp[7][i] = 1.0; + dp[6][6] = p * p / (1 - p * (1 - p) * 2); + for(int i = 6; i >= 0; i--) + for(int j = 6; j >= 0;j--){ + if(i == 6 && j == 6) continue; + dp[i][j] = p * dp[i+1][j] + (1 - p) * dp[i][j + 1]; + } + DB p7 = dp[0][0]; + init(); + dp[6][6] = p7; + dp[6][5] = gp + (1.0 - gp) * dp[6][6]; + dp[5][6] = gp * dp[6][6]; + for(int i = 0; i <= 4;i++) dp[6][i] = 1.0; + for(int i = 5; i >= 0; i--) + for(int j = 5;j >= 0;j--){ + dp[i][j] = gp * dp[i+1][j] + (1.0 - gp) * dp[i][j+1]; + } + DB sp = dp[0][0]; + init(); + for(int i = 0; i < 2; i++) dp[2][i] = 1.0; + for(int i = 1; i >= 0; i--) + for(int j = 1; j >= 0; j--){ + dp[i][j] = dp[i+1][j] * sp + dp[i][j+1] * (1.0 - sp); + } + DB mp = dp[0][0]; + printf("%.11f %.11f %.11f\n",gp,sp,mp); + } + return 0; +} diff --git a/HDOJ/4192_autoAC.cpp b/HDOJ/4192_autoAC.cpp new file mode 100644 index 0000000..c2980cc --- /dev/null +++ b/HDOJ/4192_autoAC.cpp @@ -0,0 +1,93 @@ +#include +#include +#include +#include +using namespace std; +#define N 10005 +char str[N]; +int num[N]; +char op[N]; +int v[11]; +int id[11]; +char cmp(char a,char b){ + if(a=='+'){ + if(b=='+' || b=='-' || b==')')return '>'; + else return '<'; + } + if(a=='-'){ + if(b=='+' || b=='-' || b==')')return '>'; + else return '<'; + } + if(a=='*'){ + if(b=='(')return '<'; + else return '>'; + } + if(a=='('){ + if(b==')')return '='; + else return '<'; + } + if(a==')'){ + return '>'; + } +} +int cal(int a,int b,char c){ + if(c=='+')return a+b; + if(c=='-')return a-b; + if(c=='*')return a*b; +} +int gao(){ + int i,j; + int topnum = 0,topop = 1; + int k = 1; + op[1] = '('; + for(i=1;str[i];i++){ + if(islower(str[i])){ + topnum++; + num[topnum] = v[id[k++]]; + } else { + char c = cmp(op[topop],str[i]); + char tag; + if(c=='<'){ + topop++; + op[topop] = str[i]; + } else if(c=='='){ + topop--; + } else if(c=='>'){ + int b = num[topnum--]; + int a = num[topnum--]; + tag = op[topop--]; + int res = cal(a,b,tag); + topnum++; + num[topnum] = res; + i--; + } + } + } + return num[topnum]; +} +int main(){ + int n; + while(scanf("%d",&n) && n){ + int i,j; + for(i=1;i<=n;i++){ + scanf("%d",&v[i]); + id[i] = i; + } + int ans; + scanf("%d",&ans); + scanf("%s",str+1); + int len = strlen(str+1); + str[0] = '(',str[len+1] = ')',str[len+2] = '\0'; + bool ok =0; + do{ + int tmp = gao(); + if(tmp==ans){ + ok = 1; + break; + } + }while(next_permutation(id+1,id+1+n)); + if(ok)puts("YES"); + else puts("NO"); + } + return 0; +} diff --git a/HDOJ/4193_autoAC.cpp b/HDOJ/4193_autoAC.cpp new file mode 100644 index 0000000..8e33537 --- /dev/null +++ b/HDOJ/4193_autoAC.cpp @@ -0,0 +1,34 @@ +#include"iostream" +#include"cstdio" +#include"cstring" +using namespace std; +const int N=1000006; +int n,num[N],ans; +int main() +{ + int i,l; + int p,acc,sum,cnt; + while(scanf("%d",&n),n) + { + sum=0; + for(i=0;i=0) + { + if(acc>=0) ans++; + if(acc<0) acc+=num[p]; + else if(num[p]<0) acc=num[p]; + p--; + } + printf("%d\n",ans); + } + return 0; +} diff --git a/HDOJ/4194_autoAC.cpp b/HDOJ/4194_autoAC.cpp new file mode 100644 index 0000000..0853a1d --- /dev/null +++ b/HDOJ/4194_autoAC.cpp @@ -0,0 +1,68 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define MP(a, b) make_pair(a, b) +#define PB(a) push_back(a) +using namespace std; +typedef long long ll; +typedef pair pii; +typedef pair puu; +typedef pair pid; +typedef pair pli; +typedef pair pil; +const int INF = 0x3f3f3f3f; +const double eps = 1E-6; +const int LEN = 1001; +map mp; +int n, k, top; +int num[LEN]; +vector tab[LEN]; +int ch(string s){ + if(!mp.count(s)) mp[s] = top++; + return mp[s]; +} +int main() +{ + char str[1010]; + int tmp; + while(scanf("%d%d", &k, &n) != EOF){ + if(!k && !n) break; + for(int i=0; i st; + int cc = 0; + for(int j=0; j +#include +#include +#include +#define eps 1e-6 +#define pi acos(-1) +using namespace std; +struct node +{ + double x,y; +}; +node p[4]; +double getdis(node p1,node p2) +{ + return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); +} +double getang(double a,double b,double c) +{ + double ang= (a*a+b*b-c*c)/(2*a*b); + return acos(ang); +} +int main() +{ + char str[1000]; + while(gets(str)&&strcmp(str,"END")!=0) + { + sscanf(str,"%lf%lf",&p[0].x,&p[0].y); + scanf("%lf%lf%lf%lf",&p[1].x,&p[1].y,&p[2].x,&p[2].y); + getchar(); + double dis1=getdis(p[0],p[1]); + double dis2=getdis(p[1],p[2]); + double dis3=getdis(p[0],p[2]); + double ang1=getang(dis1,dis2,dis3); + double ang2=getang(dis2,dis3,dis1); + double ang3=getang(dis1,dis3,dis2); + for(int i=3; i<=1000; i++) + { + if(ang1*i/pi-(int)(ang1*i/pi+eps) +#include +#include +#define N 10000000 +#define MOD 1000000007 +#define LL long long +using namespace std; +bool flag[N+5]={0}; +int prime[1000000],cnt=0; +void Prime(){ + for(int i=2;i>=1; + } + return ans; +} +LL fac[N+5]; +int a; +int main(){ + int n; + fac[1]=1; + for(int i=2;i<=N;i++) + fac[i]=(fac[i-1]*i)%MOD; + Prime(); + while(scanf("%d",&n)!=EOF&&n){ + LL ret=1; + for(int i=0;i +#include +#include +using namespace std; +const int N = 1001; +const double PI = acos(-1), + EPS = 1e-8; +struct Angle +{ + double l,r; +}; +bool cmp(const Angle &a,const Angle &b) +{ + return a.l < b.l; +} +int n; +Angle A[N]; +int ok(double l,double r,double x) +{ + if(l - r < EPS) + return l - x < EPS && x - r < EPS; + return l - x < EPS || x - r < EPS ; +} +int main() +{ + int i,t; + double a,b,r; + double x,y; + scanf("%d",&t); + while(t--) + { + scanf("%d",&n); + for(i = 0; i < n; ++i) + { + scanf("%lf%lf%lf",&a,&b,&r); + double dis = sqrt(a * a + b * b); + double si = asin(r/dis); + double ta = atan2(b,a); + A[i].l = ta - si; + if(A[i].l < -PI) + A[i].l += 2 * PI; + A[i].r = ta + si; + if(A[i].r > PI) + A[i].r -= 2 * PI; + } + sort(A, A + n, cmp); + int res = n,tem; + for(i = 0; i < n;++i) + { + tem = 1; + double L = A[i].l,R = A[i].r; + for(int j = 1;j < n; ++j) + { + int k = (i + j) % n; + if(!ok(L,R,A[k].l)) + { + L = A[k].l; + R = A[k].r; + ++ tem ; + } + else if(ok(L,R,A[k].r)) + { + R = A[k].r; + } + } + if(tem < res) + res = tem; + } + printf("%d\n",res); + } + return 0; +} diff --git a/HDOJ/4198_autoAC.cpp b/HDOJ/4198_autoAC.cpp new file mode 100644 index 0000000..b9ef025 --- /dev/null +++ b/HDOJ/4198_autoAC.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +using namespace std; +int n,m,d; +int t[4][2]={0,1,0,-1,1,0,-1,0},vist[510][510]; +int mx,my; +char s[510][510]; +struct ss +{ + friend bool operator<(const ss a,const ss b) + { + return a.sum>b.sum; + } + int x,y,sum; +}; +priority_queueQ; +void bfs() +{ + memset(vist,0,sizeof(vist)); + ss node1,node2; + node1.x=mx; + node1.y=my; + node1.sum=0; + while(!Q.empty()) + Q.pop(); + Q.push(node1); + vist[mx][my]=1; + while(!Q.empty()) + { + node1=Q.top(); + Q.pop(); + if(node1.x==0||node1.y==0||node1.x==n-1||node1.y==m-1) + { + printf("%d\n",node1.sum+1); + return ; + } + for(int i=0;i<4;i++) + { + int xx=node1.x+t[i][0]; + int yy=node1.y+t[i][1]; + if(xx>=0&&xx=0&&yy