对于30%的数据,N<=100
对于100%的数据,N<=200000
对于30%的数据,N<=20,M<=10
对于100%的数据,N<=200,M<=20,1<=ri,fi<=20,M<=N
注意数组下标为负如何处理
你被给出了一个火柴拼成的等式,比如说下面这个:( 5 + 7 = 7 )
它显然是不成立的,但是我们可以通过移动一个其中的火柴使得它成立。变成如下的一个等式:( 6 + 1 = 7 )
现在给出一个类似的等式,请问最少移动多少根火柴可以使得它变成一个成立的等式。对于100%的数据,每个数在0 到999 之间
对于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>h2h3
#include
#include
#include
#include
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
#include
#include
#include
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]
#include
#include
#include
#include
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 aa B->b C->c
int 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
# include
# include
# include
# include
# include
# 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 > 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 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=0&&yy>n>>m>>T;
for(i=0; i>x;
map[i][j]=x=='1';
}
for(i=0; i