入阵曲

#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. PHP不用第三变量交换2个变量的值的解决方法

    以前做过一道php面试题是这样的:不使用第三个变量实现交换两个变量的值.一般都是借助第三个中间变量来实现原来两个变量的值交换,但是这道题却要求不能使用中间变量,这对于初学者来说也算是一个难题了.网上找 ...

  2. Java_util_02_Java判断字符串是中文还是英文

    做微信开发,使用百度翻译API时,需要指定译文的语种.这就需要我们判断待翻译内容是中文还是英文,若是中文,则翻译成英文,若是英文则翻译成中文. 方法一:字符与字节的长度 依据:一个中文占两个字节,一个 ...

  3. queryRuner如何获得bean对象,当这个bean对象中包含其他对象的时候

    我们知道我们可以使用dbutil的QueryRunner下的query方法使用BeanHandler得到bean对象 但是,当我们在一个表和另一个表关联的时候,往往喜欢将另一个表的关联字段变成另一个b ...

  4. [JSOI 2015] 最大公约数

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4488 [算法] 不妨首先枚举左端点 注意到对于任意一个正整数n , 其质因子个数是l ...

  5. mysql 用户和存储过程相关命令

    如何显示所有的存储过程?select `name` from mysql.proc where db='db_name' and `type`='procedure';orshow procedure ...

  6. Poj2656(水题)

    一.Description Jinjin is a junior school student. Besides the classes in school, Jinjin's mother also ...

  7. HDOJ1151有向图最小路径覆盖

    //有向图最小路径覆盖:从某一点出发沿着有向路径,不走回路,能将所有的结点遍历. #include<iostream> #include<cstdio> #include< ...

  8. Puppet master nginx 扩展提升性能(puppet自动化系列4)

    puppet使用SSL(https)协议来进行通讯,默认情况下,puppet server端使用基于Ruby的WEBRick HTTP服务器.由于WEBRick HTTP服务器在处理agent端的性能 ...

  9. 人物-IT-柳传志:柳传志

    ylbtech-人物-IT-柳传志:柳传志 柳传志,英文名:Chuanzhi Liu,男,汉族,中共党员,1944年4月出生于江苏镇江,联想控股股份有限公司董事长,联想集团创始人. 企业家.投资家.全 ...

  10. QTP使用outlook发送邮件

    '发邮件 Dim objOutlook  Dim objOutlookMsg Dim olMailItem  ' Create the Outlook object and the new mail ...