训练总结8.1

来源:互联网 发布:荒潮 知乎 编辑:程序博客网 时间:2024/06/06 07:17

今天一共做了几道题,做的搜索题 有 棋盘问题,农民追牛问题,还有寻找0和1数字的十进制数字表示n的倍数的问题 。

棋盘问题是给出给定的棋盘大小,还有可以摆放棋子的位置,寻找出多少种摆放的方案,这里有个前提是棋子不能摆在同一行或者同一列。棋盘问题、

农民追牛问题,农民追上牛的最少的步数,农民追牛的方式有向前或向后走一步,或者一下到达2*x 这个位置。农民追牛

0和1表示问题,找到一个十进制的数,只有0和1,是n的倍数,这个题主要是发现搜索的方式,从1开始一直 x*10和 x*10+1,一直找到问题的解。0和1

这三道题以前也都是做过的。

 还有下午的练习题,

1.旋转方向问题,有四个方向,给出两个方向,再给出旋转的次数,输出是顺时针旋转的,还是逆时针旋转的。cw顺时针,ccw逆时针  。
用1,2,3,4表示方向,在准备把8个临近的a,b两个点都依次写出来时候,也都发现了规律,将临近的点 划分为两大类,分别是a>b和a<b两类;;还有顺时针逆时针两个都可以的不成立的,发现只要是两个方向不是相邻,肯定是endefinde,所以该开始的限制条件写了两个(方向对角,旋转次数是2的倍数)    只是没有想到限制条件只有旋转次数是2的倍数。

2.守卫问题,看看守卫够不够用。给出一段字母序列,找出每个字母的长度,(记下 这个 字母序列收尾),然后找出整体序列每个点 的每个字母的公共 的个数。

感觉这个题最主要的是找思路,发现自己的思维有点局限,发现思路后代码很好实现。

重点的看看 下午的练习:

旋转方向问题:

Examples
input
^ >
1
output
cw
input
< ^
3
output
ccw
input
^ v
6
output
undefined

Code:

#if 0#include<bits/stdc++.h>using namespace std;int main(){char c,cr;int a,b,k;cin>>c>>cr>>k;if(c=='^')a=1;else if(c=='>')a=2;elseif(c=='v')a=3;elseif(c=='<')a=4;        if(cr=='^')b=1;else if(cr=='>')b=2;elseif(cr=='v')b=3;elseif(cr=='<')b=4;    if(k%2==0)     cout<<"undefined"<<endl;    else    if((a==1&&b==2)||(a==2&&b==3)||(a==3&&b==4)||(a==4&&b==1)){if(k%4==1)cout<<"cw"<<endl;elseif(k%4==3)cout<<"ccw"<<endl;     }     else    if((a==2&&b==1)||(a==3&&b==2)||(a==4&&b==3)||(a==1&&b==4))    {    if(k%4==1)    cout<<"ccw"<<endl;    else    if(k%4==3)cout<<"cw"<<endl;}}#endif


守卫问题:
Examples
Input
5 1AABBB
Output
NO
Input
5 1ABABB
Output
YES

#if 0#include<bits/stdc++.h>using namespace std;int ans;int main(){int t[30][2],n,gar,num=0,max=0;char c[1000006] ;  cin>>n>>gar;for(int i=0; i<n; i++)cin>>c[i];while(num!=n) {int k1,k2;char cc; for(int i=0; i<n; i++){if(c[i]!='0'){cc=c[i];k1=i;t[ans++][0]=i;break;}}for(int i=n-1; i>=0; i--){if(c[i]==cc){k2=i;t[ans-1][1]=i;break;}}for(int i=k1; i<=k2; i++){if(c[i]==cc){num++;c[i]='0';}}}for(int i=0; i<n; i++){ int cnt=0;for(int j=0; j<ans; j++){if(t[j][0]<=i && t[j][1]>=i){cnt++;}}if(cnt>max)max=cnt;}if(max>gar)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}#endif




原创粉丝点击