题解:并查集(模板)
#include
#include
题解:首先对于字符串大小的比较需要重写,然后利用优先队列维护前K个字符在队列中,最终取出队首元素即可
#include
#include
#include
#include
题解:暴力求解
#include
#include
using namespace std;
queueque;
int main() {
int T;
scanf("%d",&T);
while(T--)
{
while(!que.empty()){
que.pop();
}
int n;
scanf("%d",&n);
for(int i=0;i>s;
getchar();
if(s=="PUSH")
{
int x;
scanf("%d",&x);
que.push(x);
}
else if(s=="TOP")
{
if(que.empty())
{
printf("%d\n",-1);
}
else{
printf("%d\n",que.front());
}
}
else if(s=="POP"){
if(que.empty())
{
printf("%d\n",-1);
}
else{
que.pop();
}
}
else if(s=="SIZE"){
if(que.empty())
{
printf("%d\n",0);
}
else{
printf("%d\n",que.size());
}
}
else if(s=="CLEAR"){
if(!que.empty())
{
while(!que.empty()){
que.pop();
}
}
}
}
}
return 0;
}
// 64 位输出请用 printf("%lld")
题解:先判断是否有交点,如果有,分段使用积分
#include
#include
#include
using namespace std;
int main() {
int T;
scanf("%d",&T);
while(T--){
int A,B,C;
scanf("%d%d%d",&A,&B,&C);
int a=B*B;
int b=2*B*C-2*A;
int c=C*C;
int t=b*b-4*a*c;
if(t<0){
double res=0;
printf("%.10f\n",res);
// printf("%.10f\n",0);出现了错误,由于printf存在缓冲区,会去取索引位0指针的值导致出错
}
else if(t==0)
{
double x=-1.0*b/(2*a*1.0);
double s=sqrt(2*A*1.0)*x*sqrt(x*1.0)*4/3.0;
printf("%.10f\n",s);
}
else if(t>0){
double x1=(-1*b-sqrt(t*1.0))/(2*a*1.0);
double x2=(-1*b+sqrt(t*1.0))/(2*a*1.0);
double s1=sqrt(2*A*1.0)*x1*sqrt(x1*1.0)*4/3.0;
double s2=(sqrt(2*A*1.0)*x2*sqrt(x2*1.0)*2/3.0-B*x2*x2/2.0-C*x2)-(sqrt(2*A*1.0)*x1*sqrt(x1*1.0)*2/3.0-B*x1*x1/2.0-C*x1);
if(C<=0)
{
printf("%.10f\n",s1+s2);
}
else{
printf("%.10f\n",s2);
}
}
}
return 0;
}