mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
commit
39783028c3
35
.ACM-Templates/KMP.cpp
Normal file
35
.ACM-Templates/KMP.cpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
void getfill(string s,int* f)
|
||||||
|
{
|
||||||
|
//memset(f,0,sizeof(f)); //根据其前一个字母得到
|
||||||
|
for(size_t i=1;i<s.size();i++)
|
||||||
|
{
|
||||||
|
int j=f[i];
|
||||||
|
while(j && s[i]!=s[j])
|
||||||
|
j=f[j];
|
||||||
|
f[i+1]=(s[i]==s[j])?j+1:0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int KMP(string a,string s)
|
||||||
|
{
|
||||||
|
int* f=new int[s.size()+32];
|
||||||
|
memset(f,0,sizeof(int)*s.size());
|
||||||
|
getfill(s,f);size_t j=0;
|
||||||
|
for(size_t i=0;i<a.size();i++)
|
||||||
|
{
|
||||||
|
while(j && a[i]!=s[j])
|
||||||
|
j=f[j];
|
||||||
|
if(a[i]==s[j])
|
||||||
|
j++;
|
||||||
|
if(j==s.size()){
|
||||||
|
delete[] f;return i-s.size()+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete[] f;
|
||||||
|
return -1;
|
||||||
|
}
|
23
.ACM-Templates/KMP_int.cpp
Normal file
23
.ACM-Templates/KMP_int.cpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
void MakeNext(int* P,int M,int* Next){
|
||||||
|
Next[0] = -1;
|
||||||
|
int i = 0, j = -1;
|
||||||
|
while(i<M){
|
||||||
|
if(j==-1||P[i]==P[j]){
|
||||||
|
i++,j++;
|
||||||
|
if(P[i]!=P[j])Next[i] = j;
|
||||||
|
else Next[i] = Next[j];
|
||||||
|
}
|
||||||
|
else j = Next[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int KMP(int* T,int N,int* P,int M)
|
||||||
|
{
|
||||||
|
MakeNext(P,M,Next);
|
||||||
|
int i=0,j=0;
|
||||||
|
while(i<N&&j<M){
|
||||||
|
if(T[i]==P[j]||j==-1)i++,j++;
|
||||||
|
else j = Next[j];
|
||||||
|
}
|
||||||
|
if(j==M)return i-M;
|
||||||
|
else return -2;
|
||||||
|
}
|
2
BNUOJ/Readme.md
Normal file
2
BNUOJ/Readme.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#BNUOJ
|
||||||
|
[Problem Set](https://www.bnuoj.com/v3/problem.php "Problem List")
|
41
Codeforces/Gym/100819L.cpp
Normal file
41
Codeforces/Gym/100819L.cpp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
#define MAXROUND 100005
|
||||||
|
double safemoney[MAXROUND];
|
||||||
|
double roundmoney[MAXROUND];
|
||||||
|
double p[MAXROUND];
|
||||||
|
char str[256];
|
||||||
|
inline double ln(double inc)
|
||||||
|
{
|
||||||
|
return log(inc);
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,W;
|
||||||
|
scanf("%d %d",&n,&W);
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
scanf("%s %lf %lf",str,&p[i],&roundmoney[i+1]);
|
||||||
|
roundmoney[i+1]=ln(1+roundmoney[i+1]/W);
|
||||||
|
if(strcmp(str,"safe")==0)
|
||||||
|
{
|
||||||
|
safemoney[i+1]=roundmoney[i+1];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
safemoney[i+1]=safemoney[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i=n-1;i>=0;i--)
|
||||||
|
{
|
||||||
|
double tmp=p[i]*roundmoney[i+1]+(1-p[i])*safemoney[i];
|
||||||
|
roundmoney[i]=max(tmp,roundmoney[i]);
|
||||||
|
}
|
||||||
|
double ans=(exp(roundmoney[0])-1)*W;
|
||||||
|
printf("$%.2f\n",ans);
|
||||||
|
}
|
38
Codeforces/Gym/100819L_Standard.cpp
Normal file
38
Codeforces/Gym/100819L_Standard.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
const int MAXN = 100000;
|
||||||
|
int N, W;
|
||||||
|
string safe;
|
||||||
|
long double p[MAXN], v[MAXN+1], s[MAXN+1];
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
//ios::sync_with_stdio(0);
|
||||||
|
while (cin >> N >> W && N)
|
||||||
|
{
|
||||||
|
v[0] = 0;
|
||||||
|
for (int i = 0; i < N; ++i)
|
||||||
|
{
|
||||||
|
cin >> safe >> p[i] >> v[i+1];
|
||||||
|
v[i+1] = log1p(v[i+1] / W);
|
||||||
|
if (safe == "safe")
|
||||||
|
s[i+1] = v[i+1];
|
||||||
|
else
|
||||||
|
s[i+1] = s[i];
|
||||||
|
}
|
||||||
|
for (int i = N-1; i >= 0; --i)
|
||||||
|
{
|
||||||
|
long double Ewin = p[i]*v[i+1] + (1-p[i])*s[i];
|
||||||
|
v[i] = max(v[i], Ewin);
|
||||||
|
}
|
||||||
|
long double ans = expm1(v[0]) * W;
|
||||||
|
cout << '$' << fixed << setprecision(2) << ans << endl;
|
||||||
|
int residualDigit = int(1000*ans) % 10;
|
||||||
|
if (residualDigit == 4 || residualDigit == 5)
|
||||||
|
cerr << "WARNING: " << residualDigit << " in the first unseen place" << endl;
|
||||||
|
}
|
||||||
|
}
|
72
Codeforces/Gym/100819M.cpp
Normal file
72
Codeforces/Gym/100819M.cpp
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#include <iostream>
|
||||||
|
using namespace std;
|
||||||
|
string op;
|
||||||
|
int parm;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
int operation_type[16];
|
||||||
|
int operation_parm[16];
|
||||||
|
|
||||||
|
bool takeoperation(int a)
|
||||||
|
{
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
switch(operation_type[i])
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
a+=operation_parm[i];
|
||||||
|
if(a<0) return false;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
a-=operation_parm[i];
|
||||||
|
if(a<0) return false;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
a*=operation_parm[i];
|
||||||
|
if(a<0) return false;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if(a%operation_parm[i]!=0)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
a/=operation_parm[i];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
cin>>n;
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
cin>>op>>operation_parm[i];
|
||||||
|
operation_type[i]=0;
|
||||||
|
switch(op.at(0))
|
||||||
|
{
|
||||||
|
case 'D':
|
||||||
|
operation_type[i]++;
|
||||||
|
case 'M':
|
||||||
|
operation_type[i]++;
|
||||||
|
case 'S':
|
||||||
|
operation_type[i]++;
|
||||||
|
case 'A':
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int cnt=0;
|
||||||
|
for(int i=1;i<=100;i++)
|
||||||
|
{
|
||||||
|
if(takeoperation(i))
|
||||||
|
{
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<100-cnt<<endl;
|
||||||
|
return 0;
|
||||||
|
}
|
28
Codeforces/Gym/100819N.cpp
Normal file
28
Codeforces/Gym/100819N.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
string str;
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int n,k;
|
||||||
|
cin>>n>>k;
|
||||||
|
int x=1;//safe
|
||||||
|
int y=k;//break
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
cin>>t>>str;
|
||||||
|
if(str.at(0)=='B')
|
||||||
|
{
|
||||||
|
if(t<y) y=t;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(t>x) x=t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<x+1<<" "<<y-1<<endl;
|
||||||
|
return 0;
|
||||||
|
}
|
104
Codeforces/Gym/100820C_snowy_smile.cpp
Normal file
104
Codeforces/Gym/100820C_snowy_smile.cpp
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<iostream>
|
||||||
|
#include<string.h>
|
||||||
|
#include<string>
|
||||||
|
#include<ctype.h>
|
||||||
|
#include<math.h>
|
||||||
|
#include<set>
|
||||||
|
#include<map>
|
||||||
|
#include<vector>
|
||||||
|
#include<queue>
|
||||||
|
#include<bitset>
|
||||||
|
#include<algorithm>
|
||||||
|
#include<time.h>
|
||||||
|
using namespace std;
|
||||||
|
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
|
||||||
|
#define MS(x,y) memset(x,y,sizeof(x))
|
||||||
|
#define MC(x,y) memcpy(x,y,sizeof(x))
|
||||||
|
#define MP(x,y) make_pair(x,y)
|
||||||
|
#define ls o<<1
|
||||||
|
#define rs o<<1|1
|
||||||
|
typedef long long LL;
|
||||||
|
typedef unsigned long long UL;
|
||||||
|
typedef unsigned int UI;
|
||||||
|
template <class T1,class T2>inline void gmax(T1 &a,T2 b){if(b>a)a=b;}
|
||||||
|
template <class T1,class T2>inline void gmin(T1 &a,T2 b){if(b<a)a=b;}
|
||||||
|
const int N=0,M=0,Z=1e9+7,ms63=1061109567;
|
||||||
|
int casenum,casei;
|
||||||
|
int n;
|
||||||
|
struct A
|
||||||
|
{
|
||||||
|
char name[300];
|
||||||
|
int b[50];
|
||||||
|
bool operator < (const A& bb)const
|
||||||
|
{
|
||||||
|
for(int i=0;i<48;++i)
|
||||||
|
{
|
||||||
|
if(b[i]>bb.b[i])return 1;
|
||||||
|
if(b[i]<bb.b[i])return 0;
|
||||||
|
}
|
||||||
|
return strcmp(name,bb.name)<0;
|
||||||
|
}
|
||||||
|
}a[1010];
|
||||||
|
char s[300];
|
||||||
|
int b[50];
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
while(~scanf("%d",&n))
|
||||||
|
{
|
||||||
|
MS(a,0);
|
||||||
|
for(int i=1;i<=n;++i)
|
||||||
|
{
|
||||||
|
scanf("%s",a[i].name);
|
||||||
|
int l=strlen(a[i].name);
|
||||||
|
a[i].name[l-1]=0;
|
||||||
|
int top=0;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
scanf("%s",s);
|
||||||
|
if(s[0]=='c')break;
|
||||||
|
if(s[0]=='u')b[++top]=1;
|
||||||
|
else if(s[0]=='m')b[++top]=0;
|
||||||
|
else if(s[0]=='l')b[++top]=-1;
|
||||||
|
}
|
||||||
|
int p=0;
|
||||||
|
while(top)a[i].b[p++]=b[top--];
|
||||||
|
}
|
||||||
|
sort(a+1,a+n+1);
|
||||||
|
for(int i=1;i<=n;++i)printf("%s\n",a[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
【题意】
|
||||||
|
n(1<=n<=1000)个人,参加了n种难度的课程。
|
||||||
|
我们要把这n个人的课程难度按照从大到小排序,并依次输出人名。
|
||||||
|
|
||||||
|
具体的排序规则是——
|
||||||
|
课程前缀由 upper>middle>lower的顺序排序。
|
||||||
|
多个前缀关键字,位于最后的关键字作为第一关键字,依次类推。
|
||||||
|
如果发生关键字数量差别,空关键字被认定为middle。
|
||||||
|
如果最后依然重复,则按照人名字典序。
|
||||||
|
|
||||||
|
【类型】
|
||||||
|
模拟 排序 多关键字排序
|
||||||
|
|
||||||
|
【分析】
|
||||||
|
这题只是一个关键字有点多的排序而已。
|
||||||
|
最多会有256/6个关键字。我们直接把所有的关键字提取出来,位置越后,级别越高。
|
||||||
|
upper=1
|
||||||
|
middle=0(初始也为0)
|
||||||
|
lower=-1
|
||||||
|
然后排个序,这道题就做完啦!
|
||||||
|
|
||||||
|
【时间复杂度&&优化】
|
||||||
|
O(关键字数*nlogn)
|
||||||
|
|
||||||
|
【数据】
|
||||||
|
5
|
||||||
|
mom: upper upper lower middle class
|
||||||
|
dad: middle middle lower middle class
|
||||||
|
queenelizabeth: upper upper class
|
||||||
|
chair: lower lower class
|
||||||
|
unclebob: middle lower middle class
|
||||||
|
|
||||||
|
*/
|
18
HDOJ/1071_autoAC.cpp
Normal file
18
HDOJ/1071_autoAC.cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<math.h>
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T;
|
||||||
|
double x1, x2, x3, y1, y2, y3, a, b, c, s;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
|
||||||
|
a = ((y2-y1)*(x3-x2)/(x2-x1)-(y3-y2))/((x2*x2-x1*x1)*(x3-x2)/(x2-x1)-(x3*x3-x2*x2));
|
||||||
|
b = ((y2-y1)-a*(x2*x2-x1*x1))/(x2-x1);
|
||||||
|
c = y1-a*x1*x1-b*x1;
|
||||||
|
s = (a/3*x3*x3*x3+b/2*x3*x3+c*x3)-(a/3*x2*x2*x2+b*x2*x2/2+c*x2)-(y3+y2)*(x3-x2)/2;
|
||||||
|
printf("%.2lf\n",s);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
88
HDOJ/1072_autoAC.cpp
Normal file
88
HDOJ/1072_autoAC.cpp
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <queue>
|
||||||
|
#include <algorithm>
|
||||||
|
using namespace std;
|
||||||
|
struct node
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
int step;
|
||||||
|
int t;
|
||||||
|
};
|
||||||
|
const int maxn = 9;
|
||||||
|
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
|
||||||
|
int maze[maxn][maxn], graph[maxn][maxn];
|
||||||
|
int n, m, ex, ey, ans;
|
||||||
|
bool bfs(int x, int y);
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int test;
|
||||||
|
scanf("%d", &test);
|
||||||
|
while(test-- != 0)
|
||||||
|
{
|
||||||
|
scanf("%d %d", &n, &m);
|
||||||
|
int sx, sy;
|
||||||
|
for(int i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
for(int j = 0; j < m; j++)
|
||||||
|
{
|
||||||
|
scanf("%d", &maze[i][j]);
|
||||||
|
if(maze[i][j] == 2)
|
||||||
|
sx = i, sy = j;
|
||||||
|
if(maze[i][j] == 3)
|
||||||
|
ex = i, ey = j;
|
||||||
|
graph[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(bfs(sx, sy))
|
||||||
|
printf("%d\n", ans);
|
||||||
|
else
|
||||||
|
printf("-1\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
bool bfs(int x, int y)
|
||||||
|
{
|
||||||
|
queue<node> que;
|
||||||
|
node s;
|
||||||
|
s.x = x;
|
||||||
|
s.y = y;
|
||||||
|
s.step = 0;
|
||||||
|
s.t = 6;
|
||||||
|
graph[x][y] = 6;
|
||||||
|
que.push(s);
|
||||||
|
while(!que.empty())
|
||||||
|
{
|
||||||
|
node st = que.front();
|
||||||
|
que.pop();
|
||||||
|
if(st.x == ex && st.y == ey)
|
||||||
|
{
|
||||||
|
ans = st.step;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(st.t == 1)
|
||||||
|
continue;
|
||||||
|
for(int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
int dx = st.x + dir[i][0];
|
||||||
|
int dy = st.y + dir[i][1];
|
||||||
|
if(dx >= 0 && dx < n && dy >= 0 && dy < m && maze[dx][dy] != 0)
|
||||||
|
{
|
||||||
|
node tmp;
|
||||||
|
tmp.x = dx; tmp.y = dy;
|
||||||
|
tmp.step = st.step + 1;
|
||||||
|
tmp.t = st.t - 1;
|
||||||
|
if(maze[dx][dy] == 4)
|
||||||
|
tmp.t = 6;
|
||||||
|
if(tmp.t > graph[dx][dy])
|
||||||
|
{
|
||||||
|
graph[dx][dy] = tmp.t;
|
||||||
|
que.push(tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
59
HDOJ/1073_autoAC.cpp
Normal file
59
HDOJ/1073_autoAC.cpp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#include<iostream>
|
||||||
|
#define N 10000
|
||||||
|
char str1[N],str2[N];
|
||||||
|
void input(char *str)
|
||||||
|
{
|
||||||
|
char tmp[N];
|
||||||
|
getchar();
|
||||||
|
gets(tmp);
|
||||||
|
while(gets(tmp) && strcmp(tmp,"END"))
|
||||||
|
{
|
||||||
|
if(strlen(tmp)==0)
|
||||||
|
strcat(str,"\n");
|
||||||
|
else
|
||||||
|
strcat(str,tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void dechar(char *str,int len)
|
||||||
|
{
|
||||||
|
char tmp[N];
|
||||||
|
int t=0;
|
||||||
|
for(int i=0;i<len;i++)
|
||||||
|
if(!(str[i]==' ' || str[i]=='\t' || str[i]=='\n'))
|
||||||
|
tmp[t++]=str[i];
|
||||||
|
tmp[t]='\0';
|
||||||
|
strcpy(str,tmp);
|
||||||
|
}
|
||||||
|
int cmp()
|
||||||
|
{
|
||||||
|
int n1,n2;
|
||||||
|
n1=strlen(str1);
|
||||||
|
n2=strlen(str2);
|
||||||
|
if(n1==n2 && !strcmp(str1,str2))
|
||||||
|
return 1;
|
||||||
|
dechar(str1,n1);
|
||||||
|
dechar(str2,n2);
|
||||||
|
if(!strcmp(str1,str2))
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t,res;
|
||||||
|
while(scanf("%d",&t)!=EOF)
|
||||||
|
{
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
memset(str1,0,sizeof(str1));
|
||||||
|
memset(str2,0,sizeof(str2));
|
||||||
|
input(str1);
|
||||||
|
input(str2);
|
||||||
|
res=cmp();
|
||||||
|
if(res==1) puts("Accepted");
|
||||||
|
else if(res==0) puts("Presentation Error");
|
||||||
|
else if(res==-1) puts("Wrong Answer");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
68
HDOJ/1074_autoAC.cpp
Normal file
68
HDOJ/1074_autoAC.cpp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#include <cstdio>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstring>
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
using namespace std;
|
||||||
|
const int N = 16;
|
||||||
|
int dp[1<<N];
|
||||||
|
struct Node
|
||||||
|
{
|
||||||
|
string s;
|
||||||
|
int time,cost;
|
||||||
|
};
|
||||||
|
Node a[N];
|
||||||
|
int pre[1<<N];
|
||||||
|
int n;
|
||||||
|
void Output(int status)
|
||||||
|
{
|
||||||
|
if(status==0)return;
|
||||||
|
int t=0;
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
if( (status&(1<<i))!=0 && (pre[status]&(1<<i))==0 )
|
||||||
|
{
|
||||||
|
t=i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Output(pre[status]);
|
||||||
|
cout<<a[t].s<<endl;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%d",&n);
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
cin>>a[i].s>>a[i].time>>a[i].cost;
|
||||||
|
}
|
||||||
|
memset(dp,0x3f3f3f3f,sizeof(dp));
|
||||||
|
memset(pre,0,sizeof(pre));
|
||||||
|
dp[0]=0;
|
||||||
|
for(int st=0;st<(1<<n);st++)
|
||||||
|
{
|
||||||
|
int tmp=0;
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
if(st&(1<<i))
|
||||||
|
tmp+=a[i].cost;
|
||||||
|
}
|
||||||
|
for(int i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
//printf("fff %d %d %d",st,(1<<i),st&(1<<i));
|
||||||
|
if((st&(1<<i))==0)
|
||||||
|
{
|
||||||
|
if(dp[st|(1<<i)]>dp[st]+max(0,tmp+a[i].cost-a[i].time)){
|
||||||
|
dp[st|(1<<i)]=dp[st]+max(0,tmp+a[i].cost-a[i].time);
|
||||||
|
pre[st|(1<<i)]=st;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n",dp[(1<<n)-1]);
|
||||||
|
Output((1<<n)-1);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
105
HDOJ/1075_autoAC.cpp
Normal file
105
HDOJ/1075_autoAC.cpp
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<string.h>
|
||||||
|
#include<malloc.h>
|
||||||
|
#include<ctype.h>
|
||||||
|
typedef struct node
|
||||||
|
{
|
||||||
|
char s[50];
|
||||||
|
struct node *next[26];
|
||||||
|
}node;
|
||||||
|
node memory[1000000];
|
||||||
|
int k=0;
|
||||||
|
void insert(char *b,char *a,node *T)
|
||||||
|
{
|
||||||
|
int i,len,j,id;
|
||||||
|
node *p,*q;
|
||||||
|
p=T;
|
||||||
|
len=strlen(b);
|
||||||
|
for(i=0;i<len;++i)
|
||||||
|
{
|
||||||
|
id=b[i]-'a';
|
||||||
|
if(p->next[id]==NULL)
|
||||||
|
{
|
||||||
|
q=&memory[k++];
|
||||||
|
memset(q->s,'\0',sizeof(q->s));
|
||||||
|
for(j=0;j<26;++j)
|
||||||
|
q->next[j]=NULL;
|
||||||
|
p->next[id]=q;
|
||||||
|
}
|
||||||
|
p=p->next[id];
|
||||||
|
}
|
||||||
|
strcpy(p->s,a);
|
||||||
|
}
|
||||||
|
int search(char *t,node *T)
|
||||||
|
{
|
||||||
|
int id,i=0;
|
||||||
|
char *p=t;
|
||||||
|
node *q=T;
|
||||||
|
while(islower(p[i]))
|
||||||
|
{
|
||||||
|
id=p[i]-'a';
|
||||||
|
if(q->next[id]==NULL)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
q=q->next[id];
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(strlen(q->s))
|
||||||
|
{
|
||||||
|
printf("%s",q->s);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i,len;
|
||||||
|
char a[50],b[50];
|
||||||
|
char c[4000];
|
||||||
|
node *T;
|
||||||
|
T=&memory[k++];
|
||||||
|
memset(T->s,'\0',sizeof(T->s));
|
||||||
|
for(i=1;i<26;++i)
|
||||||
|
T->next[i]=NULL;
|
||||||
|
while(scanf("%s",a)&&strcmp(a,"START")==0)
|
||||||
|
{
|
||||||
|
while(scanf("%s",a)&&strcmp(a,"END"))
|
||||||
|
{
|
||||||
|
scanf("%s",b);
|
||||||
|
insert(b,a,T);
|
||||||
|
}
|
||||||
|
while(scanf("%s",a)&&strcmp(a,"START")==0)
|
||||||
|
{
|
||||||
|
getchar();
|
||||||
|
while(gets(c))
|
||||||
|
{
|
||||||
|
if(strcmp(c,"END")==0)
|
||||||
|
return 0;
|
||||||
|
len=strlen(c);
|
||||||
|
for(i=0;i<len;++i)
|
||||||
|
{
|
||||||
|
if(!islower(c[i]))
|
||||||
|
printf("%c",c[i]);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(!search(&c[i],T))
|
||||||
|
{
|
||||||
|
while(islower(c[i]))
|
||||||
|
printf("%c",c[i++]);
|
||||||
|
--i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while(islower(c[i++]));
|
||||||
|
i-=2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
31
HDOJ/1076_autoAC.cpp
Normal file
31
HDOJ/1076_autoAC.cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
int leapyear(int Y)
|
||||||
|
{
|
||||||
|
if((Y%4==0 && Y%100!=0) || (Y%400==0))
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int Y,N,n,count;
|
||||||
|
scanf("%d",&n);
|
||||||
|
while(n--)
|
||||||
|
{
|
||||||
|
count=0;
|
||||||
|
scanf("%d%d",&Y,&N);
|
||||||
|
while(count<N)
|
||||||
|
{
|
||||||
|
if(leapyear(Y))
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
Y++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Y++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%d\n",Y-1);
|
||||||
|
}
|
||||||
|
}
|
67
HDOJ/1077_autoAC.cpp
Normal file
67
HDOJ/1077_autoAC.cpp
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cmath>
|
||||||
|
#include <algorithm>
|
||||||
|
#define INF 1E9
|
||||||
|
using namespace std;
|
||||||
|
double X[301],Y[301];
|
||||||
|
int n,ans;
|
||||||
|
double x,y;
|
||||||
|
inline double c(int i)
|
||||||
|
{
|
||||||
|
return (X[i]-x)*(X[i]-x)+(Y[i]-y)*(Y[i]-y);
|
||||||
|
}
|
||||||
|
int calc()
|
||||||
|
{
|
||||||
|
int i,ans=0;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
{
|
||||||
|
if(c(i)>1.0+1e-8)continue;
|
||||||
|
ans++;
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
void center(int i,int j)
|
||||||
|
{
|
||||||
|
double x1=X[i]-X[j],y1=Y[i]-Y[j],len,k;
|
||||||
|
double a,b;
|
||||||
|
if(x1==0)
|
||||||
|
a=1,b=0;
|
||||||
|
else if (y1==0)
|
||||||
|
a=0,b=1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
k=-1/y1*x1;
|
||||||
|
len=sqrt(1+k*k);
|
||||||
|
a=1.0/len;
|
||||||
|
b=k/len;
|
||||||
|
}
|
||||||
|
len=1-(x1*x1+y1*y1)/4;
|
||||||
|
if(len<0)return;
|
||||||
|
len=sqrt(len);
|
||||||
|
x1=(X[i]+X[j])/2.0;y1=(Y[i]+Y[j])/2.0;
|
||||||
|
a*=len;b*=len;
|
||||||
|
x=x1+a;y=y1+b;
|
||||||
|
ans=max(ans,calc());
|
||||||
|
x=x1-a;y=y1-b;
|
||||||
|
ans=max(ans,calc());
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int T;
|
||||||
|
int i,j;
|
||||||
|
scanf("%d",&T);
|
||||||
|
while(T--)
|
||||||
|
{
|
||||||
|
scanf("%d",&n);
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
scanf("%lf%lf",&X[i],&Y[i]);
|
||||||
|
ans=0;
|
||||||
|
for(i=0;i<n;i++)
|
||||||
|
for(j=i;j<n;j++)
|
||||||
|
center(i,j);
|
||||||
|
printf("%d\n",ans);
|
||||||
|
}
|
||||||
|
}
|
61
HDOJ/1078_autoAC.cpp
Normal file
61
HDOJ/1078_autoAC.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <utility>
|
||||||
|
using namespace std;
|
||||||
|
const int N = 102;
|
||||||
|
int graph[N][N];
|
||||||
|
int collect[N][N];
|
||||||
|
int n, k, ans;
|
||||||
|
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
|
||||||
|
bool isBound(int x, int y)
|
||||||
|
{
|
||||||
|
if(x < 0 || y < 0)
|
||||||
|
return false;
|
||||||
|
if(x >= n || y >= n)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int memory(pair<int, int> p )
|
||||||
|
{
|
||||||
|
int i, j, maxb = 0, tmax;
|
||||||
|
pair<int , int> cs;
|
||||||
|
if(collect[p.first][p.second] > 0)
|
||||||
|
return collect[p.first][p.second];
|
||||||
|
for(i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
cs = p;
|
||||||
|
for(j = 0; j < k; j++)
|
||||||
|
{
|
||||||
|
cs.first += dir[i][0];
|
||||||
|
cs.second += dir[i][1];
|
||||||
|
if(!isBound(cs.first, cs.second))
|
||||||
|
break;
|
||||||
|
if(graph[cs.first][cs.second] > graph[p.first][p.second])
|
||||||
|
{
|
||||||
|
tmax = memory(cs);
|
||||||
|
if(tmax > maxb)
|
||||||
|
maxb = tmax;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
collect[p.first][p.second] = maxb + graph[p.first][p.second];
|
||||||
|
return collect[p.first][p.second];
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
pair<int, int> p;
|
||||||
|
int i, j;
|
||||||
|
while(scanf("%d%d", &n, &k))
|
||||||
|
{
|
||||||
|
if(n == -1 && k == -1)
|
||||||
|
break;
|
||||||
|
for(i = 0; i < n; i++)
|
||||||
|
for(j = 0; j < n; j++)
|
||||||
|
{
|
||||||
|
scanf("%d", &graph[i][j]);
|
||||||
|
collect[i][j] = 0;
|
||||||
|
}
|
||||||
|
p.first = p.second = 0;
|
||||||
|
printf("%d\n", memory(p));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
15
HDOJ/1079_autoAC.cpp
Normal file
15
HDOJ/1079_autoAC.cpp
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
int main(){
|
||||||
|
int yy,mm,dd;
|
||||||
|
int t;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--){
|
||||||
|
scanf("%d%d%d",&yy,&mm,&dd);
|
||||||
|
if( ((mm + dd) & 1) ==0 )
|
||||||
|
puts("YES");
|
||||||
|
else if(dd==30 && ( mm == 9 || mm == 11))
|
||||||
|
puts("YES");
|
||||||
|
else puts("NO");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
66
HDOJ/1080_autoAC.cpp
Normal file
66
HDOJ/1080_autoAC.cpp
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
int matrix[5][5] = {
|
||||||
|
{5, -1, -2, -1, -3},
|
||||||
|
{-1, 5, -3, -2, -4},
|
||||||
|
{-2, -3, 5, -2, -2},
|
||||||
|
{-1, -2, -2, 5, -1},
|
||||||
|
{-3, -4, -2, -1, 0},
|
||||||
|
};
|
||||||
|
char exchange[5] = {'A', 'C', 'G', 'T', ' '};
|
||||||
|
int Value (char m, char n){
|
||||||
|
int R, C;
|
||||||
|
int i;
|
||||||
|
for (i=0; i<5; ++i){
|
||||||
|
if (exchange[i] == m)
|
||||||
|
R = i;
|
||||||
|
if (exchange[i] == n)
|
||||||
|
C = i;
|
||||||
|
}
|
||||||
|
return matrix[R][C];
|
||||||
|
}
|
||||||
|
int Max (int a, int b, int c){
|
||||||
|
int max = (a > b) ? a : b;
|
||||||
|
return (max > c) ? max : c;
|
||||||
|
}
|
||||||
|
int Similarity (char str1[], int length1, char str2[], int length2){
|
||||||
|
int dp[110][110];
|
||||||
|
int i, j;
|
||||||
|
dp[0][0] = 0;
|
||||||
|
for (i=1; i<=length1; ++i)
|
||||||
|
dp[i][0] = dp[i-1][0] + Value (str1[i], ' ');
|
||||||
|
for (i=1; i<=length2; ++i)
|
||||||
|
dp[0][i] = dp[0][i-1] + Value (' ', str2[i]);
|
||||||
|
for (i=1; i<=length1; ++i){
|
||||||
|
for (j=1; j<=length2; ++j){
|
||||||
|
if (str1[i] == str2[j]){
|
||||||
|
dp[i][j] = dp[i-1][j-1] + Value (str1[i], str2[j]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
dp[i][j] = Max (dp[i-1][j] + Value (str1[i], ' '),
|
||||||
|
dp[i][j-1] + Value (' ', str2[j]),
|
||||||
|
dp[i-1][j-1] + Value (str1[i], str2[j]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dp[length1][length2];
|
||||||
|
}
|
||||||
|
int main(void){
|
||||||
|
char str1[110];
|
||||||
|
char str2[110];
|
||||||
|
int length1;
|
||||||
|
int length2;
|
||||||
|
int T;
|
||||||
|
int ans;
|
||||||
|
while (scanf ("%d", &T) != EOF){
|
||||||
|
while (T-- != 0){
|
||||||
|
scanf ("%d%s", &length1, str1 + 1);
|
||||||
|
scanf ("%d%s", &length2, str2 + 1);
|
||||||
|
if (length1 > length2)
|
||||||
|
ans = Similarity (str1, length1, str2, length2);
|
||||||
|
else
|
||||||
|
ans = Similarity (str2, length2, str1, length1);
|
||||||
|
printf ("%d\n", ans);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
100
HDOJ/1247.cpp
Normal file
100
HDOJ/1247.cpp
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class node
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
node* next[26];
|
||||||
|
bool value;
|
||||||
|
node() : value(false)
|
||||||
|
{
|
||||||
|
memset(next,0,sizeof(next));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
node _headnode;
|
||||||
|
node* head=&_headnode;
|
||||||
|
|
||||||
|
void insert(const char* str)
|
||||||
|
{
|
||||||
|
int L=strlen(str);
|
||||||
|
node* p=head;
|
||||||
|
for(int i=0;i<L;i++)
|
||||||
|
{
|
||||||
|
if(p->next[str[i]-'a']==nullptr)
|
||||||
|
{
|
||||||
|
p->next[str[i]-'a']=new node;
|
||||||
|
}
|
||||||
|
p=p->next[str[i]-'a'];
|
||||||
|
}
|
||||||
|
p->value=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool search(const char* str)
|
||||||
|
{
|
||||||
|
int L=strlen(str);
|
||||||
|
node* p=head;
|
||||||
|
|
||||||
|
for(int i=0;i<L;i++)
|
||||||
|
{
|
||||||
|
if(p->next[str[i]-'a']!=nullptr)
|
||||||
|
{
|
||||||
|
p=p->next[str[i]-'a'];
|
||||||
|
if(p->value)
|
||||||
|
{
|
||||||
|
bool isFound=true;
|
||||||
|
node* q=head;
|
||||||
|
for(int j=i+1;j<L;j++)
|
||||||
|
{
|
||||||
|
if(q->next[str[j]-'a']!=nullptr)
|
||||||
|
{
|
||||||
|
q=q->next[str[j]-'a'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isFound=false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isFound)
|
||||||
|
{
|
||||||
|
if(q->value)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MAXN 50005
|
||||||
|
#define MAXLEN 1005
|
||||||
|
char input[MAXN][MAXLEN];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int i=0;
|
||||||
|
while(cin>>input[i])
|
||||||
|
{
|
||||||
|
insert(input[i++]);
|
||||||
|
}
|
||||||
|
for(int ci=0;ci<i;ci++)
|
||||||
|
{
|
||||||
|
if(search(input[ci]))
|
||||||
|
{
|
||||||
|
cout<<input[ci]<<endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
94
HDOJ/1711.cpp
Normal file
94
HDOJ/1711.cpp
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdio>
|
||||||
|
using namespace std;
|
||||||
|
#define MAXA 1000005
|
||||||
|
#define MAXN 10010
|
||||||
|
#define MAXNEXT 10050
|
||||||
|
|
||||||
|
/*
|
||||||
|
int f[MAXN];
|
||||||
|
|
||||||
|
|
||||||
|
void getfill(int* s,int LenS,int* f)
|
||||||
|
{
|
||||||
|
//memset(f,0,sizeof(f)); //根据其前一个字母得到
|
||||||
|
for(int i=1;i<LenS;i++)
|
||||||
|
{
|
||||||
|
int j=f[i];
|
||||||
|
while(j && s[i]!=s[j])
|
||||||
|
j=f[j];
|
||||||
|
f[i+1]=(s[i]==s[j])?j+1:0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int KMP(int* a,int LenA,int* s,int LenS)
|
||||||
|
{
|
||||||
|
f[0]=0;
|
||||||
|
getfill(s,LenS,f);
|
||||||
|
int j=0;
|
||||||
|
for(int i=0;i<LenA;i++)
|
||||||
|
{
|
||||||
|
while(j && a[i]!=s[j])
|
||||||
|
j=f[j];
|
||||||
|
if(a[i]==s[j])
|
||||||
|
j++;
|
||||||
|
if(j==LenS){
|
||||||
|
return i-LenS+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
//*/
|
||||||
|
|
||||||
|
/*** New ***/
|
||||||
|
int Next[MAXNEXT];
|
||||||
|
int a[MAXA];
|
||||||
|
int b[MAXN];
|
||||||
|
void MakeNext(int* P,int M,int* Next){
|
||||||
|
Next[0] = -1;
|
||||||
|
int i = 0, j = -1;
|
||||||
|
while(i<M){
|
||||||
|
if(j==-1||P[i]==P[j]){
|
||||||
|
i++,j++;
|
||||||
|
if(P[i]!=P[j])Next[i] = j;
|
||||||
|
else Next[i] = Next[j];
|
||||||
|
}
|
||||||
|
else j = Next[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int KMP(int* T,int N,int* P,int M)
|
||||||
|
{
|
||||||
|
MakeNext(P,M,Next);
|
||||||
|
int i=0,j=0;
|
||||||
|
while(i<N&&j<M){
|
||||||
|
if(T[i]==P[j]||j==-1)i++,j++;
|
||||||
|
else j = Next[j];
|
||||||
|
}
|
||||||
|
if(j==M)return i-M;
|
||||||
|
else return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** End **/
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t;
|
||||||
|
scanf("%d",&t);
|
||||||
|
while(t--)
|
||||||
|
{
|
||||||
|
int sza,szb;
|
||||||
|
scanf("%d %d",&sza,&szb);
|
||||||
|
for(int i=0;i<sza;i++)
|
||||||
|
{
|
||||||
|
scanf("%d",&a[i]);
|
||||||
|
}
|
||||||
|
for(int i=0;i<szb;i++)
|
||||||
|
{
|
||||||
|
scanf("%d",&b[i]);
|
||||||
|
}
|
||||||
|
printf("%d\n",KMP(a,sza,b,szb)+1);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user