2017-10-13 NOIP模拟赛
入阵曲
#include<iostream>
#include<cstdio>
#define maxn 401
#ifdef WIN32
#define PLL "%I64d"
#else
#define PLL "%lld"
#endif
using namespace std;
int n,m,K,a[maxn][maxn],sum[maxn][maxn];
bool flag=;
long long ans;
int main(){
//freopen("Cola.txt","r",stdin);
freopen("rally.in","r",stdin);freopen("rally.out","w",stdout);
scanf("%d%d%d",&n,&m,&K);
int w;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d",&a[i][j]);
sum[i][j]=a[i][j]+sum[i-][j]+sum[i][j-]-sum[i-][j-];
if(i==&&j==)w=a[i][j];
else if(w!=a[i][j])flag=;
}
if(flag){
for(int i=;i=n;i++)
for(int j=;j<=m;j++)
if(sum[i][j]%K==)ans+=1LL*(n-i+)*(m-j+);
printf(PLL,ans);
return ;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=i;k<=n;k++)
for(int l=j;l<=m;l++)
if((sum[k][l]-sum[i-][l]-sum[k][j-]+sum[i-][j-])%K==)ans++;
printf(PLL,ans);
return ;
}
50分 前缀和暴力
#include<iostream>
#include<cstdio>
#define maxn 401
#ifdef WIN32
#define PLL "%I64d"
#else
#define PLL "%lld"
#endif
using namespace std;
int n,m,K,a[maxn][maxn],sum[maxn][maxn];
bool flag=;
long long ans;
int main(){
//freopen("Cola.txt","r",stdin);
freopen("rally10.in","r",stdin);//freopen("rally.out","w",stdout);
scanf("%d%d%d",&n,&m,&K);
int w;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d",&a[i][j]);
sum[i][j]=a[i][j]+sum[i-][j]+sum[i][j-]-sum[i-][j-];
if(i==&&j==)w=a[i][j];
else if(w!=a[i][j])flag=;
}
if(flag){
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(sum[i][j]%K==)ans+=1LL*(n-i+)*(m-j+);
printf(PLL,ans);
return ;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=i;k<=n;k++)
for(int l=j;l<=m;l++)
if((sum[k][l]-sum[i-][l]-sum[k][j-]+sum[i-][j-])%K==)ans++;
printf(PLL,ans);
return ;
}
65分 前缀和暴力
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define K 1000007
#define N 400
#ifdef WIN32
#define PLL "%I64d"
#else
#define PLL "%lld"
#endif
using namespace std;
int f[K],s[N][N];
int main(){
freopen("rally.in","r",stdin);freopen("rally.out","w",stdout);
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d",&s[i][j]);
s[i][j]+=s[i-][j]+s[i][j-]-s[i-][j-];
if(s[i][j]<)s[i][j]+=k;
if(s[i][j]>)s[i][j]%=k;
}
long long ans=;
f[]=;
for(int l=;l<=m;l++)
for(int r=l;r<=m;r++){
for(int i=;i<=n;i++){
int sum=s[i][r]-s[i][l-];
if(sum<)sum+=k;
ans+=f[sum];f[sum]++;
}
for(int i=;i<=n;i++){
int sum=s[i][r]-s[i][l-];
if(sum<)sum+=k;f[sum]--;
}
}
printf(PLL,ans);
return ;
}
100分 压一维
将军令
#include<iostream>
#include<cstdio>
#define maxn 100010
#define INF 0x7fffffff
using namespace std;
int n,k,t,num,head[maxn],f[maxn][],dep[maxn],mdep[maxn];
struct node{
int to,pre;
}e[maxn*];
void Insert(int from,int to){
e[++num].to=to;
e[num].pre=head[from];
head[from]=num;
}
void dfs(int now,int father){
mdep[now]=dep[now]=dep[father]+;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to==father)continue;
dfs(to,now);
mdep[now]=max(mdep[now],dep[to]);
}
}
void dfs2(int now,int father){
int f0=,f1=,f2=;bool fl=;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to==father)continue;
fl=;
dfs2(to,now);
f0+=min(f[to][],min(f[to][],f[to][]));
f1+=f[to][];
f2+=f[to][];
}
if(!fl){
f[now][]=;f[now][]=,f[now][]=;
return;
}
f[now][]=f0+;f[now][]=f1;f[now][]=max(,f2);
}
void dfs3(int now,int father){
int f0=,f1=,f2=,f3=;bool fl=;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to==father)continue;
fl=;
dfs3(to,now);
f0+=min(f[to][],min(f[to][],min(f[to][],f[to][])));
f1+=f[to][];
f2+=f[to][];
f3+=f[to][];
}
if(!fl){
f[now][]=;f[now][]=;f[now][]=;f[now][]=;
return;
}
f[now][]=f0+;f[now][]=f1;f[now][]=f2;f[now][]=f3;
if(mdep[now]-dep[now]>=k)f[now][]=max(,f[now][]);
}
void dfs4(int now,int father){
int f0=,f1=,f2=,f3=,f4=;bool fl=;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to==father)continue;
fl=;
dfs4(to,now);
f0+=min(f[to][],min(f[to][],min(f[to][],min(f[to][],f[to][]))));
f1+=f[to][];
f2+=f[to][];
f3+=f[to][];
f4+=f[to][];
}
if(!fl){
f[now][]=;f[now][]=;f[now][]=;f[now][]=;f[now][]=;
return;
}
f[now][]=f0+;f[now][]=f1;f[now][]=f2;f[now][]=f3;f[now][]=f4;
if(mdep[now]-dep[now]>=k)f[now][]=max(,f[now][]);
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("general.in","r",stdin);freopen("general.out","w",stdout);
scanf("%d%d%d",&n,&k,&t);
int x,y;
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
Insert(x,y);Insert(y,x);
}
if(k==){
printf("%d",n);
return ;
}
dfs(,);
if(k==){
dfs2(,);
printf("%d",max(,min(f[][],f[][])));
return ;
}
if(k==){
dfs3(,);
printf("%d",max(,min(f[][],min(f[][],f[][]))));
return ;
}
if(k==){
dfs4(,);
printf("%d",max(,min(f[][],min(f[][],min(f[][],f[][])))));
return ;
}
printf("%d",(n/(k+)+));
return ;
}
60分 3个树形dp解决部分数据
/*
贪心 按点的深度排序,每次拿出未被更新的最深的点把他的k级父亲标记
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100010
using namespace std;
int cut,ans,m,n,K,t,num,head[maxn],fa[maxn],f[maxn],q[maxn];
int Head,Tail;
struct ndoe{
int from,to,pre;
}e[maxn*];
void Insert(int from,int to){
e[++num].from=from;
e[num].to=to;
e[num].pre=head[from];
head[from]=num;
}
void bfs(){
Head=Tail=;
q[Tail++]=;
fa[]=;
while(Head<Tail){
int now=q[Head++];
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(!fa[to]){
fa[to]=now;q[Tail++]=to;
}
}
}
}
void update(int now){
if(!f[now])return;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(f[to]<f[now]-)
f[to]=f[now]-,update(to);
}
}
int main(){
freopen("general.in","r",stdin);freopen("general.out","w",stdout);
int x,y;
scanf("%d%d%d",&n,&K,&t);
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
Insert(x,y);Insert(y,x);
}
bfs();
memset(f,-,sizeof(f));
for(int i=n;i;i--){
if(f[q[i]]==-){
int j=q[i];
for(int k=K;k;k--)j=fa[j];
ans++;f[j]=K;
update(j);
}
}
printf("%d",ans);
}
100分 贪心
星空
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int s,n,k,m,op[],opsz[];
struct node{
int sta,step;
};
node make_node(int x,int y){
node res;
res.sta=x,res.step=y;
return res;
}
queue<node>q;
bool vis[<<];
int main(){
//freopen("Soda.txt","r",stdin);
freopen("starlit.in","r",stdin);freopen("starlit.out","w",stdout);
scanf("%d%d%d",&n,&k,&m);
s=(<<n)-;
int end=(<<n)-;
int x;
for(int i=;i<=k;i++){
scanf("%d",&x);
s=s^(<<(x-));
}
for(int i=;i<=m;i++){
scanf("%d",&x);
op[i]=(<<x)-;
opsz[i]=x;
}
vis[s]=;
q.push(make_node(s,));
while(!q.empty()){
node cur=q.front();q.pop();
int stanow=cur.sta;
for(int i=;i<=m;i++){
for(int j=;j<=n-opsz[i];j++){
int now=stanow^(op[i]<<j);
if(now==end){
printf("%d",cur.step+);
return ;
}
if(!vis[now]){
vis[now]=;
q.push(make_node(now,cur.step+));
}
}
}
}
return ;
}
24分 前6个点,状态压缩+暴力
#include <bits/stdc++.h>
using namespace std; typedef pair<int, int> pii;
#define fir first
#define sec second
#define INF 0x3f3f3f3f
#define MAXN 40005
#define TOP 18 int n, K, m, cnt = ;
bool a[MAXN];
int dis[][MAXN], b[];
pii p[]; queue <int> q; void bfs(pii st)
{
for (int i = ; i < MAXN; i++) dis[st.fir][i] = INF;
q.push(st.sec);
dis[st.fir][st.sec] = ;
while (!q.empty())
{
int x = q.front();
q.pop();
for (int i = ; i <= m; i++)
{
if (x - b[i] >= && dis[st.fir][x - b[i]] > dis[st.fir][x] + )
{
dis[st.fir][x - b[i]] = dis[st.fir][x] + ;
q.push(x - b[i]);
}
if (x + b[i] <= n && dis[st.fir][x + b[i]] > dis[st.fir][x] + )
{
dis[st.fir][x + b[i]] = dis[st.fir][x] + ;
q.push(x + b[i]);
}
}
}
} int dp[ << ]; int solve(int mask)
{
if (dp[mask] != -) return dp[mask];
if (mask == ) return ;
int &ret = dp[mask];
ret = INF;
int x = ;
while (!(mask & ( << x))) x++;
for (int i = x + ; i < * K; i++)
if (mask & ( << i)) ret = min(ret, solve(mask ^ ( << x) ^ ( << i)) + dis[x][p[i].sec]);
return ret;
} int main()
{
freopen("starlit.in", "r", stdin);
freopen("starlit.out", "w", stdout);
scanf("%d %d %d", &n, &K, &m);
for (int i = , x; i <= K; i++) scanf("%d", &x), a[x] = true;
for (int i = ; i <= m; i++) scanf("%d", &b[i]);
for (int i = ; i <= n; i++) if (a[i] != a[i + ]) p[cnt] = pii(cnt, i), cnt++;
for (int i = ; i < cnt; i++) bfs(p[i]);
memset(dp, -, sizeof dp);
int ans = solve(( << cnt) - );
assert(ans != INF);
printf("%d\n", ans);
return ;
}
100分 std
2017-10-13 NOIP模拟赛的更多相关文章
- 2017 10.25 NOIP模拟赛
期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- 2018.10.16 NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...
- 2016.10.30 NOIP模拟赛 day2 PM 整理
满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...
- 2016.10.30 NOIP模拟赛 day2 AM 整理
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
- 10.13 noip模拟试题
Porble 1时间与空间之旅(tstrip.*) 题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship ...
- 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)
期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...
- 2017.6.11 NOIP模拟赛
题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...
- 2018.10.03 NOIP+ 模拟赛 解题报告
得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...
随机推荐
- AMD模块定义规范
AMD 即Asynchronous Module Definition,中文名是“异步模块定义”的意思.它是一个在浏览器端模块化开发的规范,服务器端的规范是CommonJS. 模块将被异步加载,模 ...
- Centos7部署NFS
server1:192.168.1.189 ###客户端 server2:192.168.1.190 ##服务端 1.首先创建共享目录. mkdir -p /data/share 安装nfs ...
- ACM学习历程—FZU2195 检查站点(树形DP || 贪心)
Description 在山上一共有N个站点需要检查,检查员从山顶出发去各个站点进行检查,各个站点间有且仅有一条通路,检查员下山前往站点时比较轻松,而上山时却需要额外的时间,问最后检查员检查完所有站点 ...
- 关于Snoop的用法
snoop是开发wpf应用程序的利器.用它可以观察WPF的可视树,监听事件,更改元素属性等. 下面我介绍下snoop一些用法. 1.获取指定应用程序的UI 打开snoop,选择"Drag ...
- 编译Python出现Tab,空格的问题
我们编译python代码时, 经常出现各种因为tab和空格的问题, 例如: IndentationError: unindent does not match any outer indentatio ...
- SQL 常用语句收集
1.UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 2.SELECT * FROM TableA INNER JOIN TableB ON TableA.name = T ...
- Python:str.ljust()、str.rjust()、str.center()函数
str.ljust().str.rjust().str.center()函数 功能:调整字符串站位宽度,并确定字符串对齐方式: #可以用其它字符填充字符: #字符串长度 = 字符串个数(包含空格.标点 ...
- keepalived+nginx实现双机热备
keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机, ...
- shell入门-sort排序
命令:sort 选项:-t:-kn 指定根据某段来排序 这里n代表数字,范围指定n,N.从n到N范围 -n 按数字顺序排列 -r 反序排列 -u 去重复排序 -un 数字顺序排列并去重复,系 ...
- Activity--弹出底部窗口
第一步 : 退出时候的布局文件exit_dialog_from_settings.xml <?xml version="1.0" encoding="UTF-8&q ...