本文主要是介绍10.11NOIP模拟赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题 A: 图腾计数
题目描述
输入
接下来一行N 个数,依次表示每个柱子的高度
输出
样例输入
样例输出
提示
对于30%的数据,N<=100
对于100%的数据,N<=200000
问题 B: 分糖果
题目描述
输入
接下来N 行,每行两个数ri,fi
输出
第二行一个数,表示最大的ri 和fi 的总和。
样例输入
样例输出
提示
对于30%的数据,N<=20,M<=10
对于100%的数据,N<=200,M<=20,1<=ri,fi<=20,M<=N
注意数组下标为负如何处理
问题 C: 智力游戏
题目描述
你被给出了一个火柴拼成的等式,比如说下面这个:( 5 + 7 = 7 )
它显然是不成立的,但是我们可以通过移动一个其中的火柴使得它成立。变成如下的一个等式:( 6 + 1 = 7 )
输入
输出
样例输入
样例输出
提示
对于100%的数据,每个数在0 到999 之间
问题 D: 最远距离
题目描述
输入
接下来有N 行,每行一个长度为M 的字符串,'0'表示空格子,'1'表示该格子含有障碍物。
输出
样例输入
样例输出
提示
对于20%的数据,满足1 <= N,M <= 30 ,0 <= T <= 0
对于40%的数据,满足1 <= N,M <= 30 ,0 <= T <= 2
对于100%的数据,满足1 <= N,M <= 30 ,0 <= T <= 30
//下凸 h1>h2<h3
//上凸 h1<h2>h3
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>using namespace std;
typedef long long LL;
const int MAXN=200010;int n;
LL shangtu,xiatu;
int qianda[MAXN],houda[MAXN];
int qianxiao[MAXN],houxiao[MAXN];
int a[MAXN],t[MAXN],b[MAXN],c[MAXN],d[MAXN];void add(int x,int d) {while(x<=n) {t[x]+=d;x+=(x&(-x));}
}int sum(int x) {int res=0;while(x) {res+=t[x];x-=(x&(-x));}return res;
}void work2() {int i,j;for(i=1;i<=n;++i) scanf("%d",&a[i]);for(i=1;i<=n;++i) {add(a[i]+1,1);c[i]=sum(a[i]);}memset(t,0,sizeof(t));for(i=n;i>=1;i--) {add(a[i]+1,1);d[i]=sum(a[i]);}for(i=1;i<=n;++i) {shangtu+=(LL)c[i]*d[i];xiatu+=(LL)(i-1-c[i])*(n-i-d[i]); }printf("%lld %lld",xiatu,shangtu);
}void init() {int i;scanf("%d",&n);work2();
}int main() {init();
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>using namespace std;const int MAXN=205;int f[MAXN][1510],Max,n,m;
int l[MAXN],r[MAXN];
bool p[MAXN][1510];void init() {int i,j,k;scanf("%d%d",&n,&m);for(i=1; i<=n; ++i) scanf("%d%d",&l[i],&r[i]);f[0][1000]=0;p[0][1000]=1;for(k=1; k<=n; ++k)for(i=m; i; --i)for(j=500; j<=1500; j++)if(p[i-1][j-l[k]+r[k]]&&f[i][j]<f[i-1][j-l[k]+r[k]]+l[k]+r[k]) {f[i][j]=f[i-1][j-l[k]+r[k]]+l[k]+r[k];p[i][j]=1;}int ans1=0x3f3f3f3f,ans2=-1;for(i=0;i<=500;++i) {if(p[m][i+1000]||p[m][1000-i]) {ans1=i;break;}}if(p[m][ans1+1000]&&ans2<f[m][ans1+1000]) ans2=f[m][ans1+1000];if(p[m][1000-ans1]&&ans2<f[m][1000-ans1]) ans2=f[m][1000-ans1];printf("%d\n%d",ans1,ans2);
}int main() {init();
}
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>using namespace std;const int MAXN=1010;int a,b,c,tot,ans=0x3fffffff;
int huo[10]={6,2,5,5,4,5,6,3,7,6};
bool at[10][7];int sum(int x) {int res=0;if(x<10) return huo[x];else {while(x){int temp=x%10;res+=huo[temp];x/=10;}}return res;
}void change(int x,int *arr) {if(!x) {arr[++arr[0]]=0;return;}while(x) {arr[++arr[0]]=x%10;x/=10;}
}int Min(int a,int b) {return a<b?a:b;
}int make(int a,int b,int c,int A,int B,int C) {//A->a B->b C->cint x[5]={0},y[5]={0},z[5]={0},X[5]={0},Y[5]={0},Z[5]={0},res=0,i,j;change(a,x),change(b,y),change(c,z),change(A,X),change(B,Y),change(C,Z);if(x[0]!=X[0]||y[0]!=Y[0]||z[0]!=Z[0]) return 0x3fffffff;for(i=1;i<=x[0];++i) {int aa=x[i],AA=X[i];for(j=0;j<7;++j)if((at[aa][j]==1&&at[AA][j]==0))res++;}for(i=1;i<=y[0];++i) {int bb=y[i],BB=Y[i];for(j=0;j<7;++j)if((at[bb][j]==1&&at[BB][j]==0))res++;}for(i=1;i<=z[0];++i) {int cc=z[i],CC=Z[i];for(j=0;j<7;++j)if((at[cc][j]==1&&at[CC][j]==0))res++;}return res;
}void work() {int i,j;for(i=0;i<=1000;++i)for(j=0;j<=1000;++j) {if(i+j<=1000&&sum(i)+sum(j)+sum(i+j)==tot) {int temp=make(a,b,c,i,j,i+j);ans=Min(ans,temp);}}printf("%d",ans);
}void init(){at[0][0]=1;at[0][1]=1;at[0][2]=1;at[0][3]=1;at[0][4]=1;at[0][6]=1;at[1][2]=1;at[1][4]=1;at[2][0]=1;at[2][2]=1;at[2][3]=1;at[2][5]=1;at[2][6]=1;at[3][0]=1;at[3][2]=1;at[3][4]=1;at[3][5]=1;at[3][6]=1;at[4][1]=1;at[4][2]=1;at[4][4]=1;at[4][5]=1;at[5][0]=1;at[5][1]=1;at[5][4]=1;at[5][5]=1;at[5][6]=1;at[6][0]=1;at[6][1]=1;at[6][3]=1;at[6][4]=1;at[6][5]=1;at[6][6]=1;at[7][0]=1;at[7][2]=1;at[7][4]=1;at[8][0]=1;at[8][1]=1;at[8][2]=1;at[8][3]=1;at[8][4]=1;at[8][5]=1;at[8][6]=1;at[9][0]=1;at[9][1]=1;at[9][2]=1;at[9][4]=1;at[9][5]=1;at[9][6]=1;scanf("%d%d%d",&a,&b,&c);if(a+b==c){printf("0");return ;}tot=sum(a)+sum(b)+sum(c);
// printf("tot=%d\n",tot);work();
}int main(){init();while(1);
}
# include <iostream>
# include <cstdio>
# include <algorithm>
# include <cstring>
# include <deque>
# include <cmath># define Max(a,b) ((a)>(b)?(a):(b))using namespace std;const int MAXN=40;int n,m,T;
int gx[4]={1,0,-1,0};
int gy[4]={0,1,0,-1};
double ans;
bool map[MAXN][MAXN];void bfs(int x,int y) {double qx,qy;deque < pair<int,int> > q;bool vis[MAXN][MAXN];int dis[MAXN][MAXN];memset(vis,0,sizeof(vis));dis[x][y]=map[x][y];vis[x][y]=1;q.push_back(make_pair(x,y));while(!q.empty()) {pair<int,int> t=q.front();q.pop_front();int cost=dis[t.first][t.second];int xx,yy;if(cost>T) break;qx=(double)t.first-x;qy=(double)t.second-y;ans=Max(qx*qx+qy*qy,ans);for(int d=0; d<4; ++d) {xx=t.first+gx[d];yy=t.second+gy[d];if(xx>=0&&xx<n&&yy>=0&&yy<m&&!vis[xx][yy]) {if(map[xx][yy]) {q.push_back(make_pair(xx,yy));dis[xx][yy]=cost+1;} else {q.push_front(make_pair(xx,yy));dis[xx][yy]=cost;}vis[xx][yy]=1;}}}return ;
}void init() {int i,j;char x;cin>>n>>m>>T;for(i=0; i<n; ++i)for(j=0; j<m; ++j) {cin>>x;map[i][j]=x=='1';}for(i=0; i<n; ++i)for(j=0; j<m; ++j)bfs(i,j);ans=sqrt(ans);printf("%.6lf",ans);return ;
}int main() {freopen("distance.in","r",stdin);freopen("distance.out","w",stdout);init();return 0;
}
这篇关于10.11NOIP模拟赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!