Gym 102219
A - Mental Rotation
题记:模拟题,先遍历字符串里L和R的数量,将L和R抵消掉,然后再余4(因为向右转4次或者向左转4次相当于没动)。然后按照题目模拟即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
char a[N][N];
char b[N][N];
char l(char x){
char ans='.';
if(x=='>')
ans='^';
else if(x=='v')
ans='>';
else if(x=='<')
ans='v';
else if(x=='^')
ans='<';
return ans;
}
char r(char x){
char ans='.';
if(x=='>')
ans='v';
else if(x=='v')
ans='<';
else if(x=='<')
ans='^';
else if(x=='^')
ans='>';
return ans;
}
int main(){
int n;
cin>>n;
string s;
cin>>s;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
int sum=0;
for(int i=0;i<s.size();i++){
if(s[i]=='R')
sum++;
else
sum--;
}
sum%=4;
while(sum){
int c=1,d=1;
if(sum>0){
for(int i=1;i<=n;i++){
for(int j=n;j>0;j--){
b[c][d]=r(a[j][i]);
d++;
}
c++,d=1;
}
sum--;
}
else{
for(int i=n;i>0;i--){
for(int j=1;j<=n;j++){
b[c][d]=l(a[j][i]);
d++;
}
c++,d=1;
}
sum++;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=b[i][j];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<a[i][j];
cout<<endl;
}
return 0;
}
B - SpongeBob SquarePants
题记:水题,判断两个数是否相同即可。
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int a,b;
cin>>a>>b;
if(a==b) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
E - Optimal Slots
H - Are You Safe?
I - To Crash Or Not To Crash
题记:先判断’=‘的位置,然后遍历’=‘右边,输出’=‘右边第一个不是’.'的字符,如果没有则输出You shall pass!!!。
#include<bits/stdc++.h>
using namespace std;
char a[5][15];
int main(){
int x,y;
for(int i=0;i<3;i++){
for(int j=0;j<10;j++){
cin>>a[i][j];
if(a[i][j]=='='){
x=i,y=j;
}
}
}
int flag=1;
for(int i=y+1;i<10;i++){
if(a[x][i]!='.'){
cout<<a[x][i];
flag=0;
break;
}
}
if(flag==1)
cout<<"You shall pass!!!"<<endl;
return 0;
}
J - Kitchen Plates
题记:先用next_permutation把所有情况打表存下来,之后遍历每种情况看一下两个字母是否符合,不符合的标记为0,最后遍历一次数组看一下有没有标记为1的情况,有则输出。
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
char ans[N][10];
char a[]={'A','B','C','D','E'};
int cnt[130];
int main(){
int sum=0;
do{
for(int i=0;i<5;i++)
ans[sum][i]=a[i];
sum++;
}while(next_permutation(a,a+5));
char str[5];
memset(cnt,1,sizeof(cnt));
for(int i=0;i<5;i++){
cin>>str;
if(str[1]=='<'){
char x=str[0],y=str[2];
for(int j=0;j<sum;j++){
int p1,p2;
for(int k=0;k<5;k++){
if(ans[j][k]==x)
p1=k;
if(ans[j][k]==y)
p2=k;
}
if(p1>p2)
cnt[j]=0;
}
}
else{
char x=str[0],y=str[2];
for(int j=0;j<sum;j++){
int p1,p2;
for(int k=0;k<5;k++){
if(ans[j][k]==x)
p1=k;
if(ans[j][k]==y)
p2=k;
}
if(p1<p2)
cnt[j]=0;
}
}
}
int flag=1;
for(int i=0;i<sum;i++){
if(cnt[i]){
for(int j=0;j<5;j++)
cout<<ans[i][j];
flag=0;
break;
}
}
if(flag)
cout<<"impossible"<<endl;
return 0;
}
K - Help The Support Lady
题记:对所有工作的时间进行排序,用一个数cnt记录下当前使用了多少时间,判断当前工作时间加上使用了的时间有没有超过当前工作时间的两倍即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],b[N];
int main(){
int t;
cin>>t;
int sum=0;
while(t--){
sum++;
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
long long cnt=0,ans=0;
for(int i=0;i<n;i++){
if(cnt+a[i]<=a[i]*2){
cnt+=a[i];
ans++;
}
}
cout<<"Case #"<<sum<<": "<<ans<<endl;
}
return 0;
}
C - I Don’t Want To Pay For The Late Jar!
题记:直接找出最大值即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
typedef long long ll;
const int INF=0x3f3f3f;
int a[N];
int main(){
int t;
cin>>t;
int sum=0;
while(t--){
sum++;
int n,m;
cin>>n>>m;
int mmax=-INF;
for(int i=0;i<n;i++){
int x,y;
cin>>x>>y;
if(y<=m)
mmax=max(mmax,x);
else
mmax=max(mmax,x-y+m);
}
cout<<"Case #"<<sum<<": "<<mmax<<endl;
}
return 0;
}