A 张老师和菜哭武的游戏
题目中有描述“当且仅当集合存在y和z,满足x等于y+z或者y-z”
所以考虑y-z,很容易想到辗转相减法,所以最小项是最大公约数
然后题目就迎刃而解了
#include
using namespace std;
int n,a,b;
int gcd(int a,int b){
if(a==b)return a;
return a>b?gcd(a-b,b):gcd(b-a,a);
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n>>a>>b;
int temp=gcd(a,b);
int ans=n/temp;
if(ans%2==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}
B 伤害计算
看了题解,觉得还是用atoi更加简单;
atoi主要用来将数字字符串转变为对应的整型数字,具体用法网上教程很多;
数学期望的计算公式是用各项权值乘以概率,常数的数学期望就是常数,公式推导还是挺简单的;
注意题目中小数只有.5,所以方便计算,可以将各项结果先乘以2,最后除2,看余数决定是否输出.5;
ps:字符串题目多用函数可以减少很多时间;
#include
using namespace std;
const int MAXL=6000;
char strfuc[MAXL];
int ans;
void opera(char *str){
char *D=strchr(str,'d');
if(D==NULL){
int c=atoi(str);
ans+=2*c;
//cout<<c<<endl;
}else{
*D='\0';
int n=atoi(str);
int x=atoi(D+1);
ans+=n*(x+1);
//cout<<n<<" "<<x<>strfuc){
ans=0;
char* str=strfuc;
while(1){
char* ps=strchr(str,'+');
if(ps==NULL){
opera(str);
break;
}else{
*ps='\0';
opera(str);
str=ps+1;
}
}
cout<<ans/2;
if(ans%2) cout<<".5"<<endl;
else cout<<endl;
}
return 0;
}
yhyxzywl
原创文章 2获赞 0访问量 104
关注
私信
展开阅读全文