驽马十驾,功在不舍……
如有问题、建议或者更好的思路和方法,
欢迎联系徐老师:2572802856@qq.com
1.2 挤牛奶 Milking Cows
#include<iostream>
#include<algorithm>
using namespace std;
int n,be,en,milk,nomilk;
struct node{
int s,e;
} sj[5005];
bool cmp (node a,node b) { //按开始时间升序排列
return a.s<b.s;
}
int main () {
cin>>n;
for (int i=0;i<n;i++) cin>>sj[i].s>>sj[i].e;
sort(sj,sj+n,cmp);
be=sj[0].s;
en=sj[0].e;
milk=en-be;
nomilk=0;
for (int i=1;i<n;i++) {
//有3种情况,当前段被be和en包含、相交和不相交;包含不需处理
if (sj[i].s<=en && sj[i].e>en) milk=max(milk,sj[i].e-be),en=sj[i].e; //相交
if (sj[i].s>en) { //不相交
milk=max(milk,sj[i].e-sj[i].s);
nomilk=max(nomilk,sj[i].s-en);
be=sj[i].s;
en=sj[i].e;
}
}
cout<<milk<<" "<<nomilk;
return 0;
}
1.2 方块转换 Transformations
#include<iostream>
using namespace std;
char s[15][15],e[15][15],t[15][15],tt[15][15];
int n;
bool f;
int main() {
cin>>n;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) cin>>s[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) cin>>e[i][j];
//1 顺时针转 90°
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) t[j][n-i+1]=s[i][j];
f=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (t[i][j]!=e[i][j]) f=0;
if (f) {cout<<1;return 0;}
//2 顺时针转 180°
for (int i=1;i<=n;i++) //顺时针转 90°两次
for (int j=1;j<=n;j++) t[j][n-i+1]=s[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) tt[j][n-i+1]=t[i][j];
f=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (tt[i][j]!=e[i][j]) f=0;
if (f) {cout<<2;return 0;}
//3 顺时针转 270°
for (int i=1;i<=n;i++) //顺时针转 90°三次
for (int j=1;j<=n;j++) t[j][n-i+1]=s[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) tt[j][n-i+1]=t[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) t[j][n-i+1]=tt[i][j];
f=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (t[i][j]!=e[i][j]) f=0;
if (f) {cout<<3;return 0;}
//4 反射:图案在水平方向翻转
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) t[i][n-j+1]=s[i][j];
f=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (t[i][j]!=e[i][j]) f=0;
if (f) {cout<<4;return 0;}
//5 组合:图案在水平方向翻转,然后再按照 1~3 之间的一种再次转换
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) t[i][n-j+1]=s[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) tt[j][n-i+1]=t[i][j];
f=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (tt[i][j]!=e[i][j]) f=0;
if (f) {cout<<5;return 0;}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) t[j][n-i+1]=tt[i][j];
f=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (t[i][j]!=e[i][j]) f=0;
if (f) {cout<<5;return 0;}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) tt[j][n-i+1]=t[i][j];
f=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (tt[i][j]!=e[i][j]) f=0;
if (f) {cout<<5;return 0;}
//6 不改变:原图案不改变
f=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (s[i][j]!=e[i][j]) f=0;
if (f) {cout<<6;return 0;}
cout<<7;
return 0;
}
1.2 命名那个数字 Name That Number
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
vector<string> dict;
string str,t;
char trans[]="2223334445556667 77888999";
bool f,flag=1;
int main () {
cin>>str;
for (int i=0;i<4617;i++) {
cin>>t;
if (t.size()==str.size()) dict.push_back(t); //名字长度不一致就不存
}
for (int i=0;i<dict.size();i++) {
f=1;
for (int j=0;j<str.size();j++)
if (trans[dict[i][j]-'A']!=str[j]) {f=0;break;}
if (f) {cout<<dict[i]<<endl;flag=0;}
}
if (flag) cout<<"NONE"<<endl;
return 0;
}
1.2 回文平方数 Palindromic Squares
#include<iostream>
#include<algorithm>
using namespace std;
int b;
string t="0123456789ABCDEFGHIJ";
string zh(int n) { //将n转成字符串并反转
string ans;
while (n) ans+=t[n%b],n/=b;
reverse(ans.begin(),ans.end());
return ans;
}
bool chk(string s) { //判断字符串是否为回文
for (int i=0;i<s.size()/2;i++)
if (s[i]!=s[s.size()-1-i]) return 0;
return 1;
}
int main () {
cin>>b;
for (int i=1;i<=300;i++)
if (chk(zh(i*i))) cout<<zh(i)<<' '<<zh(i*i)<<endl;
return 0;
}
1.2 双重回文数 Dual Palindromes
#include<iostream>
#include<algorithm>
using namespace std;
int n,s,js,cnt;
bool ok(int x,int y) { //判断x在y进制下是否回文
string s,ss;
while(x) s+=x%y+48,x/=y;
ss=s;
reverse(ss.begin(),ss.end());
return ss==s;
}
int main () {
cin>>n>>s;
for (int i=s+1;js<n;i++) {
cnt=0;
for (int j=2;j<=10;j++)
if (ok(i,j)) cnt++;
if (cnt>1) cout<<i<<endl,js++;
}
return 0;
}
浙公网安备 33010602011771号