mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
Powered By HC TECH : AutoACer Engine
1600-1699
This commit is contained in:
parent
ed2de2e423
commit
2d9cf4fdf2
168
HDOJ/1603_autoAC.cpp
Normal file
168
HDOJ/1603_autoAC.cpp
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<string.h>
|
||||||
|
#include<iostream>
|
||||||
|
#include<queue>
|
||||||
|
#include<map>
|
||||||
|
#include<vector>
|
||||||
|
using namespace std;
|
||||||
|
#define N 1005*1005
|
||||||
|
#define RN 1005
|
||||||
|
#define M 1005
|
||||||
|
struct DLX
|
||||||
|
{
|
||||||
|
int n,m,C;
|
||||||
|
int U[N],D[N],L[N],R[N],Row[N],Col[N];
|
||||||
|
int H[M],S[M],cnt,ans[M];
|
||||||
|
void init(int _n,int _m)
|
||||||
|
{
|
||||||
|
n=_n;
|
||||||
|
m=_m;
|
||||||
|
for(int i=0; i<=m; i++)
|
||||||
|
{
|
||||||
|
U[i]=D[i]=i;
|
||||||
|
L[i]=(i==0?m:i-1);
|
||||||
|
R[i]=(i==m?0:i+1);
|
||||||
|
S[i]=0;
|
||||||
|
}
|
||||||
|
C=m;
|
||||||
|
for(int i=1; i<=n; i++) H[i]=-1;
|
||||||
|
}
|
||||||
|
void link(int x,int y)
|
||||||
|
{
|
||||||
|
C++;
|
||||||
|
Row[C]=x;
|
||||||
|
Col[C]=y;
|
||||||
|
S[y]++;
|
||||||
|
U[C]=U[y];
|
||||||
|
D[C]=y;
|
||||||
|
D[U[y]]=C;
|
||||||
|
U[y]=C;
|
||||||
|
if(H[x]==-1) H[x]=L[C]=R[C]=C;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
L[C]=L[H[x]];
|
||||||
|
R[C]=H[x];
|
||||||
|
R[L[H[x]]]=C;
|
||||||
|
L[H[x]]=C;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void del(int x)
|
||||||
|
{
|
||||||
|
R[L[x]]=R[x];
|
||||||
|
L[R[x]]=L[x];
|
||||||
|
for(int i=D[x]; i!=x; i=D[i])
|
||||||
|
{
|
||||||
|
for(int j=R[i]; j!=i; j=R[j])
|
||||||
|
{
|
||||||
|
U[D[j]]=U[j];
|
||||||
|
D[U[j]]=D[j];
|
||||||
|
S[Col[j]]--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void rec(int x)
|
||||||
|
{
|
||||||
|
for(int i=U[x]; i!=x; i=U[i])
|
||||||
|
{
|
||||||
|
for(int j=L[i]; j!=i; j=L[j])
|
||||||
|
{
|
||||||
|
U[D[j]]=j;
|
||||||
|
D[U[j]]=j;
|
||||||
|
S[Col[j]]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
R[L[x]]=x;
|
||||||
|
L[R[x]]=x;
|
||||||
|
}
|
||||||
|
int dance(int x)
|
||||||
|
{
|
||||||
|
if(R[0]==0 || R[0]>16)
|
||||||
|
{
|
||||||
|
cnt=x;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int now=R[0];
|
||||||
|
for(int i=R[0]; i!=0 && i<=16; i=R[i])
|
||||||
|
{
|
||||||
|
if(S[i]<S[now]) now=i;
|
||||||
|
}
|
||||||
|
del(now);
|
||||||
|
for(int i=D[now]; i!=now; i=D[i])
|
||||||
|
{
|
||||||
|
ans[x]=Row[i];
|
||||||
|
for(int j=R[i]; j!=i; j=R[j]) del(Col[j]);
|
||||||
|
if(dance(x+1)) return 1;
|
||||||
|
for(int j=L[i]; j!=i; j=L[j]) rec(Col[j]);
|
||||||
|
}
|
||||||
|
rec(now);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} dlx;
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int m,id;
|
||||||
|
int w[44];
|
||||||
|
} kx[1234];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
while(scanf("%d",&n),n)
|
||||||
|
{
|
||||||
|
int cnt=0;
|
||||||
|
dlx.init(n*16,16+n);
|
||||||
|
for(int i=1; i<=n; i++)
|
||||||
|
{
|
||||||
|
int a,b;
|
||||||
|
scanf("%d%d",&a,&b);
|
||||||
|
char v[12][12];
|
||||||
|
for(int j=0; j<a; j++) scanf("%s",v[j]);
|
||||||
|
for(int xx=1; xx+a<=5; xx++)
|
||||||
|
{
|
||||||
|
for(int yy=1; yy+b<=5; yy++)
|
||||||
|
{
|
||||||
|
cnt++;
|
||||||
|
kx[cnt].m=0;
|
||||||
|
kx[cnt].id=i;
|
||||||
|
for(int x=0; x<a; x++)
|
||||||
|
{
|
||||||
|
for(int y=0; y<b; y++)
|
||||||
|
{
|
||||||
|
if(v[x][y]=='1')
|
||||||
|
{
|
||||||
|
int tep=(xx+x-1)*4+(yy+y);
|
||||||
|
dlx.link(cnt,tep);
|
||||||
|
kx[cnt].w[kx[cnt].m++]=tep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dlx.link(cnt,16+i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int f=dlx.dance(0);
|
||||||
|
if(f==0) puts("No solution possible");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char mp[10][10];
|
||||||
|
for(int i=0;i<dlx.cnt;i++)
|
||||||
|
{
|
||||||
|
for(int j=0;j<kx[dlx.ans[i]].m;j++)
|
||||||
|
{
|
||||||
|
int x,y;
|
||||||
|
x=(kx[dlx.ans[i]].w[j]-1)/4;
|
||||||
|
y=kx[dlx.ans[i]].w[j]%4-1;
|
||||||
|
if(y==-1) y=3;
|
||||||
|
mp[x][y]=kx[dlx.ans[i]].id+'0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
mp[i][4]='\0';
|
||||||
|
puts(mp[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
puts("");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
69
HDOJ/1606_autoAC.cpp
Normal file
69
HDOJ/1606_autoAC.cpp
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <string.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <map>
|
||||||
|
using namespace std;
|
||||||
|
struct p{
|
||||||
|
char s[100];
|
||||||
|
int num;
|
||||||
|
}a[100];
|
||||||
|
bool cmp(p a,p b)
|
||||||
|
{
|
||||||
|
return a.num>b.num;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,m,i,j,z=1;
|
||||||
|
char b[100];
|
||||||
|
while(scanf("%d%d",&n,&m)!=EOF)
|
||||||
|
{
|
||||||
|
memset(a,0,sizeof(a));
|
||||||
|
getchar();
|
||||||
|
map<string,int>q;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
scanf("%s",b);
|
||||||
|
q[b]=1;
|
||||||
|
}
|
||||||
|
getchar();
|
||||||
|
for(i=0;i<m;i++)
|
||||||
|
{
|
||||||
|
gets(a[i].s);
|
||||||
|
int t=strlen(a[i].s);
|
||||||
|
string w="";
|
||||||
|
char x[100];
|
||||||
|
strcpy(x,a[i].s);
|
||||||
|
for(j=0;j<t;j++)
|
||||||
|
{
|
||||||
|
if(x[j]>=65&&x[j]<=90)
|
||||||
|
x[j]+=32;
|
||||||
|
}
|
||||||
|
for(j=0;j<t;j++)
|
||||||
|
{
|
||||||
|
if(x[j]>=97&&x[j]<=122)
|
||||||
|
w=w+x[j];
|
||||||
|
else
|
||||||
|
{
|
||||||
|
map<string,int>::iterator it;
|
||||||
|
it=q.find(w);
|
||||||
|
if(it!=q.end())
|
||||||
|
a[i].num++;
|
||||||
|
w="";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort(a,a+m,cmp);
|
||||||
|
int v=a[0].num;
|
||||||
|
printf("Excuse Set #%d\n",z);
|
||||||
|
z++;
|
||||||
|
for(i=0;i<m;i++)
|
||||||
|
{
|
||||||
|
if(a[i].num==v)
|
||||||
|
printf("%s\n",a[i].s);
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
106
HDOJ/1608_autoAC.cpp
Normal file
106
HDOJ/1608_autoAC.cpp
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cmath>
|
||||||
|
#include <queue>
|
||||||
|
using namespace std;
|
||||||
|
int x[39][39];
|
||||||
|
int n;
|
||||||
|
int dx[] = {1,0,-1,0};
|
||||||
|
int dy[] = {0,1,0,-1};
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int x,y,len,dir;
|
||||||
|
int move;
|
||||||
|
} re[19];
|
||||||
|
bool oor(int x,int y)
|
||||||
|
{
|
||||||
|
if(x<0||x>29) return false;
|
||||||
|
if(y<0||y>29) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool stop[19],cash[19];
|
||||||
|
int map_move[39][39];
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
int l,r,c;
|
||||||
|
char d[5];
|
||||||
|
memset(map_move,-1,sizeof(map_move));
|
||||||
|
memset(x,false,sizeof(x));
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
scanf("%s%d%d%d",d,&l,&r,&c);
|
||||||
|
re[i].len = l,re[i].x = r,re[i].y = c;
|
||||||
|
if(d[0]=='R') re[i].dir = 0;
|
||||||
|
else if(d[0]=='U') re[i].dir = 1;
|
||||||
|
else if(d[0]=='L') re[i].dir = 2;
|
||||||
|
else re[i].dir = 3;
|
||||||
|
re[i].move = 1;
|
||||||
|
int tx = r,ty = c;
|
||||||
|
for(int j =0;j<l;j++)
|
||||||
|
{
|
||||||
|
map_move[tx][ty] = i;
|
||||||
|
tx-=dx[re[i].dir];
|
||||||
|
ty-=dy[re[i].dir];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void solve()
|
||||||
|
{
|
||||||
|
bool fig = true;
|
||||||
|
while(fig)
|
||||||
|
{
|
||||||
|
fig = false;
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
if(re[i].move==0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fig = true;
|
||||||
|
re[i].x+=dx[re[i].dir];
|
||||||
|
re[i].y+=dy[re[i].dir];
|
||||||
|
if(!oor(re[i].x,re[i].y))
|
||||||
|
{
|
||||||
|
if(re[i].len>0)
|
||||||
|
{
|
||||||
|
re[i].x-=dx[re[i].dir];
|
||||||
|
re[i].y-=dy[re[i].dir];
|
||||||
|
re[i].len--;
|
||||||
|
if(re[i].len<=0) re[i].move = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(map_move[re[i].x][re[i].y]!=-1&&map_move[re[i].x][re[i].y]!=i)
|
||||||
|
{
|
||||||
|
re[map_move[re[i].x][re[i].y]].move = 0;
|
||||||
|
re[i].move = 0;
|
||||||
|
x[re[i].x][re[i].y] = true;
|
||||||
|
}
|
||||||
|
map_move[re[i].x][re[i].y]=i;
|
||||||
|
map_move[re[i].x-dx[re[i].dir]*(re[i].len)][re[i].y-dy[re[i].dir]*(re[i].len)]=-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<" 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2"<<endl;
|
||||||
|
cout<<" 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9"<<endl;
|
||||||
|
for(int i=0; i<30; i++)
|
||||||
|
{
|
||||||
|
printf("%02d",29-i);
|
||||||
|
for(int j=0; j<30; j++)
|
||||||
|
if(!x[j][29-i]) cout<<" .";
|
||||||
|
else cout<<" X";
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(~scanf("%d",&n))
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
solve();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
87
HDOJ/1609_autoAC.cpp
Normal file
87
HDOJ/1609_autoAC.cpp
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
const int N = 15;
|
||||||
|
const int M = 105;
|
||||||
|
int t, p, c, m, vis[M], have[M], hn, b[M], s[M], ans[N], num;
|
||||||
|
struct Mi {
|
||||||
|
int num[N];
|
||||||
|
int vis[M];
|
||||||
|
int b, w;
|
||||||
|
} mi[M];
|
||||||
|
void init() {
|
||||||
|
int i, j;
|
||||||
|
memset(vis, 0, sizeof(vis));
|
||||||
|
memset(b, 0, sizeof(b));
|
||||||
|
memset(s, 0, sizeof(s));
|
||||||
|
hn = 0;
|
||||||
|
scanf("%d%d%d", &p, &c, &m);
|
||||||
|
for (i = 0; i < m; i++) {
|
||||||
|
memset(mi[i].vis, 0, sizeof(mi[i].vis));
|
||||||
|
for (j = 0; j < p; j++) {
|
||||||
|
scanf("%d", &mi[i].num[j]);
|
||||||
|
mi[i].vis[mi[i].num[j]]++;
|
||||||
|
if (!vis[mi[i].num[j]]) {
|
||||||
|
vis[mi[i].num[j]] = 1;
|
||||||
|
have[hn++] = mi[i].num[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scanf("%d%d", &mi[i].b, &mi[i].w);
|
||||||
|
}
|
||||||
|
for (i = 1; i <= c; i++)
|
||||||
|
if (!vis[i]) {
|
||||||
|
have[hn++] = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sort(have, have + hn);
|
||||||
|
}
|
||||||
|
bool dfs(int d) {
|
||||||
|
if (d == p) {
|
||||||
|
for (int i = 0; i < m; i++) {
|
||||||
|
if (b[i] != mi[i].b || s[i] - b[i] != mi[i].w)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int j = 0; j < p - 1; j++)
|
||||||
|
printf("%d ", ans[j]);
|
||||||
|
printf("%d\n", ans[p - 1]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < hn; i++) {
|
||||||
|
int num = have[i], flag = 0, j, flag2[M];
|
||||||
|
memset(flag2, 0, sizeof(flag2));
|
||||||
|
for (j = 0; j < m; j++) {
|
||||||
|
if (num == mi[j].num[d])
|
||||||
|
b[j]++;
|
||||||
|
if (mi[j].vis[num]) {
|
||||||
|
s[j]++;
|
||||||
|
mi[j].vis[num]--;
|
||||||
|
flag2[j] = 1;
|
||||||
|
}
|
||||||
|
if (b[j] > mi[j].b || s[j] > mi[j].b + mi[j].w)
|
||||||
|
flag = 1;
|
||||||
|
}
|
||||||
|
if (!flag) {
|
||||||
|
ans[d] = num;
|
||||||
|
if (dfs(d + 1)) return true;
|
||||||
|
}
|
||||||
|
for (j = 0; j < m; j++) {
|
||||||
|
if (num == mi[j].num[d])
|
||||||
|
b[j]--;
|
||||||
|
if (flag2[j]) {
|
||||||
|
s[j]--;
|
||||||
|
mi[j].vis[num]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int main() {
|
||||||
|
scanf("%d", &t);
|
||||||
|
while (t--) {
|
||||||
|
init();
|
||||||
|
if (!dfs(0)) printf("You are cheating!\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
44
HDOJ/1611_autoAC.cpp
Normal file
44
HDOJ/1611_autoAC.cpp
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <iostream>
|
||||||
|
using namespace std ;
|
||||||
|
int cost[200][200],price[200][200],indexx[200][200] ;
|
||||||
|
void print(int K,int L,char key[],char let[])
|
||||||
|
{
|
||||||
|
if( K == 0 ) return ;
|
||||||
|
print(K-1, L-indexx[K][L],key,let) ;
|
||||||
|
printf("%c: ",key[K-1]) ;
|
||||||
|
for(int i = L-indexx[K][L] ; i < L ; i++)
|
||||||
|
putchar(let[i]) ;
|
||||||
|
puts("") ;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T ;
|
||||||
|
scanf("%d",&T) ;
|
||||||
|
int K,L ,a[200] ,cnt = 0;
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
char key[200],let[200] ;
|
||||||
|
cnt++ ;
|
||||||
|
scanf("%d %d %s %s",&K,&L,key,let) ;
|
||||||
|
for(int i = 0 ; i < L ; i++)
|
||||||
|
scanf("%d",&a[i]) ;
|
||||||
|
memset(price,0x40,sizeof(price)) ;
|
||||||
|
price[0][0] = 0 ;
|
||||||
|
for(int i = 1 ; i <= L ; i++)
|
||||||
|
for(int j = i ; j <= L ; j++)
|
||||||
|
cost[i][j] = cost[i][j-1]+(j-i+1)*a[j-1] ;
|
||||||
|
for(int i = 1 ; i <= K ; i++)
|
||||||
|
for(int j = i ; j <= L ; j++)
|
||||||
|
for(int k = 1 ; k <= j-i+1 ; k++)
|
||||||
|
{
|
||||||
|
if(price[i-1][j-k] + cost[j-k+1][j] <= price[i][j])
|
||||||
|
price[i][j] = price[i-1][j-k] + cost[j-k+1][j],indexx[i][j] = k ;
|
||||||
|
}
|
||||||
|
printf("Keypad #%d:\n",cnt) ;
|
||||||
|
print(K,L,key,let) ;
|
||||||
|
printf("\n") ;
|
||||||
|
}
|
||||||
|
return 0 ;
|
||||||
|
}
|
32
HDOJ/1613_autoAC.cpp
Normal file
32
HDOJ/1613_autoAC.cpp
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
#include<iostream>
|
||||||
|
using namespace std;
|
||||||
|
const int maxn=6;
|
||||||
|
const int inf=1<<29;
|
||||||
|
int sum[maxn],val[maxn][maxn];
|
||||||
|
char str[maxn][10]={"BCG","BGC","CBG","CGB","GBC","GCB"};
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(scanf("%d%d%d",&val[0][0],&val[0][1],&val[0][2])!=EOF)
|
||||||
|
{
|
||||||
|
for(int i=1;i<=2;i++)
|
||||||
|
for(int j=0;j<3;j++)
|
||||||
|
scanf("%d",&val[i][j]);
|
||||||
|
sum[0]=val[1][0]+val[2][0]+val[0][2]+val[2][2]+val[0][1]+val[1][1];
|
||||||
|
sum[1]=val[1][0]+val[2][0]+val[0][1]+val[2][1]+val[0][2]+val[1][2];
|
||||||
|
sum[2]=val[1][2]+val[2][2]+val[0][0]+val[2][0]+val[0][1]+val[1][1];
|
||||||
|
sum[3]=val[1][2]+val[2][2]+val[0][1]+val[2][1]+val[0][0]+val[1][0];
|
||||||
|
sum[4]=val[1][1]+val[2][1]+val[0][0]+val[2][0]+val[0][2]+val[1][2];
|
||||||
|
sum[5]=val[1][1]+val[2][1]+val[0][2]+val[2][2]+val[0][0]+val[1][0];
|
||||||
|
int ans=inf,pos;
|
||||||
|
for(int i=0;i<maxn;i++)
|
||||||
|
if(ans>sum[i])
|
||||||
|
{
|
||||||
|
ans=sum[i];
|
||||||
|
pos=i;
|
||||||
|
}
|
||||||
|
printf("%s %d\n",str[pos],ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
71
HDOJ/1614_autoAC.cpp
Normal file
71
HDOJ/1614_autoAC.cpp
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
#include <algorithm>
|
||||||
|
#include <memory.h>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
const int MAX = 31;
|
||||||
|
struct Box{
|
||||||
|
int dims[11];
|
||||||
|
}boxes[MAX];
|
||||||
|
bool g[MAX][MAX];
|
||||||
|
int dp[MAX], fa[MAX], n, k;
|
||||||
|
//check if box a can be nested into box b
|
||||||
|
bool can_be_nested(Box & a, Box & b, int len){
|
||||||
|
for(int i = 0; i < len; ++i){
|
||||||
|
if(a.dims[i] >= b.dims[i])return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int memoized_dfs(int i){
|
||||||
|
if(dp[i] != 0)return dp[i];
|
||||||
|
int max_len = 0;
|
||||||
|
for(int j = 1; j <= k; ++j){
|
||||||
|
if(g[i][j]){
|
||||||
|
int next_len = memoized_dfs(j);
|
||||||
|
if(next_len > max_len){
|
||||||
|
max_len = next_len;
|
||||||
|
fa[i] = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[i] = max_len + 1;
|
||||||
|
}
|
||||||
|
int main(int argc, char const *argv[]){
|
||||||
|
while(scanf("%d %d", &k, &n) == 2){
|
||||||
|
memset(g, false, sizeof(g));
|
||||||
|
for(int i = 1; i <= k; ++i){
|
||||||
|
for(int j = 0; j < n; ++j){
|
||||||
|
scanf("%d", &boxes[i].dims[j]);
|
||||||
|
}
|
||||||
|
sort(boxes[i].dims, boxes[i].dims + n);
|
||||||
|
}
|
||||||
|
for(int i = 1; i <= k; ++i){
|
||||||
|
for(int j = 1; j <= k; ++j){
|
||||||
|
if(can_be_nested(boxes[j], boxes[i], n)){
|
||||||
|
g[i][j] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vector<int> ans;
|
||||||
|
for(int i = 1; i <= k; ++i){
|
||||||
|
memset(dp, 0, sizeof(dp));
|
||||||
|
memset(fa, 0, sizeof(fa));
|
||||||
|
int length = memoized_dfs(i);
|
||||||
|
if(length > ans.size()){
|
||||||
|
ans.clear();
|
||||||
|
int p = i;
|
||||||
|
while(p != 0){
|
||||||
|
ans.push_back(p);
|
||||||
|
p = fa[p];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n", ans.size());
|
||||||
|
for(int i = ans.size() - 1; i >= 0; --i){
|
||||||
|
if(i < ans.size() - 1)printf(" ");
|
||||||
|
printf("%d", ans[i]);
|
||||||
|
}
|
||||||
|
printf(" \n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
29
HDOJ/1615_autoAC.cpp
Normal file
29
HDOJ/1615_autoAC.cpp
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <math.h>
|
||||||
|
using namespace std;
|
||||||
|
int main(void) {
|
||||||
|
for (int i, m, n, nMaxM, nMaxN, nCnt = 0; cin >> i; nCnt = 0) {
|
||||||
|
bool aFlags[1000001] = {false};
|
||||||
|
for (m = 2, nMaxM = (int)sqrt((float)i - 1); m <= nMaxM; ++m) {
|
||||||
|
nMaxN = (int)sqrt((float)i - m * m);
|
||||||
|
nMaxN = nMaxN >= m ? m - 1 : nMaxN;
|
||||||
|
for (n = 1; n <= nMaxN; ++n) {
|
||||||
|
if (n % 2 != m % 2) {
|
||||||
|
int a = m, b = n, c;
|
||||||
|
for(int r; (r = a % b) != 0; a = b, b = r);
|
||||||
|
if (b == 1) {
|
||||||
|
++nCnt;
|
||||||
|
a = m * m - n * n, b = 2 * m * n, c = m * m + n * n;
|
||||||
|
for (int k = 0; c * k <= i; ++k) {
|
||||||
|
aFlags[a * k] = aFlags[b * k] = aFlags[c * k] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << nCnt << ' ';
|
||||||
|
for (nCnt = 0, m = 1; m <= i; nCnt += !aFlags[m++]);
|
||||||
|
cout << nCnt << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
104
HDOJ/1616_autoAC.cpp
Normal file
104
HDOJ/1616_autoAC.cpp
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
int num,top,ii;
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
}a[105],mis[50005];
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
node b[25];
|
||||||
|
int to;
|
||||||
|
}an[25];
|
||||||
|
int cmp(const void *c,const void *d)
|
||||||
|
{
|
||||||
|
int ans;
|
||||||
|
struct node *p1=(node *)c;
|
||||||
|
struct node *p2=(node *)d;
|
||||||
|
ans=(p1->x-a[0].x)*(p2->y-a[0].y)-(p2->x-a[0].x)*(p1->y-a[0].y);
|
||||||
|
if (ans>0) return -1;
|
||||||
|
else if (ans<0) return 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (abs(a[0].x-p1->x)<abs(a[0].x-p2->x)) return 1;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int find( int p2,int p1,int p0)
|
||||||
|
{
|
||||||
|
return (an[ii].b[p1].x-an[ii].b[p0].x)*(a[p2].y-an[ii].b[p0].y)-(a[p2].x-an[ii].b[p0].x)*(an[ii].b[p1].y-an[ii].b[p0].y);
|
||||||
|
}
|
||||||
|
int find2( node p2,node p1,node p0)
|
||||||
|
{
|
||||||
|
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
|
||||||
|
}
|
||||||
|
void Graham(int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
a[n]=a[num];
|
||||||
|
a[num]=a[0];
|
||||||
|
a[0]=a[n];
|
||||||
|
qsort(a+1,n-1,sizeof(a[0]),cmp);
|
||||||
|
an[ii].b[0]=a[0];
|
||||||
|
an[ii].b[1]=a[1];
|
||||||
|
top=1;
|
||||||
|
for (i=2;i<n;i++)
|
||||||
|
{
|
||||||
|
while (find(i,top,top-1)<0) top--;
|
||||||
|
an[ii].b[++top]=a[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
int n,i,j,k,h,minx=10005,miny=10005,dis,max,misnum,sum;
|
||||||
|
double area;
|
||||||
|
ii=0;
|
||||||
|
while(scanf("%d",&n),n!=-1)
|
||||||
|
{
|
||||||
|
minx=10005;miny=10005;
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
scanf("%d %d",&a[i].x,&a[i].y);
|
||||||
|
if (a[i].y<miny || (miny==a[i].y && a[i].x<minx))
|
||||||
|
{
|
||||||
|
miny=a[i].y;minx=a[i].x;num=i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Graham(n);
|
||||||
|
an[ii].to=top;
|
||||||
|
ii++;
|
||||||
|
}
|
||||||
|
i=0;
|
||||||
|
while(scanf("%d%d",&mis[i].x,&mis[i].y)!=EOF)
|
||||||
|
i++;
|
||||||
|
misnum=i;area=0;
|
||||||
|
for(i=0;i<ii;i++)
|
||||||
|
{
|
||||||
|
for(j=0;j<misnum;j++)
|
||||||
|
{
|
||||||
|
for(k=0;k<=an[i].to;k++)
|
||||||
|
{
|
||||||
|
if(k==an[i].to)
|
||||||
|
{
|
||||||
|
if(find2(mis[j],an[i].b[0],an[i].b[k])<0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if(find2(mis[j],an[i].b[k+1],an[i].b[k])<0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(k==an[i].to+1)
|
||||||
|
{
|
||||||
|
sum=0;
|
||||||
|
for(h=0;h<an[i].to;h++)
|
||||||
|
sum+=an[i].b[h].x*an[i].b[h+1].y-an[i].b[h].y*an[i].b[h+1].x;
|
||||||
|
sum+=an[i].b[h].x*an[i].b[0].y-an[i].b[h].y*an[i].b[0].x;
|
||||||
|
area+=sum*1.0/2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%.2f\n",area);
|
||||||
|
return 0;
|
||||||
|
}
|
62
HDOJ/1617_autoAC.cpp
Normal file
62
HDOJ/1617_autoAC.cpp
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
#include<iostream>
|
||||||
|
void writesel(int n,int max,char now[])
|
||||||
|
{
|
||||||
|
char thenew='a'+n-1;int space,i,j;
|
||||||
|
char * p;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
if(n!=1)
|
||||||
|
{
|
||||||
|
for(space=0;space<2*(n-1);space++)std::cout<<" ";
|
||||||
|
if(i==0)std::cout<<"if "<<now[n-2]<<" < "<<thenew<<" then"<<std::endl;
|
||||||
|
else if(i==n-1)std::cout<<"else"<<std::endl;
|
||||||
|
else std::cout<<"else if "<<now[n-2-i]<<" < "<<thenew<<" then"<<std::endl;
|
||||||
|
}
|
||||||
|
p=new char[n];
|
||||||
|
for(j=0;j<n;j++)
|
||||||
|
{
|
||||||
|
if(j==n-i-1)p[j]=thenew;
|
||||||
|
else if(j<n-i-1)p[j]=now[j];
|
||||||
|
else p[j]=now[j-1];
|
||||||
|
}
|
||||||
|
if(n==max)
|
||||||
|
{
|
||||||
|
for(space=0;space<2*(n-1);space++)std::cout<<" ";
|
||||||
|
std::cout<<" writeln(";
|
||||||
|
for(j=0;j<n;j++)
|
||||||
|
{
|
||||||
|
std::cout<<p[j];
|
||||||
|
if((n-j)!=1)std::cout<<',';
|
||||||
|
}
|
||||||
|
std::cout<<")"<<std::endl;
|
||||||
|
}
|
||||||
|
else writesel(n+1,max,p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,i;
|
||||||
|
std::cin>>n;
|
||||||
|
char *p=new char[n];
|
||||||
|
std::cout<<"program sort(input,output);"<<std::endl;
|
||||||
|
std::cout<<"var"<<std::endl;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
p[i]='a'+i;
|
||||||
|
std::cout<<p[i];
|
||||||
|
if((n-i)!=1)std::cout<<',';
|
||||||
|
}
|
||||||
|
std::cout<<" : integer;"<<std::endl;
|
||||||
|
std::cout<<"begin"<<std::endl;
|
||||||
|
std::cout<<" readln(";
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
p[i]='a'+i;
|
||||||
|
std::cout<<p[i];
|
||||||
|
if((n-i)!=1)std::cout<<',';
|
||||||
|
}
|
||||||
|
std::cout<<");"<<std::endl;
|
||||||
|
writesel(1,n,"");
|
||||||
|
std::cout<<"end."<<std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
69
HDOJ/1619_autoAC.cpp
Normal file
69
HDOJ/1619_autoAC.cpp
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
const int NM=205;
|
||||||
|
const int MAX=0xfffffff;
|
||||||
|
int d[3][2]={-1,1,0,1,1,1};
|
||||||
|
int a[NM][NM],dp[NM][NM],path[NM],c[3],n,m,k;
|
||||||
|
bool flag;
|
||||||
|
inline int min(int x,int y){
|
||||||
|
return x<y?x:y;
|
||||||
|
}
|
||||||
|
int DFS(int x,int y)
|
||||||
|
{
|
||||||
|
int x1,y1,i;
|
||||||
|
if(dp[x][y]!=MAX) return dp[x][y];
|
||||||
|
if(y==m) return dp[x][y]=a[x][y];
|
||||||
|
for(i=0;i<3;i++){
|
||||||
|
x1=x+d[i][0];y1=y+d[i][1];
|
||||||
|
if(!x1) x1=n;if(x1>n) x1=1;
|
||||||
|
dp[x][y]=min(dp[x][y],DFS(x1,y1));
|
||||||
|
}
|
||||||
|
return dp[x][y]=dp[x][y]+a[x][y];
|
||||||
|
}
|
||||||
|
void Findp(int x,int y)
|
||||||
|
{
|
||||||
|
int x1,y1,i;
|
||||||
|
if(flag) return;
|
||||||
|
path[k++]=x;
|
||||||
|
if(y==m){
|
||||||
|
flag=true;return;
|
||||||
|
}
|
||||||
|
for(i=0;i<3;i++){
|
||||||
|
x1=x+d[i][0];
|
||||||
|
if(!x1) x1=n;if(x1>n) x1=1;
|
||||||
|
c[i]=x1;
|
||||||
|
}
|
||||||
|
sort(c,c+3);
|
||||||
|
for(i=0;i<3;i++){
|
||||||
|
y1=y+d[i][1];
|
||||||
|
if(dp[x][y]==dp[c[i]][y1]+a[x][y])
|
||||||
|
Findp(c[i],y1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j,u,mmin;
|
||||||
|
while(~scanf("%d%d",&n,&m)){
|
||||||
|
for(i=1;i<=n;i++)
|
||||||
|
for(j=1;j<=m;j++){
|
||||||
|
scanf("%d",&a[i][j]);
|
||||||
|
dp[i][j]=MAX;
|
||||||
|
}
|
||||||
|
u=1;mmin=MAX;
|
||||||
|
for(i=1;i<=n;i++){
|
||||||
|
if(mmin>DFS(i,1)){
|
||||||
|
mmin=dp[i][1],u=i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
k=0;flag=false;
|
||||||
|
memset(path,0,sizeof(path));
|
||||||
|
Findp(u,1);
|
||||||
|
for(i=0;i<k-1;i++) printf("%d ",path[i]);
|
||||||
|
printf("%d\n",path[k-1]);
|
||||||
|
printf("%d\n",mmin);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
75
HDOJ/1620_autoAC.cpp
Normal file
75
HDOJ/1620_autoAC.cpp
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
using namespace std;
|
||||||
|
#define MAXN 55
|
||||||
|
#define DANGEROUS 0
|
||||||
|
#define SAFE 1
|
||||||
|
struct status
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
string direction;
|
||||||
|
};
|
||||||
|
int grid[MAXN][MAXN], width, height;
|
||||||
|
bool move(status & s, string instructions)
|
||||||
|
{
|
||||||
|
status last;
|
||||||
|
for (int i = 0; i < instructions.length(); i++)
|
||||||
|
{
|
||||||
|
last = s;
|
||||||
|
if (s.direction == "N" && instructions[i] == 'L')
|
||||||
|
s.direction = "W";
|
||||||
|
else if (s.direction == "N" && instructions[i] == 'R')
|
||||||
|
s.direction = "E";
|
||||||
|
else if (s.direction == "N" && instructions[i] == 'F')
|
||||||
|
s.y += 1;
|
||||||
|
else if (s.direction == "S" && instructions[i] == 'L')
|
||||||
|
s.direction = "E";
|
||||||
|
else if (s.direction == "S" && instructions[i] == 'R')
|
||||||
|
s.direction = "W";
|
||||||
|
else if (s.direction == "S" && instructions[i] == 'F')
|
||||||
|
s.y -= 1;
|
||||||
|
else if (s.direction == "W" && instructions[i] == 'L')
|
||||||
|
s.direction = "S";
|
||||||
|
else if (s.direction == "W" && instructions[i] == 'R')
|
||||||
|
s.direction = "N";
|
||||||
|
else if (s.direction == "W" && instructions[i] == 'F')
|
||||||
|
s.x -= 1;
|
||||||
|
else if (s.direction == "E" && instructions[i] == 'L')
|
||||||
|
s.direction = "N";
|
||||||
|
else if (s.direction == "E" && instructions[i] == 'R')
|
||||||
|
s.direction = "S";
|
||||||
|
else if (s.direction == "E" && instructions[i] == 'F')
|
||||||
|
s.x += 1;
|
||||||
|
if (s.x > width || s.x < 0 || s.y > height || s.y < 0)
|
||||||
|
{
|
||||||
|
if (grid[last.y][last.x] == DANGEROUS)
|
||||||
|
s = last;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout << last.x << " " << last.y << " " << last.
|
||||||
|
direction;
|
||||||
|
cout << " LOST" << endl;
|
||||||
|
grid[last.y][last.x] = DANGEROUS;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << s.x << " " << s.y << " " << s.direction << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int main(int argc, char const *argv[])
|
||||||
|
{
|
||||||
|
status robot;
|
||||||
|
string line;
|
||||||
|
cin >> width >> height;
|
||||||
|
for (int i = 0; i <= height; i++)
|
||||||
|
for (int j = 0; j <= width; j++)
|
||||||
|
grid[i][j] = SAFE;
|
||||||
|
while (cin >> robot.x >> robot.y >> robot.direction)
|
||||||
|
{
|
||||||
|
cin >> line;
|
||||||
|
move(robot, line);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
34
HDOJ/1621_autoAC.cpp
Normal file
34
HDOJ/1621_autoAC.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdio>
|
||||||
|
using namespace std;
|
||||||
|
int xiede(double m,double n)
|
||||||
|
{
|
||||||
|
double gen3=1.732051;
|
||||||
|
int max,x,y;
|
||||||
|
x=(int)(2*gen3*(m-1)/3.0);
|
||||||
|
if(m>=1)x++;
|
||||||
|
y=(int)n;
|
||||||
|
max=x*y;
|
||||||
|
if(n-y<0.50000)
|
||||||
|
max=max-(int)(x/2);
|
||||||
|
return max;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
double m,n,gen3=1.732051;
|
||||||
|
int aa,bb,max1,max2,max3,max23,x,y;
|
||||||
|
while(~scanf("%lf%lf",&m,&n))
|
||||||
|
{
|
||||||
|
aa=(int)m;bb=(int)n;
|
||||||
|
max1=aa*bb;
|
||||||
|
max2=xiede(m,n);
|
||||||
|
max3=xiede(n,m);
|
||||||
|
max23=max2>=max3?max2:max3;
|
||||||
|
if(max1>=max23)
|
||||||
|
printf("%d grid\n",max1);
|
||||||
|
else
|
||||||
|
printf("%d skew\n",max23);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
88
HDOJ/1622_autoAC.cpp
Normal file
88
HDOJ/1622_autoAC.cpp
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
#include<algorithm>
|
||||||
|
#include<iostream>
|
||||||
|
#include<string.h>
|
||||||
|
#include<cstdlib>
|
||||||
|
#include<cstdio>
|
||||||
|
#include<vector>
|
||||||
|
#include<queue>
|
||||||
|
using std::queue;
|
||||||
|
using std::vector;
|
||||||
|
const int Max_N = 260;
|
||||||
|
struct Node {
|
||||||
|
int v, vis;
|
||||||
|
Node *ch[2];
|
||||||
|
inline void set(int _v, Node *p) {
|
||||||
|
vis = 0, v = _v;
|
||||||
|
ch[0] = ch[1] = p;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct BinTree {
|
||||||
|
int fail;
|
||||||
|
char buf[Max_N];
|
||||||
|
Node *tail, *root, stack[Max_N];
|
||||||
|
void init() {
|
||||||
|
fail = 0;
|
||||||
|
tail = &stack[0];
|
||||||
|
}
|
||||||
|
inline Node *newNode(int v = 0) {
|
||||||
|
Node *p = tail++;
|
||||||
|
p->set(v, NULL);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
inline void insert(const char *src, const int v) {
|
||||||
|
int n = strlen(src);
|
||||||
|
Node *x = root;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
if (src[i] == 'L') {
|
||||||
|
if (!x->ch[0]) x->ch[0] = newNode();
|
||||||
|
x = x->ch[0];
|
||||||
|
} else if (src[i] == 'R') {
|
||||||
|
if (!x->ch[1]) x->ch[1] = newNode();
|
||||||
|
x = x->ch[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (x->vis) fail = 1;
|
||||||
|
x->v = v;
|
||||||
|
x->vis = 1;
|
||||||
|
}
|
||||||
|
inline void bfs() {
|
||||||
|
vector<int> ans;
|
||||||
|
queue<Node *> que;
|
||||||
|
que.push(root);
|
||||||
|
while (!que.empty()) {
|
||||||
|
Node *u = que.front(); que.pop();
|
||||||
|
if (!u->vis) {
|
||||||
|
fail = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ans.push_back(u->v);
|
||||||
|
if (u->ch[0]) que.push(u->ch[0]);
|
||||||
|
if (u->ch[1]) que.push(u->ch[1]);
|
||||||
|
}
|
||||||
|
if (fail) {
|
||||||
|
puts("not complete");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int n = ans.size();
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
printf("%d%c", ans[i], i < n - 1 ? ' ' : '\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inline int gogo() {
|
||||||
|
init();
|
||||||
|
int v = 0;
|
||||||
|
root = newNode();
|
||||||
|
for (;;) {
|
||||||
|
if (scanf("%s", buf) != 1) return 0;
|
||||||
|
if (!strcmp(buf, "()")) break;
|
||||||
|
sscanf(&buf[1], "%d", &v);
|
||||||
|
insert(strchr(buf, ',') + 1, v);
|
||||||
|
}
|
||||||
|
bfs();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}tree;
|
||||||
|
int main() {
|
||||||
|
while (tree.gogo());
|
||||||
|
return 0;
|
||||||
|
}
|
111
HDOJ/1623_autoAC.cpp
Normal file
111
HDOJ/1623_autoAC.cpp
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<ctype.h>
|
||||||
|
#define MAXN 400
|
||||||
|
char title[204][MAXN];
|
||||||
|
char keyword[52][14];
|
||||||
|
typedef struct charter{
|
||||||
|
char character[MAXN];
|
||||||
|
int rank;
|
||||||
|
int start, end;
|
||||||
|
}charter;
|
||||||
|
charter mes[3004];
|
||||||
|
int dealenter(char *temp)
|
||||||
|
{
|
||||||
|
int len = strlen(temp);
|
||||||
|
if(temp[len-1] == '\n') temp[len-1] = ' ';
|
||||||
|
else temp[len++] = ' ', temp[len] = '\0';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int calculate(int n1, int n2, int n3)
|
||||||
|
{
|
||||||
|
int i, j, k, flag;
|
||||||
|
charter temp;
|
||||||
|
for(i=0; i<n3-1; ++i)
|
||||||
|
{
|
||||||
|
flag = 1;
|
||||||
|
for(j=0; j<n3-1-i; ++j)
|
||||||
|
{
|
||||||
|
if(strcmp(mes[j].character, mes[j+1].character) > 0)
|
||||||
|
{
|
||||||
|
flag = 0;
|
||||||
|
temp = mes[j], mes[j] = mes[j+1], mes[j+1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag) break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int shuai(int n1, char *from)
|
||||||
|
{
|
||||||
|
int i, j, flag = 0;
|
||||||
|
for(i=0; i<n1; ++i)
|
||||||
|
{
|
||||||
|
if(strcmp(keyword[i], from) == 0) {flag = 1; break;}
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
int lastline(int n1, int n2, int n3)
|
||||||
|
{
|
||||||
|
int i, j, k, t, flag, len, start, end;
|
||||||
|
for(i=0; i<n3; ++i)
|
||||||
|
{
|
||||||
|
if(!shuai(n1, mes[i].character))
|
||||||
|
{
|
||||||
|
j = mes[i].rank;
|
||||||
|
start = mes[i].start, end = mes[i].end;
|
||||||
|
for(t=0; t<start; ++t)
|
||||||
|
printf("%c", title[j][t]);
|
||||||
|
len = strlen(mes[i].character);
|
||||||
|
for(k=0; k<len; ++k)
|
||||||
|
printf("%c", mes[i].character[k] - ('a' - 'A'));
|
||||||
|
len = strlen(title[j]);
|
||||||
|
for(k=end+1; k<len; ++k)
|
||||||
|
printf("%c", title[j][k]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i, j, t, k, n, m, count, cnt3, cnt1, cnt2, cnt4, flag, flag2, len, doc;
|
||||||
|
char temp[MAXN];
|
||||||
|
flag = cnt1 = cnt2 = cnt3 = 0;
|
||||||
|
while(fgets(temp, MAXN, stdin) != NULL)
|
||||||
|
{
|
||||||
|
dealenter(temp);
|
||||||
|
len = strlen(temp);
|
||||||
|
if(strcmp(temp, ":: ") == 0) flag = 1;
|
||||||
|
else if(!flag)
|
||||||
|
{
|
||||||
|
strcpy(keyword[cnt1], temp);
|
||||||
|
keyword[cnt1++][len-1] = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(i=0,flag2=cnt4=0,doc=-1; i<len; ++i)
|
||||||
|
{
|
||||||
|
if(temp[i] != ' ')
|
||||||
|
{
|
||||||
|
if(doc == -1) doc = i;
|
||||||
|
if(isupper(temp[i])) mes[cnt3].character[cnt4++] = temp[i] = towlower(temp[i]);
|
||||||
|
else mes[cnt3].character[cnt4++] = temp[i];
|
||||||
|
flag2 = 1;
|
||||||
|
}
|
||||||
|
else if(flag2)
|
||||||
|
{
|
||||||
|
mes[cnt3].rank = cnt2, mes[cnt3].start = doc, mes[cnt3].end = i-1;
|
||||||
|
mes[cnt3].character[cnt4] = '\0';
|
||||||
|
cnt3++, cnt4 = 0;
|
||||||
|
flag2 = 0, doc = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
strcpy(title[cnt2], temp);
|
||||||
|
title[cnt2++][len-1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
calculate(cnt1, cnt2, cnt3);
|
||||||
|
lastline(cnt1, cnt2, cnt3);
|
||||||
|
return 0;
|
||||||
|
}
|
47
HDOJ/1625_autoAC.cpp
Normal file
47
HDOJ/1625_autoAC.cpp
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
using namespace std;
|
||||||
|
#define MAXN 55
|
||||||
|
int path[MAXN][MAXN];
|
||||||
|
int m,n;
|
||||||
|
void floyd(){
|
||||||
|
for(int k=0;k<=n;k++){
|
||||||
|
for(int i=0;i<=n;i++){
|
||||||
|
for(int j=0;j<=n;j++){
|
||||||
|
path[i][j]+=path[i][k]*path[k][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=0;i<=n;i++)if(path[i][i]){
|
||||||
|
path[i][i]=-1;
|
||||||
|
for(int j=0;j<=n;j++){
|
||||||
|
for(int k=0;k<=n;k++){
|
||||||
|
if(path[j][i]&&path[i][k]){
|
||||||
|
path[j][k]=-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
int u,v,t=0;
|
||||||
|
while(~scanf("%d",&m)){
|
||||||
|
memset(path,0,sizeof(path));
|
||||||
|
n=0;
|
||||||
|
for(int i=1;i<=m;i++){
|
||||||
|
scanf("%d%d",&u,&v);
|
||||||
|
path[u][v]=1;
|
||||||
|
n=max(n,max(u,v));
|
||||||
|
}
|
||||||
|
printf("matrix for city %d\n",t++);
|
||||||
|
floyd();
|
||||||
|
for(int i=0;i<=n;i++){
|
||||||
|
for(int j=0;j<n;j++){
|
||||||
|
printf(" %d",path[i][j]);
|
||||||
|
}
|
||||||
|
printf(" %d\n",path[i][n]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
53
HDOJ/1626_autoAC.cpp
Normal file
53
HDOJ/1626_autoAC.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<cstring>
|
||||||
|
#include<string>
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<cmath>
|
||||||
|
#include<map>
|
||||||
|
#include<queue>
|
||||||
|
using namespace std;
|
||||||
|
const int radix=256*256;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
string s;
|
||||||
|
long long r;
|
||||||
|
while(getline(cin,s))
|
||||||
|
{
|
||||||
|
if(s[0]=='#')break;
|
||||||
|
if(s.length()==0)
|
||||||
|
{
|
||||||
|
cout<<"00 00"<<endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int len=s.length(),t;
|
||||||
|
r=0;
|
||||||
|
for(int i=0;i<len;i++)
|
||||||
|
{ t=s[i];
|
||||||
|
r=(256*r+t)%34943;
|
||||||
|
}
|
||||||
|
r=(r*radix)%34943;
|
||||||
|
if(r==0)
|
||||||
|
{
|
||||||
|
cout<<"00 00"<<endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
r=34943-r;
|
||||||
|
int b=r%256,a=r/256,c;
|
||||||
|
c=a/16;
|
||||||
|
if(c>9)cout<<(char)('A'+c-10);
|
||||||
|
else cout<<c;
|
||||||
|
c=a%16;
|
||||||
|
if(c>9)cout<<(char)('A'+c-10);
|
||||||
|
else cout<<c;
|
||||||
|
cout<<" ";
|
||||||
|
c=b/16;
|
||||||
|
if(c>9)cout<<(char)('A'+c-10);
|
||||||
|
else cout<<c;
|
||||||
|
c=b%16;
|
||||||
|
if(c>9)cout<<(char)('A'+c-10);
|
||||||
|
else cout<<c;
|
||||||
|
cout<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
55
HDOJ/1627_autoAC.cpp
Normal file
55
HDOJ/1627_autoAC.cpp
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
#include<iostream>
|
||||||
|
using namespace std;
|
||||||
|
const int maxn=10001;
|
||||||
|
int n,m,ans[maxn];
|
||||||
|
void DFS(int cur)
|
||||||
|
{
|
||||||
|
for(int i=0;i<m;i++)
|
||||||
|
{
|
||||||
|
ans[cur]=i;
|
||||||
|
bool is=false;
|
||||||
|
for(int j=1;2*j<=cur+1;j++)
|
||||||
|
{
|
||||||
|
bool flag=0;
|
||||||
|
for(int k=0;k<j;k++)
|
||||||
|
if(ans[cur-j-k]!=ans[cur-k])
|
||||||
|
{
|
||||||
|
flag=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(!flag)
|
||||||
|
{
|
||||||
|
is=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(is)
|
||||||
|
continue;
|
||||||
|
if(--n==0)
|
||||||
|
{
|
||||||
|
for(int i=0;i<=cur;i++)
|
||||||
|
{
|
||||||
|
if(i&&i%64==0)
|
||||||
|
printf("\n");
|
||||||
|
else if(i&&i%4==0)
|
||||||
|
printf(" ");
|
||||||
|
printf("%c",'A'+ans[i]);
|
||||||
|
}
|
||||||
|
printf("\n%d\n",cur+1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DFS(cur+1);
|
||||||
|
if(!n)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(scanf("%d%d",&n,&m)&&(n||m))
|
||||||
|
{
|
||||||
|
DFS(0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
18
HDOJ/1628_autoAC.cpp
Normal file
18
HDOJ/1628_autoAC.cpp
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
int main(void) {
|
||||||
|
for (int n, k; cin >> n >> k && n * k != 0; ) {
|
||||||
|
vector<int> Circle;
|
||||||
|
for (int i = 0; i < n; Circle.push_back(++i));
|
||||||
|
for (int m = (k - 1) % Circle.size(), t; Circle.size() != 1; ) {
|
||||||
|
t = (m - 1 + k) % (Circle.size() - 1);
|
||||||
|
t = (t + (t >= m)) % Circle.size();
|
||||||
|
Circle[m] = Circle[t];
|
||||||
|
Circle.erase(Circle.begin() + t);
|
||||||
|
m = (m - (t < m) + k) % Circle.size();
|
||||||
|
}
|
||||||
|
cout << (n - Circle.front() + 1) % n + 1 << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
135
HDOJ/1629_autoAC.cpp
Normal file
135
HDOJ/1629_autoAC.cpp
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cmath>
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
struct Card
|
||||||
|
{
|
||||||
|
char num;
|
||||||
|
char flower;
|
||||||
|
int num_flag;
|
||||||
|
};
|
||||||
|
Card p[5],q[5];
|
||||||
|
char str[]= {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
|
||||||
|
string s_name[9]= {"straight-flush","four-of-a-kind","full-house","flush",
|
||||||
|
"straight","three-of-a-kind","two-pairs","one-pair","highest-card"
|
||||||
|
};
|
||||||
|
int flag[15],count,value[15], solve_flag[10];
|
||||||
|
void solve(Card *r,int x)
|
||||||
|
{
|
||||||
|
if(solve_flag[0]) return;
|
||||||
|
int flag_flush(0);
|
||||||
|
memset(value,0,sizeof(value));
|
||||||
|
memset(flag,0,sizeof(flag));
|
||||||
|
for(int j=0; j<13; j++)
|
||||||
|
if(r[0].num==str[j])
|
||||||
|
{
|
||||||
|
flag[j]=1;
|
||||||
|
if(!j) flag[13]=1;
|
||||||
|
value[j]++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for(int i=1; i<5; i++)
|
||||||
|
{
|
||||||
|
if(r[i-1].flower!=r[i].flower) flag_flush=1;
|
||||||
|
for(int j=0; j<13; j++)
|
||||||
|
if(r[i].num==str[j])
|
||||||
|
{
|
||||||
|
flag[j]=1;
|
||||||
|
if(!j) flag[13]=1;
|
||||||
|
value[j]++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!flag_flush) solve_flag[3]=1;
|
||||||
|
int y(0),v(0);
|
||||||
|
if(flag[0])
|
||||||
|
{
|
||||||
|
for(int i=0; i<5; i++)
|
||||||
|
if(flag[i]) y++;
|
||||||
|
if(y==5&&!flag_flush)
|
||||||
|
{
|
||||||
|
solve_flag[0]=1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(y==5&&flag_flush) solve_flag[4]=1;
|
||||||
|
}
|
||||||
|
y=0;
|
||||||
|
for(int i=1; i<14; i++)
|
||||||
|
{
|
||||||
|
if(flag[i]) y++;
|
||||||
|
if(y==5&&!flag_flush)
|
||||||
|
{
|
||||||
|
solve_flag[0]=1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(y==5&&flag_flush)
|
||||||
|
{
|
||||||
|
solve_flag[4]=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(y>=1&&!flag[i]) break;
|
||||||
|
}
|
||||||
|
y=v=0;
|
||||||
|
for(int i=0; i<14; i++)
|
||||||
|
if(value[i]>=4) solve_flag[1]=1;
|
||||||
|
else if(value[i]==3) v++;
|
||||||
|
else if(value[i]==2) y++;
|
||||||
|
if(v&&y==1) solve_flag[2]=1;
|
||||||
|
if(v&&!y) solve_flag[5]=1;
|
||||||
|
if(!v&&y==2) solve_flag[6]=1;
|
||||||
|
if(!v&&y==1) solve_flag[7]=1;
|
||||||
|
if(x<count)
|
||||||
|
for(int i=0; i<5; i++)
|
||||||
|
if(!r[i].num_flag)
|
||||||
|
{
|
||||||
|
Card m[5];
|
||||||
|
for(int j=0; j<5; j++) m[j]=r[j];
|
||||||
|
m[i]=q[x];
|
||||||
|
m[i].num_flag=1;
|
||||||
|
solve(m,x+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
char c,s[100];
|
||||||
|
count=0;
|
||||||
|
while(scanf("%c",&c)!=EOF)
|
||||||
|
{
|
||||||
|
if(c=='\n'||count>9)
|
||||||
|
{
|
||||||
|
if(c!='\n') gets(s);
|
||||||
|
count=count-5;
|
||||||
|
printf("Hand: ");
|
||||||
|
for(int i=0; i<5; i++) printf("%c%c ",p[i].num,p[i].flower);
|
||||||
|
printf("Deck: ");
|
||||||
|
for(int i=0; i<count; i++) printf("%c%c ",q[i].num,q[i].flower);
|
||||||
|
if(c!='\n') printf("%s ",s);
|
||||||
|
printf("Best hand: ");
|
||||||
|
memset(solve_flag,0,sizeof(solve_flag));
|
||||||
|
solve_flag[8]=1;
|
||||||
|
solve(p,0);
|
||||||
|
for(int i=0; i<9; i++)
|
||||||
|
if(solve_flag[i])
|
||||||
|
{
|
||||||
|
cout<<s_name[i]<<endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
count=0;
|
||||||
|
}
|
||||||
|
else if(c!=' ')
|
||||||
|
{
|
||||||
|
Card k;
|
||||||
|
k.num=c;
|
||||||
|
scanf("%c",&c);
|
||||||
|
k.flower=c;
|
||||||
|
k.num_flag=0;
|
||||||
|
if(count<=4) p[count]=k;
|
||||||
|
else q[count-5]=k;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
72
HDOJ/1631_autoAC.cpp
Normal file
72
HDOJ/1631_autoAC.cpp
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
enum SYMBOL{A, MOD, LA, BA, DA, PREDA, NAM, SE, PC, P, PN, PS, ST, VP, PV, UN};
|
||||||
|
bool aVowel[] = {1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0};
|
||||||
|
static SYMBOL aConvTbl[14][4] = {
|
||||||
|
{PREDA, UN, PREDA, PREDA}, {PREDA, UN, UN, PS}, {NAM, UN, UN, PN},
|
||||||
|
{LA, UN, PS, PN}, {MOD, UN, PS, VP}, {A, PS, PS, PS}, {PS, UN, UN, P},
|
||||||
|
{DA, UN, P, PC}, {BA, PN, P, PC}, {VP, PN, UN, PV}, {PV, UN, PN, ST},
|
||||||
|
{PV, UN, UN, ST}, {PC, UN, UN, SE}, {ST, UN, UN, SE},
|
||||||
|
};
|
||||||
|
SYMBOL Token2Status(const string &str) {
|
||||||
|
int nNum = str.length(), cLast = str[nNum - 1];
|
||||||
|
if (!islower(cLast) || !aVowel[cLast - 'a']) {
|
||||||
|
return NAM;
|
||||||
|
}
|
||||||
|
switch (nNum) {
|
||||||
|
case 1: return A;
|
||||||
|
case 5:
|
||||||
|
nNum = aVowel[str[4] - 'a'];
|
||||||
|
nNum |= ((aVowel[str[0] - 'a'] << 4) | (aVowel[str[1] - 'a'] << 3));
|
||||||
|
nNum |= ((aVowel[str[2] - 'a'] << 2) | (aVowel[str[3] - 'a'] << 1));
|
||||||
|
return (nNum == 5 || nNum == 9) ? PREDA : UN;
|
||||||
|
case 2:
|
||||||
|
switch (str[0]) {
|
||||||
|
case 'g': return MOD;
|
||||||
|
case 'b': return BA;
|
||||||
|
case 'd': return DA;
|
||||||
|
case 'l': return LA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return UN;
|
||||||
|
}
|
||||||
|
int main(void) {
|
||||||
|
vector<SYMBOL> Set;
|
||||||
|
for (string str; cin >> str && str != "#";) {
|
||||||
|
int nDot = str.find('.');
|
||||||
|
if (nDot == str.npos) {
|
||||||
|
Set.push_back(Token2Status(str));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
str.erase(str.length() - 1);
|
||||||
|
if (!str.empty()) {
|
||||||
|
Set.push_back(Token2Status(str));
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 14; ++i) {
|
||||||
|
SYMBOL *pTbl = aConvTbl[i];
|
||||||
|
for (vector<SYMBOL>::iterator j = Set.begin(); j != Set.end();) {
|
||||||
|
vector<SYMBOL>::iterator iBeg = Set.begin(), iEnd = Set.end();
|
||||||
|
if (*j != pTbl[0]) {
|
||||||
|
++j;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (pTbl[1] != UN && (j == iBeg || *(j - 1) != pTbl[1])) {
|
||||||
|
++j;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (pTbl[2] != UN && (j == iEnd - 1 || *(j + 1) != pTbl[2])) {
|
||||||
|
++j;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
j = pTbl[1] != UN ? Set.erase(j - 1) : j;
|
||||||
|
j = pTbl[2] != UN ? Set.erase(j + 1) - 1 : j;
|
||||||
|
*j = pTbl[3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << (Set.size() == 1 && Set[0] == SE ? "Good" : "Bad!") << endl;
|
||||||
|
Set.clear();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
80
HDOJ/1632_autoAC.cpp
Normal file
80
HDOJ/1632_autoAC.cpp
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<math.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
#define N 155
|
||||||
|
#define eps 1e-8
|
||||||
|
struct TPoint
|
||||||
|
{
|
||||||
|
double x,y;
|
||||||
|
}s;
|
||||||
|
struct TPolygon
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
TPoint p[N];
|
||||||
|
}ply1,ply2,ans;
|
||||||
|
double maxdist;
|
||||||
|
int dblcmp(double a) {return a<-eps?-1:a>eps?1:0;}
|
||||||
|
double MAX(double a,double b) {return a>b?a:b;}
|
||||||
|
double cross(TPoint a,TPoint b,TPoint c)
|
||||||
|
{
|
||||||
|
return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
|
||||||
|
}
|
||||||
|
double plyarea(TPolygon res)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
double area=0;
|
||||||
|
res.p[res.n]=res.p[0];
|
||||||
|
for(i=0;i<res.n;i++)
|
||||||
|
area+=cross(s,res.p[i],res.p[i+1]);
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
TPolygon cut(TPolygon res,TPoint s,TPoint e)
|
||||||
|
{
|
||||||
|
int d1,d2,i,t;
|
||||||
|
double s1,s2;
|
||||||
|
TPoint a;
|
||||||
|
TPolygon b;
|
||||||
|
b.n=0;
|
||||||
|
res.p[res.n]=res.p[0];
|
||||||
|
for(i=0,t=0;i<res.n;i++)
|
||||||
|
{
|
||||||
|
d1=dblcmp(s1=cross(res.p[i],s,e));
|
||||||
|
d2=dblcmp(s2=cross(res.p[i+1],s,e));
|
||||||
|
if(d1>=0) b.p[t++]=res.p[i];
|
||||||
|
if(d1*d2<0)
|
||||||
|
{
|
||||||
|
a.x=(s2*res.p[i].x-s1*res.p[i+1].x)/(s2-s1);
|
||||||
|
a.y=(s2*res.p[i].y-s1*res.p[i+1].y)/(s2-s1);
|
||||||
|
b.p[t++]=a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b.n=t;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(scanf("%d",&ply1.n),ply1.n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
double sumarea,area;
|
||||||
|
for(i=0;i<ply1.n;i++) scanf("%lf%lf",&ply1.p[i].x,&ply1.p[i].y);
|
||||||
|
s.x=0; s.y=0;
|
||||||
|
if((dblcmp(sumarea=plyarea(ply1)))<0) reverse(ply1.p,ply1.p+ply1.n);
|
||||||
|
ply1.p[ply1.n]=ply1.p[0];
|
||||||
|
sumarea=fabs(sumarea);
|
||||||
|
scanf("%d",&ply2.n);
|
||||||
|
for(i=0;i<ply2.n;i++) scanf("%lf%lf",&ply2.p[i].x,&ply2.p[i].y);
|
||||||
|
if((dblcmp(area=plyarea(ply2)))<0) reverse(ply2.p,ply2.p+ply2.n);
|
||||||
|
sumarea+=fabs(area);
|
||||||
|
ply2.p[ply2.n]=ply2.p[0];
|
||||||
|
ans=ply1;
|
||||||
|
for(i=0;i<ply2.n;i++)
|
||||||
|
ans=cut(ans,ply2.p[i],ply2.p[i+1]);
|
||||||
|
area=fabs(plyarea(ans));
|
||||||
|
printf("%8.2lf",sumarea/2-area);
|
||||||
|
}
|
||||||
|
puts("");
|
||||||
|
return 0;
|
||||||
|
}
|
80
HDOJ/1633_autoAC.cpp
Normal file
80
HDOJ/1633_autoAC.cpp
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
struct Point
|
||||||
|
{
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
};
|
||||||
|
Point p[3];
|
||||||
|
//姹㈢Н缁瀵瑰
|
||||||
|
double cross(Point O,Point A,Point B)
|
||||||
|
{
|
||||||
|
return fabs((A.x - O.x) * (B.y - O.y) - (B.x - O.x) * (A.y - O.y))/2;
|
||||||
|
}
|
||||||
|
bool judge()
|
||||||
|
{
|
||||||
|
for(int i=0; i<3; i++)
|
||||||
|
{
|
||||||
|
if(p[i].x!=0 || p[i].y!=0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
#ifndef ONLINE_JUDGE
|
||||||
|
freopen("in.txt","r",stdin);
|
||||||
|
#endif
|
||||||
|
while(scanf(" %lf %lf %lf %lf %lf %lf",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y) && judge())
|
||||||
|
{
|
||||||
|
double maxX = 0,minX = 150;
|
||||||
|
double maxY = 0,minY = 150;
|
||||||
|
for(int i=0; i<3; i++)
|
||||||
|
{
|
||||||
|
if(p[i].x>maxX)
|
||||||
|
maxX = p[i].x;
|
||||||
|
if(p[i].y>maxY)
|
||||||
|
maxY = p[i].y;
|
||||||
|
if(p[i].x<minX)
|
||||||
|
minX = p[i].x;
|
||||||
|
if(p[i].y<minY)
|
||||||
|
minY = p[i].y;
|
||||||
|
}
|
||||||
|
//姹涓瑙褰㈢㈢Н
|
||||||
|
double area = cross(p[0],p[1],p[2]);
|
||||||
|
int num = 0;
|
||||||
|
for(int i=ceil(minX); i<=floor(maxX); i++)
|
||||||
|
{
|
||||||
|
if(i <= 0 || i>=100)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for(int j=ceil(minY); j<=floor(maxY); j++)
|
||||||
|
{
|
||||||
|
if(j <= 0 || j>=100)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
double s = 0;
|
||||||
|
Point temp;
|
||||||
|
temp.x = i;
|
||||||
|
temp.y = j;
|
||||||
|
s += cross(temp,p[0],p[1]);
|
||||||
|
s += cross(temp,p[1],p[2]);
|
||||||
|
s += cross(temp,p[2],p[0]);
|
||||||
|
if(fabs(area-s)<=1e-8)
|
||||||
|
{
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%4d\n",num);
|
||||||
|
}
|
||||||
|
}
|
70
HDOJ/1635_autoAC.cpp
Normal file
70
HDOJ/1635_autoAC.cpp
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
#include <algorithm>
|
||||||
|
#include <functional>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
static int aMDays[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
|
||||||
|
static int aMDaysL[] = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};
|
||||||
|
bool LeapYear(int Year, bool bNew) {
|
||||||
|
if (bNew) {
|
||||||
|
return ((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0);
|
||||||
|
}
|
||||||
|
return (Year % 4 == 0);
|
||||||
|
}
|
||||||
|
int Date2Days(int Year, int Month, int Date, bool bNew) {
|
||||||
|
--Year;
|
||||||
|
int Days = Year * 365 + Year / 4 + (bNew ? (Year / 400 - Year / 100) : 0);
|
||||||
|
Days += ((Month > 2) ? LeapYear(Year + 1, bNew) : 0);
|
||||||
|
return (Days + aMDays[Month - 1] + Date - 1 - (!bNew * 2));
|
||||||
|
}
|
||||||
|
int main(void) {
|
||||||
|
const static string aDays[] = {"Sunday", "Monday", "Tuesday",
|
||||||
|
"Wednesday", "Thursday", "Friday", "Saturday"};
|
||||||
|
const static string aMonths[] = {"January", "February", "March",
|
||||||
|
"April", "May", "June", "July", "August", "September",
|
||||||
|
"October", "November", "December"};
|
||||||
|
const int nDays400Y = 400 * 365 + 100 - 3;
|
||||||
|
const int nDays100Y = 100 * 365 + 25 - 1;
|
||||||
|
const int nDays4Y = 4 * 365 + 1, nDays1Y = 365;
|
||||||
|
for (string str; cin >> str && str != "#";) {
|
||||||
|
int Day, Date, Month, Year;
|
||||||
|
Day = find(&aDays[0], &aDays[7], str) - &aDays[0];
|
||||||
|
cin >> Date >> str >> Year;
|
||||||
|
Month = find(&aMonths[0], &aMonths[12], str) - &aMonths[0] + 1;
|
||||||
|
int nDays = Date2Days(Year, Month, Date, false);
|
||||||
|
bool bOld2New = true;
|
||||||
|
if (Day == (nDays + 1) % 7) {
|
||||||
|
Year = nDays / nDays400Y * 400;
|
||||||
|
nDays %= nDays400Y;
|
||||||
|
if (nDays == nDays100Y * 4) {
|
||||||
|
Year += 300;
|
||||||
|
nDays -= nDays100Y * 3;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Year += nDays / nDays100Y * 100;
|
||||||
|
nDays %= nDays100Y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nDays = Date2Days(Year, Month, Date, true) + 2;
|
||||||
|
Year = bOld2New = 0;
|
||||||
|
}
|
||||||
|
Year += nDays / nDays4Y * 4;
|
||||||
|
nDays %= nDays4Y;
|
||||||
|
if (nDays == nDays1Y * 4) {
|
||||||
|
Year += 3;
|
||||||
|
nDays -= nDays1Y * 3;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Year += nDays / nDays1Y;
|
||||||
|
nDays %= nDays1Y;
|
||||||
|
}
|
||||||
|
int *pMDays = (LeapYear(++Year, bOld2New) ? aMDaysL : aMDays);
|
||||||
|
for (Month = 0; Month < 12 && pMDays[Month] <= nDays; ++Month);
|
||||||
|
Date = nDays - pMDays[Month - 1] + 1;
|
||||||
|
Day = (Date2Days(Year, Month, Date, bOld2New) + 1) % 7;
|
||||||
|
cout << aDays[Day] << ' ' << Date << (bOld2New ? " " : "* ");
|
||||||
|
cout << aMonths[Month - 1] << ' ' << Year << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
67
HDOJ/1638_autoAC.cpp
Normal file
67
HDOJ/1638_autoAC.cpp
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <vector>
|
||||||
|
#include <stack>
|
||||||
|
#include <map>
|
||||||
|
#include <list>
|
||||||
|
#include <queue>
|
||||||
|
using namespace std;
|
||||||
|
map<char,int> mma;
|
||||||
|
int main(){
|
||||||
|
mma['A'] = 14;
|
||||||
|
mma['J'] = 11;
|
||||||
|
mma['Q'] = 12;
|
||||||
|
mma['K'] = 13;
|
||||||
|
for(char i = '2' ; i <='9'; i++) mma[i] = i-'0';
|
||||||
|
char nuse,card;
|
||||||
|
while(cin >> nuse && nuse != '#'){
|
||||||
|
vector<int> tmp[2];
|
||||||
|
queue<int> player[2];
|
||||||
|
list<int> stk;
|
||||||
|
cin >> card;
|
||||||
|
tmp[1].push_back(mma[card]);
|
||||||
|
for(int i = 2; i <= 52; i++){
|
||||||
|
cin >> nuse >> card;
|
||||||
|
tmp[i%2].push_back(mma[card]);
|
||||||
|
}
|
||||||
|
for(int i = 0; i < 2; i++){
|
||||||
|
while(tmp[i].size()){
|
||||||
|
player[i].push(tmp[i][tmp[i].size()-1]);
|
||||||
|
tmp[i].pop_back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int turn = 1,winner;
|
||||||
|
while(1){
|
||||||
|
int times;
|
||||||
|
bool flag = 0;
|
||||||
|
if(stk.size()==0) times = 0;
|
||||||
|
else if(stk.back()>=11) times = stk.back()-10;
|
||||||
|
else times = 0;
|
||||||
|
int cnt;
|
||||||
|
if(times == 0) cnt = 1;
|
||||||
|
else cnt = times;
|
||||||
|
for(int i = 0; i < cnt; i++){
|
||||||
|
if(player[turn].size()==0){
|
||||||
|
winner = !turn;
|
||||||
|
flag = 1;
|
||||||
|
break;
|
||||||
|
}else{
|
||||||
|
stk.push_back(player[turn].front());
|
||||||
|
player[turn].pop();
|
||||||
|
if(stk.back()>=11) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag) break;
|
||||||
|
if(times && stk.back()<=10){
|
||||||
|
while(stk.size()){
|
||||||
|
player[!turn].push(stk.front());
|
||||||
|
stk.pop_front();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
turn = !turn;
|
||||||
|
}
|
||||||
|
printf("%d%3d\n",winner+1,player[winner].size());
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
53
HDOJ/1641_autoAC.cpp
Normal file
53
HDOJ/1641_autoAC.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
int H,K,ans[15],res;
|
||||||
|
int judge(int target,int cur,int num,int tot,int *A,int end)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
if(tot==target)
|
||||||
|
return 1;
|
||||||
|
else if(cur==end||num==H)
|
||||||
|
return 0;
|
||||||
|
if(judge(target,cur+1,num,tot,A,end))
|
||||||
|
return 1;
|
||||||
|
if(judge(target,cur,num+1,tot+A[cur],A,end))
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void dfs(int cur,int *A,int end)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
if(judge(cur,0,0,0,A,end))
|
||||||
|
dfs(cur+1,A,end);
|
||||||
|
if(end<K)
|
||||||
|
{
|
||||||
|
A[end]=cur;
|
||||||
|
end++;
|
||||||
|
dfs(cur+1,A,end);
|
||||||
|
end--;
|
||||||
|
A[end]=-1;
|
||||||
|
}
|
||||||
|
if(cur-1>res)
|
||||||
|
{
|
||||||
|
res=cur-1;
|
||||||
|
memcpy(ans,A,sizeof(ans));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j,k,A[15];
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
scanf("%d%d",&H,&K);
|
||||||
|
if(H==0)
|
||||||
|
break;
|
||||||
|
memset(A,-1,sizeof(A));
|
||||||
|
res=0;
|
||||||
|
dfs(1,A,0);
|
||||||
|
for(i=0;i<K;i++)
|
||||||
|
printf("%3d",ans[i]);
|
||||||
|
printf(" ->");
|
||||||
|
printf("%3d\n",res);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
38
HDOJ/1650_autoAC.cpp
Normal file
38
HDOJ/1650_autoAC.cpp
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
typedef std::vector<int>::iterator VECINT_ITER;
|
||||||
|
int Josephus(int n, int k)
|
||||||
|
{
|
||||||
|
static std::vector<int> vecJosephus(1, 0);
|
||||||
|
if (n <= (int)vecJosephus.size())
|
||||||
|
return vecJosephus[n - 1];
|
||||||
|
int j = (Josephus(n - 1, k) + k) % n;
|
||||||
|
vecJosephus.push_back(j);
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 100000; Josephus(++i, 15));
|
||||||
|
for (int nSizeMin, nSizeMax; std::cin >> nSizeMin >> nSizeMax;)
|
||||||
|
{
|
||||||
|
if (nSizeMin > nSizeMax)
|
||||||
|
std::swap(nSizeMin, nSizeMax);
|
||||||
|
if (nSizeMin == 0 && nSizeMax == 0)
|
||||||
|
break;
|
||||||
|
std::vector<int> vecCover(nSizeMin / 2, 0);
|
||||||
|
for (int nSize = nSizeMin, nJump = 15; nSize <= nSizeMax; ++nSize) {
|
||||||
|
int j = Josephus(nSize, nJump);
|
||||||
|
if (j > nSize / 2)
|
||||||
|
j = nSize - j;
|
||||||
|
if (j < vecCover.size())
|
||||||
|
vecCover[j] = 1;
|
||||||
|
}
|
||||||
|
VECINT_ITER ir = std::find(vecCover.begin() + 1, vecCover.end(), 0);
|
||||||
|
if (ir == vecCover.end())
|
||||||
|
std::cout << "Better estimate needed" << std::endl;
|
||||||
|
else
|
||||||
|
std::cout << ir - vecCover.begin() << std::endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
65
HDOJ/1659_autoAC.cpp
Normal file
65
HDOJ/1659_autoAC.cpp
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
struct node
|
||||||
|
{int x[50],y[50],z,num;
|
||||||
|
} a[1000][1000];
|
||||||
|
int visit[1000][1000];
|
||||||
|
int dfs(int X,int Y)
|
||||||
|
{int i;
|
||||||
|
if (a[X][Y].z==0) return a[X][Y].num;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i=1;i<=a[X][Y].z;i++)
|
||||||
|
a[X][Y].num=a[X][Y].num+dfs(a[X][Y].x[i],a[X][Y].y[i]);
|
||||||
|
a[X][Y].z=0;
|
||||||
|
return a[X][Y].num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{int f,t,l,i,j,k,n,m,num,top,tail,column,row,pos;
|
||||||
|
char s[2000];
|
||||||
|
scanf("%d",&t);
|
||||||
|
while (t--)
|
||||||
|
{scanf("%d %d",&n,&m);
|
||||||
|
memset(visit,0,sizeof(visit));
|
||||||
|
for (i=1;i<=m;i++)
|
||||||
|
for (j=1;j<=n;j++)
|
||||||
|
{a[i][j].z=0;a[i][j].num=0;}
|
||||||
|
for (i=1;i<=m;i++)
|
||||||
|
{getchar();
|
||||||
|
for (j=1;j<=n;j++)
|
||||||
|
{scanf("%s",&s);
|
||||||
|
l=strlen(s);
|
||||||
|
a[i][j].z=0;
|
||||||
|
if (s[0]!='=')
|
||||||
|
{num=0; f=0; if (s[0]=='-') f=1;
|
||||||
|
for (k=f;k<l;k++)
|
||||||
|
num=num*10+s[k]-'0';
|
||||||
|
a[i][j].num=num;
|
||||||
|
if (f==1) a[i][j].num=-a[i][j].num;
|
||||||
|
visit[i][j]=1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{column=0; row=0; pos=1;
|
||||||
|
a[i][j].num=0;
|
||||||
|
while (pos<l)
|
||||||
|
{while ((s[pos]>='A')&&(s[pos]<='Z')) {column=column*26+s[pos]-'A'+1; ++pos;}
|
||||||
|
while ((pos<l)&&(s[pos]>='0')&&(s[pos]<='9')) {row=row*10+s[pos]-'0'; ++pos;}
|
||||||
|
if ((visit[row][column]==1)||((i==row)&&(j==column))) a[i][j].num=a[i][j].num+a[row][column].num;
|
||||||
|
else {++a[i][j].z;a[i][j].x[a[i][j].z]=row; a[i][j].y[a[i][j].z]=column;}
|
||||||
|
row=0; column=0; ++pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i=1;i<=m;i++)
|
||||||
|
for (j=1;j<=n;j++)
|
||||||
|
if (a[i][j].z>0) dfs(i,j);
|
||||||
|
for (i=1;i<=m;i++)
|
||||||
|
{for (j=1;j<n;j++)
|
||||||
|
printf("%d ",a[i][j].num);
|
||||||
|
printf("%d\n",a[i][n].num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
58
HDOJ/1661_autoAC.cpp
Normal file
58
HDOJ/1661_autoAC.cpp
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<string.h>
|
||||||
|
#include<math.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
using namespace std;
|
||||||
|
const int maxn = 1003;
|
||||||
|
struct Point
|
||||||
|
{
|
||||||
|
int x,y;
|
||||||
|
double rad;
|
||||||
|
bool operator<(const Point &rhs) const {
|
||||||
|
return rad < rhs.rad;
|
||||||
|
}
|
||||||
|
}P[maxn];
|
||||||
|
int col[maxn];
|
||||||
|
Point tmp[maxn];
|
||||||
|
bool cmp(const Point& a,const Point& b) //anticlockwise sort
|
||||||
|
{
|
||||||
|
return a.x*b.y >= b.x*a.y;
|
||||||
|
}
|
||||||
|
int solve(int n)
|
||||||
|
{
|
||||||
|
if(n<=3) return n;
|
||||||
|
int ans = -1;
|
||||||
|
for(int pivot = 0; pivot < n; pivot++){
|
||||||
|
int k = 0;
|
||||||
|
for(int i = 0; i < n; i++) if(i!=pivot){
|
||||||
|
tmp[k].x = P[i].x - P[pivot].x;
|
||||||
|
tmp[k].y = P[i].y - P[pivot].y;
|
||||||
|
if(col[i]) { tmp[k].x = - tmp[k].x; tmp[k].y = -tmp[k].y; }
|
||||||
|
tmp[k].rad = atan2(tmp[k].y, tmp[k].x);
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
sort(tmp,tmp+k);
|
||||||
|
int L = 0, R = 0, sum = 1;
|
||||||
|
while(L<k){
|
||||||
|
if(L == R) { R = (R+1)%k; sum++; }
|
||||||
|
while(R != L && cmp(tmp[L],tmp[R])) {
|
||||||
|
R = (R+1)%k; sum++;
|
||||||
|
}
|
||||||
|
ans = max(ans,sum);
|
||||||
|
sum--; L++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
while(~scanf("%d",&n)&&n){
|
||||||
|
for(int i = 0; i < n; i++)
|
||||||
|
scanf("%d%d%d",&P[i].x,&P[i].y,col+i);
|
||||||
|
printf("%d\n",solve(n));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
164
HDOJ/1662_autoAC.cpp
Normal file
164
HDOJ/1662_autoAC.cpp
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
#include<cstring>
|
||||||
|
#include<cassert>
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cctype>
|
||||||
|
#include<ctime>
|
||||||
|
#include<cmath>
|
||||||
|
#include<functional>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<iostream>
|
||||||
|
#include<vector>
|
||||||
|
#include<string>
|
||||||
|
#include<bitset>
|
||||||
|
#include<queue>
|
||||||
|
#include<deque>
|
||||||
|
#include<stack>
|
||||||
|
#include<list>
|
||||||
|
#include<map>
|
||||||
|
#include<set>
|
||||||
|
using namespace std;
|
||||||
|
typedef long long int64;
|
||||||
|
typedef unsigned long long uint64;
|
||||||
|
typedef pair <int, int> PII;
|
||||||
|
typedef pair <int64, int64> PLL;
|
||||||
|
typedef pair <char, char> PCC;
|
||||||
|
typedef pair <double, double> PDD;
|
||||||
|
#define MP make_pair
|
||||||
|
#define PB push_back
|
||||||
|
#define SZ(a) ((int)(a).size())
|
||||||
|
#define X first
|
||||||
|
#define Y second
|
||||||
|
#define L(x) ((x)<<1)
|
||||||
|
#define R(x) ((x)<<1 | 1)
|
||||||
|
#define max3(x, y, z) (max(max((x), (y)), (z)))
|
||||||
|
#define min3(x, y, z) (min(min((x), (y)), (z)))
|
||||||
|
#define BIT(x, i) (((x) >> (i)) & 1)
|
||||||
|
#define FOR(it, c) for( TYPE((c).begin()) it = (c).begin(); it != (c).end(); it++)
|
||||||
|
const double PI = 2.0*acos(0.0);
|
||||||
|
const double EPS = 1e-6;
|
||||||
|
#define GREATER(x, y) ((x) > (y) + EPS)
|
||||||
|
#define GREATER_EQUAL(x, y) ((x) > (y) - EPS)
|
||||||
|
#define LESS(x, y) ((x) < (y) - EPS)
|
||||||
|
#define LESS_EQUAL(x, y) ((x) < (y) + EPS)
|
||||||
|
#define EQUAL(x, y) (abs((x) - (y)) < EPS)
|
||||||
|
#define MAX_N 35
|
||||||
|
#define MAX_M 1005
|
||||||
|
#define MAXX 0x3f
|
||||||
|
#define UPPER 2147483647LL
|
||||||
|
#define INT_MAX 2147483647
|
||||||
|
#define INF (1<<29)
|
||||||
|
#define BINF (1LL<<60)
|
||||||
|
#define NONE -1
|
||||||
|
#define NIL 0
|
||||||
|
struct data{
|
||||||
|
char alpha;
|
||||||
|
char dir;
|
||||||
|
data(){}
|
||||||
|
data(char alpha, char dir) :alpha(alpha), dir(dir){}
|
||||||
|
} tile[MAX_N][MAX_N];
|
||||||
|
const int OFFR[] = { 1, 0, -1, 0 };
|
||||||
|
const int OFFC[] = { 0, 1, 0, -1 };
|
||||||
|
int n, m;
|
||||||
|
bool try_to_remove(int sx, int sy, int line_cnt){
|
||||||
|
bool visit[2][MAX_N][MAX_N];
|
||||||
|
memset(visit, false, sizeof(visit));
|
||||||
|
visit[0][sx][sy] = true;
|
||||||
|
int p = 0;
|
||||||
|
for (int ln = 1; ln <= line_cnt; ln++){
|
||||||
|
vector <PII> V;
|
||||||
|
memset(visit[p ^ 1], false, sizeof(visit[p ^ 1]));
|
||||||
|
for (int r = 0; r <= n + 1; r++) for (int c = 0; c <= m + 1; c++) if (visit[p][r][c]){
|
||||||
|
visit[p ^ 1][r][c] = true;
|
||||||
|
for (int k = 0; k < 4; k++){
|
||||||
|
int xx = r + OFFR[k];
|
||||||
|
int yy = c + OFFC[k];
|
||||||
|
while (xx >= 0 && xx <= n + 1 && yy >= 0 && yy <= m + 1){
|
||||||
|
if (tile[xx][yy].alpha != '.'){
|
||||||
|
if (xx == sx && yy == sy)
|
||||||
|
break;
|
||||||
|
if (tile[xx][yy].alpha == tile[sx][sy].alpha)
|
||||||
|
V.PB(MP(xx, yy));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
visit[p ^ 1][xx][yy] = true;
|
||||||
|
xx += OFFR[k];
|
||||||
|
yy += OFFC[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort(V.begin(), V.end());
|
||||||
|
if (SZ(V) > 0){
|
||||||
|
tile[sx][sy].alpha = tile[V[0].X][V[0].Y].alpha = '.';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
p ^= 1;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool refresh(){
|
||||||
|
data tmp[MAX_N][MAX_N];
|
||||||
|
for (int r = 1; r <= n; r++) for (int c = 1; c <= m; c++)
|
||||||
|
tmp[r][c] = tile[r][c];
|
||||||
|
bool rsh = false;
|
||||||
|
for (int r = 1; r <= n; r++) for (int c = 1; c <= m; c++) if (tile[r][c].alpha != '.'){
|
||||||
|
int ver = 4;
|
||||||
|
switch (tile[r][c].dir){
|
||||||
|
case 'D': ver = 0; break;
|
||||||
|
case 'R': ver = 1; break;
|
||||||
|
case 'U': ver = 2; break;
|
||||||
|
case 'L': ver = 3; break;
|
||||||
|
}
|
||||||
|
if (ver <= 3){
|
||||||
|
int pr = r, pc = c;
|
||||||
|
int nr = pr + OFFR[ver];
|
||||||
|
int nc = pc + OFFC[ver];
|
||||||
|
if (nr >= 1 && nr <= n && nc >= 1 && nc <= m && tmp[nr][nc].alpha == '.'){
|
||||||
|
swap(tmp[pr][pc], tmp[nr][nc]);
|
||||||
|
rsh = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int r = 1; r <= n; r++) for (int c = 1; c <= m; c++)
|
||||||
|
tile[r][c] = tmp[r][c];
|
||||||
|
return rsh;
|
||||||
|
}
|
||||||
|
void solve(){
|
||||||
|
while (true){
|
||||||
|
bool move = false;
|
||||||
|
for (int ln = 1; ln <= 3 && !move; ln++){
|
||||||
|
for (int r = 1; r <= n && !move; r++) for (int c = 1; c <= m && !move; c++){
|
||||||
|
if (tile[r][c].alpha != '.' && try_to_remove(r, c, ln))
|
||||||
|
move = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (move)
|
||||||
|
while (refresh());
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
int T = 0;
|
||||||
|
while (~scanf("%d %d", &n, &m) && n + m){
|
||||||
|
char tmp[5];
|
||||||
|
for (int r = 0; r <= n+1; r++){
|
||||||
|
for (int c = 0; c <= m+1; c++){
|
||||||
|
if (r == 0 || r == n + 1 || c == 0 || c == m + 1)
|
||||||
|
tile[r][c] = data('.', 'S');
|
||||||
|
else{
|
||||||
|
scanf("%s", tmp);
|
||||||
|
tile[r][c] = data(tmp[0], tmp[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
solve();
|
||||||
|
printf("Case %d\n", ++T);
|
||||||
|
for (int r = 1; r <= n; r++){
|
||||||
|
for (int c = 1; c <= m; c++)
|
||||||
|
putchar(tile[r][c].alpha);
|
||||||
|
puts("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
40
HDOJ/1663_autoAC.cpp
Normal file
40
HDOJ/1663_autoAC.cpp
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
int a,b;
|
||||||
|
long long A[10],B[10];
|
||||||
|
void dp(int s,long long *p,int t)
|
||||||
|
{
|
||||||
|
if(s<=0) return;
|
||||||
|
int x=s/10,y=s%10;
|
||||||
|
for(int i=1;i<=y;i++) p[i]+=t;
|
||||||
|
while(x)
|
||||||
|
{
|
||||||
|
p[x%10]+=(y+1)*t;
|
||||||
|
x/=10;
|
||||||
|
}
|
||||||
|
for(int i=0;i<=9;i++) p[i]+=t*(s/10);
|
||||||
|
t*=10;
|
||||||
|
dp(s/10-1,p,t);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(scanf("%d%d",&a,&b)&&b!=0)
|
||||||
|
{
|
||||||
|
memset(A,0,sizeof(A));
|
||||||
|
memset(B,0,sizeof(B));
|
||||||
|
if(a<b)
|
||||||
|
swap(a,b);
|
||||||
|
b--;
|
||||||
|
if(a>b)
|
||||||
|
{
|
||||||
|
dp(a,A,1);
|
||||||
|
dp(b,B,1);
|
||||||
|
}
|
||||||
|
for(int i=0;i<9;i++)
|
||||||
|
printf("%I64d ",A[i]-B[i]);
|
||||||
|
printf("%I64d\n",A[9]-B[9]);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
110
HDOJ/1664_autoAC.cpp
Normal file
110
HDOJ/1664_autoAC.cpp
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
const int N = 65536;
|
||||||
|
const int M = N+N;
|
||||||
|
int x[2][N]={0},q[M]={0},p[M]={0};
|
||||||
|
int bfs(int a,int b,int n,int t)
|
||||||
|
{
|
||||||
|
int fr=0,r=1,i=0;
|
||||||
|
char f[N]={0};
|
||||||
|
q[0]=0;
|
||||||
|
if (a==0)
|
||||||
|
{
|
||||||
|
fr=2;
|
||||||
|
q[2]=b;
|
||||||
|
r=3;
|
||||||
|
f[0]=1;
|
||||||
|
p[2]=0;
|
||||||
|
}
|
||||||
|
while(fr<r)
|
||||||
|
{
|
||||||
|
if (f[q[fr]]==1)
|
||||||
|
{
|
||||||
|
fr++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
f[q[fr]]=1;
|
||||||
|
q[r]=(q[fr]*10+a)%n;
|
||||||
|
p[r]=fr;
|
||||||
|
if (q[r]==0)
|
||||||
|
break;
|
||||||
|
r++;
|
||||||
|
q[r]=(q[fr]*10+b)%n;
|
||||||
|
p[r]=fr++;
|
||||||
|
if (q[r]==0)
|
||||||
|
break;
|
||||||
|
r++;
|
||||||
|
}
|
||||||
|
if (fr<r)
|
||||||
|
{
|
||||||
|
for (i=0;r!=0;i++)
|
||||||
|
{
|
||||||
|
if (r%2==1)
|
||||||
|
x[t][i]=a;
|
||||||
|
else x[t][i]=b;
|
||||||
|
r=p[r];
|
||||||
|
}
|
||||||
|
return i-1;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,d[10],c,i,j,k,m,t;
|
||||||
|
scanf("%d",&n);
|
||||||
|
while (n!=0)
|
||||||
|
{
|
||||||
|
d[0]=n;
|
||||||
|
c=0;
|
||||||
|
for (i=1;i<10;i++)
|
||||||
|
{
|
||||||
|
j=i;
|
||||||
|
d[i]=1;
|
||||||
|
while (d[i]<n && j%n!=0)
|
||||||
|
{
|
||||||
|
j=j%n*10+i;
|
||||||
|
d[i]++;
|
||||||
|
}
|
||||||
|
if (d[i]<d[c])
|
||||||
|
c=i;
|
||||||
|
}
|
||||||
|
if (c!=0)
|
||||||
|
{
|
||||||
|
for (j=d[c];j>0;j--)
|
||||||
|
printf("%d",c);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m=n;
|
||||||
|
t=0;
|
||||||
|
for (i=0;i<10;i++)
|
||||||
|
{
|
||||||
|
for (j=i+1;j<10;j++)
|
||||||
|
{
|
||||||
|
c=bfs(i,j,n,t);
|
||||||
|
if (c!=-1 && c<m)
|
||||||
|
{
|
||||||
|
t=1-t;
|
||||||
|
m=c;
|
||||||
|
}
|
||||||
|
else if (c==m)
|
||||||
|
{
|
||||||
|
for (k=m;k>=0;k--)
|
||||||
|
{
|
||||||
|
if (x[t][k]<x[1-t][k])
|
||||||
|
{
|
||||||
|
t=1-t;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (x[t][k]>x[1-t][k])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i=m;i>=0;i--)
|
||||||
|
printf("%d",x[1-t][i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
scanf("%d",&n);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
68
HDOJ/1667_autoAC.cpp
Normal file
68
HDOJ/1667_autoAC.cpp
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#define size 24
|
||||||
|
using namespace std;
|
||||||
|
const int opt[][size] =
|
||||||
|
{
|
||||||
|
{ 2, 1, 6, 3, 4, 5, 11, 7, 8, 9, 10, 15, 12, 13, 14, 20, 16, 17, 18, 19, 22, 21, 0, 23 },
|
||||||
|
{ 0, 3, 2, 8, 4, 5, 6, 7, 12, 9, 10, 11, 17, 13, 14, 15, 16, 21, 18, 19, 20, 23, 22, 1 },
|
||||||
|
{ 0, 1, 2, 3, 10, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 },
|
||||||
|
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 19, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23 },
|
||||||
|
{ 0, 23, 2, 1, 4, 5, 6, 7, 3, 9, 10, 11, 8, 13, 14, 15, 16, 12, 18, 19, 20, 17, 22, 21 },
|
||||||
|
{ 22, 1, 0, 3, 4, 5, 2, 7, 8, 9, 10, 6, 12, 13, 14, 11, 16, 17, 18, 19, 15, 21, 20, 23 },
|
||||||
|
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 13, 20, 21, 22, 23 },
|
||||||
|
{ 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 },
|
||||||
|
{ 6, 7, 8, 11, 12, 15, 16, 17 },
|
||||||
|
};
|
||||||
|
const char optlist[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
|
||||||
|
int sharp[size];
|
||||||
|
char path[size];
|
||||||
|
bool judge(int node[]){
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
if (node[opt[8][0]] != node[opt[8][i]])
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int get_h(int node[]){
|
||||||
|
int cnt[4] = { 0 };
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
cnt[node[opt[8][i]]]++;
|
||||||
|
int max = 0;
|
||||||
|
for (int i = 1; i <= 3; i++)
|
||||||
|
max < cnt[i] ? max = cnt[i] : 0;
|
||||||
|
return 8 - max;
|
||||||
|
}
|
||||||
|
bool ida(int curr[], int expr, int depth, char path[]){
|
||||||
|
if (expr == depth) {
|
||||||
|
if (judge(curr)) {
|
||||||
|
path[expr] = '\0';
|
||||||
|
printf("%s\n%d\n", path, curr[6]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (get_h(curr) + expr > depth) return false;
|
||||||
|
int next[size];
|
||||||
|
for (int i = 0; i < 8; i++){
|
||||||
|
for (int j = 0; j < size; j++) next[j] = curr[opt[i][j]];
|
||||||
|
path[expr] = optlist[i];
|
||||||
|
if (ida(next, expr + 1, depth, path)) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
while (scanf("%d", sharp), sharp[0]){
|
||||||
|
for (int i = 1; i < size; i++){
|
||||||
|
scanf("%d", sharp + i);
|
||||||
|
}
|
||||||
|
if (judge(sharp)){
|
||||||
|
printf("No moves needed\n%d\n", sharp[6]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (int i = get_h(sharp);; i++){
|
||||||
|
if (ida(sharp, 0, i, path))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
86
HDOJ/1668_autoAC.cpp
Normal file
86
HDOJ/1668_autoAC.cpp
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
typedef long long ll;
|
||||||
|
#define N 13
|
||||||
|
#define M 8192
|
||||||
|
int f[M][N][N];
|
||||||
|
ll g[M][N][N];
|
||||||
|
int a[N][N];
|
||||||
|
int v[N];
|
||||||
|
int t, n, m;
|
||||||
|
void dp()
|
||||||
|
{
|
||||||
|
if (n == 1)
|
||||||
|
{
|
||||||
|
cout << v[0] << " " << 1 << endl;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
memset(f, 0, sizeof(f));
|
||||||
|
memset(g, 0, sizeof(g));
|
||||||
|
for (int i = 0; i < n; ++i)
|
||||||
|
{
|
||||||
|
f[1 << i][i][i] = v[i];
|
||||||
|
g[1 << i][i][i] = 1;
|
||||||
|
}
|
||||||
|
m = (1 << n) - 1;
|
||||||
|
for (int s = 0; s < m; ++s)
|
||||||
|
for (int i = 0; 1 << i <= s; ++i)
|
||||||
|
if ((s >> i) & 1)
|
||||||
|
for (int j = 0; 1 << j <= s; ++j)
|
||||||
|
if (((s >> j) & 1) && f[s][i][j])
|
||||||
|
for (int k = 0; k < n; ++k)
|
||||||
|
if (!((s >> k) & 1) && a[j][k])
|
||||||
|
{
|
||||||
|
int temp = f[s][i][j] + v[k] + v[j] * v[k];
|
||||||
|
if (i != j && a[i][k])
|
||||||
|
temp += v[i] * v[j] * v[k];
|
||||||
|
int ss = s + (1 << k);
|
||||||
|
if (temp > f[ss][j][k])
|
||||||
|
{
|
||||||
|
f[ss][j][k] = temp;
|
||||||
|
g[ss][j][k] = g[s][i][j];
|
||||||
|
}
|
||||||
|
else if (temp == f[ss][j][k])
|
||||||
|
{
|
||||||
|
g[ss][j][k] += g[s][i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int ans = 0;
|
||||||
|
ll ans2 = 0;
|
||||||
|
for (int i = 0; i < n; ++i)
|
||||||
|
for (int j = 0; j < n; ++j)
|
||||||
|
if (f[m][i][j] > ans)
|
||||||
|
{
|
||||||
|
ans = f[m][i][j];
|
||||||
|
ans2 = g[m][i][j];
|
||||||
|
}
|
||||||
|
else if (f[m][i][j] == ans)
|
||||||
|
{
|
||||||
|
ans2 += g[m][i][j];
|
||||||
|
}
|
||||||
|
cout << ans << " " << ans2 / 2 << endl;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
ios::sync_with_stdio(0);
|
||||||
|
scanf("%d", &t);
|
||||||
|
while (t--)
|
||||||
|
{
|
||||||
|
memset(a, 0, sizeof(a));
|
||||||
|
scanf("%d%d", &n, &m);
|
||||||
|
for (int i = 0; i < n; ++i)
|
||||||
|
scanf("%d", &v[i]);
|
||||||
|
while (m--)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
scanf("%d%d", &x, &y);
|
||||||
|
--x, --y;
|
||||||
|
a[x][y] = a[y][x] = 1;
|
||||||
|
}
|
||||||
|
dp();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
89
HDOJ/1669_autoAC.cpp
Normal file
89
HDOJ/1669_autoAC.cpp
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#define N 1005
|
||||||
|
#define M 505
|
||||||
|
#define CLR(a,v) memset(a,v,sizeof(a))
|
||||||
|
struct Edge
|
||||||
|
{
|
||||||
|
int v,next;
|
||||||
|
}edge[N*M];
|
||||||
|
int ehead[N];
|
||||||
|
int ecnt;
|
||||||
|
inline void AddEdge(int u,int v)
|
||||||
|
{
|
||||||
|
edge[ecnt]={v,ehead[u]};
|
||||||
|
ehead[u]=ecnt++;
|
||||||
|
}
|
||||||
|
int match[M][N];
|
||||||
|
int mcnt[N];
|
||||||
|
bool vis[M];
|
||||||
|
int limit;
|
||||||
|
bool Find(int u)
|
||||||
|
{
|
||||||
|
for(int i=ehead[u];~i;i=edge[i].next)
|
||||||
|
{
|
||||||
|
int v=edge[i].v;
|
||||||
|
if(vis[v])continue;
|
||||||
|
vis[v]=true;
|
||||||
|
if(mcnt[v]<limit)
|
||||||
|
{
|
||||||
|
match[v][mcnt[v]++]=u;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for(int j=0;j<mcnt[v];j++)if(Find(match[v][j]))
|
||||||
|
{
|
||||||
|
match[v][j]=u;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool Match(int n)
|
||||||
|
{
|
||||||
|
CLR(mcnt,0);
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
CLR(vis,false);
|
||||||
|
if(!Find(i))return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool lof;
|
||||||
|
bool Int(int &a)
|
||||||
|
{
|
||||||
|
if(lof)return lof=false;
|
||||||
|
char c;
|
||||||
|
for(c=getchar();c<'0'||c>'9';c=getchar())if(c=='\n')return false;
|
||||||
|
a=c-'0';
|
||||||
|
for(c=getchar();c>='0'&&c<='9';c=getchar())a=a*10+c-'0';
|
||||||
|
lof=c=='\n';
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
char s[20];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,m;
|
||||||
|
while(scanf("%d%d",&n,&m),n)
|
||||||
|
{
|
||||||
|
CLR(ehead,-1);ecnt=0;
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
scanf("%s",s);
|
||||||
|
int a;
|
||||||
|
lof=false;
|
||||||
|
while(Int(a))AddEdge(i,a);
|
||||||
|
}
|
||||||
|
int l=1,r=n;
|
||||||
|
while(l<r)
|
||||||
|
{
|
||||||
|
int m=(l+r)/2;
|
||||||
|
limit=m;
|
||||||
|
if(Match(n))
|
||||||
|
r=m;
|
||||||
|
else
|
||||||
|
l=m+1;
|
||||||
|
}
|
||||||
|
printf("%d\n",l);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
37
HDOJ/1671_autoAC.cpp
Normal file
37
HDOJ/1671_autoAC.cpp
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstdio>
|
||||||
|
using namespace std;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
vector<string> v;
|
||||||
|
char ch[10];
|
||||||
|
string s;
|
||||||
|
int n;
|
||||||
|
cin>>n;
|
||||||
|
int i,j;
|
||||||
|
while(cin>>n)
|
||||||
|
{
|
||||||
|
v.clear();
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
scanf("%s",&ch);
|
||||||
|
s=ch;
|
||||||
|
v.push_back(s);
|
||||||
|
}
|
||||||
|
sort(v.begin(),v.end());
|
||||||
|
for(i=0;i<n-1;i++)
|
||||||
|
{
|
||||||
|
if(v[i+1].find(v[i])==0)
|
||||||
|
{
|
||||||
|
cout<<"NO"<<endl;
|
||||||
|
goto RL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<"YES"<<endl;
|
||||||
|
RL:continue;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
51
HDOJ/1672_autoAC.cpp
Normal file
51
HDOJ/1672_autoAC.cpp
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
#include<iostream>
|
||||||
|
using namespace std;
|
||||||
|
const int maxn=1e4+10;
|
||||||
|
int n,m,map[maxn][3],color[maxn];
|
||||||
|
bool vis[maxn];
|
||||||
|
bool DFS(int x)
|
||||||
|
{
|
||||||
|
for(int i=0;i<2;i++)
|
||||||
|
{
|
||||||
|
int ita=map[x][i];
|
||||||
|
if(!vis[ita])
|
||||||
|
{
|
||||||
|
vis[ita]=1;
|
||||||
|
if(color[ita]==-1||DFS(color[ita]))
|
||||||
|
{
|
||||||
|
color[ita]=x;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
memset(color,-1,sizeof(color));
|
||||||
|
scanf("%d%d",&m,&n);
|
||||||
|
for(int i=0;i<m;i++)
|
||||||
|
scanf("%d%d",&map[i][0],&map[i][1]);
|
||||||
|
int flag=0;
|
||||||
|
for(int i=0;i<m;i++)
|
||||||
|
{
|
||||||
|
memset(vis,0,sizeof(vis));
|
||||||
|
if(!DFS(i))
|
||||||
|
{
|
||||||
|
flag=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag)
|
||||||
|
printf("rehash necessary\n");
|
||||||
|
else
|
||||||
|
printf("successful hashing\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
18
HDOJ/1673_autoAC.cpp
Normal file
18
HDOJ/1673_autoAC.cpp
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T,N,min,max,a;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--){
|
||||||
|
scanf("%d",&N);
|
||||||
|
min = 0x3f3f3f3f;
|
||||||
|
max = -0x3f3f3f3f;
|
||||||
|
while(N--){
|
||||||
|
scanf("%d",&a);
|
||||||
|
if(a>max) max = a;
|
||||||
|
if(a<min) min = a;
|
||||||
|
}
|
||||||
|
printf("%d\n",(max-min)*2);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
98
HDOJ/1676_autoAC.cpp
Normal file
98
HDOJ/1676_autoAC.cpp
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<iostream>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<vector>
|
||||||
|
#include<queue>
|
||||||
|
#define M 1007
|
||||||
|
using namespace std;
|
||||||
|
int n,m,cap,s,e,num;
|
||||||
|
int val[M],dp[M][M],head[M];
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int u,cost,res;
|
||||||
|
bool operator < (const node a)const
|
||||||
|
{
|
||||||
|
return cost>a.cost;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
struct E
|
||||||
|
{
|
||||||
|
int v,to,dist;
|
||||||
|
} edg[M*20];
|
||||||
|
vector<int>G[M];
|
||||||
|
void addedge(int u,int v,int dist)
|
||||||
|
{
|
||||||
|
edg[num].v=v;
|
||||||
|
edg[num].dist=dist;
|
||||||
|
edg[num].to=head[u];
|
||||||
|
head[u]=num++;
|
||||||
|
}
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
num=0;
|
||||||
|
memset(head,-1,sizeof(head));
|
||||||
|
memset(val,0,sizeof(val));
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
G[i].clear();
|
||||||
|
}
|
||||||
|
void bfs()
|
||||||
|
{
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
for(int j=0; j<=cap; j++)
|
||||||
|
dp[i][j]=0;
|
||||||
|
priority_queue<node> q;
|
||||||
|
q.push((node){s,0,0});
|
||||||
|
while(!q.empty())
|
||||||
|
{
|
||||||
|
node x=q.top();
|
||||||
|
q.pop();
|
||||||
|
int u=x.u,cost=x.cost,res=x.res;
|
||||||
|
if(u==e)
|
||||||
|
{
|
||||||
|
printf("%d\n",cost);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if(res<cap&&(dp[u][res+1]==0||dp[u][res+1]>cost+val[u]))
|
||||||
|
{
|
||||||
|
dp[u][res+1]=cost+val[u];
|
||||||
|
q.push((node){u,dp[u][res+1],res+1});
|
||||||
|
}
|
||||||
|
for(int i=head[u]; i!=-1; i=edg[i].to)
|
||||||
|
{
|
||||||
|
int v=edg[i].v,dist=edg[i].dist;
|
||||||
|
if(res<dist)continue;
|
||||||
|
if(dp[v][res-dist]==0||dp[v][res-dist]>cost)
|
||||||
|
{
|
||||||
|
dp[v][res-dist]=cost;
|
||||||
|
q.push((node){v,cost,res-dist});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("impossible\n");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while( scanf("%d%d",&n,&m)!=EOF)
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
scanf("%d",&val[i]);
|
||||||
|
int a,b,c;
|
||||||
|
for(int i=1; i<=m; i++)
|
||||||
|
{
|
||||||
|
scanf("%d%d%d",&a,&b,&c);
|
||||||
|
addedge(a,b,c);
|
||||||
|
addedge(b,a,c);
|
||||||
|
}
|
||||||
|
int q;
|
||||||
|
scanf("%d",&q);
|
||||||
|
while(q--)
|
||||||
|
{
|
||||||
|
scanf("%d%d%d",&cap,&s,&e);
|
||||||
|
bfs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
46
HDOJ/1677_autoAC.cpp
Normal file
46
HDOJ/1677_autoAC.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
using namespace std;
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
};
|
||||||
|
int cmp (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
node *c = (node *)a;
|
||||||
|
node *d = (node *)b;
|
||||||
|
if (c -> x != d -> x)
|
||||||
|
return c -> x - d -> x;
|
||||||
|
else
|
||||||
|
return d -> y - c -> y;
|
||||||
|
}
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
node stu[21000];
|
||||||
|
int t, n, i, j, k, a[21000];
|
||||||
|
cin >> t;
|
||||||
|
while (t--)
|
||||||
|
{
|
||||||
|
memset (a, 0, sizeof(a));
|
||||||
|
cin >> n;
|
||||||
|
for (i=0; i<n; i++)
|
||||||
|
cin >> stu[i].x >> stu[i].y;
|
||||||
|
qsort (stu, n, sizeof (stu[0]), cmp);
|
||||||
|
a[0] = stu[0].y, k = 1;
|
||||||
|
for (i=1; i<n; i++)
|
||||||
|
{
|
||||||
|
for (j=0; j<k; j++)
|
||||||
|
{
|
||||||
|
if (a[j] < stu[i].y)
|
||||||
|
{
|
||||||
|
a[j] = stu[i].y;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (j == k)
|
||||||
|
a[k++] = stu[i].y;
|
||||||
|
}
|
||||||
|
cout << k << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
23
HDOJ/1678_autoAC.cpp
Normal file
23
HDOJ/1678_autoAC.cpp
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
bool cmp(int x,int y)
|
||||||
|
{ return x>y;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{ int t,n,i,sum;
|
||||||
|
int a[20005];
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{ scanf("%d",&n);sum=0;
|
||||||
|
for(i=1;i<=n;i++)
|
||||||
|
{ scanf("%d",&a[i]);
|
||||||
|
}
|
||||||
|
sort(a+1,a+n+1,cmp);
|
||||||
|
for(i=3;i<=n;i+=3)
|
||||||
|
{ sum+=a[i];
|
||||||
|
}
|
||||||
|
printf("%d\n",sum);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
49
HDOJ/1679_autoAC.cpp
Normal file
49
HDOJ/1679_autoAC.cpp
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
#define inf 1e9;
|
||||||
|
int h,in[210];
|
||||||
|
double e[210][210];
|
||||||
|
double dp[210][210];
|
||||||
|
double min(double a,double b){
|
||||||
|
return a>b?b:a;
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
int t,T,h,c,i,j,k;
|
||||||
|
scanf("%d",&T);
|
||||||
|
for(t=1;t<=T;t++){
|
||||||
|
scanf("%d %d",&h,&c);
|
||||||
|
for(i=1;i<=h;i++)
|
||||||
|
scanf("%d",&in[i]);
|
||||||
|
for(i=1;i<=h;i++)
|
||||||
|
for(j=i;j<=h;j++){
|
||||||
|
if(j==i){
|
||||||
|
e[i][j]=0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
double tem =(double)(in[j]-in[i])/(j-i);
|
||||||
|
double sum=0;
|
||||||
|
for(int k=i+1;k<j;k++)
|
||||||
|
sum+=fabs(tem*(k-i)+in[i]-in[k]);
|
||||||
|
e[i][j]=sum;
|
||||||
|
}
|
||||||
|
for(i=1;i<=h;i++)
|
||||||
|
for(j=1;j<=c;j++){
|
||||||
|
dp[i][j] = inf;
|
||||||
|
}
|
||||||
|
for(i=2;i<=h;i++){
|
||||||
|
for(j=2;j<=c && j<=i;j++){
|
||||||
|
if(j==2){
|
||||||
|
dp[i][j]=e[1][i];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for(k=2;k<i;k++){
|
||||||
|
if(k>=j-1){
|
||||||
|
dp[i][j]=min(dp[i][j],dp[k][j-1]+e[k][i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%.4f\n",dp[h][c]/h);
|
||||||
|
}
|
||||||
|
}
|
105
HDOJ/1680_autoAC.cpp
Normal file
105
HDOJ/1680_autoAC.cpp
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
#define N 100
|
||||||
|
char map[10][10];
|
||||||
|
int wx,wy,hx,hy;
|
||||||
|
int visit[10][10][100];
|
||||||
|
int dir[8][2]= {0,1,1,1,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1};
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int step;
|
||||||
|
} a[N];
|
||||||
|
bool judge(node a)
|
||||||
|
{
|
||||||
|
if(a.x==hx+a.step&&(a.y==hy+1||a.y==hy-1))return false;
|
||||||
|
if(map[a.x][a.y]=='F'||map[a.x][a.y]=='D')return false;
|
||||||
|
return a.x>=1&&a.y>=1&&a.x<=8&&a.y<=8&&!visit[a.x][a.y][a.step];
|
||||||
|
}
|
||||||
|
int bfs()
|
||||||
|
{
|
||||||
|
memset(visit,0,sizeof(visit));
|
||||||
|
int front=0;
|
||||||
|
int rear=1;
|
||||||
|
node cur;
|
||||||
|
a[0].x=wx;
|
||||||
|
a[0].y=wy;
|
||||||
|
a[0].step=0;
|
||||||
|
visit[wx][wy][0]=1;
|
||||||
|
int flag=1;
|
||||||
|
int mm=0;
|
||||||
|
while(front<rear)
|
||||||
|
{
|
||||||
|
node cur;
|
||||||
|
cur.x=a[front].x;
|
||||||
|
cur.y=a[front].y;
|
||||||
|
cur.step=a[front].step;
|
||||||
|
if(map[hx+cur.step][hy]=='F')
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(hx+cur.step>8)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
for(int i=0; i<8; i++)
|
||||||
|
{
|
||||||
|
int tx=cur.x+dir[i][0];
|
||||||
|
int ty=cur.y+dir[i][1];
|
||||||
|
int tstep=cur.step+1;
|
||||||
|
node b;
|
||||||
|
b.step=tstep;
|
||||||
|
b.x=tx;
|
||||||
|
b.y=ty;
|
||||||
|
if((tx>=1 && tx<=8) && (ty>=1 && ty<=8) && map[tx][ty]!='F' && map[tx][ty]!='D' && visit[tx][ty][tstep]==0)
|
||||||
|
{
|
||||||
|
if(!((tx==hx+tstep && ty==hy-1) || (tx==hx+tstep && ty==hy+1)))
|
||||||
|
{
|
||||||
|
visit[tx][ty][tstep]=1;
|
||||||
|
if(tx==hx+cur.step&&ty==hy||tx==hx+tstep&&ty==hy)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
node tmp;
|
||||||
|
tmp.x=tx;
|
||||||
|
tmp.y=ty;
|
||||||
|
tmp.step=tstep;
|
||||||
|
a[rear++]=tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
front++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
for(int i=1; i<=8; i++)
|
||||||
|
{
|
||||||
|
scanf("%s",map[i]+1);
|
||||||
|
}
|
||||||
|
scanf("%d%d",&wx,&wy);
|
||||||
|
int xx=wx;
|
||||||
|
wx=9-wy;
|
||||||
|
wy=xx;
|
||||||
|
scanf("%d%d",&hx,&hy);
|
||||||
|
xx=hx;
|
||||||
|
hx=9-hy;
|
||||||
|
hy=xx;
|
||||||
|
int ans=bfs();
|
||||||
|
if(ans==1)
|
||||||
|
{
|
||||||
|
printf("White\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf("Black\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
35
HDOJ/1681_autoAC.cpp
Normal file
35
HDOJ/1681_autoAC.cpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
bool dp[1010010];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,a[5],t,count,mem;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
scanf("%d%d%d%d",a,a+1,a+2,a+3);
|
||||||
|
memset(dp,false,sizeof(dp));
|
||||||
|
dp[a[0]]=dp[a[1]]=dp[a[2]]=dp[a[3]]=1;
|
||||||
|
for(count=0,i=1;i<1000001;i++)
|
||||||
|
{
|
||||||
|
if(dp[i])
|
||||||
|
{
|
||||||
|
dp[i+a[0]]=dp[i+a[1]]=dp[i+a[2]]=dp[i+a[3]]=1;
|
||||||
|
}
|
||||||
|
else count++,mem=i;
|
||||||
|
}
|
||||||
|
for(;i<1010000;i++)
|
||||||
|
{
|
||||||
|
if(!dp[i])mem=-1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(i+a[0]<1010000)dp[i+a[0]]=1;
|
||||||
|
if(i+a[1]<1010000)dp[i+a[1]]=1;
|
||||||
|
if(i+a[2]<1010000)dp[i+a[2]]=1;
|
||||||
|
if(i+a[3]<1010000)dp[i+a[3]]=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n%d\n",count,mem);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
36
HDOJ/1683_autoAC.cpp
Normal file
36
HDOJ/1683_autoAC.cpp
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
using namespace std;
|
||||||
|
char a[101],b[101],c[101];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t,i;
|
||||||
|
cin>>t;
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
cin>>a>>b>>c;
|
||||||
|
int len1=strlen(a);
|
||||||
|
int len2=strlen(b);
|
||||||
|
int len3=strlen(c);
|
||||||
|
int j=0;
|
||||||
|
for(i=0;i<=len2;i++)
|
||||||
|
{
|
||||||
|
if(b[i]=='*'||c[i]=='*')
|
||||||
|
{
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
else if (a[j]==b[i]||a[j]==c[i])
|
||||||
|
{
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
if(j==len1)
|
||||||
|
{
|
||||||
|
cout<<"win"<<endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(i>len2)
|
||||||
|
cout<<"lose"<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
67
HDOJ/1684_autoAC.cpp
Normal file
67
HDOJ/1684_autoAC.cpp
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<string.h>
|
||||||
|
using namespace std;
|
||||||
|
int dp[101][101];
|
||||||
|
int n,m,sal;
|
||||||
|
struct pro
|
||||||
|
{
|
||||||
|
int p[101],pun,rew;
|
||||||
|
}pr[101];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%d%d%d",&m,&n,&sal);
|
||||||
|
for(int i=1;i<=m;i++)
|
||||||
|
{
|
||||||
|
pr[i].p[0]=0;
|
||||||
|
for(int j=1;j<=n;j++)
|
||||||
|
scanf("%d",&pr[i].p[j]);
|
||||||
|
scanf("%d %d",&pr[i].rew,&pr[i].pun);
|
||||||
|
}
|
||||||
|
memset(dp,0,sizeof(dp));
|
||||||
|
dp[0][0]=0;
|
||||||
|
for(int i=1;i<=m;i++)
|
||||||
|
dp[i][0]=dp[i-1][0]-pr[i].pun*100;
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
dp[1][i]=(pr[1].rew-sal*i)*pr[1].p[i]-(100-pr[1].p[i])*pr[1].pun;
|
||||||
|
for(int i=2;i<=m;i++)
|
||||||
|
{
|
||||||
|
for(int j=1;j<=n;j++)
|
||||||
|
{
|
||||||
|
dp[i][j]=-INT_MAX;
|
||||||
|
for(int k=0;k<=j;k++)
|
||||||
|
{
|
||||||
|
int temp=dp[i-1][j-k]+(pr[i].rew-sal*k)*pr[i].p[k]-(100-pr[i].p[k])*pr[i].pun;
|
||||||
|
if(temp>dp[i][j])
|
||||||
|
dp[i][j]=temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int max1=-INT_MAX;
|
||||||
|
for(int i=0;i<=n;i++)
|
||||||
|
{
|
||||||
|
if(dp[m][i]>max1)
|
||||||
|
max1=dp[m][i];
|
||||||
|
}
|
||||||
|
printf("%d\n",max1);
|
||||||
|
int flag=1;
|
||||||
|
for(int i=0;i<=n;i++)
|
||||||
|
{
|
||||||
|
if(max1==dp[m][i])
|
||||||
|
{
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
|
printf("%d",i);
|
||||||
|
flag=0;
|
||||||
|
}
|
||||||
|
else printf(" %d",i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
65
HDOJ/1685_autoAC.cpp
Normal file
65
HDOJ/1685_autoAC.cpp
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
int n,num[15],lim;
|
||||||
|
bool flag;
|
||||||
|
int h()
|
||||||
|
{
|
||||||
|
int i,r=0;
|
||||||
|
if(num[0]!=1) r++;
|
||||||
|
if(num[n-1]!=n) r++;
|
||||||
|
for(i=0;i<n-1;i++) if(num[i]+1!=num[i+1]) r++;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
void dfs(int cnt)
|
||||||
|
{
|
||||||
|
if(flag) return;
|
||||||
|
int i;
|
||||||
|
for(i=0;i<n;i++) if(num[i]!=i+1) break;
|
||||||
|
if(i==n)
|
||||||
|
{
|
||||||
|
flag=1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(cnt>=lim) return;
|
||||||
|
if(cnt+ceil(h()/3.0)>lim) return;
|
||||||
|
int len,pos,j,p,temp[15];
|
||||||
|
for(i=0;i<n;i++) temp[i]=num[i];
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
for(len=1;len<=n-i;len++)
|
||||||
|
{
|
||||||
|
for(pos=0;pos<=n-len;pos++)
|
||||||
|
{
|
||||||
|
if(pos==i) continue;
|
||||||
|
for(j=0;j<len;j++) num[pos+j]=temp[i+j];
|
||||||
|
for(p=0,j=0;j<n;)
|
||||||
|
{
|
||||||
|
if(pos==j) j+=len;
|
||||||
|
if(j>=n) break;
|
||||||
|
if(p==i) p+=len;
|
||||||
|
num[j++]=temp[p++];
|
||||||
|
}
|
||||||
|
dfs(cnt+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i=0;i<n;i++) num[i]=temp[i];
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T,i;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%d",&n);
|
||||||
|
for(i=0;i<n;i++) scanf("%d",&num[i]);
|
||||||
|
flag=0;
|
||||||
|
for(lim=0;lim<5;lim++)
|
||||||
|
{
|
||||||
|
dfs(0);
|
||||||
|
if(flag) break;
|
||||||
|
}
|
||||||
|
if(flag) printf("%d\n",lim);
|
||||||
|
else printf("5 or more\n");
|
||||||
|
}
|
||||||
|
}
|
64
HDOJ/1686_autoAC.cpp
Normal file
64
HDOJ/1686_autoAC.cpp
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#define MAX 10000
|
||||||
|
int next[MAX + 1];
|
||||||
|
char pattern[MAX + 1];
|
||||||
|
int init_next (char *pattern, int *next);
|
||||||
|
int KMP (char text, char *pattern, int len);
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T;
|
||||||
|
int len;
|
||||||
|
char text = '\0';
|
||||||
|
scanf ("%d", &T);
|
||||||
|
getchar ();
|
||||||
|
while (T --)
|
||||||
|
{
|
||||||
|
len = init_next (pattern, next);
|
||||||
|
printf ("%d\n", KMP (text, pattern, len));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int init_next (char *pattern, int *next)
|
||||||
|
{
|
||||||
|
int q, i = 0;
|
||||||
|
q = next[0] = -1;
|
||||||
|
pattern[i ++] = getchar ();
|
||||||
|
while ((pattern[i] = getchar ()) != '\n')
|
||||||
|
{
|
||||||
|
while (q >= 0 && pattern[q + 1] != pattern[i])
|
||||||
|
{
|
||||||
|
q = next[q];
|
||||||
|
}
|
||||||
|
if (pattern[q + 1] == pattern[i])
|
||||||
|
{
|
||||||
|
q ++;
|
||||||
|
}
|
||||||
|
next[i] = q;
|
||||||
|
i ++;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
int KMP (char text, char *pattern, int len)
|
||||||
|
{
|
||||||
|
int q, i = 0;
|
||||||
|
int count = 0;
|
||||||
|
q = -1;
|
||||||
|
while ((text = getchar ()) != '\n')
|
||||||
|
{
|
||||||
|
while (q >= 0 && pattern[q + 1] != text)
|
||||||
|
{
|
||||||
|
q = next[q];
|
||||||
|
}
|
||||||
|
if (pattern[q + 1] == text)
|
||||||
|
{
|
||||||
|
q ++;
|
||||||
|
}
|
||||||
|
if (q == len - 1)
|
||||||
|
{
|
||||||
|
q = next[q];
|
||||||
|
count ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
41
HDOJ/1687_autoAC.cpp
Normal file
41
HDOJ/1687_autoAC.cpp
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <algorithm>
|
||||||
|
using std::sort;
|
||||||
|
using std::swap;
|
||||||
|
double X, Y;
|
||||||
|
struct Node{
|
||||||
|
double left, right;
|
||||||
|
} arr[102];
|
||||||
|
double getX(double a, double b){
|
||||||
|
return X - Y * (X - a) / (Y - b);
|
||||||
|
}
|
||||||
|
bool cmp(Node a, Node b){
|
||||||
|
return a.left < b.left;
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
double x1, y1, x2, y2, flag;
|
||||||
|
int t, n, ans;
|
||||||
|
scanf("%d", &t);
|
||||||
|
while(t--){
|
||||||
|
scanf("%d", &n);
|
||||||
|
scanf("%lf%lf", &X, &Y);
|
||||||
|
for(int i = 0; i < n; ++i){
|
||||||
|
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
|
||||||
|
arr[i].left = getX(x1, y1);
|
||||||
|
arr[i].right = getX(x2, y2);
|
||||||
|
if(arr[i].left > arr[i].right) swap(arr[i].left, arr[i].right);
|
||||||
|
}
|
||||||
|
sort(arr, arr + n, cmp);
|
||||||
|
ans = 1;
|
||||||
|
flag = arr[0].right;
|
||||||
|
for(int i = 1; i < n; ++i){
|
||||||
|
if(flag < arr[i].left){
|
||||||
|
++ans;
|
||||||
|
flag = arr[i].right;
|
||||||
|
}else if(flag < arr[i].right) flag = arr[i].right;
|
||||||
|
}
|
||||||
|
if(!n) printf("1\n");
|
||||||
|
else printf("%d\n", ans + 1);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
92
HDOJ/1688_autoAC.cpp
Normal file
92
HDOJ/1688_autoAC.cpp
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<vector>
|
||||||
|
#include<string.h>
|
||||||
|
using namespace std;
|
||||||
|
const int N = 1001;
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int v,w;
|
||||||
|
node(){}
|
||||||
|
node(int v,int w):v(v),w(w){}
|
||||||
|
};
|
||||||
|
vector<node> g[N];
|
||||||
|
int n,dist[N][2],cnt[N][2];
|
||||||
|
bool vis[N][2];
|
||||||
|
void Dijkstra(int s)
|
||||||
|
{
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
dist[i][0]=INT_MAX;
|
||||||
|
dist[i][1]=INT_MAX;
|
||||||
|
}
|
||||||
|
memset(vis,false,sizeof(vis));
|
||||||
|
dist[s][0]=0;
|
||||||
|
cnt[s][0]=1;
|
||||||
|
for(int i=0;i<2*n;i++)
|
||||||
|
{
|
||||||
|
int temp=INT_MAX,u=-1,k;
|
||||||
|
for(int j=1;j<=n;j++)
|
||||||
|
if(!vis[j][0] && dist[j][0]<temp)
|
||||||
|
{
|
||||||
|
k=0;
|
||||||
|
temp=dist[j][0];
|
||||||
|
u=j;
|
||||||
|
}
|
||||||
|
else if(!vis[j][1] && dist[j][1]<temp)
|
||||||
|
{
|
||||||
|
k=1;
|
||||||
|
temp=dist[j][1];
|
||||||
|
u=j;
|
||||||
|
}
|
||||||
|
if(u==-1)
|
||||||
|
break;
|
||||||
|
vis[u][k]=true;
|
||||||
|
vector<node>::iterator it=g[u].begin();
|
||||||
|
for(;it!=g[u].end();it++)
|
||||||
|
{
|
||||||
|
int newdis=dist[u][k]+it->w;
|
||||||
|
int v=it->v;
|
||||||
|
if(newdis<dist[v][0])
|
||||||
|
{
|
||||||
|
dist[v][1]=dist[v][0];
|
||||||
|
cnt[v][1]=cnt[v][0];
|
||||||
|
dist[v][0]=newdis;
|
||||||
|
cnt[v][0]=cnt[u][k];
|
||||||
|
}
|
||||||
|
else if(newdis==dist[v][0])
|
||||||
|
cnt[v][0]+=cnt[u][k];
|
||||||
|
else if(newdis<dist[v][1])
|
||||||
|
{
|
||||||
|
dist[v][1]=newdis;
|
||||||
|
cnt[v][1]=cnt[u][k];
|
||||||
|
}
|
||||||
|
else if(newdis==dist[v][1])
|
||||||
|
cnt[v][1]+=cnt[u][k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T,m,a,b,c;
|
||||||
|
int s,t;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%d %d",&n,&m);
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
g[i].clear();
|
||||||
|
for(int i=0;i<m;i++)
|
||||||
|
{
|
||||||
|
scanf("%d %d %d",&a,&b,&c);
|
||||||
|
g[a].push_back(node(b,c));
|
||||||
|
}
|
||||||
|
scanf("%d %d",&s,&t);
|
||||||
|
Dijkstra(s);
|
||||||
|
int ans=cnt[t][0];
|
||||||
|
if(dist[t][1]==dist[t][0]+1)
|
||||||
|
ans+=cnt[t][1];
|
||||||
|
printf("%d\n",ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
72
HDOJ/1689_autoAC.cpp
Normal file
72
HDOJ/1689_autoAC.cpp
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<vector>
|
||||||
|
#include<queue>
|
||||||
|
#include<cstring>
|
||||||
|
#define maxn 10000+1
|
||||||
|
using namespace std;
|
||||||
|
vector<int>mapp[maxn];
|
||||||
|
int n,m;
|
||||||
|
int visit[maxn][2];
|
||||||
|
struct stu
|
||||||
|
{
|
||||||
|
int pre;
|
||||||
|
int now;
|
||||||
|
int deep;
|
||||||
|
};
|
||||||
|
int bfs(int p)
|
||||||
|
{
|
||||||
|
queue<stu>root;
|
||||||
|
stu x,y;
|
||||||
|
x.pre=-1;
|
||||||
|
x.now=p;
|
||||||
|
x.deep=0;
|
||||||
|
root.push(x);
|
||||||
|
while(root.size())
|
||||||
|
{
|
||||||
|
x=root.front();
|
||||||
|
root.pop();
|
||||||
|
if(x.now==p&&x.deep>=3&&x.deep%2) return x.deep;
|
||||||
|
else if(x.now==p&&x.deep!=0) continue;
|
||||||
|
for(int i=0;i<mapp[x.now].size();i++)
|
||||||
|
{
|
||||||
|
if(mapp[x.now][i]!=x.pre&&!visit[mapp[x.now][i]][(x.deep+1)%2])
|
||||||
|
{
|
||||||
|
y.pre=x.now;
|
||||||
|
y.now=mapp[x.now][i];
|
||||||
|
y.deep=x.deep+1;
|
||||||
|
visit[y.now][y.deep%2]=1;
|
||||||
|
root.push(y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1<<30;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
cin.sync_with_stdio(false);
|
||||||
|
int t;
|
||||||
|
cin>>t;
|
||||||
|
int casee=1;
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
cin>>n>>m;
|
||||||
|
for(int i=1;i<=n;i++) mapp[i].clear();
|
||||||
|
for(int i=0;i<m;i++)
|
||||||
|
{
|
||||||
|
int x,y;
|
||||||
|
cin>>x>>y;
|
||||||
|
mapp[x].push_back(y);
|
||||||
|
mapp[y].push_back(x);
|
||||||
|
}
|
||||||
|
int ans=1<<30;
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
memset(visit,0,sizeof(visit));
|
||||||
|
ans=min(ans,bfs(i));
|
||||||
|
}
|
||||||
|
cout<<"Case "<<casee++<<": ";
|
||||||
|
if(ans!=1<<30) cout<<"JYY has to use "<<ans<<" balls."<<endl;
|
||||||
|
else cout<<"Poor JYY."<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
63
HDOJ/1690_autoAC.cpp
Normal file
63
HDOJ/1690_autoAC.cpp
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
#include<cstdlib>
|
||||||
|
#include<cmath>
|
||||||
|
using namespace std;
|
||||||
|
const long long INF = 1e18;
|
||||||
|
const int maxn = 105;
|
||||||
|
long long map[maxn][maxn];
|
||||||
|
long long L1, L2, L3, L4;
|
||||||
|
long long C1, C2, C3, C4;
|
||||||
|
int n;
|
||||||
|
long long cost(long long dis)
|
||||||
|
{
|
||||||
|
if(dis > 0 && dis <= L1)return C1;
|
||||||
|
if(dis > L1 && dis <= L2)return C2;
|
||||||
|
if(dis > L2 && dis <= L3)return C3;
|
||||||
|
if(dis > L3 && dis <= L4)return C4;
|
||||||
|
return INF;
|
||||||
|
}
|
||||||
|
void floyd()
|
||||||
|
{
|
||||||
|
int i, j, k;
|
||||||
|
for(k=1; k<=n; k++)
|
||||||
|
for(i=1; i<=n; i++)
|
||||||
|
for(j=1; j<=n; j++)
|
||||||
|
{
|
||||||
|
if(map[i][j] > map[i][k] + map[k][j])
|
||||||
|
map[i][j] = map[i][k] + map[k][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int ncase, k=1;
|
||||||
|
cin >> ncase;
|
||||||
|
while(ncase--)
|
||||||
|
{
|
||||||
|
int m, a, b, i, j;
|
||||||
|
long long f[maxn]={0};
|
||||||
|
cin >> L1 >> L2 >> L3 >> L4;
|
||||||
|
cin >> C1 >> C2 >> C3 >> C4;
|
||||||
|
cin >> n >> m;
|
||||||
|
for(i=1; i<=n; i++)
|
||||||
|
for(j=1; j<=n; j++)
|
||||||
|
map[i][j] = INF;
|
||||||
|
for(i=1; i<=n; i++)
|
||||||
|
cin >> f[i];
|
||||||
|
for(i=1; i<n; i++)
|
||||||
|
for(j=i+1; j<=n; j++)
|
||||||
|
map[i][j] = map[j][i] = cost(abs(f[i]-f[j]));
|
||||||
|
floyd();
|
||||||
|
cout << "Case " << k++ << ":" <<endl;
|
||||||
|
for(i=0; i<m; i++)
|
||||||
|
{
|
||||||
|
cin >> a >> b;
|
||||||
|
if(map[a][b] != INF)
|
||||||
|
cout <<"The minimum cost between station "<< a <<" and station "<< b <<" is "<< map[a][b] <<"."<<endl;
|
||||||
|
else
|
||||||
|
cout <<"Station "<< a <<" and station "<< b <<" are not attainable."<<endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
259
HDOJ/1691_autoAC.cpp
Normal file
259
HDOJ/1691_autoAC.cpp
Normal file
|
@ -0,0 +1,259 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
int map[20][20];
|
||||||
|
int Kinga,Kingb;
|
||||||
|
int Kingc,Kingd;
|
||||||
|
int abs(int a){return a>0?a:-a;}
|
||||||
|
int KingFaceToFace()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
if(Kingb==20||Kingd==20)return 0;
|
||||||
|
if(Kingb==Kingd)
|
||||||
|
{
|
||||||
|
for(i=Kingc+1;i<Kinga;i++)
|
||||||
|
if(map[i][Kingb]!=0)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int King(int a,int b,int c,int d)
|
||||||
|
{
|
||||||
|
if((abs(a-c)+abs(b-d))!=1)return 0;
|
||||||
|
if(map[a][b]==1&&(a<8||b<4||b>6||c<8||d<4||d>6))
|
||||||
|
return 0;
|
||||||
|
if(map[a][b]==8&&(a>3||b<4||b>6||c>3||d<4||d>6))
|
||||||
|
return 0;
|
||||||
|
if(map[a][b]==1){
|
||||||
|
Kinga=c;
|
||||||
|
Kingb=d;
|
||||||
|
}
|
||||||
|
if(map[a][b]==8){
|
||||||
|
Kingc=c;
|
||||||
|
Kingd=d;
|
||||||
|
}
|
||||||
|
map[c][d]=map[a][b];
|
||||||
|
map[a][b]=0;
|
||||||
|
if(KingFaceToFace())
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int Mandarins(int a,int b,int c,int d)
|
||||||
|
{
|
||||||
|
if(abs(a-c)!=1||abs(b-d)!=1)return 0;
|
||||||
|
if(map[a][b]==2&&(c<8||c>10||d<4||d>6))
|
||||||
|
return 0;
|
||||||
|
if(map[a][b]==9&&(c>3||c<1||d<4||d>6))
|
||||||
|
return 0;
|
||||||
|
map[c][d]=map[a][b];
|
||||||
|
map[a][b]=0;
|
||||||
|
if(KingFaceToFace())
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int Elephants(int a,int b,int c,int d)
|
||||||
|
{
|
||||||
|
if(abs(a-c)!=2||abs(b-d)!=2)return 0;
|
||||||
|
if(map[a][b]==3&&(!(((a==6||a==10)&&(b==3||b==7))||(a==8&&(b==1||b==5||b==9)))||!(((c==6||c==10)&&(d==3||d==7))||(c==8&&(d==1||d==5||d==9)))))return 0;
|
||||||
|
if(map[a][b]==10&&(!(((a==5||a==1)&&(b==3||b==7))||(a==3&&(b==1||b==5||b==9)))||!(((c==5||c==1)&&(d==3||d==7))||(c==3&&(d==1||d==5||d==9)))))return 0;
|
||||||
|
int x,y;
|
||||||
|
x=(a+c)/2;
|
||||||
|
y=(b+d)/2;
|
||||||
|
if(map[x][y])
|
||||||
|
return 0;
|
||||||
|
map[c][d]=map[a][b];
|
||||||
|
map[a][b]=0;
|
||||||
|
if(KingFaceToFace())
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int Knights(int a,int b,int c,int d)
|
||||||
|
{
|
||||||
|
int luoma[8][2]={{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2}};
|
||||||
|
int majiao[8][2]={{1,0},{1,0},{-1,0},{-1,0},{0,1},{0,-1},{0,1},{0,-1}};
|
||||||
|
int i;
|
||||||
|
for(i=0;i<8;i++)
|
||||||
|
{
|
||||||
|
if(a+luoma[i][0]==c&&b+luoma[i][1]==d)
|
||||||
|
{
|
||||||
|
if(map[a+majiao[i][0]][b+majiao[i][1]])
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(i==8)return 0;
|
||||||
|
if(map[c][d]==1)Kinga=Kingb=20;
|
||||||
|
if(map[c][d]==8)Kingc=Kingd=20;
|
||||||
|
map[c][d]=map[a][b];
|
||||||
|
map[a][b]=0;
|
||||||
|
if(KingFaceToFace())
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int Rooks(int a,int b,int c,int d)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
if(a!=c&&b!=d)return 0;
|
||||||
|
if(a==c&&d>b)
|
||||||
|
for(i=b+1;i<d;i++)
|
||||||
|
if(map[a][i])
|
||||||
|
return 0;
|
||||||
|
if(a==c&&d<b)
|
||||||
|
for(i=b-1;i>d;i--)
|
||||||
|
if(map[a][i])
|
||||||
|
return 0;
|
||||||
|
if(b==d&&a>c)
|
||||||
|
for(i=a-1;i>c;i--)
|
||||||
|
if(map[i][b])
|
||||||
|
return 0;
|
||||||
|
if(b==d&&a<c)
|
||||||
|
for(i=a+1;i<c;i++)
|
||||||
|
if(map[i][b])
|
||||||
|
return 0;
|
||||||
|
if(map[c][d]==1)Kinga=Kingb=20;
|
||||||
|
if(map[c][d]==8)Kingc=Kingd=20;
|
||||||
|
map[c][d]=map[a][b];
|
||||||
|
map[a][b]=0;
|
||||||
|
if(KingFaceToFace())
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int Cannons(int a,int b,int c,int d)
|
||||||
|
{
|
||||||
|
int i,cnt=0;
|
||||||
|
if(a!=c&&b!=d)return 0;
|
||||||
|
if(a==c&&d>b)
|
||||||
|
{
|
||||||
|
for(i=b+1;i<d;i++)
|
||||||
|
if(map[a][i]!=0)
|
||||||
|
cnt++;
|
||||||
|
if(cnt>1||(cnt==1&&map[c][d]==0)||(cnt==0&&map[c][d]))return 0;
|
||||||
|
}
|
||||||
|
if(a==c&&d<b)
|
||||||
|
{
|
||||||
|
for(i=b-1;i>d;i--)
|
||||||
|
if(map[a][i]!=0)
|
||||||
|
cnt++;
|
||||||
|
if(cnt>1||(cnt==1&&map[c][d]==0)||(cnt==0&&map[c][d]))return 0;
|
||||||
|
}
|
||||||
|
if(b==d&&a>c)
|
||||||
|
{
|
||||||
|
for(i=a-1;i>c;i--)
|
||||||
|
if(map[i][b]!=0)
|
||||||
|
cnt++;
|
||||||
|
if(cnt>1||(cnt==1&&map[c][d]==0)||(cnt==0&&map[c][d]))return 0;
|
||||||
|
}
|
||||||
|
if(b==d&&a<c)
|
||||||
|
{
|
||||||
|
for(i=a+1;i<c;i++)
|
||||||
|
if(map[i][b]!=0)
|
||||||
|
cnt++;
|
||||||
|
if(cnt>1||(cnt==1&&map[c][d]==0)||(cnt==0&&map[c][d]))return 0;
|
||||||
|
}
|
||||||
|
if(map[c][d]==1)Kinga=Kingb=20;
|
||||||
|
if(map[c][d]==8)Kingc=Kingd=20;
|
||||||
|
map[c][d]=map[a][b];
|
||||||
|
map[a][b]=0;
|
||||||
|
if(KingFaceToFace())
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int Pawns(int a,int b,int c,int d)
|
||||||
|
{
|
||||||
|
if(abs(a-c)+abs(b-d)!=1)return 0;
|
||||||
|
if(map[a][b]==14&&a<=5)
|
||||||
|
if(c-a!=1||b!=d)
|
||||||
|
return 0;
|
||||||
|
if(map[a][b]==7&&a>=6)
|
||||||
|
if(c-a!=-1||b!=d)
|
||||||
|
return 0;
|
||||||
|
if(map[a][b]==14&&a>5)
|
||||||
|
if(c-a==-1)
|
||||||
|
return 0;
|
||||||
|
if(map[a][b]==7&&a<6)
|
||||||
|
if(c-a==1)
|
||||||
|
return 0;
|
||||||
|
if(map[c][d]==1)Kinga=Kingb=20;
|
||||||
|
if(map[c][d]==8)Kingc=Kingd=20;
|
||||||
|
map[c][d]=map[a][b];
|
||||||
|
map[a][b]=0;
|
||||||
|
if(KingFaceToFace())
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int move(int a,int b,int c,int d,int k)
|
||||||
|
{
|
||||||
|
if(map[a][b]<=k*7||map[a][b]>k*7+7)
|
||||||
|
return 0;
|
||||||
|
if(a>10||b>9||c>10||d>9||a<1||b<1||c<1||d<1)return 0;
|
||||||
|
if(map[a][b]==0)return 0;
|
||||||
|
if((map[a][b]==1||map[a][b]==2||map[a][b]==3||map[a][b]==4||map[a][b]==5||map[a][b]==6||map[a][b]==7)&&(map[c][d]==1||map[c][d]==2||map[c][d]==3||map[c][d]==4||map[c][d]==5||map[c][d]==6||map[c][d]==7))
|
||||||
|
return 0;
|
||||||
|
if((map[a][b]==8||map[a][b]==9||map[a][b]==10||map[a][b]==11||map[a][b]==12||map[a][b]==13||map[a][b]==14)&&(map[c][d]==8||map[c][d]==9||map[c][d]==10||map[c][d]==11||map[c][d]==12||map[c][d]==13||map[c][d]==14))
|
||||||
|
return 0;
|
||||||
|
if(map[a][b]==1||map[a][b]==8)
|
||||||
|
return King(a,b,c,d);
|
||||||
|
if(map[a][b]==2||map[a][b]==9)
|
||||||
|
return Mandarins(a,b,c,d);
|
||||||
|
if(map[a][b]==3||map[a][b]==10)
|
||||||
|
return Elephants(a,b,c,d);
|
||||||
|
if(map[a][b]==4||map[a][b]==11)
|
||||||
|
return Knights(a,b,c,d);
|
||||||
|
if(map[a][b]==5||map[a][b]==12)
|
||||||
|
return Rooks(a,b,c,d);
|
||||||
|
if(map[a][b]==6||map[a][b]==13)
|
||||||
|
return Cannons(a,b,c,d);
|
||||||
|
if(map[a][b]==7||map[a][b]==14)
|
||||||
|
return Pawns(a,b,c,d);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
int n,k;
|
||||||
|
int a,b,c,d;
|
||||||
|
int i,j;
|
||||||
|
int nCase=1;
|
||||||
|
int step;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
for(i=1;i<=10;i++)
|
||||||
|
{
|
||||||
|
for(j=1;j<=9;j++)
|
||||||
|
{
|
||||||
|
scanf("%d",&map[i][j]);
|
||||||
|
if(map[i][j]==1){
|
||||||
|
Kinga=i;
|
||||||
|
Kingb=j;
|
||||||
|
}
|
||||||
|
if(map[i][j]==8){
|
||||||
|
Kingc=i;
|
||||||
|
Kingd=j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scanf("%d%d",&n,&k);
|
||||||
|
step=0;
|
||||||
|
for(i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
scanf("%d%d%d%d",&a,&b,&c,&d);
|
||||||
|
if(!step)
|
||||||
|
{
|
||||||
|
if(!move(a,b,c,d,k))
|
||||||
|
step=i;
|
||||||
|
if(i!=n&&(Kingb==20||Kingd==20))
|
||||||
|
step=i+1;
|
||||||
|
}
|
||||||
|
k=!k;
|
||||||
|
}
|
||||||
|
printf("Case %d: ",nCase++);
|
||||||
|
if(!step)
|
||||||
|
printf("Legal move\n");
|
||||||
|
else
|
||||||
|
printf("Illegal move on step %d\n",step);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
34
HDOJ/1692_autoAC.cpp
Normal file
34
HDOJ/1692_autoAC.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#include<iostream>
|
||||||
|
using namespace std;
|
||||||
|
int w[100005],L[100005],p[100005];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T,i,N,j,max,k,sum,carry;
|
||||||
|
cin>>T;
|
||||||
|
for(i=1;i<=T;i++)
|
||||||
|
{
|
||||||
|
cin>>N;
|
||||||
|
for(j=1;j<=N;j++)
|
||||||
|
cin>>w[j]>>L[j]>>p[j];
|
||||||
|
max=p[N];
|
||||||
|
for(j=1;j<N;j++)
|
||||||
|
{
|
||||||
|
sum=0;
|
||||||
|
carry=0;
|
||||||
|
for(k=j;k<=N;k++)
|
||||||
|
{
|
||||||
|
carry=carry+w[k];
|
||||||
|
if(carry<=L[k])
|
||||||
|
sum=sum+p[k];
|
||||||
|
if(sum>max)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(sum<max)
|
||||||
|
{
|
||||||
|
max=sum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<"Case "<<i<<": Need to use "<<max<<" mana points."<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
66
HDOJ/1693_autoAC.cpp
Normal file
66
HDOJ/1693_autoAC.cpp
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
int tree[13][13];
|
||||||
|
long long int dp[13][13][1<<13];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
scanf("%d",&t);
|
||||||
|
for(int p=1;p<=t;p++)
|
||||||
|
{
|
||||||
|
int n,m;
|
||||||
|
scanf("%d%d",&n,&m);
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
for(int j=1;j<=m;j++)
|
||||||
|
{
|
||||||
|
scanf("%d",&tree[i][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memset(dp,0,sizeof(dp));
|
||||||
|
dp[0][m][0]=1;
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
for(int k=0;k<(1<<(m+1));k++)
|
||||||
|
{
|
||||||
|
dp[i][0][k<<1]=dp[i-1][m][k];
|
||||||
|
}
|
||||||
|
for(int j=1;j<=m;j++)
|
||||||
|
{
|
||||||
|
int x=1<<j;
|
||||||
|
int y=1<<(j-1);
|
||||||
|
for(int k=0;k<(1<<(m+1));k++)
|
||||||
|
{
|
||||||
|
if(tree[i][j]!=0)
|
||||||
|
{
|
||||||
|
if((k&x)!=0 && (k&y)!=0)
|
||||||
|
{
|
||||||
|
dp[i][j][k]=dp[i][j-1][k^x^y];
|
||||||
|
}
|
||||||
|
else if((k&x)==0 && (k&y)==0)
|
||||||
|
{
|
||||||
|
dp[i][j][k]=dp[i][j-1][k^x^y];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dp[i][j][k]=dp[i][j-1][k]+dp[i][j-1][k^x^y];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if((k&x)==0 && (k&y)==0)
|
||||||
|
{
|
||||||
|
dp[i][j][k]=dp[i][j-1][k];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dp[i][j][k]=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("Case %d: There are %I64d ways to eat the trees.\n",p,dp[n][m][0]);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
40
HDOJ/1695_autoAC.cpp
Normal file
40
HDOJ/1695_autoAC.cpp
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#define G1 100005
|
||||||
|
int mu[G1];
|
||||||
|
void getMu(){
|
||||||
|
for(int i=1;i<G1;i++)
|
||||||
|
mu[i]=1;
|
||||||
|
for(int i=2;i<G1;i++){
|
||||||
|
if(mu[i]==0)continue;
|
||||||
|
mu[i]=-mu[i];
|
||||||
|
for(int j=i*2;j<G1;j+=i)
|
||||||
|
mu[j]+=mu[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
getMu();
|
||||||
|
int t1,t2,k,kase=1,temp,_;
|
||||||
|
long long ans1,ans2;
|
||||||
|
scanf("%d",&_);
|
||||||
|
while(_--){
|
||||||
|
scanf("%*d%d%*d%d%d",&t1,&t2,&k);
|
||||||
|
if(k==0){
|
||||||
|
printf("Case %d: 0\n",kase++);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
t1=t1/k;
|
||||||
|
t2=t2/k;
|
||||||
|
if(t1>t2){
|
||||||
|
temp=t1;
|
||||||
|
t1=t2;
|
||||||
|
t2=temp;
|
||||||
|
}
|
||||||
|
ans1=ans2=0;
|
||||||
|
for(int i=1;i<=t1;i++)
|
||||||
|
ans1+=(long long)mu[i]*(t1/i)*(t2/i);
|
||||||
|
for(int i=1;i<=t1;i++)
|
||||||
|
ans2+=(long long)mu[i]*(t1/i)*(t1/i);
|
||||||
|
printf("Case %d: %I64d\n",kase++,ans1-ans2/2);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
28
HDOJ/1698_autoAC.cpp
Normal file
28
HDOJ/1698_autoAC.cpp
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
const int n = 1000005;
|
||||||
|
int map[n][3];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,M,z,N,sum,v;
|
||||||
|
scanf("%d",&N);
|
||||||
|
for(i=1; i<=N; i++)
|
||||||
|
{
|
||||||
|
sum = 0;
|
||||||
|
int Q,j;
|
||||||
|
scanf("%d%d",&M,&Q);
|
||||||
|
for(j=1; j<=Q; j++)
|
||||||
|
scanf("%d%d%d",&map[j][0],&map[j][1],&map[j][2]);
|
||||||
|
for(j=1; j<=M; j++)
|
||||||
|
{
|
||||||
|
v = 1;
|
||||||
|
for(int k=Q; k>=0; k--)
|
||||||
|
if(map[k][0]<=j && j<=map[k][1])
|
||||||
|
{
|
||||||
|
v = map[k][2];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sum += v;
|
||||||
|
}
|
||||||
|
printf("Case %d: The total value of the hook is %d.\n",i,sum);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user