不写头文件了,显得代码长 |
A题
直接写
int main(){
int i,j;
string s="I LOVE WIT";
for(i=0;i<s.size();i++){
for(j=0;j<i;j++){
cout<<" ";
}
cout<<s[i]<<endl;
}
return 0;
}
B题
最后判断一下即可
int main(){
int a;
cin>>a;
double c=a*12*2.54*10;
if(c==(int)c)
printf("%d",(int)c);
else
printf("%.1lf",c);
return 0;
}
C题
就是题目看着长,也是直接模拟就可以了
注意不是1的时候,还要乘%99
可以用一个%*c忽略读入的%
typedef long long ll;
double c[10];
int main(){
int i,e,f;
double a;
for(i=0;i<7;i++){
scanf("%lf%*c",&c[i]);
}
cin>>e>>f;
if(f==1)
printf("%.2lf%%",c[e]/100);
else
printf("%.2lf%%",c[e]*99/100);
return 0;
}
D题
老话说得好,二进制杀我
代码我是我看的别人的,题解在代码注释里
#define mid 1000000007
typedef long long ll;
//但凡我稍微了解一点点二进制,也不会死这么惨
//审题啊,取反的位置是从哪里到哪里
int main(){
//题目给的无符号整型,就写无符号整型,为啥我也晓不得
unsigned int ans=0,a;
cin>>a;
for(int i=1;i<=32;i++){
ans<<=1;
if(a&&(a&1)==0){//保证了a为0的时候就不取反了
ans+=1;
}
a>>=1;
}
cout<<ans;
return 0;
}
E题
直接模拟就好了
注意输入字符串,不要输入数字,因为会有00输入
#define mid 1000000007
int main(){
string s;
int a,b,c;
cin>>s;
a=(s[0]-'0')*10+(s[1]-'0');
b=(s[3]-'0')*10+(s[4]-'0');
c=(s[6]-'0')*10+(s[7]-'0');
c+=33;
if(c>=60){
c=c-60;
b++;
}
b+=22;
if(b>=60){
b-=60;
a++;
}
a+=1;
if(a<19)
cout<<"arrive on time";
else if(a>=21)
cout<<"too late";
else
cout<<"arrive late";
return 0;
}
F题
就是个模板二分
这个边界判断我就是不会啊,我吐了,无限试错
int main(){
int a,b,c[100006],i;
cin>>a>>b;
for(i=0;i<a;i++){
cin>>c[i];
}
int minmin=1;
int maxmax=1e9;
while(minmin<=maxmax){
int mid=(minmin+maxmax)/2;
int ans=0;
for(i=0;i<a;i++){
ans+=c[i]/mid;//每个鸽子可以分为几块肉
}
if(ans>=b){
minmin=mid+1;
}
else maxmax=mid-1;
}
cout<<minmin-1;
return 0;
}
G题
可以分析出来,只要材料够多所有偶数都可以被拼出来。奇数不行
k段材料能够凑出的最长长度,就是k个材料相加
写在代码里了
#define mid 1000000007
typedef long long ll;
//long long > pow(2,60)
//前排提醒,慎用pow,用了就错
ll f=1;
ll fang(){
return f*=2;
}
int main(){
ll a,b,sum=0,i;
cin>>a>>b;
if(b%2==1){
cout<<"No";
return 0;
}//奇数凑不齐
for(i=1;i<=a;i++){
sum+=fang();//计算出i个材料能够凑出的最大值
if(sum>=b){//能够凑出b这么长,那么自然最长的就是f,要不然i在上一轮就结束了
cout<<"Yes"<<endl<<f;
return 0;
}
}
cout<<"No";//a个以内没找到
return 0;
}```