入阵曲

#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模拟赛的更多相关文章

  1. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  2. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  3. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  4. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  5. 2016.10.30 NOIP模拟赛 day2 PM 整理

    满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...

  6. 2016.10.30 NOIP模拟赛 day2 AM 整理

    题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分  2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...

  7. 10.13 noip模拟试题

    Porble 1时间与空间之旅(tstrip.*) 题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship ...

  8. 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)

    期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...

  9. 2017.6.11 NOIP模拟赛

    题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...

  10. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

随机推荐

  1. python MLP 神经网络使用 MinMaxScaler 没有 StandardScaler效果好

    MLP 64,2  preprocessing.MinMaxScaler().fit(X)                               test confusion_matrix:[[ ...

  2. Jmete基础使用

    1,jmeter下载与安装 Jmeter的运行需要JDK支持,所以需要先安装好jdk,并配置好环境变量: 下载地址:http://jmeter.apache.org/download_jmeter.c ...

  3. SpringBoot_05_热部署和debug

    一.pom.xml配置 增加以下pom.xml配置 <!--1.spring-boot插件--> <plugin> <groupId>org.springframe ...

  4. bzoj-2458 2458: [BeiJing2011]最小三角形(计算几何+分治)

    题目链接: 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1101  Solved: 380 Des ...

  5. ACM学习历程—HDU5422 Rikka with Graph(贪心)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  6. redis的五种数据类型及应用场景

    前言 redis是用键值对的形式来保存数据,键类型只能是String,但是值类型可以有String.List.Hash.Set.Sorted Set五种,来满足不同场景的特定需求. 本博客中的示例不是 ...

  7. poj 3469 Dual Core CPU——最小割

    题目:http://poj.org/problem?id=3469 最小割裸题. 那个限制就是在 i.j 之间连双向边. 根据本题能引出网络流中二元关系的种种. 别忘了写 if ( x==n+1 ) ...

  8. STL string大小写 转换

    std::string data = "This is a sample string."; // convert string to upper case std::for_ea ...

  9. angular项目线上地址跳转或刷新报错的解决

    引用地址:https://blog.csdn.net/qq_35415307/article/details/80707463 本地ng项目没问题,到了线上跳转刷新都会报404错误,相信这个问题每个做 ...

  10. 【jQuery】CheckBox使用attr全选无法正确显示

    今天编写JS脚本时,遇到如下的问题. 下面是源代码: <script src="../Scripts/jquery-2.1.3.js"></script> ...