不如我们恢复成题解罢
然后实际情况是爆炸专场。
终于,在最后一天,我终于找到了如何在没有权限的条件下配置 Sublime 的方法。
然并卵
T1 triangle
这个应该不用解释了。
除了快读要打负数。
#include<cmath>
#include<cstdio>
#define ll long long
#define ld long double
#define EPS 1e-14
using namespace std;
ll t,ax1,ax2,ax3,ax4,ax5,ax6,ay1,ay2,ay3,ay4,ay5,ay6;
char BuF[1<<26],*InF=BuF;
template<typename T>void read(T &x){
for(;*InF<33;++InF);
for(x=0;47<*InF&&*InF<58;x=(x<<3)+(x<<1)+(*InF++^48));
}
/*
template<typename T>void read(T &x){
bool f=1;
for(;*InF<33||*InF=='-';f^=*InF++=='-');
for(x=0;47<*InF&&*InF<58;x=(x<<3)+(x<<1)+(*InF++^48));
x=f?x:-x;
}
*/
ld sqr(ll x){
return(x*x);
}
ld dis(ll x1,ll y1,ll x2,ll y2){
return(sqrt(sqr(x1-x2)+sqr(y1-y2)));
}
bool check(ld a1,ld b1,ld a2,ld b2,ld a3,ld b3){
ld t1=a1/b1,t2=a2/b2,t3=a3/b3;
return(abs(t1-t2)<EPS&&abs(t2-t3)<EPS);
}
int main(){
freopen("triangle.in","r",stdin);
freopen("triangle.out","w",stdout);
fread(BuF,1,1<<26,stdin);
for(read(t);t;--t){
read(ax1);read(ay1);
read(ax2);read(ay2);
read(ax3);read(ay3);
read(ax4);read(ay4);
read(ax5);read(ay5);
read(ax6);read(ay6);
ld a1=dis(ax1,ay1,ax2,ay2),a2=dis(ax2,ay2,ax3,ay3),a3=dis(ax1,ay1,ax3,ay3),
b1=dis(ax4,ay4,ax5,ay5),b2=dis(ax5,ay5,ax6,ay6),b3=dis(ax4,ay4,ax6,ay6);
printf(check(a1,b1,a2,b2,a3,b3)||
check(a1,b1,a2,b3,a3,b2)||
check(a1,b2,a2,b1,a3,b3)||
check(a1,b2,a2,b3,a3,b1)||
check(a1,b3,a2,b1,a3,b2)||
check(a1,b3,a2,b2,a3,b1)?"YES
":"NO
");
}
fclose(stdin);
fclose(stdout);
return 0;
}
T2 sakura
总之就是贪心。
#include<cstdio>
#include<iostream>
using namespace std;
int n,k,x,y,p;
char BuF[1<<26],*InF=BuF;
template<typename T>void read(T &x){
for(;*InF<33;++InF);
for(x=0;47<*InF&&*InF<58;x=(x<<3)+(x<<1)+(*InF++^48));
}
int main(){
freopen("sakura.in","r",stdin);
freopen("sakura.out","w",stdout);
fread(BuF,1,1<<26,stdin);
read(n);read(k);
x=y=n-1;
for(int i=0;i<k;++i){
read(p);
x=max(x+p-n,0);
y=max(y-p+1,0);
printf("%d %d
",x+1,n-y);
}
fclose(stdin);
fclose(stdout);
return 0;
}
T3 number
首先线性筛了个 (lambda) 函数,然后预处理最后一个 (Sigma) 里的东西,然后再暴力计算。
然后发现最后一个 (Sigma) 里的东西不是1就是0,然后发现都是完全平方数,然后就没有然后了。
据说可以数论分块做到 (O(n^frac{1}{3})) ,但不会。
#include<cmath>
#include<cstdio>
#define mo 998244353
using namespace std;
long long n,ans;
int main(){
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
for(char c=getchar();32<c;n=(n<<3)+(n<<1)+(c^48),c=getchar());
for(long long i=1;i*i<=n;++i){
if((ans+=(n/(i*i))%mo)>=mo){
ans-=mo;
}
}
printf("%lld",ans);
fclose(stdin);
fclose(stdout);
return 0;
}
T4 sequence
这个东西可以随便DP,设 (F_{i,j}) 为放完了前后 (i) 位,前后缀差 (j) 的方案数。
故事本应到这里就结束了,但我奇数的情况只乘了 (n) ……
#include<cstdio>
#include<algorithm>
#define mo 998244353
using namespace std;
int n;
long long ans,f[110][10010]={1};
int main(){
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
for(char c=getchar();32<c;n=(n<<3)+(n<<1)+(c^48),c=getchar());
for(register int i=1;i<=n>>1;++i){
for(register int j=0;j<=(i-1)*n;++j){
for(register int k=-min(j,n);k<=n;++k){
if((f[i][j+k]+=f[i-1][j]*(n-abs(k)+1)%mo)>=mo){
f[i][j+k]-=mo;
}
}
}
}
for(register int i=0;i<=n*n>>1;++i){
if((ans+=f[n>>1][i])>=mo){
ans-=mo;
}
}
if(n&1){
ans=ans*n%mo; //555
//ans=ans*(n+1)%mo;
}
printf("%lld",ans);
fclose(stdin);
fclose(stdout);
return 0;
}