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\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...
随机推荐
- 分享知识-快乐自己:mongodb 安装部署(linux)
1):下载 mongodb 包 [root@admin tools]# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6. ...
- C#实现文件拖放并打开文件(使用ListBox)
1.C#实现文件拖放并打开文件 (http://www.cnblogs.com/GaoHuhu/archive/2012/10/10/2717954.html)
- RTP 打包H264与AAC
static int h264_parse(Track *tr, uint8_t *data, size_t len) { h264_priv *priv = tr->private_data; ...
- Homer Conferencing
Homer Conferencing (short: Homer) is a free SIP softphone with advanced audio and video support. The ...
- luoguP1941福赖皮波德
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...
- Gym - 100570E:Palindrome Query (hash+BIT+二分维护回文串长度)
题意:给定字符串char[],以及Q个操作,操作有三种: 1:pos,chr:把pos位置的字符改为chr 2:pos:问以pos为中心的回文串长度为多长. 3:pos:问以pos,pos+1为中心的 ...
- Angular.forEach用法
1.针对对象循环(key,value) 官方示例: var values = {name: 'misko', gender: 'male'}; var log = []; angular.forEac ...
- HEOI2017题解
Day 1 : T1 : 期末考试 很水的一道题,但是自己搞了大半天过不了大样例. 最后还A了... 主要思想就是枚举最后一个完成的任务的时间 然后对两部分的代价分类讨论统计一下. (考试代码,略丑) ...
- NOIp2018集训test-10-16 (bike day2)
“毕姥爷:今天的题好简单啊,你们怎么考得这么烂啊,如果是noip你们就凉透了啊“ 今天的题难度应该是3.2.1递减的,但是我不知道哪根筋没搭对,平时我最多1h多就弃题了,今天硬生生写了2h20min的 ...
- tcpdump示例
今天有需求要用tcpdump,给一个我使用的例子: sudo /usr/sbin/tcpdump dst 10.20.137.24 and tcp port 8080 -A -s0 -w nous ...