uscao专题1.2
第一题 挤牛奶 Milking Cows
题目: 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300时刻(从5点开始计时,秒为单位)给他的牛挤奶,一直到1000时刻。第二个农民在700时刻开始,在 1200时刻结束。第三个农民在1500时刻开始2100时刻结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300时刻到1200时刻),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200时刻到1500时刻)。你的任务是编一个程序,读入一个有N个农民(1 <= N <= 5000)挤N头牛的工作时间列表,计算以下两点(均以秒为单位):(1)最长至少有一人在挤奶的时间段。(2)最长的无人挤奶的时间段。
解题思路: 开一个结构体存储begin和end,然后进行左端点排序,然后从第二个开始循环,判断这个的左端点是否小于结束的点,如果小于那么就更新结束的点,否则更新起始点与结束点,和找结束点与起始点的差是否大于之前的,和这个的左端点与结束点的差是否大于之前的。最后在找结束点与起始点的差是否大于之前的,防止最后没判断。
#include<bits/stdc++.h>
using namespace std;
int N;
struct node
{
int begin,end;
}m[5005];
bool cmp(node a,node b)
{
return a.begin<b.begin;
}
int main()
{
cin>>N;
for(int i=1;i<=N;++i) cin>>m[i].begin>>m[i].end;
sort(m+1,m+1+N,cmp);
int begin=m[1].begin;
int end=m[1].end;
int ans1=0,ans2=0;
for(int i=2;i<=N;++i)
{
if(m[i].begin<=end) end=max(end,m[i].end);
else
{
ans1=max(ans1,end-begin);
ans2=max(ans2,m[i].begin-end);
begin=m[i].begin;
end=m[i].end;
}
}
ans1=max(ans1,end-begin);
cout<<ans1<<" "<<ans2;
return 0;
}
第二题 方块转换 Transformations
题目: 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
#1:转90度:图案按顺时针转90度。
#2:转180度:图案按顺时针转180度。
#3:转270度:图案按顺时针转270度。
#4:反射:图案在水平方向翻转(形成原图案的镜像)。
#5:组合:图案在水平方向翻转,然后按照#1-#3之一转换。
#6:不改变:原图案不改变。
#7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个
解题思路:
第一种是:a[i][j]==b[j][n-i+1];第二种是:a[i][j]==b[n-i+1][n-j+1];
第三种是:a[i][j]==b[n-j+1][i];第四种是:a[i][j]==b[i][n-j+1];
第六种是:a[i][j]==b[i][j]。
第五种就是前四种结合起来。如果都不是的话就是第七个。
#include<bits/stdc++.h>
using namespace std;
int n,ans=0,cnt1,cnt2,cnt3,cnt4,cnt5,cnt6;
char a[15][15],b[15][15],c[15][15];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j]