刷题记录
1.A. Phone Desktop
输入:
11
1 1
7 2
12 4
0 3
1 0
8 1
0 0
2 0
15 0
8 2
0 9
输出:
1
1
2
2
1
1
0
1
1
2
5
题意:题目给我们1x1和2x2的图标个数,让我们求最少需要多少个5x3的屏幕。
思路:当只看2x2的图标个数n时,最少需要的屏幕个数为(n+1)/2,查看是否需要添加屏幕,要看屏幕流出的1x1的个数够不够用。
下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int x,y;
cin>>x>>y;
int re=(y+1)/2;
int k;
if(y%2==0)
k=re*7;
else
k=(re-1)*7+11;
x-=k;
if(x>0)
{
int v=x/15+(x%15==0?0:1);
cout<<re+v<<"\n";
}
else
{
cout<<re<<"\n";
}
}
int main()
{
int t;
cin>>t;
while(t--){
solve();
}
}
2.B. Symmetric Encoding
输入:
5
10
serofedsoc
3
ttf
9
tlrhgmaoi
1
w
15
hnndledmnhlttin
输出:
codeforces
fft
algorithm
w
meetinthemiddle
思路:找到给出字符串按小到大的所以元素,再按照i对应n-i-1的关系,用map保存对应关系,遍历一遍题目串,更改每个元素为对应关系。
下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n;
cin>>n;
string s,t,v;
cin>>s;
t=s;
sort(t.begin(),t.end());
for(int i=0;i<n;i++){
if(t[i]!=t[i+1]) v+=t[i];
}
map<char,char>q;
for(int i=0;i<v.size();i++){
q[v[i]]=v[v.size()-1-i];
}
for(int i=0;i<n;i++){
s[i]=q[s[i]];
}
cout<<s<<"\n";
}
int main()
{
int t;
cin>>t;
while(t--){
solve();
}
}