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
2200-2299
This commit is contained in:
parent
26a72e347d
commit
46f6aa3fc4
22
HDOJ/2200_autoAC.cpp
Normal file
22
HDOJ/2200_autoAC.cpp
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#include<iostream>
|
||||||
|
using namespace std;
|
||||||
|
long long C(int m,int n)
|
||||||
|
{
|
||||||
|
long long s=1;
|
||||||
|
for(int i=n,j=1;j<=m;--i,++j)
|
||||||
|
s=s*i/j;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
long long ans;
|
||||||
|
while(cin>>n)
|
||||||
|
{
|
||||||
|
ans=0;
|
||||||
|
for(int i=2;i<=n;++i)
|
||||||
|
ans+=C(i,n)*(i-1);
|
||||||
|
cout<<ans<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
10
HDOJ/2201_autoAC.cpp
Normal file
10
HDOJ/2201_autoAC.cpp
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
double n,m;
|
||||||
|
while(scanf("%lf %lf",&n,&m)!=EOF)
|
||||||
|
{
|
||||||
|
printf("%0.2f\n",(1.0/n));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
64
HDOJ/2202_autoAC.cpp
Normal file
64
HDOJ/2202_autoAC.cpp
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cmath>
|
||||||
|
using namespace std;
|
||||||
|
#define eps 1e-8
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int x,y;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
node p[50005];
|
||||||
|
node res[50005];
|
||||||
|
int cross(node p0,node p1,node p2)
|
||||||
|
{
|
||||||
|
return (p0.x-p2.x)*(p1.y-p2.y)-(p1.x-p2.x)*(p0.y-p2.y);
|
||||||
|
}
|
||||||
|
bool cmp(node a,node b)
|
||||||
|
{
|
||||||
|
if(a.x==b.x)
|
||||||
|
return a.y<b.y;
|
||||||
|
else
|
||||||
|
return a.x<b.x;
|
||||||
|
}
|
||||||
|
int Graham(int n)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
int top=0;
|
||||||
|
sort(p,p+n,cmp);
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
while(top>1&&cross(res[top-1],p[i],res[top-2])<=0)
|
||||||
|
top--;
|
||||||
|
res[top++]=p[i];
|
||||||
|
}
|
||||||
|
len=top;
|
||||||
|
for(int i=n-2; i>=0; i--)
|
||||||
|
{
|
||||||
|
while(top>len&&cross(res[top-1],p[i],res[top-2])<=0)
|
||||||
|
top--;
|
||||||
|
res[top++]=p[i];
|
||||||
|
}
|
||||||
|
if(n>1)
|
||||||
|
top--;
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
while(cin>>n)
|
||||||
|
{
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
cin>>p[i].x>>p[i].y;
|
||||||
|
int dian=Graham(n);
|
||||||
|
int ans=-22;
|
||||||
|
for(int i=0; i<dian; i++)
|
||||||
|
for(int j=i+1; j<dian; j++)
|
||||||
|
for(int k=j+1; k<dian; k++)
|
||||||
|
ans=max(ans,cross(res[j],res[k],res[i]));
|
||||||
|
printf("%.2lf\n",0.5*ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
12
HDOJ/2203_autoAC.cpp
Normal file
12
HDOJ/2203_autoAC.cpp
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
char s1[200001],s2[110000];
|
||||||
|
while(~scanf("%s %s",s1,s2))
|
||||||
|
{
|
||||||
|
sprintf(s1,"%s%s",s1,s1);
|
||||||
|
if(strstr(s1,s2))puts("yes");
|
||||||
|
else puts("no");
|
||||||
|
}
|
||||||
|
}
|
60
HDOJ/2204_autoAC.cpp
Normal file
60
HDOJ/2204_autoAC.cpp
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
#include<cmath>
|
||||||
|
#include<vector>
|
||||||
|
#define EPS 1e-8
|
||||||
|
#define MAXN 65
|
||||||
|
typedef long long LL;
|
||||||
|
using namespace std;
|
||||||
|
bool p[MAXN];
|
||||||
|
vector<int> prime;
|
||||||
|
void Init() {
|
||||||
|
int i, j;
|
||||||
|
memset(p, true, sizeof(p));
|
||||||
|
for (i = 2; i < 9; i++) {
|
||||||
|
if (p[i]) {
|
||||||
|
for (j = i * i; j < MAXN; j += i)
|
||||||
|
p[j] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prime.clear();
|
||||||
|
for (i = 2; i < MAXN; i++) {
|
||||||
|
if (p[i])
|
||||||
|
prime.push_back(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main() {
|
||||||
|
LL n, tmp;
|
||||||
|
int i, j, k, ans;
|
||||||
|
Init();
|
||||||
|
while (~scanf("%I64d", &n)) {
|
||||||
|
ans = 1;
|
||||||
|
for (i = 0; i < (int) prime.size(); i++) {
|
||||||
|
tmp = (LL) (pow((double) n, 1.0 / prime[i]) + EPS);
|
||||||
|
if (tmp == 1)
|
||||||
|
break;
|
||||||
|
ans += tmp - 1;
|
||||||
|
}
|
||||||
|
for (i = 0; i < (int) prime.size(); i++) {
|
||||||
|
for (j = i + 1; j < (int) prime.size(); j++) {
|
||||||
|
tmp = (LL) (pow((double) n, 1.0 / (prime[i] * prime[j])) + EPS);
|
||||||
|
if (tmp == 1)
|
||||||
|
break;
|
||||||
|
ans -= tmp - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 0; i < (int) prime.size(); i++) {
|
||||||
|
for (j = i + 1; j < (int) prime.size(); j++) {
|
||||||
|
for (k = j + 1; k < (int) prime.size(); k++) {
|
||||||
|
tmp = (LL) (pow((double) n,
|
||||||
|
1.0 / (prime[i] * prime[j] * prime[k])) + EPS);
|
||||||
|
if (tmp == 1)
|
||||||
|
break;
|
||||||
|
ans += tmp - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n", ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
34
HDOJ/2205_autoAC.cpp
Normal file
34
HDOJ/2205_autoAC.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<cstring>
|
||||||
|
using namespace std;
|
||||||
|
char str[51],st[51];
|
||||||
|
bool ar[51][51][51][51];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int max,i,j,len1,len2,l1,l2;
|
||||||
|
while (gets(str)&&gets(st))
|
||||||
|
{
|
||||||
|
len1=strlen(str);
|
||||||
|
len2=strlen(st);
|
||||||
|
memset(ar,0,sizeof(ar));
|
||||||
|
max=0;
|
||||||
|
for (i=0;i<=len1;i++)
|
||||||
|
for (j=0;j<=len2;j++)
|
||||||
|
ar[i][1][j][0]=ar[i][0][j][1]=ar[i][0][j][0]=true;
|
||||||
|
for (l1=0;l1<=len1;l1++)
|
||||||
|
for (l2=0;l2<=len2;l2++)
|
||||||
|
for (i=0;i<=len1-l1;i++)
|
||||||
|
for (j=0;j<=len2-l2;j++)
|
||||||
|
{
|
||||||
|
if (!ar[i][l1][j][l2])
|
||||||
|
ar[i][l1][j][l2]=
|
||||||
|
l1>1&&ar[i+1][l1-2][j][l2]&&str[i]==str[i+l1-1]||
|
||||||
|
l2>1&&ar[i][l1][j+1][l2-2]&&st[j]==st[j+l2-1]||
|
||||||
|
l1>0&&l2>0&&ar[i][l1-1][j+1][l2-1]&&str[i+l1-1]==st[j]||
|
||||||
|
l1>0&&l2>0&&ar[i+1][l1-1][j][l2-1]&&str[i]==st[j+l2-1];
|
||||||
|
if (ar[i][l1][j][l2]&&l1+l2>max) max=l1+l2;
|
||||||
|
}
|
||||||
|
cout<<max<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
35
HDOJ/2206_autoAC.cpp
Normal file
35
HDOJ/2206_autoAC.cpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
char str[102];
|
||||||
|
int ok;
|
||||||
|
int check(char ch){
|
||||||
|
if(ch >= '0' && ch <= '9') return 1;
|
||||||
|
if(ch == '.') return 2;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
int dot, dignum, a, dotsum;
|
||||||
|
while(gets(str)){
|
||||||
|
dotsum = a = dot = dignum = 0;
|
||||||
|
for(int i = 0; str[i]; ++i){
|
||||||
|
ok = check(str[i]);
|
||||||
|
if(!ok) break;
|
||||||
|
if(ok == 1){
|
||||||
|
dot = 0;
|
||||||
|
++dignum;
|
||||||
|
a = a * 10 + str[i] - '0';
|
||||||
|
if(dignum > 3 || a > 255){
|
||||||
|
ok = 0; break;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
dignum = a = 0;
|
||||||
|
++dot; ++dotsum;
|
||||||
|
if(dot > 1 || dotsum > 3){
|
||||||
|
ok = 0; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(dot || dotsum != 3) ok = 0;
|
||||||
|
printf(ok ? "YES\n" : "NO\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
22
HDOJ/2207_autoAC.cpp
Normal file
22
HDOJ/2207_autoAC.cpp
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
double LogAN(double a, double N)
|
||||||
|
{
|
||||||
|
return log(N) / log(a);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int N = 0;
|
||||||
|
while (scanf("%d", &N) != EOF)
|
||||||
|
{
|
||||||
|
double fBitNum = LogAN(2, N+3);
|
||||||
|
int nBitNum = ceil(fBitNum);
|
||||||
|
unsigned int nBitIP = ~((1<<nBitNum) - 1);
|
||||||
|
printf("%u.%u.%u.%u\n",
|
||||||
|
(nBitIP >> 24),
|
||||||
|
((nBitIP >> 16) & 0xFF),
|
||||||
|
((nBitIP >> 8) & 0xFF),
|
||||||
|
nBitIP & 0xFF);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
51
HDOJ/2208_autoAC.cpp
Normal file
51
HDOJ/2208_autoAC.cpp
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
using namespace std;
|
||||||
|
int n,m,map[20][20];
|
||||||
|
int root[20],flag;
|
||||||
|
void DFS(int x,int y){
|
||||||
|
if(flag)
|
||||||
|
return ;
|
||||||
|
if(y>m)
|
||||||
|
return ;
|
||||||
|
if(x==n){
|
||||||
|
flag=1;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
for(int i=0;i<x;i++){
|
||||||
|
if(root[i]!=i)
|
||||||
|
continue;
|
||||||
|
int tag=1;
|
||||||
|
for(int j=i;j<x && tag;j++)
|
||||||
|
if(root[j]==i)
|
||||||
|
tag=map[j][x];
|
||||||
|
if(tag){
|
||||||
|
root[x]=i;
|
||||||
|
DFS(x+1,y);
|
||||||
|
root[x]=x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DFS(x+1,y+1);
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
while(~scanf("%d%d",&n,&m)){
|
||||||
|
memset(map,0,sizeof(map));
|
||||||
|
flag=0;
|
||||||
|
int k,x;
|
||||||
|
for(int i=0;i<n;i++){
|
||||||
|
scanf("%d",&k);
|
||||||
|
root[i]=i;
|
||||||
|
while(k--){
|
||||||
|
scanf("%d",&x);
|
||||||
|
map[i][x]=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DFS(0,0);
|
||||||
|
if(m>=n || flag)
|
||||||
|
puts("YES");
|
||||||
|
else
|
||||||
|
puts("NO");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
47
HDOJ/2209_autoAC.cpp
Normal file
47
HDOJ/2209_autoAC.cpp
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<string.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
#define INF 99999999
|
||||||
|
int num[25];
|
||||||
|
char s[25];
|
||||||
|
int dfs(int n,int len,int step)
|
||||||
|
{
|
||||||
|
if(n==len)
|
||||||
|
{
|
||||||
|
return num[len-1]?INF:step;
|
||||||
|
}
|
||||||
|
if(num[n-1])
|
||||||
|
{
|
||||||
|
num[n-1]=0;
|
||||||
|
num[n]=!num[n];
|
||||||
|
num[n+1]=!num[n+1];
|
||||||
|
step++;
|
||||||
|
}
|
||||||
|
return dfs(n+1,len,step);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(gets(s))
|
||||||
|
{
|
||||||
|
int len=strlen(s);
|
||||||
|
int step=INF,t;
|
||||||
|
for(int i=0;i<len;i++)
|
||||||
|
{
|
||||||
|
num[i]=s[i]-'0';
|
||||||
|
}
|
||||||
|
num[0]=!num[0];
|
||||||
|
num[1]=!num[1];
|
||||||
|
step=min(step,dfs(1,len,1));
|
||||||
|
for(int i=0;i<len;i++)
|
||||||
|
{
|
||||||
|
num[i]=s[i]-'0';
|
||||||
|
}
|
||||||
|
step=min(step,dfs(1,len,0));
|
||||||
|
if(step==INF)
|
||||||
|
cout<<"NO"<<endl;
|
||||||
|
else
|
||||||
|
cout<<step<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
24
HDOJ/2211_autoAC.cpp
Normal file
24
HDOJ/2211_autoAC.cpp
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int dfs(int n,int k);
|
||||||
|
int t;
|
||||||
|
int n,k;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
scanf("%d%d",&n,&k);
|
||||||
|
printf("%d\n",dfs(n,k));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int dfs(int n,int k)
|
||||||
|
{
|
||||||
|
int num;
|
||||||
|
if(n==k)
|
||||||
|
{
|
||||||
|
return k;
|
||||||
|
}
|
||||||
|
num=dfs(n-n/k,k);
|
||||||
|
return ((num-1)/(k-1)+num);
|
||||||
|
}
|
32
HDOJ/2212_autoAC.cpp
Normal file
32
HDOJ/2212_autoAC.cpp
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
int jieceng(int a)
|
||||||
|
{
|
||||||
|
int s,i;
|
||||||
|
s=1;
|
||||||
|
for(i=2;i<=a;i++)
|
||||||
|
s*=i;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
int weishu(int a)
|
||||||
|
{
|
||||||
|
int sum=0;
|
||||||
|
int b;
|
||||||
|
b=a;
|
||||||
|
while(a)
|
||||||
|
{
|
||||||
|
sum+=jieceng(a%10);
|
||||||
|
a/=10;
|
||||||
|
}
|
||||||
|
if(sum==b)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,i;
|
||||||
|
for(i=1;i<=50000;i++)
|
||||||
|
{
|
||||||
|
if(weishu(i))
|
||||||
|
printf("%d\n",i);
|
||||||
|
}
|
||||||
|
}
|
64
HDOJ/2213_autoAC.cpp
Normal file
64
HDOJ/2213_autoAC.cpp
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <string.h>
|
||||||
|
using namespace std;
|
||||||
|
char map[102][103];
|
||||||
|
long long dp[102][103][30];
|
||||||
|
int N,M,T;
|
||||||
|
int sx,sy,ex,ey;
|
||||||
|
int dir[5][2] = {1,0,-1,0,0,1,0,-1,0,0};
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(scanf("%d%d%d",&N,&M,&T)==3)
|
||||||
|
{
|
||||||
|
memset(map,0,sizeof(map));
|
||||||
|
memset(dp,0,sizeof(dp));
|
||||||
|
for(int i=1;i<=N;i++)
|
||||||
|
scanf("%s",&map[i][1]);
|
||||||
|
for(int i=1;i<=N;i++)
|
||||||
|
{
|
||||||
|
for(int j=1;j<=M;j++)
|
||||||
|
{
|
||||||
|
if(map[i][j]=='S')
|
||||||
|
{
|
||||||
|
sx = i;
|
||||||
|
sy = j;
|
||||||
|
dp[i][j][0] = 1;
|
||||||
|
}
|
||||||
|
else if(map[i][j]=='E')
|
||||||
|
{
|
||||||
|
ex = i;
|
||||||
|
ey = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int t=1;t<=T;t++)
|
||||||
|
{
|
||||||
|
for(int i=1;i<=N;i++)
|
||||||
|
{
|
||||||
|
for(int j=1;j<=M;j++)
|
||||||
|
{
|
||||||
|
if(map[i][j]==0||map[i][j]=='X') continue;
|
||||||
|
dp[i][j][t] = 0;
|
||||||
|
for(int d=0;d<5;d++)
|
||||||
|
{
|
||||||
|
int tempi = i+dir[d][0];
|
||||||
|
int tempj = j+dir[d][1];
|
||||||
|
dp[i][j][t] += dp[tempi][tempj][t-1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(dp[ex][ey][T-1]>0)
|
||||||
|
{
|
||||||
|
printf("%I64d\n",dp[ex][ey][T-1]);
|
||||||
|
}
|
||||||
|
else if(dp[ex][ey][T]>0)
|
||||||
|
{
|
||||||
|
puts("Oh, my god, bad luck!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
puts("God will bless XX and WisKey!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
86
HDOJ/2215_autoAC.cpp
Normal file
86
HDOJ/2215_autoAC.cpp
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<math.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
struct aa
|
||||||
|
{
|
||||||
|
int x,y;
|
||||||
|
}a1[105],a2[105];
|
||||||
|
double maxx(double x,double y)
|
||||||
|
{
|
||||||
|
return x>y?x:y;
|
||||||
|
}
|
||||||
|
double abss(double x)
|
||||||
|
{
|
||||||
|
return x>0?x:-x;
|
||||||
|
}
|
||||||
|
double x_y(aa a,aa b)
|
||||||
|
{
|
||||||
|
return sqrt((a.x-b.x)*(a.x-b.x)*1.0+(a.y-b.y)*(a.y-b.y)*1.0);
|
||||||
|
}
|
||||||
|
double sss(aa A,aa B,aa C)
|
||||||
|
{
|
||||||
|
return (B.x - A.x)*(C.y - B.y) - (C.x - B.x)*(B.y - A.y);
|
||||||
|
}
|
||||||
|
bool camp(aa a,aa b)
|
||||||
|
{
|
||||||
|
return a.y<b.y||a.y==b.y&&a.x<b.x;
|
||||||
|
}
|
||||||
|
bool fx(aa A,aa B,aa C)
|
||||||
|
{
|
||||||
|
return (A.x - B.x)*(C.y - B.y) > (C.x - B.x)*(A.y - B.y);
|
||||||
|
}
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
int i,j,k,n,t,tt;
|
||||||
|
double a,b,c,r,s,maxr;
|
||||||
|
while(~scanf("%d",&n)&&n)
|
||||||
|
{
|
||||||
|
for(i=1;i<=n;i++)
|
||||||
|
scanf("%d%d",&a1[i].x,&a1[i].y);
|
||||||
|
if(n==1)
|
||||||
|
{
|
||||||
|
printf("0.50\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(n==2)
|
||||||
|
{
|
||||||
|
printf("%.2f\n",x_y(a1[1],a1[2])/2+0.5);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
sort(a1+1,a1+n+1,camp);
|
||||||
|
a2[1]=a1[1];
|
||||||
|
a2[2]=a1[2];
|
||||||
|
for(t=2,i=3;i<=n;i++)
|
||||||
|
{
|
||||||
|
while(t!=1&&!fx(a2[t],a2[t-1],a1[i]))
|
||||||
|
t--;
|
||||||
|
a2[++t]=a1[i];
|
||||||
|
}
|
||||||
|
a2[t+1]=a1[n-1];
|
||||||
|
for(tt=t+1,i=n-2;i>=1;i--)
|
||||||
|
{
|
||||||
|
while(t!=tt&&!fx(a2[tt],a2[tt-1],a1[i]))
|
||||||
|
tt--;
|
||||||
|
a2[++tt]=a1[i];
|
||||||
|
}
|
||||||
|
for(maxr=0,i=1;i<tt;i++)
|
||||||
|
for(j=i+1;j<tt;j++)
|
||||||
|
for(k=j+1;k<tt;k++)
|
||||||
|
{
|
||||||
|
a=x_y(a2[i],a2[j]);
|
||||||
|
b=x_y(a2[i],a2[k]);
|
||||||
|
c=x_y(a2[j],a2[k]);
|
||||||
|
if(a*a+b*b<c*c||a*a+c*c<b*b||b*b+c*c<a*a)
|
||||||
|
r=max(max(a,b),c)/2.0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s=abss(sss(a2[i],a2[j],a2[k]))/2.0;
|
||||||
|
r=a*b*c/4.0/s;
|
||||||
|
}
|
||||||
|
maxr=max(r,maxr);
|
||||||
|
}
|
||||||
|
printf("%.2f\n",maxr+0.5);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
103
HDOJ/2216_autoAC.cpp
Normal file
103
HDOJ/2216_autoAC.cpp
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<queue>
|
||||||
|
#include<string.h>
|
||||||
|
using namespace std;
|
||||||
|
int n,m;
|
||||||
|
char map[50][50];
|
||||||
|
int dir[4][2]={1,0,-1,0,0,1,0,-1};
|
||||||
|
bool used[30][30][30][30];
|
||||||
|
int ab(int x)
|
||||||
|
{
|
||||||
|
if(x>0)
|
||||||
|
return x;
|
||||||
|
return -1*x;
|
||||||
|
}
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int sx,sy;
|
||||||
|
int step;
|
||||||
|
int zx,zy;
|
||||||
|
friend bool operator < (node a,node b)
|
||||||
|
{
|
||||||
|
return a.step>b.step;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
bool inmap(int x,int y)
|
||||||
|
{
|
||||||
|
if(x>=0&&x<n&&y>=0&&y<m&&map[x][y]!='X')
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool meet(int zx,int zy,int sx,int sy)
|
||||||
|
{
|
||||||
|
int distance=ab(zx-sx)+ab(zy-sy);
|
||||||
|
if(distance==0||distance==1)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int bfs(int zx,int zy,int sx,int sy)
|
||||||
|
{
|
||||||
|
node first,next;
|
||||||
|
priority_queue<node> q;
|
||||||
|
first.sx=sx;
|
||||||
|
first.sy=sy;
|
||||||
|
first.zx=zx;
|
||||||
|
first.zy=zy;
|
||||||
|
first.step=0;
|
||||||
|
q.push(first);
|
||||||
|
used[zx][zy][sx][sy]=true;
|
||||||
|
while(!q.empty())
|
||||||
|
{
|
||||||
|
first=q.top();
|
||||||
|
q.pop();
|
||||||
|
for(int i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
next.zx=first.zx+dir[i][0];
|
||||||
|
next.zy=first.zy+dir[i][1];
|
||||||
|
int ssx=first.sx-dir[i][0];
|
||||||
|
int ssy=first.sy-dir[i][1];
|
||||||
|
if(!inmap(next.zx,next.zy))
|
||||||
|
continue;
|
||||||
|
if(inmap(ssx,ssy))
|
||||||
|
{
|
||||||
|
next.sx=ssx;
|
||||||
|
next.sy=ssy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
next.sx=first.sx,next.sy=first.sy;
|
||||||
|
next.step=first.step+1;
|
||||||
|
if(!used[next.zx][next.zy][next.sx][next.sy])
|
||||||
|
{
|
||||||
|
if(meet(next.zx,next.zy,next.sx,next.sy))
|
||||||
|
return next.step;
|
||||||
|
used[next.zx][next.zy][next.sx][next.sy]=true;
|
||||||
|
q.push(next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(cin>>n>>m)
|
||||||
|
{
|
||||||
|
int zx,zy,sx,sy;
|
||||||
|
for(int k=0;k<n;k++)
|
||||||
|
scanf("%s",map[k]);
|
||||||
|
memset(used,0,sizeof used);
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
for(int j=0;j<m;j++)
|
||||||
|
{
|
||||||
|
if(map[i][j]=='Z')
|
||||||
|
zx=i,zy=j;
|
||||||
|
if(map[i][j]=='S')
|
||||||
|
sx=i,sy=j;
|
||||||
|
}
|
||||||
|
int ans=bfs(zx,zy,sx,sy);
|
||||||
|
if(ans!=-1)
|
||||||
|
cout<<ans<<endl;
|
||||||
|
else
|
||||||
|
cout<<"Bad Luck!"<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
71
HDOJ/2217_autoAC.cpp
Normal file
71
HDOJ/2217_autoAC.cpp
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <string.h>
|
||||||
|
using namespace std;
|
||||||
|
int place[200010] ;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n, m;
|
||||||
|
while(scanf("%d%d", &n, &m)!=EOF)
|
||||||
|
{
|
||||||
|
memset(place, 0, sizeof(place) );
|
||||||
|
bool flag1 ,flag2;
|
||||||
|
flag1 = flag2 = 0;
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
scanf("%d", &place[i]);
|
||||||
|
if(place[i] < 0 ) flag1 = 1;
|
||||||
|
else flag2 = 1;
|
||||||
|
}
|
||||||
|
sort(place, place+n);
|
||||||
|
if(flag1 && !flag2)
|
||||||
|
{
|
||||||
|
int max = 0, t_m = m;
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
if(abs(place[i]) <= m)
|
||||||
|
{max = n -i; break;}
|
||||||
|
}
|
||||||
|
printf("%d\n", max);
|
||||||
|
}
|
||||||
|
else if(!flag1 && flag2)
|
||||||
|
{
|
||||||
|
int max = n, t_m = m;
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
if((place[i]) > m)
|
||||||
|
{max = i; break;}
|
||||||
|
}
|
||||||
|
printf("%d\n", max);
|
||||||
|
}
|
||||||
|
else if(flag1 && flag2)
|
||||||
|
{
|
||||||
|
int max = 0, t_m = m;
|
||||||
|
int turn;
|
||||||
|
for(int i=0; i<n; i++)
|
||||||
|
if(place[i] >= 0) {turn = i; break;}
|
||||||
|
for(int i=0; i<turn; i++)
|
||||||
|
{
|
||||||
|
int t_max = 0;
|
||||||
|
for(int j=turn; j<n; j++)
|
||||||
|
{
|
||||||
|
if(2*abs(place[i]) + place[j] <= m)
|
||||||
|
t_max = j-i+1;
|
||||||
|
if(t_max > max) max = t_max;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=0; i<turn; i++)
|
||||||
|
{
|
||||||
|
int t_max = 0;
|
||||||
|
for(int j=turn; j<n; j++)
|
||||||
|
{
|
||||||
|
if(abs(place[i]) + 2*place[j] <= m)
|
||||||
|
t_max = j-i+1;
|
||||||
|
if(t_max > max) max = t_max;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n", max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
HDOJ/2218_autoAC.cpp
Normal file
17
HDOJ/2218_autoAC.cpp
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#include <iostream>
|
||||||
|
using namespace std;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int a[6],i,n;
|
||||||
|
cin>>n;
|
||||||
|
while(n--)
|
||||||
|
{
|
||||||
|
for(i=0;i<6;i++)
|
||||||
|
cin>>a[i];
|
||||||
|
if(a[0]-a[1]+a[2]-a[3]+a[4]-a[5]==0)
|
||||||
|
cout<<"YES\n";
|
||||||
|
else
|
||||||
|
cout<<"NO\n";
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
105
HDOJ/2222_autoAC.cpp
Normal file
105
HDOJ/2222_autoAC.cpp
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<string>
|
||||||
|
#include<queue>
|
||||||
|
using namespace std;
|
||||||
|
typedef struct node
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
node* fail;
|
||||||
|
node* next[26];
|
||||||
|
node()
|
||||||
|
{
|
||||||
|
count=0;
|
||||||
|
fail=NULL;
|
||||||
|
for(int i=0;i<26;++i)
|
||||||
|
next[i]=NULL;
|
||||||
|
}
|
||||||
|
}*Pnode;
|
||||||
|
Pnode insert(Pnode root,string s)
|
||||||
|
{
|
||||||
|
Pnode p=root;
|
||||||
|
int len=s.size();
|
||||||
|
for(int i=0;i<len;++i)
|
||||||
|
{
|
||||||
|
if(!p->next[s[i]-'a'])
|
||||||
|
p->next[s[i]-'a']=new node();
|
||||||
|
p=p->next[s[i]-'a'];
|
||||||
|
}
|
||||||
|
p->count++;
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
void build_AC(Pnode root)
|
||||||
|
{
|
||||||
|
Pnode p,temp;
|
||||||
|
queue<Pnode> q;
|
||||||
|
q.push(root);
|
||||||
|
while(!q.empty())
|
||||||
|
{
|
||||||
|
p=q.front();
|
||||||
|
q.pop();
|
||||||
|
for(int i=0;i<26;++i)
|
||||||
|
if(p->next[i])
|
||||||
|
{
|
||||||
|
if(p==root)
|
||||||
|
p->next[i]->fail=root;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
temp=p->fail;
|
||||||
|
while(temp)
|
||||||
|
{
|
||||||
|
if(temp->next[i])
|
||||||
|
{
|
||||||
|
p->next[i]->fail=temp->next[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
temp=temp->fail;
|
||||||
|
}
|
||||||
|
if(!temp)
|
||||||
|
p->next[i]->fail=root;
|
||||||
|
}
|
||||||
|
q.push(p->next[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int match(Pnode root,string s)
|
||||||
|
{
|
||||||
|
int result=0,len=s.size();
|
||||||
|
Pnode p=root,temp;
|
||||||
|
for(int i=0;i<len;++i)
|
||||||
|
{
|
||||||
|
while(!p->next[s[i]-'a']&&p!=root)
|
||||||
|
p=p->fail;
|
||||||
|
p=p->next[s[i]-'a'];
|
||||||
|
if(!p)
|
||||||
|
p=root;
|
||||||
|
temp=p;
|
||||||
|
while(temp!=root&&temp->count!=-1)
|
||||||
|
{
|
||||||
|
result+=temp->count;
|
||||||
|
temp->count=-1;
|
||||||
|
temp=temp->fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t,n;
|
||||||
|
string keyword,s;
|
||||||
|
Pnode root;
|
||||||
|
cin>>t;
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
root=new node();
|
||||||
|
cin>>n;
|
||||||
|
while(n--)
|
||||||
|
{
|
||||||
|
cin>>keyword;
|
||||||
|
root=insert(root,keyword);
|
||||||
|
}
|
||||||
|
build_AC(root);
|
||||||
|
cin>>s;
|
||||||
|
cout<<match(root,s)<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
48
HDOJ/2224_autoAC.cpp
Normal file
48
HDOJ/2224_autoAC.cpp
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
#define INF 0x7fffffff
|
||||||
|
#define N 201
|
||||||
|
struct point{
|
||||||
|
double x, y;
|
||||||
|
}point[N];
|
||||||
|
int n;
|
||||||
|
double dis[N][N];
|
||||||
|
double distant(int i, int j)
|
||||||
|
{
|
||||||
|
return sqrt((point[i].x - point[j].x)*(point[i].x - point[j].x) + (point[i].y - point[j].y)*(point[i].y - point[j].y));
|
||||||
|
}
|
||||||
|
double dp()
|
||||||
|
{
|
||||||
|
int i, j, k;
|
||||||
|
double temp, b[N][N];
|
||||||
|
b[1][2] = dis[1][2];
|
||||||
|
for (j=3; j<=n; j++)
|
||||||
|
{
|
||||||
|
for (i=1; i<=j-2; i++)
|
||||||
|
b[i][j] = b[i][j-1] + dis[j-1][j];
|
||||||
|
b[j-1][j] = INF;
|
||||||
|
for (k=1; k<=j-2; k++)
|
||||||
|
{
|
||||||
|
temp = b[k][j-1] + dis[k][j];
|
||||||
|
if (temp < b[j-1][j])
|
||||||
|
b[j-1][j] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b[n][n] = b[n-1][n] + dis[n-1][n];
|
||||||
|
return b[n][n];
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
double ans;
|
||||||
|
while (scanf("%d", &n) > 0)
|
||||||
|
{
|
||||||
|
for (i=1; i<=n; i++)
|
||||||
|
scanf("%lf %lf", &point[i].x, &point[i].y);
|
||||||
|
for (j=2; j<=n; j++)
|
||||||
|
for (i=1; i<j; i++)
|
||||||
|
dis[i][j] = distant(i,j);
|
||||||
|
ans = dp();
|
||||||
|
printf("%.2lf\n", dp());
|
||||||
|
}
|
||||||
|
}
|
24
HDOJ/2225_autoAC.cpp
Normal file
24
HDOJ/2225_autoAC.cpp
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
#include <cmath>
|
||||||
|
using namespace std;
|
||||||
|
typedef long long LL;
|
||||||
|
template<class T> T sqr(T x) { return x * x;}
|
||||||
|
template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a;}
|
||||||
|
int main() {
|
||||||
|
LL n, m;
|
||||||
|
while (cin >> n >> m) {
|
||||||
|
LL bx = 1, by = 1;
|
||||||
|
for (LL i = 1; i <= m; i++) {
|
||||||
|
LL t = (int) sqrt((double) sqr(i) * n);
|
||||||
|
for (int d = 0; d < 2; d++) {
|
||||||
|
if (abs(sqr(t + d) * sqr(by) - n * sqr(by) * sqr(i)) < abs(sqr(bx) * sqr(i) - n * sqr(by) * sqr(i))) bx = t + d, by = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LL GCD = gcd(bx, by);
|
||||||
|
cout << bx / GCD << "/" << by / GCD << endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
63
HDOJ/2227_autoAC.cpp
Normal file
63
HDOJ/2227_autoAC.cpp
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<iostream>
|
||||||
|
using namespace std;
|
||||||
|
const int maxn = 100000+10;
|
||||||
|
const int mod = 1000000007;
|
||||||
|
int c[maxn];
|
||||||
|
int n;
|
||||||
|
struct Node{
|
||||||
|
int value;
|
||||||
|
int index;
|
||||||
|
}node[maxn];
|
||||||
|
bool cmp(Node a, Node b)
|
||||||
|
{
|
||||||
|
if(a.value == b.value) return a.index < b.index;
|
||||||
|
else return a.value < b.value;
|
||||||
|
}
|
||||||
|
int lowbit(int x)
|
||||||
|
{
|
||||||
|
return x&(-x);
|
||||||
|
}
|
||||||
|
void add(int index, int value)
|
||||||
|
{
|
||||||
|
while(index <= n)
|
||||||
|
{
|
||||||
|
c[index] = (c[index]+value) % mod;
|
||||||
|
index += lowbit(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int sum(int index)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
while(index > 0)
|
||||||
|
{
|
||||||
|
ret = (ret+c[index])%mod;
|
||||||
|
index -= lowbit(index);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(scanf("%d", &n) != EOF)
|
||||||
|
{
|
||||||
|
memset(node, 0, sizeof(node));
|
||||||
|
memset(c, 0, sizeof(c));
|
||||||
|
for(int i = 1; i <= n; i++)
|
||||||
|
{
|
||||||
|
scanf("%d", &node[i].value);
|
||||||
|
node[i].index = i;
|
||||||
|
}
|
||||||
|
sort(node+1, node+n+1, cmp);
|
||||||
|
int tmp = 0;
|
||||||
|
for(int i = 1; i <= n; i++)
|
||||||
|
{
|
||||||
|
tmp = sum(node[i].index)+1;
|
||||||
|
tmp %= mod;
|
||||||
|
add(node[i].index, tmp);
|
||||||
|
}
|
||||||
|
printf("%d\n", sum(n));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
48
HDOJ/2228_autoAC.cpp
Normal file
48
HDOJ/2228_autoAC.cpp
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<string>
|
||||||
|
#include<vector>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
string ord[2];
|
||||||
|
string dfs(string ord)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
if(ord == "01")return "01";
|
||||||
|
ord = ord.substr(1,ord.length()-2);
|
||||||
|
vector<string> subtree;
|
||||||
|
int flag = 0,start = 0 ,end;
|
||||||
|
for(i = 0 ; i < ord.length() ; i++ )
|
||||||
|
{
|
||||||
|
flag += ord[i] == '0' ? 1 : -1;
|
||||||
|
if(!flag){
|
||||||
|
end = i;
|
||||||
|
subtree.push_back( dfs(ord.substr(start , end - start + 1)) );
|
||||||
|
start = end + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort(subtree.begin() , subtree.end() );
|
||||||
|
string ret = "0";
|
||||||
|
for(i = 0 ; i < subtree.size(); i ++)ret += subtree[i] ;
|
||||||
|
ret += "1";
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
bool solve()
|
||||||
|
{
|
||||||
|
if(dfs(ord[0]) == dfs(ord[1]))return true;
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int cas;
|
||||||
|
char t[2][4000];
|
||||||
|
scanf("%d",&cas);
|
||||||
|
while(cas--)
|
||||||
|
{
|
||||||
|
t[0][0] = t[1][0] = '0';
|
||||||
|
scanf("%s%s",t[0]+1,t[1]+1);
|
||||||
|
ord[0] = string(t[0]) + "1" ; ord[1] = string(t[1]) + "1";
|
||||||
|
if(solve())printf("True\n");
|
||||||
|
else printf("False\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
78
HDOJ/2232_autoAC.cpp
Normal file
78
HDOJ/2232_autoAC.cpp
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#include <iostream>
|
||||||
|
using namespace std;
|
||||||
|
int B[4][4]={
|
||||||
|
{1,1,0,1},
|
||||||
|
{1,1,1,0},
|
||||||
|
{0,1,1,1},
|
||||||
|
{1,0,1,1}
|
||||||
|
};
|
||||||
|
struct In{
|
||||||
|
int A[4][4];
|
||||||
|
};
|
||||||
|
In a,b;
|
||||||
|
void f(int n)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
if(n==0)
|
||||||
|
{
|
||||||
|
for(i=0; i<4; i++)
|
||||||
|
{
|
||||||
|
for(j=0; j<4; j++)
|
||||||
|
{
|
||||||
|
b.A[i][j]=B[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
f(n-1);
|
||||||
|
for(i=0; i<4; i++)
|
||||||
|
{
|
||||||
|
for(j=0; j<4; j++)
|
||||||
|
{
|
||||||
|
a.A[i][j]=b.A[i][j];
|
||||||
|
a.A[i][j]%=9937;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(n==1)
|
||||||
|
return ;
|
||||||
|
for(i=0; i<4; i++)
|
||||||
|
{
|
||||||
|
b.A[i][0]=a.A[i][0]+a.A[i][1]+a.A[i][3];
|
||||||
|
b.A[i][1]=a.A[i][0]+a.A[i][2]+a.A[i][1];
|
||||||
|
b.A[i][2]=a.A[i][1]+a.A[i][2]+a.A[i][3];
|
||||||
|
b.A[i][3]=a.A[i][0]+a.A[i][2]+a.A[i][3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Solve()
|
||||||
|
{
|
||||||
|
int i,j,e,f,sum=0;
|
||||||
|
for(i=0; i<4; i++)
|
||||||
|
{
|
||||||
|
for(j=0; j<4; j++)
|
||||||
|
{
|
||||||
|
for(e=0; e<4; e++)
|
||||||
|
{
|
||||||
|
for(f=0; f<4; f++)
|
||||||
|
{
|
||||||
|
if(i==j || i==e || i==f || j==e || j==f || e==f)
|
||||||
|
continue;
|
||||||
|
sum+=((((((b.A[0][i]*b.A[1][j])%9937)*b.A[2][e])%9937)*b.A[3][f])%9937)%9937;
|
||||||
|
sum%=9937;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<sum<<endl;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
while(cin>>n)
|
||||||
|
{
|
||||||
|
f(n);
|
||||||
|
Solve();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
85
HDOJ/2233_autoAC.cpp
Normal file
85
HDOJ/2233_autoAC.cpp
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<cstring>
|
||||||
|
#include<cmath>
|
||||||
|
using namespace std;
|
||||||
|
#define maxt(a,b) (a>b?a:b)
|
||||||
|
int a[100001];
|
||||||
|
int b[100001];
|
||||||
|
bool cmp(int x,int y)
|
||||||
|
{
|
||||||
|
return x>y;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int sum1,sum2,sum3,sum4,i,j,n,t,ji,s1,s2,max;
|
||||||
|
while(~scanf("%d %d",&n,&t))
|
||||||
|
{
|
||||||
|
sum1=sum2=sum3=sum4=0;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
scanf("%d",&a[i]);
|
||||||
|
}
|
||||||
|
sort(a,a+n,cmp);
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
if(a[i]<0)break;
|
||||||
|
}
|
||||||
|
ji=i;
|
||||||
|
for(j=0;i<n;j++,i++)
|
||||||
|
{
|
||||||
|
b[j]=abs(a[i]);
|
||||||
|
}
|
||||||
|
sort(a,a+ji);
|
||||||
|
s1=ji;
|
||||||
|
s2=n-ji;
|
||||||
|
for(i=0;i<s1;i++)
|
||||||
|
{
|
||||||
|
if(a[i]<=t)sum1++;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
for(i=0;i<s2;i++)
|
||||||
|
{
|
||||||
|
if(b[i]<=t)sum2++;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
max=0;
|
||||||
|
ji=0;
|
||||||
|
for(i=0;i<=t/2;i++)
|
||||||
|
{
|
||||||
|
ji=0;
|
||||||
|
for(j=0;j<=s1;j++)
|
||||||
|
{
|
||||||
|
if(a[j]<=i)ji++;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
for(j=0;j<s2;j++)
|
||||||
|
{
|
||||||
|
if(b[j]<=t-2*i)ji++;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
if(ji>max)max=ji;
|
||||||
|
}
|
||||||
|
sum3=max;
|
||||||
|
max=0;
|
||||||
|
ji=0;
|
||||||
|
for(i=0;i<=t/2;i++)
|
||||||
|
{
|
||||||
|
ji=0;
|
||||||
|
for(j=0;j<=s2;j++)
|
||||||
|
{
|
||||||
|
if(b[j]<=i)ji++;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
for(j=0;j<s1;j++)
|
||||||
|
{
|
||||||
|
if(a[j]<=t-2*i)ji++;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
if(ji>max)max=ji;
|
||||||
|
}
|
||||||
|
sum4=max;
|
||||||
|
printf("%d\n",maxt(maxt(sum1,sum2),maxt(sum3,sum4)));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
140
HDOJ/2234_autoAC.cpp
Normal file
140
HDOJ/2234_autoAC.cpp
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string.h>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
int map[5][5];
|
||||||
|
int deep;
|
||||||
|
int check()
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
if(map[1][1]!=map[1][2])
|
||||||
|
{
|
||||||
|
for(i = 1; i<=4; i++)
|
||||||
|
for(j = 1; j<=4; j++)
|
||||||
|
if(map[j][i]!=map[i][i])
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(i = 1; i<=4; i++)
|
||||||
|
for(j = 1; j<=4; j++)
|
||||||
|
if(map[i][j]!=map[i][i])
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int get_h()
|
||||||
|
{
|
||||||
|
int s1 = 0,s2 = 0,i,j;
|
||||||
|
for(i = 1; i<=4; i++)
|
||||||
|
{
|
||||||
|
int a[10] = {0},ans = 0;
|
||||||
|
for(j = 1; j<=4; j++)
|
||||||
|
a[map[i][j]]++;
|
||||||
|
for(j = 1; j<=4; j++)
|
||||||
|
ans+=a[j];
|
||||||
|
s1 = max(s1,4-ans);
|
||||||
|
}
|
||||||
|
for(j = 1; j<=4; j++)
|
||||||
|
{
|
||||||
|
int a[10] = {0},ans = 0;
|
||||||
|
for(i = 1; i<=4; i++)
|
||||||
|
a[map[i][j]]++;
|
||||||
|
for(i = 1; i<=4; i++)
|
||||||
|
ans+=a[j];
|
||||||
|
s2 = max(s2,4-ans);
|
||||||
|
}
|
||||||
|
return min(s1,s2);
|
||||||
|
}
|
||||||
|
void mov_l(int i)
|
||||||
|
{
|
||||||
|
int j;
|
||||||
|
int t = map[i][1];
|
||||||
|
for(j = 2; j<=4; j++)
|
||||||
|
map[i][j-1] = map[i][j];
|
||||||
|
map[i][4] = t;
|
||||||
|
}
|
||||||
|
void mov_r(int i)
|
||||||
|
{
|
||||||
|
int j;
|
||||||
|
int t = map[i][4];
|
||||||
|
for(j = 4; j>=2; j--)
|
||||||
|
map[i][j] = map[i][j-1];
|
||||||
|
map[i][1] = t;
|
||||||
|
}
|
||||||
|
void mov_u(int j)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int t = map[1][j];
|
||||||
|
for(i = 2; i<=4; i++)
|
||||||
|
map[i-1][j] = map[i][j];
|
||||||
|
map[4][j] = t;
|
||||||
|
}
|
||||||
|
void mov_d(int j)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int t = map[4][j];
|
||||||
|
for(i = 4; i>=2; i--)
|
||||||
|
map[i][j] = map[i-1][j];
|
||||||
|
map[1][j] = t;
|
||||||
|
}
|
||||||
|
int IDA(int step)
|
||||||
|
{
|
||||||
|
if(step == deep)
|
||||||
|
return check();
|
||||||
|
if(step+get_h()>deep)
|
||||||
|
return 0;
|
||||||
|
int i;
|
||||||
|
for(i = 1; i<=4; i++)
|
||||||
|
{
|
||||||
|
mov_l(i);
|
||||||
|
if(IDA(step+1))
|
||||||
|
return 1;
|
||||||
|
mov_r(i);
|
||||||
|
mov_r(i);
|
||||||
|
if(IDA(step+1))
|
||||||
|
return 1;
|
||||||
|
mov_l(i);
|
||||||
|
}
|
||||||
|
for(i = 1; i<=4; i++)
|
||||||
|
{
|
||||||
|
mov_u(i);
|
||||||
|
if(IDA(step+1))
|
||||||
|
return 1;
|
||||||
|
mov_d(i);
|
||||||
|
mov_d(i);
|
||||||
|
if(IDA(step+1))
|
||||||
|
return 1;
|
||||||
|
mov_u(i);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t,i,j;
|
||||||
|
cin >> t;
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
for(i = 1; i<=4; i++)
|
||||||
|
for(j = 1; j<=4; j++)
|
||||||
|
cin>>map[i][j];
|
||||||
|
if(check())
|
||||||
|
{
|
||||||
|
cout<<"0"<<endl;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
deep = 1;
|
||||||
|
while(deep<=5)
|
||||||
|
{
|
||||||
|
if(IDA(0))
|
||||||
|
break;
|
||||||
|
deep++;
|
||||||
|
}
|
||||||
|
if(deep<=5)
|
||||||
|
cout<<deep<<endl;
|
||||||
|
else
|
||||||
|
cout<<"-1"<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
99
HDOJ/2235_autoAC.cpp
Normal file
99
HDOJ/2235_autoAC.cpp
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<algorithm>
|
||||||
|
#define N_n 505
|
||||||
|
#define N_N 250050
|
||||||
|
using namespace std;
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int x ,y;
|
||||||
|
int high;
|
||||||
|
int key;
|
||||||
|
}NODE;
|
||||||
|
NODE node[N_N];
|
||||||
|
int H[N_n][N_n];
|
||||||
|
int mark[N_n][N_n];
|
||||||
|
int now_mksum;
|
||||||
|
int dir[4][2] = {0 ,1 ,0 ,-1 ,1 ,0 ,-1 ,0};
|
||||||
|
int n ,m;
|
||||||
|
bool camp(NODE a ,NODE b)
|
||||||
|
{
|
||||||
|
return a.high < b.high || a.high == b.high && a.key > b.key;
|
||||||
|
}
|
||||||
|
bool ok(int x ,int y ,int now_h)
|
||||||
|
{
|
||||||
|
if(x >= 1 && x <= n && y >= 1 && y <= m && !mark[x][y] && H[x][y] <= now_h)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void MK(int x ,int y ,int now_h)
|
||||||
|
{
|
||||||
|
for(int i = 0 ;i < 4 ;i ++)
|
||||||
|
{
|
||||||
|
int xx = x + dir[i][0];
|
||||||
|
int yy = y + dir[i][1];
|
||||||
|
if(ok(xx ,yy ,now_h))
|
||||||
|
{
|
||||||
|
mark[xx][yy] = 1;
|
||||||
|
now_mksum ++;
|
||||||
|
MK(xx ,yy ,now_h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
void jude(int x ,int y ,int now_h)
|
||||||
|
{
|
||||||
|
for(int i = 0 ;i < 4 ;i ++)
|
||||||
|
{
|
||||||
|
int xx = x + dir[i][0];
|
||||||
|
int yy = y + dir[i][1];
|
||||||
|
if(xx == 0 || xx == n + 1 || yy == 0 || yy == m + 1)
|
||||||
|
continue;
|
||||||
|
if(mark[xx][yy])
|
||||||
|
{
|
||||||
|
mark[x][y] = 1;
|
||||||
|
now_mksum ++;
|
||||||
|
MK(x ,y ,now_h);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
int t ,i ,j ,ans;
|
||||||
|
scanf("%d" ,&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
scanf("%d %d" ,&n ,&m);
|
||||||
|
for(i = 1 ;i <= n ;i ++)
|
||||||
|
for(j = 1 ;j <= m ;j ++)
|
||||||
|
{
|
||||||
|
scanf("%d" ,&H[i][j]);
|
||||||
|
int now = (i - 1) * m + j;
|
||||||
|
node[now].x = i;
|
||||||
|
node[now].y = j;
|
||||||
|
node[now].high = H[i][j];
|
||||||
|
node[now].key = (i == 1 || i == n || j == 1 || j == m);
|
||||||
|
}
|
||||||
|
sort(node + 1 ,node + n * m + 1 ,camp);
|
||||||
|
memset(mark ,0 ,sizeof(mark));
|
||||||
|
for(ans = now_mksum = 0 ,i = 1 ;i <= n * m ;i ++)
|
||||||
|
{
|
||||||
|
if(node[i].high == node[n*m].high) break;
|
||||||
|
if(!mark[node[i].x][node[i].y])
|
||||||
|
{
|
||||||
|
if(node[i].key)
|
||||||
|
{
|
||||||
|
mark[node[i].x][node[i].y] = 1;
|
||||||
|
now_mksum ++;
|
||||||
|
MK(node[i].x ,node[i].y ,node[i].high);
|
||||||
|
}
|
||||||
|
else jude(node[i].x ,node[i].y ,node[i].high);
|
||||||
|
}
|
||||||
|
if(node[i].high < node[i+1].high)
|
||||||
|
ans += ((node[i+1].high - node[i].high) * (i - now_mksum));
|
||||||
|
}
|
||||||
|
printf("%d\n" ,ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
78
HDOJ/2236_autoAC.cpp
Normal file
78
HDOJ/2236_autoAC.cpp
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#define INF 1000000000
|
||||||
|
int tot,list[10005],mark_dfs[10005],mark_gx[10005],n,map[105][105];
|
||||||
|
int max,min,left,right,kk,mid;
|
||||||
|
struct dian
|
||||||
|
{
|
||||||
|
int date,next,value;
|
||||||
|
}cun[10005];
|
||||||
|
void add(int a,int b,int c)
|
||||||
|
{
|
||||||
|
cun[tot].date=b;
|
||||||
|
cun[tot].value=c;
|
||||||
|
cun[tot].next=list[a];
|
||||||
|
list[a]=tot++;
|
||||||
|
}
|
||||||
|
int dfs(int x)
|
||||||
|
{
|
||||||
|
for(int i=list[x];i;i=cun[i].next)
|
||||||
|
{
|
||||||
|
int date=cun[i].date;
|
||||||
|
int w=cun[i].value;
|
||||||
|
if(mark_dfs[date]||w<kk||w>kk+mid) continue;
|
||||||
|
mark_dfs[date]=1;
|
||||||
|
if(mark_gx[date]==-1||dfs(mark_gx[date]))
|
||||||
|
{
|
||||||
|
mark_gx[date]=x;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int finish()
|
||||||
|
{
|
||||||
|
memset(mark_gx,255,sizeof(mark_gx));
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
memset(mark_dfs,0,sizeof(mark_dfs));
|
||||||
|
if(!dfs(i)) return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%d",&n);
|
||||||
|
tot=1;
|
||||||
|
min=INF;
|
||||||
|
max=-INF;
|
||||||
|
memset(list,0,sizeof(list));
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
for(int j=1;j<=n;j++)
|
||||||
|
{
|
||||||
|
scanf("%d",&map[i][j]);
|
||||||
|
if(min>map[i][j]) min=map[i][j];
|
||||||
|
if(max<map[i][j]) max=map[i][j];
|
||||||
|
add(i,j,map[i][j]);
|
||||||
|
}
|
||||||
|
right=max-min;
|
||||||
|
left=0;
|
||||||
|
while(left<=right)
|
||||||
|
{
|
||||||
|
if(left==right) break;
|
||||||
|
mid=(left+right-1)/2;
|
||||||
|
int flag=0;
|
||||||
|
for(kk=min;kk+mid<=max;kk++)
|
||||||
|
{
|
||||||
|
if(finish()) {flag=1;break;}
|
||||||
|
}
|
||||||
|
if(flag) {right=mid;}
|
||||||
|
if(!flag) {left=mid+1;}
|
||||||
|
}
|
||||||
|
printf("%d\n",right);
|
||||||
|
}
|
||||||
|
}
|
98
HDOJ/2238_autoAC.cpp
Normal file
98
HDOJ/2238_autoAC.cpp
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<cstdio>
|
||||||
|
#include<string.h>
|
||||||
|
using namespace std;
|
||||||
|
struct sta{
|
||||||
|
int s[4];
|
||||||
|
};
|
||||||
|
struct node{
|
||||||
|
int m[8][8];
|
||||||
|
}res,temp,mod;
|
||||||
|
int getnum( sta a )
|
||||||
|
{
|
||||||
|
int m,n,index;
|
||||||
|
m=n=0;
|
||||||
|
for( int i=0;i<4;i++ )
|
||||||
|
if( m<a.s[i] )
|
||||||
|
m=a.s[i],index=i;
|
||||||
|
m=0;
|
||||||
|
for( int i=0;i<4;i++ )
|
||||||
|
m=m*10+a.s[(index+i)%4],
|
||||||
|
n=n*10+a.s[(4+index-i)%4];
|
||||||
|
return m>n?m:n;
|
||||||
|
}
|
||||||
|
int h[4444];
|
||||||
|
void dfs( sta a,sta b,int at )
|
||||||
|
{
|
||||||
|
if( at>3 )
|
||||||
|
{
|
||||||
|
int n1=getnum(a);
|
||||||
|
int n2=getnum(b);
|
||||||
|
temp.m[h[n1]][h[n2]]++;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
for( int i=0;i<=a.s[at];i++ )//1->2
|
||||||
|
for( int j=0;i+j<=a.s[at];j++ )//1->0
|
||||||
|
{
|
||||||
|
sta x=b;
|
||||||
|
x.s[at]=x.s[at]-i-j;
|
||||||
|
x.s[(at+1)%4]+=i;
|
||||||
|
x.s[(at+3)%4]+=j;
|
||||||
|
dfs( a,x,at+1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node matriXmult( node a,node b )
|
||||||
|
{
|
||||||
|
node c;
|
||||||
|
memset( c.m,0,sizeof(c.m) );
|
||||||
|
for( int i=0;i<8;i++ )
|
||||||
|
for( int k=0;k<8;k++ )
|
||||||
|
if( a.m[i][k] )
|
||||||
|
for( int j=0;j<8;j++ )
|
||||||
|
c.m[i][j]+=a.m[i][k]*b.m[k][j];
|
||||||
|
for( int i=0;i<8;i++ )
|
||||||
|
for( int j=0;j<8;j++ )
|
||||||
|
c.m[i][j]%=9937;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
void matrixPower( int n )
|
||||||
|
{
|
||||||
|
memset( res.m,0,sizeof(res.m) );
|
||||||
|
for( int i=0;i<8;i++ )
|
||||||
|
{
|
||||||
|
res.m[i][i]=1;
|
||||||
|
for( int j=0;j<8;j++ )
|
||||||
|
mod.m[i][j]=temp.m[i][j];
|
||||||
|
}
|
||||||
|
for( int i=0;i<32;i++ )
|
||||||
|
{
|
||||||
|
if( n&(1<<i) )
|
||||||
|
res=matriXmult( res,mod );
|
||||||
|
mod=matriXmult( mod,mod );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
memset( temp.m,0,sizeof(temp.m) );
|
||||||
|
for( int i=0;i<8;i++ )
|
||||||
|
res.m[i][i]=1;
|
||||||
|
int a[8][4]={ 1,1,1,1,2,0,2,0,2,1,0,1,
|
||||||
|
2,1,1,0,2,2,0,0,3,0,1,0,
|
||||||
|
3,1,0,0,4,0,0,0 };
|
||||||
|
h[1111]=0;h[2020]=1;h[2101]=2;
|
||||||
|
h[2110]=3;h[2200]=4;h[3010]=5;
|
||||||
|
h[3100]=6;h[4000]=7;
|
||||||
|
sta s;
|
||||||
|
for( int i=0;i<8;i++ ){
|
||||||
|
for( int j=0;j<4;j++ )
|
||||||
|
s.s[j]=a[i][j];
|
||||||
|
dfs( s,s,0 );
|
||||||
|
}
|
||||||
|
int n;
|
||||||
|
while( scanf( "%d",&n )!=EOF )
|
||||||
|
{
|
||||||
|
matrixPower(n);
|
||||||
|
printf( "%d\n",res.m[0][0] );
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
66
HDOJ/2239_autoAC.cpp
Normal file
66
HDOJ/2239_autoAC.cpp
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <math.h>
|
||||||
|
using namespace std;
|
||||||
|
#define M 66000
|
||||||
|
#define LL __int64
|
||||||
|
int p[6600], k, vis[M] = {0}, mod = 9937;
|
||||||
|
int Euler (int n)
|
||||||
|
{
|
||||||
|
int i, res = n;
|
||||||
|
for (i = 0; i < k && (LL)p[i]*p[i] <= n; i++)
|
||||||
|
{
|
||||||
|
if (n % p[i] == 0)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
n /= p[i];
|
||||||
|
while (n % p[i] == 0);
|
||||||
|
res = res - res/p[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (n > 1) res = res - res/n;
|
||||||
|
return res % mod;
|
||||||
|
}
|
||||||
|
int qmod (int a, int b)
|
||||||
|
{
|
||||||
|
a %= mod;
|
||||||
|
int res = 1;
|
||||||
|
for ( ; b; b >>= 1)
|
||||||
|
{
|
||||||
|
if (b & 1) res = res * a % mod;
|
||||||
|
a = a * a % mod;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n, m, i, j, ms, ans;
|
||||||
|
k = 0;
|
||||||
|
for (i = 2; i < M; i++)
|
||||||
|
{
|
||||||
|
if (!vis[i])
|
||||||
|
{
|
||||||
|
p[k++] = i;
|
||||||
|
for (j = i+i; j < M; j+=i)
|
||||||
|
vis[j] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (~scanf ("%d%d", &n, &m))
|
||||||
|
{
|
||||||
|
ms = (int)sqrt (n+0.5);
|
||||||
|
ans = 0;
|
||||||
|
for (i = 1; i <= ms; i++)
|
||||||
|
{
|
||||||
|
if (n % i == 0)
|
||||||
|
{
|
||||||
|
ans = (ans + Euler (n/i)*qmod (m, i)%mod) % mod;
|
||||||
|
if (i != n/i) ans = (ans + Euler (i)*qmod (m, n/i)%mod) % mod;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int tot = ans;
|
||||||
|
for (ans = 0; ans < mod; ans++)
|
||||||
|
if ((LL)ans*n % mod == tot % mod)
|
||||||
|
break;
|
||||||
|
printf ("%d\n", ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
53
HDOJ/2241_autoAC.cpp
Normal file
53
HDOJ/2241_autoAC.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <math.h>
|
||||||
|
using namespace std;
|
||||||
|
#define N 10005
|
||||||
|
#define EPS 1e-10
|
||||||
|
double MIN;
|
||||||
|
double n;
|
||||||
|
double x[N],y[N];
|
||||||
|
double yyy(double xx,int id)
|
||||||
|
{
|
||||||
|
double yy,k;
|
||||||
|
k=(y[id+1]-y[id])/(x[id+1]-x[id]);
|
||||||
|
yy=y[id]+k*(xx-x[id]);
|
||||||
|
return yy;
|
||||||
|
}
|
||||||
|
void san_fen(int m)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
double x1,y1,x2,y2,midx1,midx2,d,elem1,elem2;
|
||||||
|
for(i=0;i<m-1;i++)
|
||||||
|
{
|
||||||
|
x1=x[i];y1=y[i];
|
||||||
|
x2=x[i+1];y2=y[i+1];
|
||||||
|
d=(y2-y1)/(x2-x1);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
midx1=(x1+x2)/2;
|
||||||
|
midx2=(midx1+x2)/2;
|
||||||
|
elem1=n/(midx1*midx1)+yyy(midx1,i);
|
||||||
|
elem2=n/(midx2*midx2)+yyy(midx2,i);
|
||||||
|
if(elem1>elem2)
|
||||||
|
x1=midx1;
|
||||||
|
else if(elem1<elem2)
|
||||||
|
x2=midx2;
|
||||||
|
}
|
||||||
|
while(fabs(elem1-elem2)>EPS);
|
||||||
|
if(MIN>elem1)
|
||||||
|
MIN=elem1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int m,i;
|
||||||
|
while(scanf("%d%lf",&m,&n)!=EOF)
|
||||||
|
{
|
||||||
|
MIN=999999.0;
|
||||||
|
for(i=0;i<m;i++)
|
||||||
|
scanf("%lf%lf",&x[i],&y[i]);
|
||||||
|
san_fen(m);
|
||||||
|
printf("%.3lf\n",MIN);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
100
HDOJ/2242_autoAC.cpp
Normal file
100
HDOJ/2242_autoAC.cpp
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stack>
|
||||||
|
#include<math.h>
|
||||||
|
using namespace std;
|
||||||
|
#define N 10005
|
||||||
|
#define M 20005
|
||||||
|
struct node{
|
||||||
|
int from,to,next;
|
||||||
|
}edge[2*M],edge1[2*M];
|
||||||
|
int head[N],tol,n,m,cnt,dfn[N],low[N],visit[N],Belong[N],tol1,head1[N],val[N],val1[N],SUM,Min,count;
|
||||||
|
stack<int>S;
|
||||||
|
void add(int a,int b)
|
||||||
|
{
|
||||||
|
edge[tol].from=a;edge[tol].to=b;edge[tol].next=head[a];head[a]=tol++;
|
||||||
|
}
|
||||||
|
void add1(int a,int b)
|
||||||
|
{
|
||||||
|
edge1[tol1].from=a;edge1[tol1].to=b;edge1[tol1].next=head1[a];head1[a]=tol1++;
|
||||||
|
}
|
||||||
|
int min(int a,int b)
|
||||||
|
{
|
||||||
|
return a<b?a:b;
|
||||||
|
}
|
||||||
|
void tarjan(int u,int father)
|
||||||
|
{
|
||||||
|
int j,v,flag;
|
||||||
|
dfn[u]=low[u]=cnt++;
|
||||||
|
visit[u]=1;
|
||||||
|
S.push(u);
|
||||||
|
flag=0;
|
||||||
|
for(j=head[u];j!=-1;j=edge[j].next)
|
||||||
|
{
|
||||||
|
v=edge[j].to;
|
||||||
|
if(v==father && !flag) {flag=1;continue;}
|
||||||
|
if(!visit[v]) tarjan(v,u);
|
||||||
|
low[u]=min(low[u],low[v]);
|
||||||
|
}
|
||||||
|
if(dfn[u]==low[u])
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
do{
|
||||||
|
v=S.top();
|
||||||
|
S.pop();
|
||||||
|
Belong[v]=count;
|
||||||
|
val[count]+=val1[v];
|
||||||
|
}while(v!=u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int dfs(int u,int father)
|
||||||
|
{
|
||||||
|
int j,v,sum;
|
||||||
|
sum=val[u];
|
||||||
|
for(j=head1[u];j!=-1;j=edge1[j].next)
|
||||||
|
{
|
||||||
|
v=edge1[j].to;
|
||||||
|
if(v==father) continue;
|
||||||
|
sum+=dfs(v,u);
|
||||||
|
}
|
||||||
|
Min=min(Min,abs(SUM-2*sum));
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,a,b;
|
||||||
|
while(scanf("%d%d",&n,&m)!=EOF)
|
||||||
|
{
|
||||||
|
memset(head,-1,sizeof(head));
|
||||||
|
tol=cnt=0;
|
||||||
|
SUM=0;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
scanf("%d",&val1[i]);
|
||||||
|
SUM+=val1[i];
|
||||||
|
}
|
||||||
|
for(i=1;i<=m;i++)
|
||||||
|
{
|
||||||
|
scanf("%d%d",&a,&b);
|
||||||
|
add(a,b);
|
||||||
|
add(b,a);
|
||||||
|
}
|
||||||
|
memset(visit,0,sizeof(visit));
|
||||||
|
memset(val,0,sizeof(val));
|
||||||
|
count=0;
|
||||||
|
tarjan(0,0);
|
||||||
|
if(count==1) {printf("impossible\n");continue;}
|
||||||
|
tol1=0;
|
||||||
|
memset(head1,-1,sizeof(head1));
|
||||||
|
for(i=0;i<tol;i++)
|
||||||
|
{
|
||||||
|
a=edge[i].from;
|
||||||
|
b=edge[i].to;
|
||||||
|
if(Belong[a]!=Belong[b]) add1(Belong[a],Belong[b]);
|
||||||
|
}
|
||||||
|
Min=0xfffffff;
|
||||||
|
dfs(1,0);
|
||||||
|
printf("%d\n",Min);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
212
HDOJ/2243_autoAC.cpp
Normal file
212
HDOJ/2243_autoAC.cpp
Normal file
|
@ -0,0 +1,212 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<string.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
#define LL unsigned __int64
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int cnt;
|
||||||
|
struct node *fail;
|
||||||
|
struct node *next[26];
|
||||||
|
struct node *jump[26];
|
||||||
|
};
|
||||||
|
node root[33];
|
||||||
|
int num;
|
||||||
|
char str[10];
|
||||||
|
LL mod=10330176681277348905;
|
||||||
|
void insert(char word[])
|
||||||
|
{
|
||||||
|
int i=0;
|
||||||
|
node *tmp=root;
|
||||||
|
while(word[i])
|
||||||
|
{
|
||||||
|
int b=word[i]-'a';
|
||||||
|
if(tmp->next[b]==NULL)
|
||||||
|
{
|
||||||
|
tmp->next[b]=root+num;
|
||||||
|
memset(root+num,0,sizeof(struct node));
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
tmp=tmp->next[b];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
tmp->cnt=1;
|
||||||
|
}
|
||||||
|
node *q[33];
|
||||||
|
int head,tail;
|
||||||
|
void add_fail()
|
||||||
|
{
|
||||||
|
head=tail=0;
|
||||||
|
q[tail++]=root;
|
||||||
|
while(head<tail)
|
||||||
|
{
|
||||||
|
node *x=q[head++];
|
||||||
|
for(int i=0;i<26;i++)
|
||||||
|
{
|
||||||
|
node *t=x->fail;
|
||||||
|
while(t!=NULL && t->next[i]==NULL)
|
||||||
|
t=t->fail;
|
||||||
|
if(x->next[i]!=NULL)
|
||||||
|
{
|
||||||
|
q[tail++]=x->next[i];
|
||||||
|
if(t==NULL)
|
||||||
|
x->next[i]->fail=root;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x->next[i]->fail=t->next[i];
|
||||||
|
if(t->next[i]->cnt)
|
||||||
|
x->next[i]->cnt=1;
|
||||||
|
}
|
||||||
|
x->jump[i]=x->next[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(t==NULL)
|
||||||
|
x->jump[i]=root;
|
||||||
|
else
|
||||||
|
x->jump[i]=t->next[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int m;
|
||||||
|
int n;
|
||||||
|
struct Mat
|
||||||
|
{
|
||||||
|
LL a[2*33][2*33];
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
for(i=0;i<2*33;i++)
|
||||||
|
for(j=0;j<2*33;j++)
|
||||||
|
a[i][j]=0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
int len;
|
||||||
|
Mat e;
|
||||||
|
Mat mul(Mat a,Mat b)
|
||||||
|
{
|
||||||
|
Mat res;
|
||||||
|
int i,j,k;
|
||||||
|
for(i=0;i<2*len;i++)
|
||||||
|
{
|
||||||
|
for(j=0;j<2*len;j++)
|
||||||
|
{
|
||||||
|
res.a[i][j]=0;
|
||||||
|
for(k=0;k<2*len;k++)
|
||||||
|
{
|
||||||
|
if(a.a[i][k]>0 && b.a[k][j]>0)
|
||||||
|
{
|
||||||
|
res.a[i][j]+=a.a[i][k]*b.a[k][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
LL solve(Mat a,int k)
|
||||||
|
{
|
||||||
|
Mat b,ans=e;
|
||||||
|
int i,j;
|
||||||
|
b.init();
|
||||||
|
for(i=0;i<len;i++)
|
||||||
|
for(j=0;j<len;j++)
|
||||||
|
b.a[i][j]=a.a[i][j];
|
||||||
|
for(i=0;i<len;i++)
|
||||||
|
{
|
||||||
|
for(j=len;j<2*len;j++)
|
||||||
|
b.a[i][j]=(i==j-len);
|
||||||
|
}
|
||||||
|
for(i=len;i<2*len;i++)
|
||||||
|
{
|
||||||
|
for(j=len;j<2*len;j++)
|
||||||
|
b.a[i][j]=(i==j);
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
while(k)
|
||||||
|
{
|
||||||
|
if(k&1)
|
||||||
|
{
|
||||||
|
ans=mul(ans,b);
|
||||||
|
}
|
||||||
|
b=mul(b,b);
|
||||||
|
k/=2;
|
||||||
|
}
|
||||||
|
LL res=0;
|
||||||
|
for(i=0;i<len;i++)
|
||||||
|
{
|
||||||
|
res+=ans.a[i][len];
|
||||||
|
}
|
||||||
|
return res-1;
|
||||||
|
}
|
||||||
|
LL sum(LL a,int k)
|
||||||
|
{
|
||||||
|
Mat b;
|
||||||
|
Mat ans=e;
|
||||||
|
b.init();
|
||||||
|
b.a[0][0]=26;b.a[0][1]=1;
|
||||||
|
b.a[1][0]=0; b.a[1][1]=1;
|
||||||
|
k++;
|
||||||
|
while(k)
|
||||||
|
{
|
||||||
|
if(k&1)
|
||||||
|
{
|
||||||
|
ans=mul(ans,b);
|
||||||
|
}
|
||||||
|
b=mul(b,b);
|
||||||
|
k/=2;
|
||||||
|
}
|
||||||
|
return ans.a[0][1]-1;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j,k;
|
||||||
|
for(i=0;i<2*33;i++)
|
||||||
|
for(j=0;j<2*33;j++)
|
||||||
|
e.a[i][j]=(i==j);
|
||||||
|
while(scanf("%d%d",&n,&m)==2)
|
||||||
|
{
|
||||||
|
num=1;
|
||||||
|
memset(root,0,sizeof(struct node));
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
scanf("%*c%s",str);
|
||||||
|
insert(str);
|
||||||
|
}
|
||||||
|
add_fail();
|
||||||
|
int id=0,id1;
|
||||||
|
Mat res;
|
||||||
|
for(i=0;i<num;i++)
|
||||||
|
{
|
||||||
|
if(root[i].cnt==0)
|
||||||
|
{
|
||||||
|
id1=0;
|
||||||
|
for(j=0;j<num;j++)
|
||||||
|
{
|
||||||
|
if(root[j].cnt==0)
|
||||||
|
{
|
||||||
|
LL count=0;
|
||||||
|
for(k=0;k<26;k++)
|
||||||
|
{
|
||||||
|
if(root[j].jump[k]==root+i)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.a[id][id1]=count;
|
||||||
|
id1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
id++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
len=id;
|
||||||
|
LL all=sum(26,m);
|
||||||
|
LL left=solve(res,m);
|
||||||
|
all-=left;
|
||||||
|
if(all<0)
|
||||||
|
all+=mod;
|
||||||
|
printf("%I64u\n",all);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
244
HDOJ/2248_autoAC.cpp
Normal file
244
HDOJ/2248_autoAC.cpp
Normal file
|
@ -0,0 +1,244 @@
|
||||||
|
#include <functional>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <numeric>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <bitset>
|
||||||
|
#include <queue>
|
||||||
|
#include <stack>
|
||||||
|
#include <cmath>
|
||||||
|
#include <ctime>
|
||||||
|
#include <list>
|
||||||
|
#include <set>
|
||||||
|
#include <map>
|
||||||
|
using namespace std;
|
||||||
|
#define FOR(i,a) for((i)=0;i<(a);(i)++)
|
||||||
|
#define MEM(a) (memset((a),0,sizeof(a)))
|
||||||
|
#define LL long long
|
||||||
|
const int N=6500010;
|
||||||
|
const int M=20010;
|
||||||
|
const int MOD=1000000007ll;
|
||||||
|
const int INF=0x7fffffff;
|
||||||
|
const int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
|
||||||
|
const double eps=1e-8;
|
||||||
|
const double PI=acos(-1.0);
|
||||||
|
inline int sign(double x){return (x>eps)-(x<-eps);}
|
||||||
|
template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
|
||||||
|
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
|
||||||
|
template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
|
||||||
|
template<class T> inline T Min(T a,T b){return a<b?a:b;}
|
||||||
|
template<class T> inline T Max(T a,T b){return a>b?a:b;}
|
||||||
|
template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
|
||||||
|
template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
|
||||||
|
template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
|
||||||
|
template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
|
||||||
|
char str[12];
|
||||||
|
bool f[N];
|
||||||
|
int tot,prime[N];
|
||||||
|
int a[M],r[M];
|
||||||
|
void fun()
|
||||||
|
{
|
||||||
|
int i,j,s;
|
||||||
|
memset(f,true,sizeof(f));
|
||||||
|
f[1]=false;
|
||||||
|
tot=0;
|
||||||
|
prime[tot++]=2;
|
||||||
|
for(i=4;i<=N;i+=2)
|
||||||
|
f[i]=false;
|
||||||
|
for(i=3;i*i<=N;i+=2)
|
||||||
|
{
|
||||||
|
if(!f[i])
|
||||||
|
continue;
|
||||||
|
prime[tot++]=i;
|
||||||
|
for(s=2*i,j=i*i;j<=N;j+=s)
|
||||||
|
f[j]=false;
|
||||||
|
}
|
||||||
|
for(;i<=N;i++)
|
||||||
|
if(f[i])
|
||||||
|
prime[tot++]=i;
|
||||||
|
}
|
||||||
|
void Swords()
|
||||||
|
{
|
||||||
|
char ss[110];
|
||||||
|
scanf("%s",ss);
|
||||||
|
int len=(int)strlen(ss);
|
||||||
|
if(f[len])
|
||||||
|
printf("Yes.\n");
|
||||||
|
else
|
||||||
|
printf("No.\n");
|
||||||
|
}
|
||||||
|
void Stones()
|
||||||
|
{
|
||||||
|
int n,sign,p=0,len=INF;
|
||||||
|
memset(r,-1,sizeof(r));
|
||||||
|
r[0]=0;
|
||||||
|
scanf("%d",&n);
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
scanf("%d",&a[i]);
|
||||||
|
p=(p+a[i])%n;
|
||||||
|
if(r[p] != -1)
|
||||||
|
{
|
||||||
|
if(i-r[p] < len)
|
||||||
|
{
|
||||||
|
len=i-r[p];
|
||||||
|
sign=r[p]+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r[p]=i;
|
||||||
|
}
|
||||||
|
if(len == INF)
|
||||||
|
printf("浜绾疯!\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(int i=sign;i<sign+len;i++)
|
||||||
|
{
|
||||||
|
if(i!=sign)
|
||||||
|
printf(" ");
|
||||||
|
printf("%d",i);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void Search()
|
||||||
|
{
|
||||||
|
int x,k,i=0;
|
||||||
|
scanf("%d%d",&x,&k);
|
||||||
|
while(x > 1)
|
||||||
|
{
|
||||||
|
while(x%prime[i] == 0)
|
||||||
|
{
|
||||||
|
x/=prime[i];
|
||||||
|
k--;
|
||||||
|
if(k == 0)
|
||||||
|
{
|
||||||
|
printf("%d\n",prime[i]);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
printf("no\n");
|
||||||
|
}
|
||||||
|
#define MAXN 9999
|
||||||
|
#define MAXSIZE 10
|
||||||
|
#define DLEN 4
|
||||||
|
class BigNum
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int a[1510];
|
||||||
|
int len;
|
||||||
|
public:
|
||||||
|
BigNum(){ len = 1;memset(a,0,sizeof(a)); }
|
||||||
|
BigNum(const int);
|
||||||
|
BigNum operator*(const BigNum &) const;
|
||||||
|
BigNum operator^(const int &) const;
|
||||||
|
void print();
|
||||||
|
};
|
||||||
|
BigNum::BigNum(const int b)
|
||||||
|
{
|
||||||
|
int c,d = b;
|
||||||
|
len = 0;
|
||||||
|
memset(a,0,sizeof(a));
|
||||||
|
while(d > MAXN)
|
||||||
|
{
|
||||||
|
c = d - (d / (MAXN + 1)) * (MAXN + 1);
|
||||||
|
d = d / (MAXN + 1);
|
||||||
|
a[len++] = c;
|
||||||
|
}
|
||||||
|
a[len++] = d;
|
||||||
|
}
|
||||||
|
BigNum BigNum::operator*(const BigNum & T) const
|
||||||
|
{
|
||||||
|
BigNum ret;
|
||||||
|
int i,j,up;
|
||||||
|
int temp,temp1;
|
||||||
|
for(i = 0 ; i < len ; i++)
|
||||||
|
{
|
||||||
|
up = 0;
|
||||||
|
for(j = 0 ; j < T.len ; j++)
|
||||||
|
{
|
||||||
|
temp = a[i] * T.a[j] + ret.a[i + j] + up;
|
||||||
|
if(temp > MAXN)
|
||||||
|
{
|
||||||
|
temp1 = temp - temp / (MAXN + 1) * (MAXN + 1);
|
||||||
|
up = temp / (MAXN + 1);
|
||||||
|
ret.a[i + j] = temp1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
up = 0;
|
||||||
|
ret.a[i + j] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(up != 0)
|
||||||
|
ret.a[i + j] = up;
|
||||||
|
}
|
||||||
|
ret.len = i + j;
|
||||||
|
while(ret.a[ret.len - 1] == 0 && ret.len > 1)
|
||||||
|
ret.len--;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
BigNum BigNum::operator^(const int & n) const
|
||||||
|
{
|
||||||
|
BigNum t,ret(1);
|
||||||
|
int i;
|
||||||
|
if(n<0)
|
||||||
|
exit(-1);
|
||||||
|
if(n==0)
|
||||||
|
return 1;
|
||||||
|
if(n==1)
|
||||||
|
return *this;
|
||||||
|
int m=n;
|
||||||
|
while(m>1)
|
||||||
|
{
|
||||||
|
t=*this;
|
||||||
|
for(i=1;i<<1<=m;i<<=1)
|
||||||
|
t=t*t;
|
||||||
|
m-=i;
|
||||||
|
ret=ret*t;
|
||||||
|
if(m==1)
|
||||||
|
ret=ret*(*this);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
void BigNum::print()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
printf("%d",a[len-1]);
|
||||||
|
for(i = len - 2 ; i >= 0 ; i--)
|
||||||
|
printf("%04d",a[i]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
void See()
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
scanf("%d",&n);
|
||||||
|
BigNum t(2);
|
||||||
|
BigNum ans=t^n;
|
||||||
|
ans.print();
|
||||||
|
}
|
||||||
|
void solve()
|
||||||
|
{
|
||||||
|
if(!strcmp(str,"Swords"))
|
||||||
|
Swords();
|
||||||
|
else if(!strcmp(str,"Stones"))
|
||||||
|
Stones();
|
||||||
|
else if(!strcmp(str,"Search"))
|
||||||
|
Search();
|
||||||
|
else
|
||||||
|
See();
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
fun();
|
||||||
|
while(scanf("%s",str)!=EOF)
|
||||||
|
solve();
|
||||||
|
return 0;
|
||||||
|
}
|
70
HDOJ/2253_autoAC.cpp
Normal file
70
HDOJ/2253_autoAC.cpp
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#define M 30005
|
||||||
|
#define SIZE 128
|
||||||
|
#define WORDMAX 3200
|
||||||
|
#define BIT 32
|
||||||
|
char s1[M], s2[M];
|
||||||
|
int nword;
|
||||||
|
unsigned int str[SIZE][WORDMAX];
|
||||||
|
unsigned int tmp1[WORDMAX], tmp2[WORDMAX];
|
||||||
|
void pre(int len)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
memset(str, 0, sizeof(str));
|
||||||
|
for(i = 0; i < len; i ++)
|
||||||
|
str[s1[i]][i / BIT] |= 1 << (i % BIT);
|
||||||
|
}
|
||||||
|
void cal(unsigned int *a, unsigned int *b, char ch)
|
||||||
|
{
|
||||||
|
int i, bottom = 1, top;
|
||||||
|
unsigned int x, y;
|
||||||
|
for(i = 0; i < nword; i ++)
|
||||||
|
{
|
||||||
|
y = a[i];
|
||||||
|
x = y | str[ch][i];
|
||||||
|
top = (y >> (BIT - 1)) & 1;
|
||||||
|
y = (y << 1) | bottom;
|
||||||
|
if(x < y) top = 1;
|
||||||
|
b[i] = x & ((x - y) ^ x);
|
||||||
|
bottom = top;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int bitcnt(unsigned int *a)
|
||||||
|
{
|
||||||
|
int i, j, res = 0, t;
|
||||||
|
unsigned int b[5] = {0x55555555, 0x33333333, 0x0f0f0f0f, 0x00ff00ff, 0x0000ffff}, x;
|
||||||
|
for(i = 0; i < nword; i ++)
|
||||||
|
{
|
||||||
|
x = a[i];
|
||||||
|
t = 1;
|
||||||
|
for(j = 0; j < 5; j ++, t <<= 1)
|
||||||
|
x = (x & b[j]) + ((x >> t) & b[j]);
|
||||||
|
res += x;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
void process()
|
||||||
|
{
|
||||||
|
int i, j, len1, len2;
|
||||||
|
unsigned int *a, *b, *t;
|
||||||
|
len1 = strlen(s1);
|
||||||
|
len2 = strlen(s2);
|
||||||
|
nword = (len1 + BIT - 1) / BIT;
|
||||||
|
pre(len1);
|
||||||
|
memset(tmp1, 0, sizeof(tmp1));
|
||||||
|
a = &tmp1[0];
|
||||||
|
b = &tmp2[0];
|
||||||
|
for(i = 0; i < len2; i ++)
|
||||||
|
{
|
||||||
|
cal(a, b, s2[i]);
|
||||||
|
t = a; a = b; b = t;
|
||||||
|
}
|
||||||
|
printf("%d\n", bitcnt(a));
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(scanf("%s%s", s1, s2) != EOF)
|
||||||
|
process();
|
||||||
|
return 0;
|
||||||
|
}
|
76
HDOJ/2254_autoAC.cpp
Normal file
76
HDOJ/2254_autoAC.cpp
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<map>
|
||||||
|
#include<string.h>
|
||||||
|
using namespace std;
|
||||||
|
#define N 35
|
||||||
|
#define FF(i,n) for(int i=0;i<n;i++)
|
||||||
|
int ans[N];
|
||||||
|
int init[N][N];
|
||||||
|
void matrixMul(int a[][N],int b[][N],int n,int mod){
|
||||||
|
int i,j,k;
|
||||||
|
int buf[N][N]={0};
|
||||||
|
FF(i,n)FF(k,n) if(a[i][k])FF(j,n)if(b[k][j])
|
||||||
|
buf[i][j]=(buf[i][j]+a[i][k]*b[k][j])%mod;
|
||||||
|
FF(i,n)FF(j,n) a[i][j]=buf[i][j];
|
||||||
|
}
|
||||||
|
void matrixMul(int a[],int b[][N],int n,int mod){
|
||||||
|
int i,j;
|
||||||
|
int buf[N]={0};
|
||||||
|
FF(i,n)FF(j,n)
|
||||||
|
buf[i]=(buf[i]+a[j]*b[i][j])%mod;
|
||||||
|
FF(i,n) a[i]=buf[i];
|
||||||
|
}
|
||||||
|
void matrixMul(int ans[],int init[][N],int n,int m,int mod){
|
||||||
|
for(;m;m>>=1){
|
||||||
|
if(m&1) matrixMul(ans,init,n,mod);
|
||||||
|
matrixMul(init,init,n,mod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main(void){
|
||||||
|
int t;
|
||||||
|
int i,j,k,n,mod;
|
||||||
|
int Map[N][N];
|
||||||
|
n=30;
|
||||||
|
mod=2008;
|
||||||
|
while(~scanf("%d",&t)){
|
||||||
|
int a,b;
|
||||||
|
int ind=0;
|
||||||
|
map<int,int> M;
|
||||||
|
memset(Map,0,sizeof(Map));
|
||||||
|
while(t--){
|
||||||
|
scanf("%d%d",&a,&b);
|
||||||
|
if(M.find(a)==M.end())
|
||||||
|
M[a]=ind++;
|
||||||
|
if(M.find(b)==M.end())
|
||||||
|
M[b]=ind++;
|
||||||
|
Map[M[b]][M[a]]++;
|
||||||
|
}
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--){
|
||||||
|
int v1,v2;
|
||||||
|
int t1,t2;
|
||||||
|
scanf("%d%d%d%d",&v1,&v2,&t1,&t2);
|
||||||
|
if(M.find(v1)==M.end()||M.find(v2)==M.end()||(t1==0&&t2==0)){
|
||||||
|
printf("0\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
memset(ans,0,sizeof(ans));
|
||||||
|
ans[M[v1]]=1;
|
||||||
|
int ret;
|
||||||
|
if(t1==0)
|
||||||
|
ret=0;
|
||||||
|
else{
|
||||||
|
FF(j,M.size())FF(k,M.size()) init[j][k]=Map[j][k];
|
||||||
|
matrixMul(ans,init,M.size(),t1,mod);
|
||||||
|
ret=ans[M[v2]]%mod;
|
||||||
|
}
|
||||||
|
t1++;
|
||||||
|
for(;t1<=t2;t1++){
|
||||||
|
FF(i,M.size())FF(j,M.size()) init[i][j]=Map[i][j];
|
||||||
|
matrixMul(ans,init,M.size(),1,mod);
|
||||||
|
ret=(ret+ans[M[v2]])%mod;
|
||||||
|
}
|
||||||
|
printf("%d\n",ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
87
HDOJ/2255_autoAC.cpp
Normal file
87
HDOJ/2255_autoAC.cpp
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#define Max 456
|
||||||
|
#include<cstring>
|
||||||
|
using namespace std;
|
||||||
|
int g[Max][Max];
|
||||||
|
int lx[Max],ly[Max];
|
||||||
|
int visx[Max],visy[Max];
|
||||||
|
int match[Max];
|
||||||
|
int n;
|
||||||
|
int findpath(int u);
|
||||||
|
int KM();
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
//int T;
|
||||||
|
//scanf("%d",&T);
|
||||||
|
while(~scanf("%d",&n))
|
||||||
|
{
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
for(int j=1;j<=n;j++)
|
||||||
|
scanf("%d",&g[i][j]);
|
||||||
|
printf("%d\n",KM());
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int findpath(int u)
|
||||||
|
{
|
||||||
|
visx[u]=1;
|
||||||
|
for(int v=1;v<=n;v++)
|
||||||
|
{
|
||||||
|
if(!visy[v]&&lx[u]+ly[v]==g[u][v])
|
||||||
|
{
|
||||||
|
int t=match[v];visy[v]=1;
|
||||||
|
if(!t||findpath(t))
|
||||||
|
{
|
||||||
|
match[v]=u;return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int KM()
|
||||||
|
{
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
lx[i]=0x80000000;
|
||||||
|
ly[i]=0;
|
||||||
|
for(int j=1;j<=n;j++)
|
||||||
|
if(lx[i]<g[i][j])
|
||||||
|
lx[i]=g[i][j];
|
||||||
|
}
|
||||||
|
memset(match,0,sizeof(match));
|
||||||
|
for(int u=1;u<=n;u++)
|
||||||
|
{
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
memset(visx,0,sizeof(visx));
|
||||||
|
memset(visy,0,sizeof(visy));
|
||||||
|
if(findpath(u))
|
||||||
|
break;
|
||||||
|
int d=0x7fffffff;
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
if(visx[i])
|
||||||
|
{
|
||||||
|
for(int j=1;j<=n;j++)
|
||||||
|
if(!visy[j]&&d>lx[i]+ly[j]-g[i][j])
|
||||||
|
d=lx[i]+ly[j]-g[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int k=1;k<=n;k++)
|
||||||
|
{
|
||||||
|
if(visx[k])
|
||||||
|
lx[k]-=d;
|
||||||
|
if(visy[k])
|
||||||
|
ly[k]+=d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int sum=0;
|
||||||
|
for(int i=1;i<=n;i++)
|
||||||
|
{
|
||||||
|
int t=match[i];
|
||||||
|
if(t)
|
||||||
|
sum+=g[t][i];
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
53
HDOJ/2256_autoAC.cpp
Normal file
53
HDOJ/2256_autoAC.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include<iostream>
|
||||||
|
#include<cstdio>
|
||||||
|
#include<memory.h>
|
||||||
|
using namespace std;
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int matrix[3][3];
|
||||||
|
}ma,e;
|
||||||
|
node operator *(node x,node y)
|
||||||
|
{
|
||||||
|
node temp;
|
||||||
|
for(int i=1;i<=2;i++)
|
||||||
|
for(int j=1;j<=2;j++)
|
||||||
|
{
|
||||||
|
temp.matrix[i][j]=0;
|
||||||
|
for(int k=1;k<=2;k++)
|
||||||
|
temp.matrix[i][j]+=(x.matrix[i][k]*y.matrix[k][j])%1024;
|
||||||
|
temp.matrix[i][j]%=1024;
|
||||||
|
}
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
node operator ^ (node ma,int k)
|
||||||
|
{
|
||||||
|
node ans=e,p=ma;
|
||||||
|
if(k==0)
|
||||||
|
return e;
|
||||||
|
while(k)
|
||||||
|
{
|
||||||
|
if(k%2==1)
|
||||||
|
{
|
||||||
|
ans=ans*p;
|
||||||
|
}
|
||||||
|
k=k/2;
|
||||||
|
p=p*p;
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T,n;
|
||||||
|
memset(e.matrix,0,sizeof(e.matrix));
|
||||||
|
e.matrix[1][1]=e.matrix[2][2]=1;
|
||||||
|
scanf("%d",&T);
|
||||||
|
ma.matrix[1][1]=5,ma.matrix[1][2]=12,ma.matrix[2][1]=2,ma.matrix[2][2]=5;
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%d",&n);
|
||||||
|
node temp=ma^(n-1);
|
||||||
|
int ans=(2*(temp.matrix[1][1]*5+temp.matrix[1][2]*2)-1)%1024;
|
||||||
|
printf("%d\n",ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
107
HDOJ/2258_autoAC.cpp
Normal file
107
HDOJ/2258_autoAC.cpp
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
int n,m,total,nxt[4][2]={{0,-1},{-1,0},{1,0},{0,1}};
|
||||||
|
bool vis[20][20];
|
||||||
|
char d[20][21];
|
||||||
|
void dfs(int x,int y,int num)
|
||||||
|
{
|
||||||
|
for(int i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
x+=nxt[i][0];
|
||||||
|
y+=nxt[i][1];
|
||||||
|
if(x>=0 && x<n && y>=0 && y<m && !vis[x][y] && d[x][y]==num)
|
||||||
|
{
|
||||||
|
vis[x][y]=1;
|
||||||
|
total++;
|
||||||
|
dfs(x,y,num);
|
||||||
|
}
|
||||||
|
x-=nxt[i][0];
|
||||||
|
y-=nxt[i][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void tran(int x,int y,int num)
|
||||||
|
{
|
||||||
|
for(int i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
x+=nxt[i][0];
|
||||||
|
y+=nxt[i][1];
|
||||||
|
if(x>=0 && x<n && y>=0 && y<m && d[x][y]==num)
|
||||||
|
{
|
||||||
|
d[x][y]='0';
|
||||||
|
tran(x,y,num);
|
||||||
|
}
|
||||||
|
x-=nxt[i][0];
|
||||||
|
y-=nxt[i][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j,k,mx,x,y,ans,remain,t;
|
||||||
|
while(~scanf("%d%d",&n,&m))
|
||||||
|
{
|
||||||
|
for(i=0;i<n;i++) scanf("%s",d[i]);
|
||||||
|
ans=0;
|
||||||
|
remain=n*m;
|
||||||
|
while(remain)
|
||||||
|
{
|
||||||
|
mx=0;
|
||||||
|
for(i=0;i<n;i++) for(j=0;j<m;j++) vis[i][j]=0;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
for(j=0;j<m;j++)
|
||||||
|
{
|
||||||
|
if(d[i][j]>'0' && !vis[i][j])
|
||||||
|
{
|
||||||
|
vis[i][j]=1;
|
||||||
|
total=1;
|
||||||
|
dfs(i,j,d[i][j]);
|
||||||
|
if(total>mx)
|
||||||
|
{
|
||||||
|
mx=total;
|
||||||
|
x=i;
|
||||||
|
y=j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
remain-=mx;
|
||||||
|
ans+=mx*(mx-1);
|
||||||
|
tran(x,y,d[x][y]);
|
||||||
|
d[x][y]='0';
|
||||||
|
for(i=n-1;i>=0;i--)
|
||||||
|
{
|
||||||
|
for(j=0;j<m;j++)
|
||||||
|
{
|
||||||
|
if(d[i][j]=='0')
|
||||||
|
{
|
||||||
|
for(k=i-1;k>=0;k--)
|
||||||
|
{
|
||||||
|
if(d[k][j]>'0')
|
||||||
|
{
|
||||||
|
d[i][j]=d[k][j];
|
||||||
|
d[k][j]='0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t=m-1;
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
for(j=0;j<m-1;j++)
|
||||||
|
{
|
||||||
|
for(i=0;i<n;i++) if(d[i][j]>'0') break;
|
||||||
|
if(i==n)
|
||||||
|
{
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
d[i][j]=d[i][j+1];
|
||||||
|
d[i][j+1]='0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n",ans);
|
||||||
|
}
|
||||||
|
}
|
150
HDOJ/2259_autoAC.cpp
Normal file
150
HDOJ/2259_autoAC.cpp
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <queue>
|
||||||
|
using namespace std;
|
||||||
|
struct S{
|
||||||
|
char mp[20][21];
|
||||||
|
int step,ans,x[50],y[50],val;
|
||||||
|
int num[20][20];
|
||||||
|
bool operator<(const S &p) const
|
||||||
|
{
|
||||||
|
return val<p.val;
|
||||||
|
}
|
||||||
|
}t,ans,tt;
|
||||||
|
int n,m,nxt[4][2]={{1,0},{0,1},{-1,0},{0,-1}},cnt;
|
||||||
|
char temp[20][21];
|
||||||
|
bool vis[20][20];
|
||||||
|
void dfs(int x,int y,char c)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
for(i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
x+=nxt[i][0];
|
||||||
|
y+=nxt[i][1];
|
||||||
|
if(x>=0 && x<n && y>=0 && y<m && !vis[x][y] && temp[x][y]==c)
|
||||||
|
{
|
||||||
|
vis[x][y]=1;
|
||||||
|
cnt++;
|
||||||
|
dfs(x,y,c);
|
||||||
|
}
|
||||||
|
x-=nxt[i][0];
|
||||||
|
y-=nxt[i][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void tran(int x,int y,char num,char (*d)[21])
|
||||||
|
{
|
||||||
|
for(int i=0;i<4;i++)
|
||||||
|
{
|
||||||
|
x+=nxt[i][0];
|
||||||
|
y+=nxt[i][1];
|
||||||
|
if(x>=0 && x<n && y>=0 && y<m && d[x][y]==num)
|
||||||
|
{
|
||||||
|
d[x][y]='0';
|
||||||
|
tran(x,y,num,d);
|
||||||
|
}
|
||||||
|
x-=nxt[i][0];
|
||||||
|
y-=nxt[i][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void move(char (*d)[21])
|
||||||
|
{
|
||||||
|
int i,j,k;
|
||||||
|
for(i=n-1;i>=0;i--)
|
||||||
|
{
|
||||||
|
for(j=0;j<m;j++)
|
||||||
|
{
|
||||||
|
if(d[i][j]=='0')
|
||||||
|
{
|
||||||
|
for(k=i-1;k>=0;k--)
|
||||||
|
{
|
||||||
|
if(d[k][j]>'0')
|
||||||
|
{
|
||||||
|
d[i][j]=d[k][j];
|
||||||
|
d[k][j]='0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int t=m-1;
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
for(j=0;j<m-1;j++)
|
||||||
|
{
|
||||||
|
for(i=0;i<n;i++) if(d[i][j]>'0') break;
|
||||||
|
if(i==n)
|
||||||
|
{
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
d[i][j]=d[i][j+1];
|
||||||
|
d[i][j+1]='0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void eval(S &node)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
for(i=0;i<n;i++) for(j=0;j<m;j++) vis[i][j]=0,temp[i][j]=node.mp[i][j];
|
||||||
|
node.val=node.ans;
|
||||||
|
for(i=0;i<n;i++) for(j=0;j<m;j++)
|
||||||
|
{
|
||||||
|
node.num[i][j]=0;
|
||||||
|
if(temp[i][j]>'0' && !vis[i][j])
|
||||||
|
{
|
||||||
|
vis[i][j]=1;
|
||||||
|
cnt=1;
|
||||||
|
dfs(i,j,temp[i][j]);
|
||||||
|
if(cnt>1)
|
||||||
|
{
|
||||||
|
node.num[i][j]=cnt;
|
||||||
|
node.val+=cnt*(cnt-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j,p,q,tot;
|
||||||
|
while(~scanf("%d%d",&n,&m))
|
||||||
|
{
|
||||||
|
for(i=0;i<n;i++) scanf("%s",t.mp[i]);
|
||||||
|
t.step=0;
|
||||||
|
t.ans=0;
|
||||||
|
t.val=0;
|
||||||
|
ans.ans=0;
|
||||||
|
priority_queue<S>que;
|
||||||
|
eval(t);
|
||||||
|
que.push(t);
|
||||||
|
tot=0;
|
||||||
|
while(!que.empty())
|
||||||
|
{
|
||||||
|
t=que.top();
|
||||||
|
if(t.ans>ans.ans) ans=t;
|
||||||
|
tot++;
|
||||||
|
if(tot>24) break;
|
||||||
|
que.pop();
|
||||||
|
for(i=0;i<n;i++) for(j=0;j<m;j++)
|
||||||
|
{
|
||||||
|
if(t.num[i][j])
|
||||||
|
{
|
||||||
|
tt=t;
|
||||||
|
tran(i,j,t.mp[i][j],t.mp);
|
||||||
|
t.mp[i][j]='0';
|
||||||
|
move(t.mp);
|
||||||
|
t.x[t.step]=i;
|
||||||
|
t.y[t.step]=j;
|
||||||
|
t.step++;
|
||||||
|
t.ans+=t.num[i][j]*(t.num[i][j]-1);
|
||||||
|
eval(t);
|
||||||
|
que.push(t);
|
||||||
|
t=tt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n",ans.step);
|
||||||
|
for(i=0;i<ans.step;i++) printf("%d %d\n",ans.x[i],ans.y[i]);
|
||||||
|
}
|
||||||
|
}
|
141
HDOJ/2262_autoAC.cpp
Normal file
141
HDOJ/2262_autoAC.cpp
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
#include <functional>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <numeric>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <bitset>
|
||||||
|
#include <queue>
|
||||||
|
#include <stack>
|
||||||
|
#include <cmath>
|
||||||
|
#include <ctime>
|
||||||
|
#include <list>
|
||||||
|
#include <set>
|
||||||
|
#include <map>
|
||||||
|
using namespace std;
|
||||||
|
#define pii pair<int,int>
|
||||||
|
#define mem(a,b) memset(a,b,sizeof(a))
|
||||||
|
#define lson l,mid,rt<<1
|
||||||
|
#define rson mid+1,r,rt<<1|1
|
||||||
|
#define PI acos(-1.0)
|
||||||
|
typedef __int64 LL;
|
||||||
|
typedef unsigned __int64 ULL;
|
||||||
|
const int N=230;
|
||||||
|
const int INF=0x3f3f3f3f;
|
||||||
|
const LL MOD=1000000007,STA=8000010;
|
||||||
|
const LL LNF=1LL<<55;
|
||||||
|
const double EPS=1e-9;
|
||||||
|
const double OO=1e30;
|
||||||
|
const int dx[4]={-1,0,1,0};
|
||||||
|
const int dy[4]={0,1,0,-1};
|
||||||
|
const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
inline int sign(double x){return (x>EPS)-(x<-EPS);}
|
||||||
|
template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
|
||||||
|
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
|
||||||
|
template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
|
||||||
|
template<class T> inline T Min(T a,T b){return a<b?a:b;}
|
||||||
|
template<class T> inline T Max(T a,T b){return a>b?a:b;}
|
||||||
|
template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
|
||||||
|
template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
|
||||||
|
template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
|
||||||
|
template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
|
||||||
|
int vis[20][20],cnt[20][20],e[20][20];
|
||||||
|
char g[20][20];
|
||||||
|
int n,m,tot,sx,sy;
|
||||||
|
double A[N][N];
|
||||||
|
int gauss(int n)
|
||||||
|
{
|
||||||
|
int i,j,k,r;
|
||||||
|
for(i=0;i<n;i++){
|
||||||
|
r=i;
|
||||||
|
for(j=i+1;j<n;j++)
|
||||||
|
if(fabs(A[j][i]) > fabs(A[r][i]))r=j;
|
||||||
|
if(r!=i)for(j=0;j<=n;j++)swap(A[r][j],A[i][j]);
|
||||||
|
for(j=n;j>=i;j--){
|
||||||
|
for(k=i+1;k<n;k++)
|
||||||
|
A[k][j]-=A[k][i]/A[i][i]*A[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i=0;i<n;i++)if(sign(A[i][i])==0)return 0;
|
||||||
|
for(i=n-1;i>=0;i--){
|
||||||
|
for(j=i+1;j<n;j++)
|
||||||
|
A[i][n]-=A[j][n]*A[i][j];
|
||||||
|
A[i][n]/=A[i][i];
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int bfs()
|
||||||
|
{
|
||||||
|
int i,j,x,y,nx,ny,t;
|
||||||
|
queue<int> q;
|
||||||
|
q.push(sx*m+sy);
|
||||||
|
mem(vis,-1);mem(cnt,0);
|
||||||
|
vis[sx][sy]=tot=0;
|
||||||
|
tot++;
|
||||||
|
while(!q.empty()){
|
||||||
|
t=q.front();q.pop();
|
||||||
|
x=t/m;y=t%m;
|
||||||
|
for(i=0;i<4;i++){
|
||||||
|
nx=x+dx[i];
|
||||||
|
ny=y+dy[i];
|
||||||
|
if(nx>=0&&nx<n && ny>=0&&ny<m && g[nx][ny]!='#'){
|
||||||
|
cnt[x][y]++;
|
||||||
|
if(vis[nx][ny]!=-1)continue;
|
||||||
|
vis[nx][ny]=tot++;
|
||||||
|
q.push(nx*m+ny);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i=0;i<n;i++){
|
||||||
|
for(j=0;j<m;j++)
|
||||||
|
if(vis[i][j]!=-1 && e[i][j])return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
int i,j,k;
|
||||||
|
while(~scanf("%d%d",&n,&m))
|
||||||
|
{
|
||||||
|
mem(e,0);
|
||||||
|
for(i=0;i<n;i++){
|
||||||
|
scanf("%s",g[i]);
|
||||||
|
for(j=0;j<m;j++){
|
||||||
|
if(g[i][j]=='@')sx=i,sy=j;
|
||||||
|
else if(g[i][j]=='$')e[i][j]=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!bfs()){
|
||||||
|
printf("-1\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
mem(A,0);
|
||||||
|
for(i=0;i<n;i++){
|
||||||
|
for(j=0;j<m;j++){
|
||||||
|
if(vis[i][j]==-1)continue;
|
||||||
|
int u=vis[i][j];
|
||||||
|
double p=1.0/cnt[i][j];
|
||||||
|
if(e[i][j]){
|
||||||
|
A[u][u]=1;
|
||||||
|
A[u][tot]=0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
A[u][u]=A[u][tot]=1;
|
||||||
|
for(k=0;k<4;k++){
|
||||||
|
int x=i+dx[k],y=j+dy[k];
|
||||||
|
if(x>=0&&x<n && y>=0&&y<m && vis[x][y]!=-1){
|
||||||
|
A[u][vis[x][y]]=-p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gauss(tot);
|
||||||
|
printf("%.6lf\n",A[vis[sx][sy]][tot]);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
39
HDOJ/2265_autoAC.cpp
Normal file
39
HDOJ/2265_autoAC.cpp
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int a,b,j,m;
|
||||||
|
char c[210],d[210];
|
||||||
|
while(fgets(c,210,stdin))
|
||||||
|
{
|
||||||
|
int e[210]={0};
|
||||||
|
m=0;
|
||||||
|
a=strlen(c);
|
||||||
|
for(j=0;j<a-1;j++)
|
||||||
|
if(c[j]!=' ')
|
||||||
|
d[m++]=c[j];
|
||||||
|
d[m]='\0';
|
||||||
|
b=strlen(d);
|
||||||
|
for(j=2;j<b;)
|
||||||
|
{
|
||||||
|
printf("%c",d[j]);
|
||||||
|
e[j]=1;
|
||||||
|
j=j+3;
|
||||||
|
}
|
||||||
|
for(j=1;j<b;j=j+2)
|
||||||
|
{
|
||||||
|
if(e[j]==1)
|
||||||
|
continue;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%c",d[j]);
|
||||||
|
e[j]=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(j=0;j<b;j++)
|
||||||
|
if(e[j]!=1)
|
||||||
|
printf("%c",d[j]);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
55
HDOJ/2266_autoAC.cpp
Normal file
55
HDOJ/2266_autoAC.cpp
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
using namespace std;
|
||||||
|
__int64 sum,ji;
|
||||||
|
void dfs(char s[],__int64 now,int ci)
|
||||||
|
{
|
||||||
|
int i,j,len;
|
||||||
|
char str[15];
|
||||||
|
len=strlen(s);
|
||||||
|
if(len == 0)
|
||||||
|
{
|
||||||
|
if(now == sum)ji++;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if(ci == 0)
|
||||||
|
{
|
||||||
|
for(i=0;i<len;i++)
|
||||||
|
{
|
||||||
|
for(j=0;j<=i;j++)
|
||||||
|
{
|
||||||
|
str[j]=s[j];
|
||||||
|
}
|
||||||
|
str[j]=0;
|
||||||
|
dfs(s+i+1,(__int64)atoi(str),ci+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(i=0;i<len;i++)
|
||||||
|
{
|
||||||
|
for(j=0;j<=i;j++)
|
||||||
|
{
|
||||||
|
str[j]=s[j];
|
||||||
|
}
|
||||||
|
str[j]=0;
|
||||||
|
dfs(s+1+i,now+atoi(str),ci+1);
|
||||||
|
dfs(s+1+i,now-atoi(str),ci+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
char s[15];
|
||||||
|
memset(s,0,sizeof(s));
|
||||||
|
while(~scanf("%s %I64d",s,&sum))
|
||||||
|
{
|
||||||
|
ji=0;
|
||||||
|
dfs(s,0,0);
|
||||||
|
printf("%I64d\n",ji);
|
||||||
|
memset(s,0,sizeof(s));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
102
HDOJ/2267_autoAC.cpp
Normal file
102
HDOJ/2267_autoAC.cpp
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<iostream>
|
||||||
|
#include<deque>
|
||||||
|
using namespace std;
|
||||||
|
struct PT {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
};
|
||||||
|
void Fill(int n, int m, char Graph[][305]) {
|
||||||
|
int i, j;
|
||||||
|
for (i = 0; i <= n + 1; i++)
|
||||||
|
Graph[i][0] = Graph[i][m + 1] = '*';
|
||||||
|
for (i = 0; i <= m + 1; i++)
|
||||||
|
Graph[0][i] = Graph[n + 1][i] = '*';
|
||||||
|
}
|
||||||
|
void BFS(int n, int m, char Graph[][305], int &O, int &V) {
|
||||||
|
int i, j;
|
||||||
|
int numO, numV, sumO = 0, sumV = 0;
|
||||||
|
int plusX[] = {0, 1, 0, -1};
|
||||||
|
int plusY[] = {1, 0, -1, 0};
|
||||||
|
bool IsSurvive;
|
||||||
|
deque<PT> Queue;
|
||||||
|
int top = 0;
|
||||||
|
PT pt, get;
|
||||||
|
bool IsReturn;
|
||||||
|
RETURN:
|
||||||
|
IsReturn = false;
|
||||||
|
for (i = 1; i <= n; i++)
|
||||||
|
for (j = 1; j <= m; j++)
|
||||||
|
if (Graph[i][j] != '#' && Graph[i][j] != '-') {
|
||||||
|
pt.x = i;
|
||||||
|
pt.y = j;
|
||||||
|
Queue.push_back(pt);
|
||||||
|
IsReturn = true;
|
||||||
|
goto BFSSTART;
|
||||||
|
}
|
||||||
|
BFSSTART:
|
||||||
|
IsSurvive = true;
|
||||||
|
numO = 0;
|
||||||
|
numV = 0;
|
||||||
|
while (!Queue.empty()) {
|
||||||
|
get = Queue.front();
|
||||||
|
Queue.pop_front();
|
||||||
|
if (Graph[get.x][get.y] == 'v')
|
||||||
|
numV++;
|
||||||
|
if (Graph[get.x][get.y] == 'o')
|
||||||
|
numO++;
|
||||||
|
Graph[get.x][get.y] = '-';
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
if (Graph[get.x + plusX[i]][get.y + plusY[i]] == '*')
|
||||||
|
IsSurvive = false;
|
||||||
|
if (Graph[get.x + plusX[i]][get.y + plusY[i]] == 'v') {
|
||||||
|
pt.x = get.x + plusX[i];
|
||||||
|
pt.y = get.y + plusY[i];
|
||||||
|
Queue.push_back(pt);
|
||||||
|
numV++;
|
||||||
|
Graph[get.x + plusX[i]][get.y + plusY[i]] = '-';
|
||||||
|
}
|
||||||
|
if (Graph[get.x + plusX[i]][get.y + plusY[i]] == 'o') {
|
||||||
|
pt.x = get.x + plusX[i];
|
||||||
|
pt.y = get.y + plusY[i];
|
||||||
|
Queue.push_back(pt);
|
||||||
|
numO++;
|
||||||
|
Graph[get.x + plusX[i]][get.y + plusY[i]] = '-';
|
||||||
|
}
|
||||||
|
if (Graph[get.x + plusX[i]][get.y + plusY[i]] == '.') {
|
||||||
|
pt.x = get.x + plusX[i];
|
||||||
|
pt.y = get.y + plusY[i];
|
||||||
|
Queue.push_back(pt);
|
||||||
|
Graph[get.x + plusX[i]][get.y + plusY[i]] = '-';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (IsSurvive) {
|
||||||
|
if (numV > numO)
|
||||||
|
sumV += numV;
|
||||||
|
else if (numV < numO)
|
||||||
|
sumO += numO;
|
||||||
|
}
|
||||||
|
if (IsReturn)
|
||||||
|
goto RETURN;
|
||||||
|
ANS:
|
||||||
|
O = sumO;
|
||||||
|
V = sumV;
|
||||||
|
}
|
||||||
|
int main() {
|
||||||
|
char Graph[305][305];
|
||||||
|
int n, m;
|
||||||
|
int i, j;
|
||||||
|
int O, V;
|
||||||
|
while (scanf("%d%d", &n, &m) != EOF) {
|
||||||
|
for (i = 1; i <= n; i++)
|
||||||
|
scanf("%s", &Graph[i][1]);
|
||||||
|
Fill(n, m, Graph);
|
||||||
|
BFS(n, m, Graph, O, V);
|
||||||
|
printf("%d %d\n", O, V);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
18
HDOJ/2268_autoAC.cpp
Normal file
18
HDOJ/2268_autoAC.cpp
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
double time,a,b,c;
|
||||||
|
while(scanf("%lf%lf%lf",&a,&b,&c)!=EOF)
|
||||||
|
{
|
||||||
|
if(a>=b)time=c*1.0/a;
|
||||||
|
else {
|
||||||
|
double L=2*a*c/(3*a+b);
|
||||||
|
time=(c-L)/b+L/a;
|
||||||
|
}
|
||||||
|
printf("%.3lf\n",time);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
86
HDOJ/2269_autoAC.cpp
Normal file
86
HDOJ/2269_autoAC.cpp
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<queue>
|
||||||
|
#define MAXD 15
|
||||||
|
#define ST 2048
|
||||||
|
#define INF 0x3f3f3f3f
|
||||||
|
char name[MAXD][25];
|
||||||
|
int N, M, T, f[2][ST], vis[2][ST], danger[ST];
|
||||||
|
char b[1010];
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
int i, j, k, n, st;
|
||||||
|
for(i = 0; i < N; i ++) scanf("%s", name[i]);
|
||||||
|
memset(danger, 0, sizeof(danger));
|
||||||
|
gets(b);
|
||||||
|
for(i = 0; i < M; i ++)
|
||||||
|
{
|
||||||
|
gets(b);
|
||||||
|
st = 0;
|
||||||
|
char *p = strtok(b, " ");
|
||||||
|
for(j = 0; j < N; j ++) if(strcmp(name[j], p) == 0) st |= 1 << j;
|
||||||
|
while((p = strtok(NULL, " ")) != NULL)
|
||||||
|
for(j = 0; j < N; j ++) if(strcmp(name[j], p) == 0) st |= 1 << j;
|
||||||
|
danger[st] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int can(int st)
|
||||||
|
{
|
||||||
|
int i, n = 0;
|
||||||
|
for(i = 0; i < N; i ++)
|
||||||
|
if(st & 1 << i) ++ n;
|
||||||
|
return n <= T;
|
||||||
|
}
|
||||||
|
int check(int st)
|
||||||
|
{
|
||||||
|
for(int i = st; i > 0; i = i - 1 & st)
|
||||||
|
if(danger[i]) return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
void solve()
|
||||||
|
{
|
||||||
|
int i, j, k, cur, st, ans = -1, D = (1 << N) - 1;
|
||||||
|
std::queue <int> q;
|
||||||
|
memset(vis, 0, sizeof(vis));
|
||||||
|
f[0][0] = 0, vis[0][0] = 1;
|
||||||
|
q.push(0);
|
||||||
|
while(!q.empty())
|
||||||
|
{
|
||||||
|
cur = q.front() & 1, st = q.front() >> 1, q.pop();
|
||||||
|
if(cur == 1 && st == D)
|
||||||
|
{
|
||||||
|
ans = f[cur][st];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(cur == 1 && check(st) && !vis[0][st])
|
||||||
|
f[0][st] = f[1][st] + 1, vis[0][st] = 1, q.push(st << 1);
|
||||||
|
if(cur == 0) st = ~st & D;
|
||||||
|
for(i = st; i > 0; i = i - 1 & st)
|
||||||
|
if(can(i) && check(st - i))
|
||||||
|
{
|
||||||
|
if(cur == 0)
|
||||||
|
{
|
||||||
|
int t = ~(st - i) & D;
|
||||||
|
if(!vis[1][t])
|
||||||
|
f[1][t] = f[0][~st & D] + 1, vis[1][t] = 1, q.push(t << 1 | 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int t = st - i;
|
||||||
|
if(!vis[0][t])
|
||||||
|
f[0][t] = f[1][st] + 1, vis[0][t] = 1, q.push(t << 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n", ans);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(scanf("%d%d%d", &N, &M, &T) == 3)
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
solve();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
54
HDOJ/2270_autoAC.cpp
Normal file
54
HDOJ/2270_autoAC.cpp
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
#include<cmath>
|
||||||
|
#include<iostream>
|
||||||
|
#include<string>
|
||||||
|
#include<vector>
|
||||||
|
#include<map>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<queue>
|
||||||
|
using namespace std;
|
||||||
|
#define MP make_pair
|
||||||
|
#define PB push_back
|
||||||
|
#define foreach(e,x) for(__typedef(x.begin()) e=x.begin(); e!=x.end(); ++e)
|
||||||
|
typedef long long LL;
|
||||||
|
typedef vector<int> VI;
|
||||||
|
typedef pair<int, int> mapII;
|
||||||
|
const int MAX_N = 1000000 + 10;
|
||||||
|
const double PI = acos(-1.);
|
||||||
|
const double EPS = 1e-8;
|
||||||
|
int N;
|
||||||
|
int a[MAX_N];
|
||||||
|
void read(int &x)
|
||||||
|
{
|
||||||
|
x = 0;
|
||||||
|
char ch;
|
||||||
|
for( ; ch = getchar(); ) {
|
||||||
|
if (isdigit(ch)) break;
|
||||||
|
}
|
||||||
|
x = ch - '0';
|
||||||
|
for( ; ; ) {
|
||||||
|
ch = getchar();
|
||||||
|
if (! isdigit(ch)) break;
|
||||||
|
x = x * 10 + ch - '0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void solve()
|
||||||
|
{
|
||||||
|
for(int i = 1; i <= N; ++ i) a[i] = i;
|
||||||
|
int u;
|
||||||
|
for(int i = 1; i <= N; ++ i) {
|
||||||
|
read(u);
|
||||||
|
a[u] = a[i];
|
||||||
|
}
|
||||||
|
int ret = 0;
|
||||||
|
for(int i = 1; i <= N; ++ i)
|
||||||
|
ret += a[i] == a[1];
|
||||||
|
printf("%d\n", ret - 1);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
for( ; cin >> N; )
|
||||||
|
solve();
|
||||||
|
return 0;
|
||||||
|
}
|
35
HDOJ/2272_autoAC.cpp
Normal file
35
HDOJ/2272_autoAC.cpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<math.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,i,j,rank[100],s,t;
|
||||||
|
char str[20];
|
||||||
|
while(scanf("%d",&n)!=EOF)
|
||||||
|
{
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
getchar();
|
||||||
|
for(j=0;j<20;j++)
|
||||||
|
{
|
||||||
|
scanf("%c",&str[j]);
|
||||||
|
if(str[j]==' ')
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
scanf("%d",&rank[i]);
|
||||||
|
getchar();
|
||||||
|
}
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
for(j=i+1;j<n;j++)
|
||||||
|
{
|
||||||
|
if(rank[j]<rank[i])
|
||||||
|
{
|
||||||
|
t=rank[j];rank[j]=rank[i];rank[i]=t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s=0;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
s+=abs(i+1-rank[i]);
|
||||||
|
printf("%d\n",s);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
17
HDOJ/2273_autoAC.cpp
Normal file
17
HDOJ/2273_autoAC.cpp
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
int main(){
|
||||||
|
int n;
|
||||||
|
while(~scanf("%d",&n)){
|
||||||
|
int as=0,a,b;
|
||||||
|
int v=111;
|
||||||
|
for(int i=0;i<n;++i){
|
||||||
|
scanf("%d%d",&a,&b);
|
||||||
|
as+=a;
|
||||||
|
v=min(v,b);
|
||||||
|
}
|
||||||
|
printf("%.2lf\n",1.0*as/v);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
22
HDOJ/2274_autoAC.cpp
Normal file
22
HDOJ/2274_autoAC.cpp
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
int a[6],s[100005],sum;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
for(int i=0;i<=99999;i++) {
|
||||||
|
int t=i,k=0,sum;
|
||||||
|
while(t>0) {
|
||||||
|
a[k++]=t%10;
|
||||||
|
t/=10;
|
||||||
|
}
|
||||||
|
int tmp=0;
|
||||||
|
for(int j=0;j<k;j++)
|
||||||
|
tmp+=a[j];
|
||||||
|
s[i]=tmp*24*11111-i;
|
||||||
|
}
|
||||||
|
while(~scanf("%d",&sum)) {
|
||||||
|
for(int i=0;i<=99999;i++)
|
||||||
|
if(sum==s[i]) printf("%05d\n",i);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
46
HDOJ/2275_autoAC.cpp
Normal file
46
HDOJ/2275_autoAC.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <set>
|
||||||
|
#include <cstdio>
|
||||||
|
using namespace std;
|
||||||
|
multiset<int>mset;
|
||||||
|
multiset<int>::iterator iter1,iter2;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,x;
|
||||||
|
char str[10];
|
||||||
|
while(scanf("%d",&n)!=EOF)
|
||||||
|
{
|
||||||
|
mset.clear();
|
||||||
|
while(n--)
|
||||||
|
{
|
||||||
|
scanf("%s %d",str,&x);
|
||||||
|
if(str[1]=='u')
|
||||||
|
mset.insert(x);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (x<*(mset.begin()))
|
||||||
|
{
|
||||||
|
printf("No Element!\n");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
iter1=mset.find(x);
|
||||||
|
if(iter1!=mset.end())
|
||||||
|
{
|
||||||
|
printf("%d\n",*iter1);
|
||||||
|
mset.erase(iter1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mset.insert(x);
|
||||||
|
iter1=iter2=mset.find(x);
|
||||||
|
iter1--;
|
||||||
|
printf("%d\n",*iter1);
|
||||||
|
mset.erase(iter1);
|
||||||
|
mset.erase(iter2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
71
HDOJ/2276_autoAC.cpp
Normal file
71
HDOJ/2276_autoAC.cpp
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
int a[105][105];
|
||||||
|
int ans[105];
|
||||||
|
int tag[105];
|
||||||
|
char str[105];
|
||||||
|
int tag1[105][105];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j,m,n,k;
|
||||||
|
while(scanf("%d",&m)!=EOF)
|
||||||
|
{
|
||||||
|
scanf("%s",str);
|
||||||
|
n=strlen(str);
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
for (j=0;j<n;j++)
|
||||||
|
{
|
||||||
|
if (j==i || j==(i+n-1)%n) a[i][j]=1;
|
||||||
|
else a[i][j]=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
ans[i]=str[i]-'0';
|
||||||
|
}
|
||||||
|
while(m!=0)
|
||||||
|
{
|
||||||
|
if (m%2==1)
|
||||||
|
{
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
tag[i]=0;
|
||||||
|
for (j=0;j<n;j++)
|
||||||
|
{
|
||||||
|
tag[i]=(tag[i]+a[i][j]*ans[j])%2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
ans[i]=tag[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m=m/2;
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
for (j=0;j<n;j++)
|
||||||
|
{
|
||||||
|
tag1[i][j]=0;
|
||||||
|
for (k=0;k<n;k++)
|
||||||
|
{
|
||||||
|
tag1[i][j]=(tag1[i][j]+a[i][k]*a[k][j])%2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
for (j=0;j<n;j++)
|
||||||
|
{
|
||||||
|
a[i][j]=tag1[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
printf("%d",ans[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
44
HDOJ/2277_autoAC.cpp
Normal file
44
HDOJ/2277_autoAC.cpp
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
#include <iostream>
|
||||||
|
#define INF 1<<30
|
||||||
|
#define MAX(a,b) a>b?a:b
|
||||||
|
#define MIN(a,b) a<b?a:b
|
||||||
|
#include <math.h>
|
||||||
|
using namespace std;
|
||||||
|
int f(int a,int b,int c)
|
||||||
|
{
|
||||||
|
int mark=0;
|
||||||
|
int sum1,sum2,sum3;
|
||||||
|
sum1=sum2=sum3=INF;
|
||||||
|
if((a-b)%3==0)
|
||||||
|
{
|
||||||
|
mark=1;
|
||||||
|
sum1=MAX(a,b);
|
||||||
|
}
|
||||||
|
if((a-c)%3==0)
|
||||||
|
{
|
||||||
|
mark=1;
|
||||||
|
sum2=MAX(a,c);
|
||||||
|
}
|
||||||
|
if((b-c)%3==0)
|
||||||
|
{
|
||||||
|
mark=1;
|
||||||
|
sum3=MAX(b,c);
|
||||||
|
}
|
||||||
|
if(mark==0)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return MIN(MIN(sum1,sum2),sum3);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int y,b,r,sum;
|
||||||
|
while(cin>>y>>b>>r)
|
||||||
|
{
|
||||||
|
sum=f(y,b,r);
|
||||||
|
if(sum==0)
|
||||||
|
cout<<"):"<<endl;
|
||||||
|
else
|
||||||
|
cout<<sum<<endl;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
125
HDOJ/2279_autoAC.cpp
Normal file
125
HDOJ/2279_autoAC.cpp
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <queue>
|
||||||
|
using namespace std;
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
node *next[26];
|
||||||
|
int count;
|
||||||
|
bool dangours;
|
||||||
|
void clear()
|
||||||
|
{
|
||||||
|
dangours = false;
|
||||||
|
memset(next,0,sizeof(next));
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
|
}Q[200001];
|
||||||
|
queue<node *> sq;
|
||||||
|
int current,sum,len;
|
||||||
|
char s[21];
|
||||||
|
node *newnode()
|
||||||
|
{
|
||||||
|
Q[current].clear();
|
||||||
|
return &Q[current++];
|
||||||
|
}
|
||||||
|
void insert(node *root,char s[])
|
||||||
|
{
|
||||||
|
int i = 0,index;
|
||||||
|
node *temp = root;
|
||||||
|
while(s[i])
|
||||||
|
{
|
||||||
|
index = s[i] - 'a';
|
||||||
|
if(temp -> next[index] == NULL)
|
||||||
|
temp -> next[index] = newnode();
|
||||||
|
temp = temp -> next[index];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
temp -> count++;
|
||||||
|
}
|
||||||
|
void dfs(int n,node *temp)
|
||||||
|
{
|
||||||
|
int i,index;
|
||||||
|
if(n == len)
|
||||||
|
{
|
||||||
|
if(!temp ->dangours)
|
||||||
|
{
|
||||||
|
temp -> dangours = true;
|
||||||
|
sum += (temp -> count);
|
||||||
|
sq.push(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(s[n] >= 'a' &&s[n] <= 'z')
|
||||||
|
{
|
||||||
|
if(temp -> next[s[n] - 'a'] != NULL)
|
||||||
|
{
|
||||||
|
dfs(n + 1,temp -> next[s[n] - 'a']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(s[n] == '?')
|
||||||
|
{
|
||||||
|
for(i = 0;i < 26;i++)
|
||||||
|
{
|
||||||
|
if(temp -> next[i] != NULL)
|
||||||
|
{
|
||||||
|
dfs(n + 1,temp -> next[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(s[n] == '*')
|
||||||
|
{
|
||||||
|
dfs(n + 1,temp);
|
||||||
|
for(i = 0;i < 26;i++)
|
||||||
|
{
|
||||||
|
if(temp ->next[i] != NULL)
|
||||||
|
{
|
||||||
|
dfs(n,temp -> next[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void orz(char s[])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i = 0;s[i];i++)
|
||||||
|
{
|
||||||
|
while(s[i] == '*'&&s[i + 1] == '*')
|
||||||
|
{
|
||||||
|
for(int j = i;s[j];j++)
|
||||||
|
{
|
||||||
|
s[j] = s[j + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
node *root,*temp;
|
||||||
|
int n,m;
|
||||||
|
while(scanf("%d%d",&n,&m) != EOF)
|
||||||
|
{
|
||||||
|
current = 0;
|
||||||
|
root = newnode();
|
||||||
|
for(int i = 0;i < n;i++)
|
||||||
|
{
|
||||||
|
scanf("%s",s);
|
||||||
|
insert(root,s);
|
||||||
|
}
|
||||||
|
for(int i = 0;i < m;i++)
|
||||||
|
{
|
||||||
|
sum = 0;
|
||||||
|
scanf("%s",s);
|
||||||
|
orz(s);
|
||||||
|
len = strlen(s);
|
||||||
|
dfs(0,root);
|
||||||
|
if(sum)
|
||||||
|
printf("%d\n",sum);
|
||||||
|
else
|
||||||
|
printf("Not match\n");
|
||||||
|
while(!sq.empty())
|
||||||
|
{
|
||||||
|
temp = sq.front();sq.pop();
|
||||||
|
temp -> dangours = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
74
HDOJ/2280_autoAC.cpp
Normal file
74
HDOJ/2280_autoAC.cpp
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
#include <cstdio>
|
||||||
|
using namespace std;
|
||||||
|
const int INF=110;
|
||||||
|
int n,m=5;
|
||||||
|
int d[1010][40];
|
||||||
|
int mz[1010];
|
||||||
|
void dfs(int p,int s,int t,int c,int r)
|
||||||
|
{
|
||||||
|
if(p>=m)
|
||||||
|
{
|
||||||
|
if(c<d[r][t]) d[r][t]=c;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(p<4 && ((s>>p)&1)==0 && ((t>>p)&3)==0)
|
||||||
|
dfs(p+1,s|(1<<p),t|(3<<p),c,r);
|
||||||
|
if(p<4 && ((s>>p)&3)==0 && ((t>>p)&3)==0)
|
||||||
|
dfs(p+1,s|(3<<p),t|(3<<p),c,r);
|
||||||
|
if(p<4 && ((s>>p)&3)==0)
|
||||||
|
dfs(p+1,s|(3<<p),t,c,r);
|
||||||
|
if(((s>>p)&1)==0 && ((t>>p)&1)==0)
|
||||||
|
dfs(p+1,s|(1<<p),t|(1<<p),c,r);
|
||||||
|
if(p>0 && (((s>>p)&1)==0) && (t>>(p-1)&3)==0)
|
||||||
|
dfs(p+1,s|(1<<p),t|(3<<(p-1)),c,r);
|
||||||
|
if(p<4 && ((s>>p)&3)==0 && ((t>>p)&1)==0)
|
||||||
|
dfs(p+1,s|(3<<p),t|(1<<p),c,r);
|
||||||
|
if(p<4 && ((s>>p)&3)==0 && ((t>>p)&2)==0)
|
||||||
|
dfs(p+1,s|(3<<p),t|(2<<p),c,r);
|
||||||
|
if(((s>>p)&1)==1) dfs(p+1,s,t,c,r);
|
||||||
|
else dfs(p+1,s|(1<<p),t,c+1,r);
|
||||||
|
}
|
||||||
|
int f(int x)
|
||||||
|
{
|
||||||
|
int cnt=0;
|
||||||
|
x+=32;
|
||||||
|
for(int i=0;i<5;i++)
|
||||||
|
{
|
||||||
|
if((x&1)==1) x>>=1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x>>=1;
|
||||||
|
if((x&1)==1) cnt++;
|
||||||
|
x>>=1;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cnt;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
while(~scanf("%d%d",&n,&c))
|
||||||
|
{
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
char str[10];
|
||||||
|
scanf("%s",str);
|
||||||
|
int s=0;
|
||||||
|
for(int j=0;j<5;j++) s=(s<<1)+str[j]-'0';
|
||||||
|
mz[i]=s;
|
||||||
|
}
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
for(int j=0;j<32;j++) d[i][j]=INF;
|
||||||
|
d[0][mz[0]]=0;
|
||||||
|
for(int i=0;i<n-1;i++)
|
||||||
|
for(int j=0;j<32;j++) if(d[i][j]<=c)
|
||||||
|
dfs(0,j,mz[i+1],d[i][j],i+1);
|
||||||
|
bool flag=false;
|
||||||
|
for(int i=0;i<32;i++)
|
||||||
|
if(d[n-1][i]+f(i)<=c) flag=true;
|
||||||
|
if(flag) printf("YES\n");
|
||||||
|
else printf("NO\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
34
HDOJ/2281_autoAC.cpp
Normal file
34
HDOJ/2281_autoAC.cpp
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<vector>
|
||||||
|
using namespace std;
|
||||||
|
typedef __int64 ll;
|
||||||
|
const ll maxn = 1e18;
|
||||||
|
ll n[20], x[20];
|
||||||
|
vector<ll> nn, xx;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
long long N;
|
||||||
|
n[0] = 7LL, x[0] = 1LL;
|
||||||
|
nn.push_back(1LL), xx.push_back(1LL);
|
||||||
|
for (i = 1;; ++i)
|
||||||
|
{
|
||||||
|
n[i] = 7LL * n[i - 1] + 48LL * x[i - 1];
|
||||||
|
x[i] = n[i - 1] + 7LL * x[i - 1];
|
||||||
|
if (n[i] < 0) break;
|
||||||
|
if ((n[i] - 3) % 4 == 0) nn.push_back((n[i] - 3) / 4), xx.push_back(x[i]);
|
||||||
|
}
|
||||||
|
nn.push_back(maxn + 5);
|
||||||
|
while (scanf("%I64d", &N), N)
|
||||||
|
{
|
||||||
|
for (i = 0; i < nn.size(); ++i)
|
||||||
|
{
|
||||||
|
if (N < nn[i])
|
||||||
|
{
|
||||||
|
printf("%I64d %I64d\n", nn[i - 1], xx[i - 1]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
97
HDOJ/2282_autoAC.cpp
Normal file
97
HDOJ/2282_autoAC.cpp
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
#include<cstdio>
|
||||||
|
#include<cstring>
|
||||||
|
#include<cstdlib>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
const int maxn = 505;
|
||||||
|
const int INF = (1<<30)-1;
|
||||||
|
int g[maxn][maxn];
|
||||||
|
int lx[maxn],ly[maxn];
|
||||||
|
int match[maxn];
|
||||||
|
bool visx[maxn],visy[maxn];
|
||||||
|
int slack[maxn];
|
||||||
|
int a[maxn];
|
||||||
|
int n,m,rn;
|
||||||
|
bool dfs(int cur){
|
||||||
|
visx[cur] = true;
|
||||||
|
for(int y=1;y<=rn;y++){
|
||||||
|
if(visy[y]) continue;
|
||||||
|
int t=lx[cur]+ly[y]-g[cur][y];
|
||||||
|
if(t==0){
|
||||||
|
visy[y] = true;
|
||||||
|
if(match[y]==-1||dfs(match[y])){
|
||||||
|
match[y] = cur;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(slack[y]>t){
|
||||||
|
slack[y]=t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int KM(){
|
||||||
|
memset(match,-1,sizeof(match));
|
||||||
|
memset(ly,0,sizeof(ly));
|
||||||
|
for(int i=1 ;i<=m;i++){
|
||||||
|
lx[i]=-INF;
|
||||||
|
for(int j=1;j<=rn;j++)
|
||||||
|
if(g[i][j]>lx[i]) lx[i]=g[i][j];
|
||||||
|
}
|
||||||
|
for(int x=1;x<=m;x++){
|
||||||
|
for(int i=1;i<=rn;i++) slack[i]=INF;
|
||||||
|
while(true){
|
||||||
|
memset(visx,false,sizeof(visx));
|
||||||
|
memset(visy,false,sizeof(visy));
|
||||||
|
if(dfs(x)) break;
|
||||||
|
int d=INF;
|
||||||
|
for(int i=1;i<=rn;i++){
|
||||||
|
if(!visy[i]&&d>slack[i]) d=slack[i];
|
||||||
|
}
|
||||||
|
for(int i=1;i<=m;i++){
|
||||||
|
if(visx[i]) lx[i]-=d;
|
||||||
|
}
|
||||||
|
for(int i=1;i<=rn;i++){
|
||||||
|
if(visy[i]) ly[i]+=d;
|
||||||
|
else slack[i]-=d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int result = 0;
|
||||||
|
for(int i = 1; i <= rn; i++){
|
||||||
|
if(match[i]>-1){
|
||||||
|
result += g[match[i]][i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
int abs(int x){
|
||||||
|
if(x<0)return -x;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
int main(){
|
||||||
|
int index[maxn];
|
||||||
|
while(scanf("%d",&n)!=EOF){
|
||||||
|
if(n==0) break;
|
||||||
|
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
|
||||||
|
int i,j,k;
|
||||||
|
m=0; rn=0;
|
||||||
|
for(int i=1;i<=n;i++) if(!a[i]){
|
||||||
|
index[++rn]=i;
|
||||||
|
}
|
||||||
|
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)
|
||||||
|
g[i][j]=0;
|
||||||
|
for( i=1;i<=n;i++){
|
||||||
|
if(a[i]>1){
|
||||||
|
for( k=1;k<a[i];k++){
|
||||||
|
m++;
|
||||||
|
for(j=1;j<=rn;j++)
|
||||||
|
g[m][j]=-min(abs(index[j]-i),n-abs(index[j]-i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int ans=-KM();
|
||||||
|
printf("%d\n",ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
28
HDOJ/2284_autoAC.cpp
Normal file
28
HDOJ/2284_autoAC.cpp
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,m,p;
|
||||||
|
int t,ans;
|
||||||
|
while(scanf("%d%d",&n,&p)!=-1)
|
||||||
|
{
|
||||||
|
if(p>n) {printf("Where is hero from?\n");continue;}
|
||||||
|
int count=0;
|
||||||
|
ans=0;
|
||||||
|
for(m=1;m<=n;m++)
|
||||||
|
{
|
||||||
|
if(m>n/2) break;
|
||||||
|
t=n-m+1;
|
||||||
|
while(!(t%p)) {count++;t/=p;}
|
||||||
|
t=m;
|
||||||
|
while(!(t%p)) {count--;t/=p;}
|
||||||
|
if(count<=0) continue;
|
||||||
|
if(2*m==n) ans++;
|
||||||
|
else ans+=2;
|
||||||
|
}
|
||||||
|
if(!ans) printf("Where is hero from?\n");
|
||||||
|
else printf("%d\n",ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
36
HDOJ/2289_autoAC.cpp
Normal file
36
HDOJ/2289_autoAC.cpp
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<math.h>
|
||||||
|
double r, R, H, V;
|
||||||
|
double volume( double h )
|
||||||
|
{
|
||||||
|
double u = r + ( R- r ) * h / H;
|
||||||
|
return ( 3.1415926535897932384626433832795* h * (u* u + r * u + r * r) / 3.0 );
|
||||||
|
}
|
||||||
|
double erfen(double bottom,double top)
|
||||||
|
{
|
||||||
|
double mid;
|
||||||
|
while(top-bottom>1e-10)
|
||||||
|
{
|
||||||
|
mid=(top+bottom)/2;
|
||||||
|
if(volume(mid)>V)
|
||||||
|
{
|
||||||
|
top=mid-1e-11;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bottom=mid+1e-11;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (bottom+top)/2;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
scanf("%lf %lf %lf %lf", &r, &R, &H, &V);
|
||||||
|
printf("%.6lf\n",erfen(0,H));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
123
HDOJ/2290_autoAC.cpp
Normal file
123
HDOJ/2290_autoAC.cpp
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cmath>
|
||||||
|
#include <cctype>
|
||||||
|
#include <ctime>
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <bitset>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include <queue>
|
||||||
|
#include <set>
|
||||||
|
#include <map>
|
||||||
|
#include <list>
|
||||||
|
#include <functional>
|
||||||
|
using namespace std;
|
||||||
|
typedef long long ll;
|
||||||
|
const double Pi = acos(-1.0);
|
||||||
|
const double eps = 1e-6;
|
||||||
|
const int IntMAX = 0x7fffffff;
|
||||||
|
const double DoubleMAX = 1e307;
|
||||||
|
#define TMIN(x,y) ( x<y?x:y )
|
||||||
|
const ll Inf = 40000000;
|
||||||
|
int dp[210][210][210];
|
||||||
|
int mp[210][210];
|
||||||
|
int dx[210];
|
||||||
|
int N,M,Q;
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int C;
|
||||||
|
int dx;
|
||||||
|
friend bool operator<(node A,node B)
|
||||||
|
{
|
||||||
|
return A.C<B.C;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
node cops[210];
|
||||||
|
int T;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int a,b,c;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%d %d",&N,&M);
|
||||||
|
for(int i=0;i<N;i++)
|
||||||
|
{
|
||||||
|
scanf("%d",&cops[i].C);
|
||||||
|
cops[i].dx = i;
|
||||||
|
}
|
||||||
|
sort(cops,cops+N);
|
||||||
|
for(int i=0;i<N;i++)
|
||||||
|
{
|
||||||
|
dx[cops[i].dx] = i+1;
|
||||||
|
}
|
||||||
|
for(int i=1;i<=N;i++)
|
||||||
|
{
|
||||||
|
for(int j=1;j<=N;j++)
|
||||||
|
{
|
||||||
|
mp[i][j] = (i==j?0:Inf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=0;i<M;i++)
|
||||||
|
{
|
||||||
|
scanf("%d %d %d",&a,&b,&c);
|
||||||
|
mp[dx[a]][dx[b]] = mp[dx[b]][dx[a]] = min(mp[dx[a]][dx[b]],c);
|
||||||
|
}
|
||||||
|
for(int i=1;i<=N;i++)
|
||||||
|
{
|
||||||
|
for(int j=1;j<=N;j++)
|
||||||
|
{
|
||||||
|
dp[i][j][0] = mp[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int k=1;k<=N;k++)
|
||||||
|
{
|
||||||
|
for(int i=1;i<=N;i++)
|
||||||
|
{
|
||||||
|
for(int j=1;j<=N;j++)
|
||||||
|
{
|
||||||
|
dp[i][j][k] = dp[i][j][k-1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=1;i<=N;i++)
|
||||||
|
{
|
||||||
|
for(int j=1;j<=N;j++)
|
||||||
|
{
|
||||||
|
if( dp[i][j][k]>dp[i][k][k-1]+dp[k][j][k-1] )
|
||||||
|
{
|
||||||
|
dp[i][j][k] = dp[i][k][k-1]+dp[k][j][k-1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scanf("%d",&Q);
|
||||||
|
while(Q--)
|
||||||
|
{
|
||||||
|
scanf("%d %d %d",&a,&b,&c);
|
||||||
|
a = dx[a];
|
||||||
|
b = dx[b];
|
||||||
|
int ans = Inf;
|
||||||
|
ans = min(ans,dp[a][b][0]);
|
||||||
|
for(int i=N-1;i>=0;i--)
|
||||||
|
{
|
||||||
|
if( cops[i].C<=c )
|
||||||
|
{
|
||||||
|
ans = min(ans,dp[a][b][i+1]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( ans==Inf )
|
||||||
|
printf("-1\n");
|
||||||
|
else
|
||||||
|
printf("%d\n",ans);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
46
HDOJ/2291_autoAC.cpp
Normal file
46
HDOJ/2291_autoAC.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
int dp[1024 * 8][140];
|
||||||
|
int w[20][20];
|
||||||
|
int e[20][20];
|
||||||
|
int s[20];
|
||||||
|
int n;
|
||||||
|
int dfs(int fs,int x)
|
||||||
|
{
|
||||||
|
if(dp[fs][x] != -1) return dp[fs][x];
|
||||||
|
dp[fs][x] = 0;
|
||||||
|
for(int i = 0;i < n-1;i++)
|
||||||
|
if( (fs & (1 << i)) == 0)
|
||||||
|
{
|
||||||
|
int ss = (fs | (1 << i));
|
||||||
|
if(x > s[i+1])
|
||||||
|
dp[fs][x] = max(dp[fs][x],dfs(ss,x+w[0][i+1]) + e[0][i+1]);
|
||||||
|
else dp[fs][x] = max(dp[fs][x],dfs(ss,x+w[0][i+1]));
|
||||||
|
}
|
||||||
|
return dp[fs][x];
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
cin >> t;
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
cin >> n;
|
||||||
|
for(int i = 0;i < n;i++)
|
||||||
|
for(int j = 0;j < n;j++)
|
||||||
|
cin >> w[i][j];
|
||||||
|
for(int i = 0;i < n;i++)
|
||||||
|
for(int j = 0;j < n;j++)
|
||||||
|
cin >> e[i][j];
|
||||||
|
for(int i = 0;i < n;i++)
|
||||||
|
cin >> s[i];
|
||||||
|
memset(dp,-1,sizeof(dp));
|
||||||
|
dfs(0,s[0]);
|
||||||
|
int ma = 0;
|
||||||
|
cout << dp[0][s[0]] << "\n";
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
53
HDOJ/2292_autoAC.cpp
Normal file
53
HDOJ/2292_autoAC.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#include <iostream>
|
||||||
|
using namespace std;
|
||||||
|
const int maxn=1005;
|
||||||
|
__int64 n,m;
|
||||||
|
__int64 cnt[maxn];
|
||||||
|
int c[maxn][maxn];
|
||||||
|
int son(int n)
|
||||||
|
{
|
||||||
|
int t = 1;
|
||||||
|
while (t <= n) t=t<<1|1;
|
||||||
|
t = (t - 1) / 2;
|
||||||
|
t = (t - 1) / 2;
|
||||||
|
int sum = n - 1 - t;
|
||||||
|
if (sum > 2 * t + 1)
|
||||||
|
{
|
||||||
|
sum = 2 * t + 1;
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
void calc_c() {
|
||||||
|
for (int i = 0; i < maxn; i++)
|
||||||
|
{
|
||||||
|
c[i][0] = c[i][i] = 1;
|
||||||
|
for (int j = 1; j < i; j++)
|
||||||
|
{
|
||||||
|
c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__int64 slove(int n)
|
||||||
|
{
|
||||||
|
if(cnt[n])
|
||||||
|
return cnt[n];
|
||||||
|
if(n==0||n==1)
|
||||||
|
return 1;
|
||||||
|
int left=son(n);
|
||||||
|
int right=(n-1)-left;
|
||||||
|
return cnt[n]=( (slove(left)*slove(right) )%m )*(__int64)c[n-1][left]%m;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
memset(cnt,0,sizeof(cnt));
|
||||||
|
scanf("%I64d%I64d",&n,&m);
|
||||||
|
calc_c();
|
||||||
|
__int64 ans=slove(n);
|
||||||
|
printf("%I64d\n",ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
60
HDOJ/2293_autoAC.cpp
Normal file
60
HDOJ/2293_autoAC.cpp
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <string>
|
||||||
|
#include <cstring>
|
||||||
|
using namespace std;
|
||||||
|
void solve(int &a,int &b,int &c,int l,string s)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
a=0,b=1,c=0;
|
||||||
|
for(i=0;i<l;i++){
|
||||||
|
a=(a+(83-s[i])*(83-s[i]))%97;
|
||||||
|
b=(b*s[i])%79;
|
||||||
|
for(j=i+1;j<l;j++){
|
||||||
|
c=(c+s[i]*s[j])%11;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a=300-(a%97);
|
||||||
|
b=22+(b%79);
|
||||||
|
c=c%11;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
string a,b;
|
||||||
|
int ahp,bhp;
|
||||||
|
int astr,bstr;
|
||||||
|
int aspd,bspd;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
cin>>a>>b;
|
||||||
|
ahp=bhp;
|
||||||
|
astr=bstr;
|
||||||
|
aspd=bspd;
|
||||||
|
int al=a.length();
|
||||||
|
int bl=b.length();
|
||||||
|
solve(ahp,astr,aspd,al,a);
|
||||||
|
solve(bhp,bstr,bspd,bl,b);
|
||||||
|
int da,db;
|
||||||
|
da=ahp/bstr;
|
||||||
|
if(ahp%bstr!=0)
|
||||||
|
{
|
||||||
|
da++;
|
||||||
|
}
|
||||||
|
db=bhp/astr;
|
||||||
|
if(bhp%astr!=0)
|
||||||
|
{
|
||||||
|
db++;
|
||||||
|
}
|
||||||
|
da *= (20-bspd);
|
||||||
|
db *= (20-aspd);
|
||||||
|
if(da==db){
|
||||||
|
printf("tie\n");
|
||||||
|
}else if(da<db){
|
||||||
|
printf("lose\n");
|
||||||
|
}else{
|
||||||
|
printf("win\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
138
HDOJ/2294_autoAC.cpp
Normal file
138
HDOJ/2294_autoAC.cpp
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <iostream>
|
||||||
|
#define MAX_DIMENSION 35
|
||||||
|
using namespace std;
|
||||||
|
typedef __int64 MATRIX_TYPE;
|
||||||
|
typedef __int64 MAX_INT_TYPE;
|
||||||
|
typedef MATRIX_TYPE Matrix[MAX_DIMENSION][MAX_DIMENSION];
|
||||||
|
int ndim=MAX_DIMENSION;
|
||||||
|
int mod=1234567891;
|
||||||
|
void m_zero(Matrix x)
|
||||||
|
{
|
||||||
|
memset(x, 0, sizeof(MATRIX_TYPE)*MAX_DIMENSION*MAX_DIMENSION);
|
||||||
|
}
|
||||||
|
void m_one(Matrix x)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
m_zero(x);
|
||||||
|
for(i=0;i<ndim;++i)x[i][i]=1;
|
||||||
|
}
|
||||||
|
void m_copy(Matrix src,Matrix dest)
|
||||||
|
{
|
||||||
|
memcpy(dest,src, sizeof(MATRIX_TYPE)*MAX_DIMENSION*MAX_DIMENSION);
|
||||||
|
}
|
||||||
|
void m_add(Matrix x,Matrix y,Matrix z)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
for(i=0;i<ndim;i++)
|
||||||
|
for(j=0;j<ndim;j++)
|
||||||
|
if(mod<=1)z[i][j]=x[i][j]+y[i][j];
|
||||||
|
else z[i][j]=(x[i][j]+(MAX_INT_TYPE)y[i][j])%mod;//module
|
||||||
|
}
|
||||||
|
void m_multiple(Matrix a,Matrix b,Matrix c)
|
||||||
|
{
|
||||||
|
int i,j,k;
|
||||||
|
MAX_INT_ t;
|
||||||
|
for(i=0;i<ndim;i++)
|
||||||
|
for(j=0;j<ndim;j++)
|
||||||
|
{
|
||||||
|
t=0;
|
||||||
|
if(mod<=1)
|
||||||
|
for(k=0;k<ndim;k++) t+=a[i][k]*b[k][j];
|
||||||
|
else
|
||||||
|
for(k=0;k<ndim;k++){
|
||||||
|
t+=(a[i][k]*(MAX_INT_TYPE)b[k][j])%mod;
|
||||||
|
t%=mod;
|
||||||
|
}
|
||||||
|
c[i][j]=t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void m_pow_with_saved(Matrix x_p[],unsigned int n, Matrix y)
|
||||||
|
{
|
||||||
|
Matrix temp;
|
||||||
|
m_one(y);
|
||||||
|
for(int k=1;n;++k,n>>=1)
|
||||||
|
{
|
||||||
|
if ((n & 1) != 0)
|
||||||
|
{
|
||||||
|
m_multiple(x_p[k],y,temp);
|
||||||
|
m_copy(temp,y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void m_pow_sum1(Matrix x_p[],unsigned int n, Matrix y)
|
||||||
|
{
|
||||||
|
m_zero(y);
|
||||||
|
if(n==0)return;
|
||||||
|
if(n==1) m_copy(x_p[1],y);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Matrix temp;
|
||||||
|
m_pow_sum1(x_p,n>>1,temp);
|
||||||
|
m_add(temp,y,y);
|
||||||
|
Matrix temp2;
|
||||||
|
m_pow_with_saved(x_p,n>>1,temp2);
|
||||||
|
Matrix temp3;
|
||||||
|
m_multiple(temp,temp2,temp3);
|
||||||
|
m_add(temp3,y,y);
|
||||||
|
if(n&1)
|
||||||
|
{
|
||||||
|
m_multiple(temp2,temp2,temp3);
|
||||||
|
m_multiple(temp3,x_p[1],temp2);
|
||||||
|
m_add(temp2,y,y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void m_pow_sum(Matrix x, unsigned int n, Matrix y)
|
||||||
|
{
|
||||||
|
unsigned int i=0,logn,n2=n;
|
||||||
|
for(logn=0,n2=n;n2;logn++,n2 >>= 1);
|
||||||
|
Matrix *pow_arry=new Matrix[logn==0?2:(logn+1)];
|
||||||
|
m_one(pow_arry[0]);
|
||||||
|
m_copy(x,pow_arry[1]);
|
||||||
|
for(i=1;i<logn;i++)
|
||||||
|
{
|
||||||
|
m_multiple(pow_arry[i],pow_arry[i],pow_arry[i+1]);
|
||||||
|
}
|
||||||
|
m_pow_sum1(pow_arry,n,y);
|
||||||
|
delete []pow_arry;
|
||||||
|
}
|
||||||
|
void view_mat(Matrix a, int n)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
for(int j = 0; j < n; j++)
|
||||||
|
cout << a[i][j] << " ";
|
||||||
|
cout << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int cas;
|
||||||
|
scanf("%d", &cas);
|
||||||
|
while(cas--)
|
||||||
|
{
|
||||||
|
int n, k;
|
||||||
|
scanf("%d %d", &n, &k);
|
||||||
|
Matrix a;
|
||||||
|
ndim = k + 1;
|
||||||
|
m_zero(a);
|
||||||
|
for(int i = 0; i <= k; i++)
|
||||||
|
{
|
||||||
|
if(i == 0)
|
||||||
|
continue;
|
||||||
|
a[i][i] = i;
|
||||||
|
a[i - 1][i] = k - i + 1;
|
||||||
|
}
|
||||||
|
Matrix asum, res, addsum, f1, ans;
|
||||||
|
m_one(res);
|
||||||
|
m_pow_sum(a, n - 1, asum);
|
||||||
|
m_add(res, asum, addsum);
|
||||||
|
m_zero(f1);
|
||||||
|
f1[0][1] = k;
|
||||||
|
m_multiple(f1, addsum, ans);
|
||||||
|
printf("%d\n", ((ans[0][k] % mod) + (__int64)mod) % mod);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
124
HDOJ/2295_autoAC.cpp
Normal file
124
HDOJ/2295_autoAC.cpp
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
# include<stdio.h>
|
||||||
|
# include<math.h>
|
||||||
|
# include<string.h>
|
||||||
|
# define eps 1e-8
|
||||||
|
# define N 55
|
||||||
|
# define V 3600
|
||||||
|
int n,m,K;
|
||||||
|
int L[V],R[V];
|
||||||
|
int D[V],U[V];
|
||||||
|
int C[V];
|
||||||
|
int S[N],H[N];
|
||||||
|
int ak,size;
|
||||||
|
double dis(double x1,double y1,double x2,double y2)
|
||||||
|
{
|
||||||
|
return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
|
||||||
|
}
|
||||||
|
void Link(int r,int c)
|
||||||
|
{
|
||||||
|
S[c]++;C[size]=c;
|
||||||
|
U[size]=U[c];D[U[c]]=size;
|
||||||
|
D[size]=c;U[c]=size;
|
||||||
|
if(H[r]==-1) H[r]=L[size]=R[size]=size;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
L[size]=L[H[r]];R[L[H[r]]]=size;
|
||||||
|
R[size]=H[r];L[H[r]]=size;
|
||||||
|
}
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
void remove(int c)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=D[c];i!=c;i=D[i])
|
||||||
|
L[R[i]]=L[i],R[L[i]]=R[i];
|
||||||
|
}
|
||||||
|
void resume(int c)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=U[c];i!=c;i=U[i])
|
||||||
|
L[R[i]]=R[L[i]]=i;
|
||||||
|
}
|
||||||
|
int h()
|
||||||
|
{
|
||||||
|
int i,j,k,count=0;
|
||||||
|
bool visit[N];
|
||||||
|
memset(visit,0,sizeof(visit));
|
||||||
|
for(i=R[0];i;i=R[i])
|
||||||
|
{
|
||||||
|
if(visit[i]) continue;
|
||||||
|
count++;
|
||||||
|
visit[i]=1;
|
||||||
|
for(j=D[i];j!=i;j=D[j])
|
||||||
|
{
|
||||||
|
for(k=R[j];k!=j;k=R[k])
|
||||||
|
visit[C[k]]=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
void Dance(int k)
|
||||||
|
{
|
||||||
|
int i,j,c,Min,ans;
|
||||||
|
ans=h();
|
||||||
|
if(k+ans>K || k+ans>=ak) return;
|
||||||
|
if(!R[0])
|
||||||
|
{
|
||||||
|
if(k<ak) ak=k;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(Min=N,i=R[0];i;i=R[i])
|
||||||
|
if(S[i]<Min) Min=S[i],c=i;
|
||||||
|
for(i=D[c];i!=c;i=D[i])
|
||||||
|
{
|
||||||
|
remove(i);
|
||||||
|
for(j=R[i];j!=i;j=R[j])
|
||||||
|
remove(j);
|
||||||
|
Dance(k+1);
|
||||||
|
for(j=L[i];j!=i;j=L[j])
|
||||||
|
resume(j);
|
||||||
|
resume(i);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,j,ncase;
|
||||||
|
double x[N],y[N],x1[N],y1[N];
|
||||||
|
double left,right,ans,mid;
|
||||||
|
scanf("%d",&ncase);
|
||||||
|
while(ncase--)
|
||||||
|
{
|
||||||
|
scanf("%d%d%d",&n,&m,&K);
|
||||||
|
for(i=1;i<=n;i++)
|
||||||
|
scanf("%lf%lf",&x[i],&y[i]);
|
||||||
|
for(i=1;i<=m;i++)
|
||||||
|
scanf("%lf%lf",&x1[i],&y1[i]);
|
||||||
|
left=0;
|
||||||
|
right=1416.0;
|
||||||
|
ans=right;
|
||||||
|
while(right>=left)
|
||||||
|
{
|
||||||
|
for(i=0;i<=n;i++)
|
||||||
|
{
|
||||||
|
S[i]=0;
|
||||||
|
U[i]=D[i]=i;
|
||||||
|
L[i+1]=i;R[i]=i+1;
|
||||||
|
}R[n]=0;
|
||||||
|
memset(H,-1,sizeof(H));
|
||||||
|
size=n+1;
|
||||||
|
mid=(left+right)/2;
|
||||||
|
for(i=1;i<=m;i++)
|
||||||
|
{
|
||||||
|
for(j=1;j<=n;j++)
|
||||||
|
if(mid>=dis(x1[i],y1[i],x[j],y[j])) Link(i,j);
|
||||||
|
}
|
||||||
|
ak=N;
|
||||||
|
Dance(0);
|
||||||
|
if(ak<=K) {ans=mid<ans?mid:ans;right=mid-eps;}
|
||||||
|
else left=mid+eps;
|
||||||
|
}
|
||||||
|
printf("%.6lf\n",ans);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
148
HDOJ/2296_autoAC.cpp
Normal file
148
HDOJ/2296_autoAC.cpp
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<iostream>
|
||||||
|
#include<queue>
|
||||||
|
using namespace std;
|
||||||
|
struct node{
|
||||||
|
int next[26];
|
||||||
|
int fail;
|
||||||
|
int val;
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
memset(next,0,sizeof(next));
|
||||||
|
fail=0;
|
||||||
|
val=0;
|
||||||
|
}
|
||||||
|
}a[1200];
|
||||||
|
int tot,len;
|
||||||
|
int dp[55][1200];
|
||||||
|
char str[55][1200][55];
|
||||||
|
void chushihua()
|
||||||
|
{
|
||||||
|
memset(dp,-1,sizeof(dp));
|
||||||
|
tot=0;
|
||||||
|
a[0].init();
|
||||||
|
}
|
||||||
|
void insert(char *str,int v)
|
||||||
|
{
|
||||||
|
int index,p=0;
|
||||||
|
for(;*str!='\0';str++)
|
||||||
|
{
|
||||||
|
index=*str-'a';
|
||||||
|
if(a[p].next[index]==0)
|
||||||
|
{
|
||||||
|
a[++tot].init();
|
||||||
|
a[p].next[index]=tot;
|
||||||
|
}
|
||||||
|
p=a[p].next[index];
|
||||||
|
}
|
||||||
|
a[p].val=v;
|
||||||
|
}
|
||||||
|
void build_ac()
|
||||||
|
{
|
||||||
|
queue<int>Q;
|
||||||
|
int p,cur,son,i;
|
||||||
|
Q.push(0);
|
||||||
|
while(!Q.empty())
|
||||||
|
{
|
||||||
|
p=Q.front();
|
||||||
|
Q.pop();
|
||||||
|
for(i=0;i<26;i++)
|
||||||
|
{
|
||||||
|
if(a[p].next[i]!=0)
|
||||||
|
{
|
||||||
|
son=a[p].next[i];
|
||||||
|
cur=a[p].fail;
|
||||||
|
if(p==0)
|
||||||
|
a[son].fail=0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while(cur&&a[cur].next[i]==0)
|
||||||
|
cur=a[cur].fail;
|
||||||
|
a[son].fail=a[cur].next[i];
|
||||||
|
}
|
||||||
|
if(a[a[son].fail].val)
|
||||||
|
a[son].val+=a[a[son].fail].val;
|
||||||
|
Q.push(son);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
a[p].next[i]=a[a[p].fail].next[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void solve()
|
||||||
|
{
|
||||||
|
int i,j,k,son,max=0;
|
||||||
|
char shang[55],temp,res[55];
|
||||||
|
dp[0][0]=0;
|
||||||
|
strcpy(str[0][0],"\0");
|
||||||
|
strcpy(res,"\0");
|
||||||
|
for(i=1;i<=len;i++)
|
||||||
|
for(j=0;j<=tot;j++)
|
||||||
|
{
|
||||||
|
if(dp[i-1][j]==-1)
|
||||||
|
continue;
|
||||||
|
strcpy(shang,str[i-1][j]);
|
||||||
|
for(k=0;k<26;k++)
|
||||||
|
{
|
||||||
|
son=a[j].next[k];
|
||||||
|
temp=k+'a';
|
||||||
|
shang[i-1]=temp;
|
||||||
|
shang[i]='\0';
|
||||||
|
if(dp[i][son]==-1)
|
||||||
|
{
|
||||||
|
dp[i][son]=dp[i-1][j]+a[son].val;
|
||||||
|
strcpy(str[i][son],shang);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(dp[i][son]<dp[i-1][j]+a[son].val)
|
||||||
|
{
|
||||||
|
dp[i][son]=dp[i-1][j]+a[son].val;
|
||||||
|
strcpy(str[i][son],shang);
|
||||||
|
}
|
||||||
|
else if(dp[i][son]==dp[i-1][j]+a[son].val)
|
||||||
|
{
|
||||||
|
if(strcmp(str[i][son],shang)>0)
|
||||||
|
strcpy(str[i][son],shang);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i=1;i<=len;i++)
|
||||||
|
for(j=0;j<=tot;j++)
|
||||||
|
{
|
||||||
|
if(dp[i][j]>max)
|
||||||
|
{
|
||||||
|
max=dp[i][j];
|
||||||
|
strcpy(res,str[i][j]);
|
||||||
|
}
|
||||||
|
else if(dp[i][j]==max&&strcmp(res,str[i][j])>0&&strlen(res)>=strlen(str[i][j]))
|
||||||
|
strcpy(res,str[i][j]);
|
||||||
|
}
|
||||||
|
printf("%s\n",res);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
char keyword[105][15];
|
||||||
|
int n,T,val[105],i;
|
||||||
|
while(scanf("%d",&T)!=EOF)
|
||||||
|
{
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
chushihua();
|
||||||
|
scanf("%d%d",&len,&n);
|
||||||
|
getchar();
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
scanf("%s",keyword[i]);
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
scanf("%d",&val[i]);
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
insert(keyword[i],val[i]);
|
||||||
|
build_ac();
|
||||||
|
solve();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
63
HDOJ/2297_autoAC.cpp
Normal file
63
HDOJ/2297_autoAC.cpp
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<math.h>
|
||||||
|
#include<algorithm>
|
||||||
|
using namespace std;
|
||||||
|
typedef __int64 LL;
|
||||||
|
const int maxn = 111111;
|
||||||
|
typedef struct{LL x, y;}Point;
|
||||||
|
inline LL det(LL x1, LL y1, LL x2, LL y2)
|
||||||
|
{return x1 * y2 - x2 * y1;}
|
||||||
|
LL cross(Point a, Point b, Point c)
|
||||||
|
{return det(b.x -a.x, b.y - a.y, c.x - a.x, c.y - a.y);}
|
||||||
|
int CompG(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
if((*(Point*)a).y - (*(Point*)b).y)
|
||||||
|
return (*(Point*)a).x - (*(Point*)b).x;
|
||||||
|
return (*(Point*)a).y - (*(Point*)b).y;
|
||||||
|
}
|
||||||
|
LL Graham(Point p[], Point res[], LL n, LL &top)
|
||||||
|
{
|
||||||
|
LL len, i;
|
||||||
|
top = 1;
|
||||||
|
qsort(p, n, sizeof(Point), CompG);
|
||||||
|
res[0] = p[0], res[1] = p[1];
|
||||||
|
for(i = 2; i < n; ++ i)
|
||||||
|
{
|
||||||
|
while(top && cross(res[top], res[top - 1], p[i]) <= 0)
|
||||||
|
-- top;
|
||||||
|
res[++ top] = p[i];
|
||||||
|
}
|
||||||
|
len = top;
|
||||||
|
res[++ top] = p[n - 2];
|
||||||
|
for(i = n - 3; i >= 0; -- i)
|
||||||
|
{
|
||||||
|
while(top != len && cross(res[top], res[top - 1], p[i]) <= 0)
|
||||||
|
-- top;
|
||||||
|
res[++ top] = p[i];
|
||||||
|
}
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
Point p[maxn], res[maxn];
|
||||||
|
LL n, m;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t, i, j, k, cnt;
|
||||||
|
LL maxx, maxy;
|
||||||
|
for(scanf("%d", &t); t -- ; )
|
||||||
|
{
|
||||||
|
scanf("%I64d", &n);
|
||||||
|
for(i = 0; i < n; ++ i)
|
||||||
|
scanf("%I64d%I64d", &p[i].x, &p[i].y);
|
||||||
|
p[n] = p[0];
|
||||||
|
Graham(p, res, n, m);
|
||||||
|
for(i = maxx = maxy = 0; i < m; ++ i)
|
||||||
|
{
|
||||||
|
if(res[i].x > res[maxx].x) maxx = i;
|
||||||
|
if(res[i].y > res[maxy].y) maxy = i;
|
||||||
|
}
|
||||||
|
printf("%I64d\n", (maxx - maxy + n) % n + 1);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
61
HDOJ/2298_autoAC.cpp
Normal file
61
HDOJ/2298_autoAC.cpp
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#include<stdio.h>
|
||||||
|
#include<cmath>
|
||||||
|
double x,y,v;
|
||||||
|
const double g=9.8;
|
||||||
|
double f(double a)
|
||||||
|
{
|
||||||
|
return x*tan(a)-x*x*g/(2*v*v*cos(a)*cos(a));
|
||||||
|
}
|
||||||
|
double sanf(double bottom,double top)
|
||||||
|
{
|
||||||
|
double rightthir,leftthir;
|
||||||
|
while(top-bottom>1e-9)
|
||||||
|
{
|
||||||
|
rightthir=(bottom+top*2)/3;
|
||||||
|
leftthir=(bottom*2+top)/3;
|
||||||
|
if(f(rightthir)>f(leftthir))
|
||||||
|
{
|
||||||
|
bottom=leftthir+1e-10;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
top=rightthir-1e-10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (top+bottom)/2;
|
||||||
|
}
|
||||||
|
double erfen(double bottom,double top)
|
||||||
|
{
|
||||||
|
double mid;
|
||||||
|
while(top-bottom>1e-9)
|
||||||
|
{
|
||||||
|
mid=(top+bottom)/2;
|
||||||
|
if(f(mid)>y)
|
||||||
|
{
|
||||||
|
top=mid-1e-10;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bottom=mid+1e-10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (bottom+top)/2;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
scanf("%lf%lf%lf",&x,&y,&v);
|
||||||
|
double max=sanf(0,3.1415926535897932384626433832795/2.0);
|
||||||
|
if(f(max)<y)
|
||||||
|
{
|
||||||
|
printf("-1\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%.6lf\n",erfen(0,max));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
60
HDOJ/2299_autoAC.cpp
Normal file
60
HDOJ/2299_autoAC.cpp
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
#include <set>
|
||||||
|
#include <string>
|
||||||
|
#include <cstring>
|
||||||
|
#include <list>
|
||||||
|
#include <queue>
|
||||||
|
#include <stack>
|
||||||
|
#include <cmath>
|
||||||
|
using namespace std;
|
||||||
|
#define PF(x) (scanf("%d",&x))
|
||||||
|
#define PT(x,y) (scanf("%d%d",&x,&y))
|
||||||
|
#define PR(x) (printf("%d\n",x))
|
||||||
|
#define PRT(x,y)(printf("%d %d\n",x,y))
|
||||||
|
#define M 1000
|
||||||
|
int n;
|
||||||
|
struct P
|
||||||
|
{
|
||||||
|
int x,y;
|
||||||
|
void in()
|
||||||
|
{
|
||||||
|
PT(x,y);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
P ar[1000];
|
||||||
|
int mul(P a,P b,P c)
|
||||||
|
{
|
||||||
|
return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);
|
||||||
|
}
|
||||||
|
double area(P a,P b,P c)
|
||||||
|
{
|
||||||
|
return fabs((double)mul(a,b,c))/2.0;
|
||||||
|
}
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
while(scanf("%d",&n)!=EOF)
|
||||||
|
{
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
ar[i].in();
|
||||||
|
double areas = 0.0;
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
for(int j = i+1;j<n;j++)
|
||||||
|
for(int k = j+1;k<n;k++)
|
||||||
|
{
|
||||||
|
if(areas<area(ar[i],ar[j],ar[k]))
|
||||||
|
areas = area(ar[i],ar[j],ar[k]);
|
||||||
|
}
|
||||||
|
printf("%.1lf\n",areas);
|
||||||
|
}
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
init();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user