这几天状态真迷,也许需要休息休息.
A. World Final? World Cup! (I)
数据量很小,把题目意思翻译一下即可.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
int a=0,b=0;
;
string s>>s;
cinbool flag=false;
int a_=5,b_=5;
for(int i=0;i<10;i++)
{
if(i%2==0)
a_--;
else
b_--;
if(s[i]=='1')
{
if(i%2==0)
++;
aelse
++;
b}
if(a>b+b_||a+a_<b)
{
<<i+1<<'\n';
cout=true;
flagbreak;
}
}
if(!flag)
<<-1<<'\n';
cout}
return 0;
}
C. 现在是,学术时间 (I)
可以发现
发现每个教授一篇论文其实就是最优了.
只需要统计一下被引用0次的论文数量即可.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
int n;
>>n;
cinint a;
int ans=n;
for(int i=1;i<=n;i++)
{
>>a;
cinif(a==0)
--;
ans}
<<ans<<'\n';
cout}
return 0;
}
D. 现在是,学术时间 (II)
把题读明白发现就是个签到题,分类讨论一下即可,注意输出高精度.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) ((x)&-(x))
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
long double x,y,xp,yp;
>>x>>y>>xp>>yp;
cinif(xp>x)
{
if(yp>y)
{
("%.9Lf\n",x*y/(xp*yp));
printf}
else
{
("%.9Lf\n",max(x*yp/(x*y+xp*yp-x*yp),(y-yp)*x/(x*y+(y-yp)*(xp-x))));
printf}
}
else
{
if(yp>y)
{
("%.9Lf\n",max(xp*y/(x*y+(yp-y)*xp),(x-xp)*y/(x*y+(x-xp)*(yp-y))));
printf}
else
{
("%.9Lf\n",max(xp,x-xp)*max(yp,y-yp)/(x*y));
printf}
}
}
return 0;
}
E. 鸡算几何
题面
题意就是一个L型铁丝ABC经合同变换变成DEF,问是否可以确定有对称的操作.
等腰的时候不能判断.
其他情况进行长度匹配,算一下叉乘的符号是否相同即可.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<double,double> PDD;
typedef pair<int,int> PII;
//#define lowbit(x) ((x)&-(x))
const double eps=1e-5;
double len(PDD a)
{
return a.first*a.first+a.second*a.second;
}
double cross(PDD a,PDD b)
{
return a.first*b.second-a.second*b.first;
}
int main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
,B,C;
PII A,E,F;
PDD D>>A.first>>A.second>>B.first>>B.second>>C.first>>C.second;
cin>>D.first>>D.second>>E.first>>E.second>>F.first>>F.second;
cin={A.first-B.first,A.second-B.second},BC={C.first-B.first,C.second-B.second};
PII BA={D.first-E.first,D.second-E.second},EF={F.first-E.first,F.second-E.second};
PDD EDif(len(BA)==len(BC))
{
<<"NO"<<'\n';
cout}
else
{
if(fabs(len(ED)-len(BA))>=eps)
(BA,BC);
swapif(cross(BA,BC)*cross(ED,EF)<0)
<<"YES"<<'\n';
coutelse
<<"NO"<<'\n';
cout}
}
return 0;
}
H. 本题主要考察了DFS
看了题之后发现用不到DFS.
总面积是一定的,最后只需要输出被隐藏拼图的价值,而这个价值与面积成正比,所以可以通过面积来算出答案.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=500;
[N];
string sint main() {
::sync_with_stdio(false);
iosint T;
>>T;
cinwhile(T--)
{
int n;
>>n;
cinint ans=0;
for(int i=1;i<=n*n-1;i++)
{
>>s[i];
cinfor(int j=0;j<4;j++)
{
if(s[i][j]=='2')
++;
anselse if(s[i][j]=='1')
--;
ans}
}
<<10-ans<<'\n';
cout}
return 0;
}
K. 本题主要考察了dp
题面
从小情况入手,接着对n分类讨论一下,发现100100...1111
这样是最优的.
然后按这种情形记个数.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//#define lowbit(x) ((x)&-(x))
int ceil(int n,int m)
{
if(n%m==0)
return n/m;
else
return n/m+1;
}
int main() {
::sync_with_stdio(false);
iosint n,m;
>>n>>m;
cinif(m<=ceil(n,3))
<<0<<'\n';
coutelse
{
-=ceil(n,3);
mif(n%3==0)
{
int ans=m/2*3+(m%2==0?-1:1);
<<min(n-2,ans)<<'\n';
cout}
else if(n%3==1)
{
int ans=m/2*3+1+(m%2==0?-1:1);
<<min(n-2,ans)<<'\n';
cout}
else if(n%3==2)
{
if(m==1)
<<1<<'\n';
coutelse
{
int ans=1;
-=1;
m+=m/2*3+1+(m%2==0?-1:1);
ans<<min(n-2,ans)<<'\n';
cout}
}
}
return 0;
}
L. 本题主要考察了运气
竟然算出来是3.50,但过不了.
恼羞成怒下开始枚举,罚了20次过了.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);
ios<<32<<'\n';
coutreturn 0;
}
M. 本题主要考察了找规律
数据范围不大,暴力加记忆化就可以
核心递推式
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//#define lowbit(x) ((x)&-(x))
const int N=505;
double dp[N][N];
int main() {
::sync_with_stdio(false);
iosint n,m;
("%d %d",&n,&m);
scanffor(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=j;k++)
{
[i][j]=max(dp[i][j],dp[i-1][j-k]+(double)k/(m-j+k));
dp}
}
}
("%.9lf\n",dp[n][m]);
printfreturn 0;
}