[置顶] 2013 Multi-University Training Contest 8
1003 Mine
简单sg的博弈题,我们走入了nim博弈的误区,后来发现改了三四个字符就过了。。。。我只能说我是sbsbsbsbsbsb。。。判奇偶啊。。。
#pragma comment(linker,"/STACK:102400000,102400000")//用的是dfs搜索,写得挫,不加上这个且用C++交就跪了。。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<vector>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i<b;++i)
#define N 9973
using namespace std;
inline void RD(int &ret)
{
char c;
do
{
c=getchar();
}
while(c<'0'||c>'9');
ret=c-'0';
while((c=getchar())>='0'&&c<='9')
{
ret=ret*10+(c-'0');
}
}
inline void OT(int a)
{
if(a>=10)
{
OT(a/10);
}
putchar(a%10+'0');
}
int n,m,k;
int sum[1005][1005];
int used[1005][1005];
int s[1000005];
int shu,shuk,ans;
int dx[9]={-1,-1,-1,0,0,1,1,1};
int dy[9]={-1,0,1,-1,1,-1,0,1};
void dfs(int x,int y)//用的就是施教主写的
{//这里的目的就是求空白部分周围的数字块数量
int i;
used[x][y]=1;
for(i=0;i<8;i++)
{
if(x+dx[i]>=0&&x+dx[i]<n&&y+dy[i]>=0&&y+dy[i]<m)
{
if(used[x+dx[i]][y+dy[i]]==0&&sum[x+dx[i]][y+dy[i]]==0)
{
dfs(x+dx[i],y+dy[i]);
}
}
}
for(i=0; i<8; i++)
{
if(x+dx[i]>=0&&x+dx[i]<n&&y+dy[i]>=0&&y+dy[i]<m)
{
if(used[x+dx[i]][y+dy[i]]==0&&sum[x+dx[i]][y+dy[i]]>0)
{
used[x+dx[i]][y+dy[i]]=1;
shuk++;
}
}
}
}
int main()
{
int t,cas,i,j,a,b;
while(scanf("%d",&t)!=EOF)
{
cas=0;
while(t--)
{
cas++;
RD(n);
RD(m);
RD(k);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
sum[i][j]=0;
used[i][j]=0;
}
}
for(i=0; i<k; i++)
{
RD(a);
RD(b);
for(j=0; j<8; j++)
{
if(a+dx[j]>=0&&a+dx[j]<n&&b+dy[j]>=0&&b+dy[j]<m)
{
sum[a+dx[j]][b+dy[j]]++;
}
}
used[a][b]=1;
}
shu=0;
for(i=0; i<n; i++)
{
for(j=0; j<m;j++)
{
if(used[i][j]==0)
{
if(sum[i][j]==0)//判奇偶,如果为奇数算作两块,偶数为一块
{
shuk=0;
dfs(i,j);
s[shu]=shuk%2+1;//就这里改了一下就AC了,哭啊
shu++;
}
}
}
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(used[i][j]==0)//其它单独数字块各为1块
{
s[shu]=1;
shu++;
}
}
}
ans=0;
for(i=0;i<shu;i++)
{
ans^=s[i];//异或一下就行了
}
printf("Case #%d: ",cas);
if(ans!=0)
{
printf("Xiemao\n");
}
else
{
printf("Fanglaoshi\n");
}
}
}
return 0;
}
1006 String
一道求最长公共子串的水题。。。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR(a,b,i) for(i=a;i<=b;++i)
#define For(a,b,i) for(i=a;i<b;++i)
using namespace std;
inline void RD(int &ret)
{
char c;
do
{
c=getchar();
}
while(c<'0'||c>'9');
ret=c-'0';
while((c=getchar())>='0'&&c<='9')
{
ret=ret*10+(c-'0');
}
}
inline void OT(int a)
{
if(a>=10)
{
OT(a/10);
}
putchar(a%10+'0');
}
char a[1005],b[1005],c[1005];
int dp1[1005][1005],dp2[1005][1005],sum[4005][2],tmp,l1,l2,l3;
void lcs(char *str,int l)//求最长公共子串
{
int i,j,k;
FOR(1,l,i)
{
if(str[i]==c[1])
{
k=1;
for(j=i;j<=l&&k<=l3;j++)
{
if(str[j]==c[k])
{
k++;
}
}
if(k!=l3+1)
{
break;
}
sum[tmp][0]=i;
sum[tmp][1]=j-1;
tmp++;
}
}
}
int main()
{
int t,cas=0,i,j,x,y,ans;
RD(t);
while(t--)
{
cas++;
scanf("%s%s%s",a+1,b+1,c+1);
l1=strlen(a+1);
l2=strlen(b+1);
l3=strlen(c+1);
mem(dp1,0);
mem(dp2,0);
FOR(1,l1,i)//dp过程
{
FOR(1,l2,j)
{
if(a[i]==b[j])
{
dp1[i][j]=dp1[i-1][j-1]+1;
}
else
{
dp1[i][j]=max(dp1[i-1][j],dp1[i][j-1]);
}
}
}
for(i=l1; i>=1; i--)
{
for(j=l2; j>=1; j--)
{
if(a[i]==b[j])
{
dp2[i][j]=dp2[i+1][j+1]+1;
}
else
{
dp2[i][j]=max(dp2[i+1][j],dp2[i][j+1]);
}
}
}
tmp=0;
lcs(a,l1);
x=tmp;
lcs(b,l2);
y=tmp-x;
ans=0;
For(0,x,i)
{
For(0,y,j)
{
ans=max(ans,dp1[sum[i][0]-1][sum[j+x][0]-1]+dp2[sum[i][1]+1][sum[j+x][1]+1]);
}
}
printf("Case #%d: %d\n",cas,ans+l3);
}
return 0;
}
1004 我们队也做出来了,但我暂时还没有研究,据说是个treeDP,但貌似是枚举树的直径。。不懂啦,等待AC
[置顶] 2013 Multi-University Training Contest 8的更多相关文章
- Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二
Integer Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Partition(hdu4651)2013 Multi-University Training Contest 5
Partition Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków
ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...
- Partition(hdu4651)2013 Multi-University Training Contest 5----(整数拆分一)
Partition Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- JSU 2013 Summer Individual Ranking Contest - 5
JSU 2013 Summer Individual Ranking Contest - 5 密码:本套题选题权归JSU所有,需要密码请联系(http://blog.csdn.net/yew1eb). ...
- 2016 Multi-University Training Contest 2
8/13 2016 Multi-University Training Contest 2官方题解 数学 A Acperience(CYD)题意: 给定一个向量,求他减去一个 α(>=0)乘以 ...
- HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)
Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- Delphi窗体置顶及失去焦点后取得焦点
unit u_FrmTopMostActive; interface uses Winapi.Windows; implementation // 窗体置顶 procedure SetXwForegr ...
- HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...
随机推荐
- 软件设计之UML—UML的构成[上]
UML是一种通用的建模语言,其表达能力相当的强,不仅可以用于软件系统的建模,而且可用于业务建模以及其它非软件系统建模.UML综合了各种面向对象方法与表示法的优点,至提出之日起就受到了广泛的重视并得到了 ...
- Servlet的延迟加载和预加载
我们什么时候使用了延迟加载呢? 先从hibernate引入这个概念吧. hibernate使用lazy属性设置延迟加载,load方法会使用延迟加载. 举个例子: 一个学生有多部手机,如果使用了延迟加载 ...
- hdu 1226 超级密码(bfs+余数判重)
题意:略过 分析:用m个数字组成一个能够被n整除的c进制数的最小值,实际上本题的关键就在于这个最小值上. 首先确定我们的思路是从小到大寻找.先查看一位数,即查看着m个数字是否能被n整除:若不能,就查 ...
- Fragment的知识总结
1. Fragment概念及作用. 以下是使用Fragment提供思路 2. 创建继承于 Fragment的类:(可extends Fagment 或 ListFagment) 注意导包:如果考虑兼 ...
- css的使用技巧资料
http://www.instantshift.com/2010/03/15/47-css-tips-tricks-to-take-your-site-to-the-next-level/ http: ...
- C# 编写Windows Service(windows服务程序)【转载】
[转]http://www.cnblogs.com/bluestorm/p/3510398.html Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成 ...
- SOAP+WSDL
一 SOAPSOAP最开始是用作RPC机制的,后来XML的出现使其应用非常广泛.它与HTTP一样是一种应用级协议,使用他可以在不同的应用程序之间进行数据交换.SOAP可以基于HTTP,也可以基于HTT ...
- Android RecyclerView使用详解(二)
在上一篇(RecyclerView使用详解(一))文章中简单的介绍了RecyclerView的基本用法,接下来要来讲讲RecyclerView的更多用法,要实现不同的功能效果,大部分都还是在于Recy ...
- C#-gdi绘图,双缓冲绘图,Paint事件的触发
一. 画面闪烁问题与双缓冲技术 1.1 导致画面闪烁的关键原因分析: 1 绘制窗口由于大小位置状态改变进行重绘操作时 绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面 ...
- JVM内存结构之三--持久代
本文会介绍一些JVM内存结构的基本概念,然后很快会讲到持久代,来看下Java SE 8发布后它究竟到哪去了. 基础知识 JVM只不过是运行在你系统上的另一个进程而已,这一切的魔法始于一个java命令. ...