HDU 6045

 1 #pragma comment(linker, "/STACK:102400000,102400000")
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <cstdlib>
 5 #include <cstring>
 6 #include <algorithm>
 7 #include <cmath>
 8 #include <cctype>
 9 #include <map>
10 #include <set>
11 #include <queue>
12 #include <bitset>
13 #include <string>
14 #include <complex>
15 #define ll long long
16 #define mod 1000000007
17 using namespace std;
18 int t;
19 int n,x,y;
20 char a[80004],b[80004];
21 int main()
22 {
23     scanf("%d",&t);
24     for(int i=1;i<=t;i++){
25         scanf("%d %d %d",&n,&x,&y);
26         scanf("%s",a);
27         scanf("%s",b);
28         int res=0;
29         for(int j=0;j<n;j++){
30             if(a[j]==b[j])
31                 res++;
32         }
33         if(x+y<=n+res&&abs(x-y)<=n-res)
34             printf("Not lying\n");
35         else
36             printf("Lying\n");
37     }
38     return 0;
39 }

 

HDU 6047

 1 #pragma comment(linker, "/STACK:102400000,102400000")
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <cstdlib>
 5 #include <cstring>
 6 #include <algorithm>
 7 #include <cmath>
 8 #include <cctype>
 9 #include <map>
10 #include <set>
11 #include <queue>
12 #include <bitset>
13 #include <string>
14 #include <complex>
15 #define ll long long
16 #define mod 1000000007
17 using namespace std;
18 int n;
19 ll a[250005];
20 ll b[250005];
21 ll dp[250005];
22 int main()
23 {
24     while(scanf("%d",&n)!=EOF){
25     for(int i=1;i<=n;i++)
26         scanf("%lld",&a[i]);
27     for(int i=1;i<=n;i++)
28         scanf("%lld",&b[i]);
29     sort(b+1,b+1+n);
30     dp[n+1]=0;
31     for(int i=n;i>=1;i--)
32         dp[i]=max(dp[i+1],a[i]-i);
33     ll ans=0;
34     ll now=0;
35     for(int i=n+1;i<=2*n;i++){
36         ll zha=max(dp[b[i-n]],now);
37         ans+=zha;
38         ans%=mod;
39         now=max(now,zha-i);
40     }
41     printf("%lld\n",ans);
42     }
43     return 0;
44 }

 

HDU 6049

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 const int N=5010;
 5 int f[N][N],minN[N][N],maxN[N][N],last[N];
 6 int n,a[N];
 7 void work()
 8 {
 9     int i,j,k,ii,jj;
10     for (i=1; i<=n; i++)
11     {
12         f[i][i]=1;
13         last[i]=i;
14         minN[i][i]=maxN[i][i]=a[i];
15         for(j=i+1; j<=n; j++)
16         {
17             minN[i][j]=min(minN[i][j-1],a[j]);
18             maxN[i][j]=max(maxN[i][j-1],a[j]);
19         }
20     }
21     for(k=2; k<=n; k++)
22         for(i=1; i<=n-k+1; i++)
23         {
24             j=i+k-1;
25             if (maxN[i][j]-minN[i][j]!=j-i)
26                 f[i][j]=0;
27             else
28             {
29                 if (minN[i][j]<minN[i][last[i]])f[i][j]=1;
30                 else
31                     f[i][j]=f[i][last[i]]+f[last[i]+1][j];
32                 last[i]=j;
33             }
34         }
35     int ans=f[1][n];
36     for (i=1; i<=n; i++)
37         for (j=i; j<=n; j++)
38             if (f[i][j]&&(i==1||f[1][i-1]&&minN[1][i-1]==1))
39             {
40                 jj=maxN[i][j];
41                 if (jj==n||maxN[jj+1][n]==n&&f[jj+1][n])
42                     for (ii=jj; ii>j; ii--)
43                         if (f[ii][jj]&&minN[ii][jj]==i)
44                             ans=max(ans,f[1][i-1]+f[j+1][ii-1]+f[jj+1][n]+2);
45             }
46     cout<<ans<<endl;
47 }
48 int main()
49 {
50     int T,i,j;
51     cin>>T;
52     for (i=1; i<=T; i++)
53     {
54         cin>>n;
55         for (j=1; j<=n; j++)cin>>a[j];
56         work();
57     }
58     return 0;
59 }

 

HDU 6055

 1 #pragma comment(linker, "/STACK:102400000,102400000")
 2 #include <cstdio>
 3 #include <iostream>
 4 #include <cstdlib>
 5 #include <cstring>
 6 #include <algorithm>
 7 #include <cmath>
 8 #include <cctype>
 9 #include <map>
10 #include <set>
11 #include <queue>
12 #include <bitset>
13 #include <string>
14 #include <complex>
15 #define ll long long
16 #define mod 1000000007
17 using namespace std;
18 int n;
19 struct node
20 {
21     int x,y;
22 } N[505];
23 int mp[505][505];
24 int main()
25 {
26 
27     while(scanf("%d",&n)!=EOF)
28     {
29         memset(mp,0,sizeof(mp));
30         for(int i=1; i<=n; i++)
31         {
32             scanf("%d %d",&N[i].x,&N[i].y);
33             mp[N[i].x+100][N[i].y+100]=1;
34         }
35         int ans=0;
36         for(int i=1; i<=n; i++){
37             for(int j=1; j<=n; j++){
38                 if(i==j)
39                     continue;
40                 int x,y,xx,yy;
41                 x=N[i].x;y=N[i].y;
42                 xx=N[j].x;yy=N[j].y;
43                 int x1,y1,x2,y2;
44                 int x3,y3,x4,y4;
45                 if((x>=xx&&y>yy)){
46                 x1=xx+abs(y-yy)+abs(x-xx);
47                 y1=y-abs(x-xx);
48                 x2=xx+abs(y-yy);
49                 y2=yy-abs(x-xx);
50                 x3=x-abs(y-yy);
51                 y3=y+abs(x-xx);
52                 x4=x-abs(y-yy)-abs(x-xx);
53                 y4=yy+abs(x-xx);
54                 if(x1+100>=0&&y1+100>=0&&x2+100>=0&&y2+100>=0&&mp[x1+100][y1+100]&&mp[x2+100][y2+100]){
55                     ans++;
56                     }
57                 if(x3+100>=0&&y3+100>=0&&x4+100>=0&&y4+100>=0&&mp[x3+100][y3+100]&&mp[x4+100][y4+100]){
58                     ans++;
59                 }
60                 }
61             }
62             }
63         printf("%d\n",ans/2);
64     }
65     return 0;
66 }