博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOIP模拟赛14
阅读量:4357 次
发布时间:2019-06-07

本文共 2612 字,大约阅读时间需要 8 分钟。

期望得分:0+100+100=200

实际得分:0+100+100=200

 

T1 [Ahoi2009]fly 飞行棋

利用矩形对角线相等,所以n^2枚举可以凑成对角线的点 

假设有k对

ans=C(k,2)=k*(k-1)/2

#include
using namespace std;const int maxn = 29;int N, w[maxn];int main() { scanf("%d", &N); w[0] = 0; for(int i = 1; i <= N; i++) { scanf("%d", w + i); w[i] += w[i - 1]; } if(w[N] & 1) { puts("0"); return 0; } int ans = 0; for(int i = 1; i <= N; i++) for(int j = i + 1; j <= N; j++) if(w[j] - w[i] == (w[N] >> 1)) ans++; printf("%d", ans * (ans - 1) >> 1); return 0;}
View Code

 

T2 炮

在一个 n*m 的棋盘上,炮可随意放,问有多少种放置方案

f[i][j][k] 前i行,有j列放了1个,有k列放了2个

分类讨论

#include
#define mod 999983#ifdef WIN32#define ll "%I64d"#else #define ll "%lld"#endifusing namespace std;int n,m;long long f[101][101][101];int main(){ freopen("cannon.in","r",stdin); freopen("cannon.out","w",stdout); scanf("%d%d",&n,&m); f[0][0][0]=1; for(int i=1;i<=n;i++)//hang for(int j=0;j<=m;j++)//you j lie fang le 1 ge for(int k=0;j+k<=m;k++)//you k lie fang le 2 ge { f[i][j][k]=f[i-1][j][k];//bufang if(j>=1) f[i][j][k]=(f[i][j][k]+f[i-1][j-1][k]*(m-j-k+1))%mod;//kong lie fang 1 ge if(k>=1) f[i][j][k]=(f[i][j][k]+f[i-1][j+1][k-1]*(j+1))%mod;//you 1 ge de lie chu fang 1 ge if(j>=2) f[i][j][k]=(f[i][j][k]+f[i-1][j-2][k]*((m-j-k+2)*(m-j-k+1)/2))%mod;//kong lie fang 2 ge if(k>=1) f[i][j][k]=(f[i][j][k]+f[i-1][j][k-1]*(m-j-k+1)*j)%mod;//kong 1 lie ge fang 1 ge if(k>=2) f[i][j][k]=(f[i][j][k]+f[i-1][j+2][k-2]*((j+1)*(j+2)/2))%mod;//you 1 ge de lie chu fang 2 chu } long long ans=0; for(int j=0;j<=m;j++) for(int k=0;j+k<=m;k++) ans=(ans+f[n][j][k])%mod; printf(ll,ans);}
View Code

 

T3 [Ioi2007]Miners 矿工配餐

#include
#include
#include
#define N 100001using namespace std;long long dp[2][4][4][4][4];char s[N];bool v[4];int y[26],df[200];int main(){ int n; scanf("%d%s",&n,s); y['M'-'A']=1; y['B'-'A']=2; y['F'-'A']=3; int st; for(int i=0;i<4;i++) for(int j=0;j<4;j++) for(int k=0;k<4;k++) { v[i]=v[j]=v[k]=true; st=(i<<4)+(j<<2)+k; for(int l=1;l<4;l++) df[st]+=v[l]; v[i]=v[j]=v[k]=false; } int t; t=y[s[0]-'A']; memset(dp[1],-63,sizeof(dp[1])); dp[1][t][0][0][0]=1; dp[1][0][0][t][0]=1; int now=1,nxt=0; for(int h=1;h
View Code

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7597893.html

你可能感兴趣的文章
knockoutJS学习笔记04:监控属性
查看>>
Linux下启动/关闭Oracle
查看>>
session和cookie的区别
查看>>
oracle 数据库、实例、服务名、SID
查看>>
web.xml文件的作用
查看>>
linux下oracle调试小知识
查看>>
alert弹出窗口,点击确认后关闭页面
查看>>
oracle问题之数据库恢复(三)
查看>>
单点登陆(SSO)
查看>>
HR,也确实“尽职尽责”
查看>>
MaxComputer 使用客户端配置
查看>>
20190823 顺其自然
查看>>
阅读《余生有你,人间值得》有感
查看>>
每日英语
查看>>
SpringCloud+feign 基于Springboot2.0 负载均衡
查看>>
【BZOJ5094】硬盘检测 概率
查看>>
mac上n次安装与卸载mysql
查看>>
Python之单元测试——HTMLTestRunner
查看>>
WebNotes(PHP、css、JavaScript等)
查看>>
C++:文件的输入和输出
查看>>