A. Electric Bill
解题思路:电量分级收费,判断是否大于1000,分别计算两部分的钱,求和输出。
AC代码:
#include<cmath>
#include<cstdio>
#include<algorithm>
#include <string>
#include<vector>
#include<iomanip>
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
int n;
cin>>n;
while(n--){
int c,d;
cin>>c;
cout<<c<<" ";
if(c<=1000){
d=c*a;
}else{
d=1000*a+(c-1000)*b;
}
cout<<d<<endl;
}
return 0;
}
B. Simplified Keyboard
解题思路:给出一个字母分布图,如果两个字符串对应位置的字母全都相等,字符串属性为1,否则若两个字符串对应位置字母均相邻或相等,字符串属性为2,否则字符串属性为3.
AC代码:
#include<cmath>
#include<cstdio>
#include<algorithm>
#include <string>
#include<vector>
#include<iomanip>
#include<iostream>
using namespace std;
int main(){
int n,i,a,b;
string s1,s2;
cin>>n;
for(i=0;i<n;i++){
cin>>s1>>s2;
a=s1.length();
b=s2.length();
if(s1.compare(s2)==0){//判断是否相等,相等则为1
cout<<"1"<<endl;
}
else if(a==b){
int p=0;
for(int j=0;j<a;j++){//遍历字符串并比较对应位置
if(s1[j]!=s2[j]&&s1[j]!=s2[j]-1&&s1[j]!=s2[j]+1&&s1[j]!=s2[j]-8
&&s1[j]!=s2[j]-9&&s1[j]!=s2[j]-10&&s1[j]!=s2[j]+9&&s1[j]!=s2[j]+10&&s1[j]!=s2[j]+8){
p=1;
break;
}
}
if(p==0)
cout<<"2"<<endl;
if(p==1)
cout<<"3"<<endl;
}
else{//长度不相等,则为3
cout<<"3"<<endl;
}
}
return 0;
}
C. Singin' in the Rain
解题思路:对于每个样例,第一行输入CD上歌曲的总数 t 和Anya想听的歌曲的数量 s ,第二行输入s个歌曲所在的位置,逐个计算每次切换需要按键的数量
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
int main(){
int n,flag;
int s,i,j,first,next;
long long t;
cin>>n;
for(i=1;i<=n;i++){
cin>>t>>s;
long long sum=0;
cin>>first;//初始位置
for(j=1;j<=s-1;j++){
cin>>next;
flag=next-first-1;//已经播放到末尾了,-1
if(flag<0){
flag=-flag;
}
if(flag<t-flag){//比较往前调还是往后调小呗
sum+=flag;
}else{
sum+=t-flag;
}
first=next;
}
cout<<sum<<endl;
}
return 0;
}
E. Simple Darts
解题思路:掷飞镖,落在第一个圆内得50分,第二个圆内积分双倍,第三个圆内单倍,根据X轴正上方逆时针旋转,在第几个扇形中就得几分
AC代码:
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
double w,b,d,s,k,n;
cin>>k;
while(k--){
cin>>w>>b>>d>>s>>n;
double count=0;
int a;
while(n--){
double x,y;
cin>>x>>y;
double len=sqrt(x*x+y*y);
double jd;
if(len<=b){
count+=50;
}else if(len<=d){
jd=atan2(y,x)/(2*acos(-1))*360;
if(jd<0){
jd=180+(180+jd);
}
a=jd/(360/w)+1;
count+=a*2;
}else if(len<=s){
jd=atan2(y,x)/(2*acos(-1))*360;
if(jd<0){
jd=180+(180+jd);
}
a=jd/(360/w)+1;
count+=a;
}
}
cout<<count<<endl;
}
return 0;
}
https://www.jisuanke.com/contest/7195