codeforces #220 div2前三題
A題很簡單,先給棋盤的大小,然後給定初始座標位置,然後給可以變換的a,b。問最小的步數可以到達棋盤的任何一個角落。這個題目很簡單,卻容易忽略一個問題,就是在走的過程中千萬不能走出棋盤規定的大小。
程式碼:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100000000;
int main()
{
int n,m,sx,sy,a,b;
while(cin>>n>>m>>sx>>sy>>a>>b)
{
int ans=maxn;
int sum;
int flag=0;
if(sx+a>n&&sx-a<1) //不能跳出棋盤
flag=1;
if(sy+b>m&&sy-b<1)
flag=1;
if((sx==1&&sy==1)||(sx==n&&sy==m)||(sx==1&&sy==m)||sx==n&&sy==1)
{
cout<<"0"<<endl;
continue;
}
else if(flag)
{
puts("Poor Inna and pony!");
continue;
}
else
{
if((sx-1)%a==0&&(sy-1)%b==0) //1 1
{
sum=(sx-1)/a+(sy-1)/b;
if(sum%2==0)
{
int tmp=max((sx-1)/a,(sy-1)/b);
ans=min(ans,tmp);
}
}
if((n-sx)%a==0&&(sy-1)%b==0) //n 1
{
sum=(n-sx)/a+(sy-1)/b;
if(sum%2==0)
{
int tmp=max((n-sx)/a,(sy-1)/b);
ans=min(ans,tmp);
}
}
if((sx-1)%a==0&&(m-sy)%b==0) //1 m
{
sum=(sx-1)/a+(m-sy)/b;
if(sum%2==0)
{
int tmp=max((sx-1)/a,(m-sy)/b);
ans=min(ans,tmp);
}
}
if((n-sx)%a==0&&(m-sy)%b==0) //n m
{
sum=(n-sx)/a+(m-sy)/b;
if(sum%2==0)
{
int tmp=max((n-sx)/a,(m-sy)/b);
ans=min(ans,tmp);
}
}
}
if(ans==maxn) puts("Poor Inna and pony!");
else cout<<ans<<endl;
}
return 0;
}
然後是B題,也是個簡單題目,結果出題人給判的資料出現了失誤,結果大多數人竟然也理解錯了。45454可以是499,949,994,出題人理解成了只有499和994兩種,我也理解成了兩種。。。
程式碼:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100005;
char a[maxn];
int t[maxn];
int main()
{
__int64 res;
while(cin>>a)
{
res=1;
int i,j,k,len=strlen(a);
for(i=0;i<len;i++)
t[i]=a[i]-'0';
for(i=0;i<len-1;)
{
if(t[i]+t[i+1]!=9)
{
i++;
continue;
}
else if(t[i]+t[i+1]==9)
{
int tmp=0;
j=i,k=i+1;
while(1)
{
if(k>=len) break;
if(t[j]+t[k]==9)
{
j++;
k++;
tmp++;
}
else break;
}
if(tmp%2==0) //出題人想錯了,我們大家也跟著想錯了。。
{
res=res*(tmp/2+1);
}
i=i+tmp+1;
continue;
}
}
printf("%I64d\n",res);
}
return 0;
}
C題,記憶化搜尋,開始沒有記憶化,果斷超時了,每次利用前面搜過的,如果沒有搜過則比較然後得到最優解。
程式碼:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
const int maxn = 1e9;
using namespace std;
char mp[1005][1005];
char dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int ans[1005][1005];
int visi[1005][1005];
int res,n,m;
map<char,char> mq;
int dfs(int x,int y)
{
int cx,cy,tmp,ma=0;
if(ans[x][y]>0) return ans[x][y]; //已經搜過
for(int i=0;i<4;i++)
{
cx=x+dir[i][0],cy=y+dir[i][1];
if(cx>=0&&cx<n&&cy>=0&&cy<m&&mq[mp[x][y]]==mp[cx][cy])
{
if(visi[cx][cy]) ma=maxn; //說明有迴路.
else
{
visi[cx][cy]=1;
tmp=dfs(cx,cy);
visi[cx][cy]=0;
ma=max(ma,tmp);
}
}
}
ans[x][y]=ma+1;
return ma+1;
}
int main()
{
mq['D']='I',mq['I']='M',mq['M']='A',mq['A']='D';
int i,j,res;
while(cin>>n>>m)
{
res=0;
memset(ans,0,sizeof(ans));
memset(visi,0,sizeof(visi));
for(i=0;i<n;i++)
scanf("%s",mp[i]);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(!visi[i][j]&&mp[i][j]=='D'&&!ans[i][j])
{
visi[i][j]=1;
res=max(res,dfs(i,j));
visi[i][j]=0;
}
}
if(res>=maxn) puts("Poor Inna!");
else if(res<4) puts("Poor Dima!");
else printf("%d\n",res/4);
}
return 0;
}
/*
5 5
DIMAD
DIIDI
DIMAM
DDMMA
AAMID
5 5
DIMAD
DIMAI
DIMAM
DDMAA
AAMID
*/
相關文章
- Codeforces #213 div2前三題
- Codeforces Round #231 div2前三題
- codeforces #215 div2前四題
- Codeforces Round #217前三題
- codeforces #216前三題
- Codeforces #205前三題
- Codeforces #199前三題
- Codeforces #208 div2前兩題及思維風暴
- Codeforces Round#196 前三題
- Codeforces Round#197 前三題
- Codeforces #245(div2)
- Codeforces Rund 976 div2 個人題解(A~E)
- Codeforces Round 980 div2 個人題解(A~D)
- Codeforces Round 979 div2 個人題解(A~E)
- Codeforces Round 983 div2 個人題解(A~D)
- Codeforces Round #228 div1前三題
- codeforces #197(div2)
- codeforces #198(div2)
- Codeforces Round 982 div2 個人題解(A~D2)
- Codeforces Round #470 div2 C
- Codeforces Round #FF(255) DIV2
- Codeforces Rund 977 div2 個人題解(A~E1)
- Codeforces Round #220 (Div. 2)
- codeforces 260 div2 A,B,C
- Educational Codeforces Round 171 div2(A~E)
- Codeforces Round #226 div2(待更新)
- codeforces round #201 Div2 A. Difference Row
- codeforces round #234B(DIV2) A Inna and Choose Options
- codeforces round #234B(DIV2) B Inna and New Matrix of Candies
- codeforces round #234B(DIV2) C Inna and Huge Candy Matrix
- 220
- JAVA 前三次題目集總結Java
- 連結串列面試題(三)---當前結點前插入一個資料x面試題
- Bitmap Indexes (220)Index
- Codeforces 刷題記錄
- 【題解】Educational Codeforces Round 82
- codeforces round 981 A~F 題解
- Codeforces 571B Minimization:dp + 貪心【前後相消】