刷题记录
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;elsek=(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();}
}