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\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...
随机推荐
- 普林斯顿算法(1.3)并查集(union-find算法)——本质就是一个数 下面的子树代表了连在一起的点
转自:https://libhappy.com/2016/03/algs-1.3/ 假设在互联网中有两台计算机需要互相通信,那么该怎么确定它们之间是否已经连接起来还是需要架设新的线路连接这两台计算机. ...
- appium-环境搭建(三)
appium步骤:基本环境1.由于操作手机端操作,需要模拟器或者真机 itools模拟器,真机2.appium操作app,需要知道操作的app是什么?需要知道这个app包名 1.问开发 2.利用adt ...
- Log4j_学习_00_资源帖
一.log4j2 1. log4j使用教程详解(怎么使用log4j2) 2.Log4j2的基本使用 二.log4j 1.[转]最详细的Log4J使用教程 2.最详细的Log4j使用教程 3.log4j ...
- Struts2 - 运行流程分析
1. 请求发送给 StrutsPrepareAndExecuteFilter 2. StrutsPrepareAndExecuteFilter 询问 ActionMapper: 该请求是否是一个 St ...
- 【leetcode刷题笔记】Plus One
Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...
- 本地windows安装memcached服务
1.安装到系统服务中: 在doc中:执行此软件 memcached.exe -d install(如果提示错误,要找到cmd.exe用管理员身份打开) 安装后在,服务里吗就有个服务了,如果没有启动,点 ...
- Spring MVC表单提交
实际应用中,列表中的单条记录的修改,可能需要传很多对象参数到后台服务器,Spring MVC表单标签<form:> 提供了一种简洁的提交方式. <form id="form ...
- 影响Cache的几个HTTP头信息【转载http://hi.baidu.com/feilala_fly/item/f79eca08fbf389026c9048a7】
Http的Cache机制总共有4个组成部分: Cache-Control.Last-Modified(If-Modified-Since).Etag(If-None-Match) .Expires 服 ...
- ACM学习历程—HDU5407 CRB and Candies(数论)
Problem Description CRB has N different candies. He is going to eat K candies.He wonders how many co ...
- vue 常见的新增、编辑、查看公用同一个页面
用vue开发经常会碰到,一个功能的新增.编辑.查看公用同一个页面,如果是页面暂且不提. 但是弹框,很多人会发现,如果是点击编辑,取消,再点新增,弹框上面是会有残留数据的,为什么会这样呢,因为在点编辑的 ...