Una buena suerte
Ideas: todos buscamos la suma de todos los números, por primera suma se calcula bajo el símbolo cuando \ (a_i \) j-bit es 1, la respuesta más una suma de bits j. La complejidad de O (nlogn)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e5+10;
LL a[N];
long long bt[40],Pow[40];
int main(){
int n;
Pow[0]=1;
for(int i=1;i<40;++i){
Pow[i]=Pow[i-1]*2;
}
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
}
for(int i=1;i<=n;++i){
int t=a[i];
for(int i=0;i<40;++i){
if(t%2) bt[i]++;
t/=2;
}
}
LL ans=0;
for(int i=1;i<=n;++i){
int t=a[i];
for(int i=0;i<40;++i){
if(t%2){
ans+=Pow[i]*bt[i];
}t/=2;
}
}
printf("%lld\n",ans);
return 0;
}
Perímetro del triángulo y B
Idea: enumerar cada borde, una contribución borde a n-2 triángulos dentro.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod=998244353;
LL x[2010],y[2010];
LL dis(int i,int j){
return (abs(x[i]-x[j])%mod+abs(y[i]-y[j])%mod)%mod;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
long long ans=0;
for(int i=1;i<=n;++i)
scanf("%lld%lld",&x[i],&y[i]);
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
ans=(ans+dis(i,j)%mod*(n-2)+mod)%mod;
}
}
cout<<ans<<endl;
}
return 0;
}
C aspectos operativos
Idea: Esta pregunta está tratando de ampliar la naturaleza de las sub-cadenas de diferente número de secuencia de problemas.
número sub-secuencia
para f [i] representa una naturaleza diferente antes de que el i-ésimo carácter puede estar compuesta de la secuencia, si a [i] representa el primer carácter aparece f [i] = f [i -1] + f [ i-1] 1, lo que indica que se aplica y f [i-1] detrás de diferentes secuencias de promotor y la formación de una nueva cadena en una sola; Si a [i] no es la primera vez, la posición de la primera ocurrencia de la última [a [i]], es F [i] = f [i -1] + f [i-1] -f [última [i-1]], lo que indica que se puede añadir a f [i-1] diferente secuencias promotoras detrás de la nueva cadena, pero la última [a [i] -1] secuencias tienen previamente y última [a [i]] de una composición.
#include<iostream>
#include<string.h>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<string>
#include<set>
#include<map>
using namespace std;
typedef pair<int,int> PII;
typedef long long LL;
const int N=1000010,mod=1e9+7;
int s[N];
LL f[N],last[N];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;++i) scanf("%d",&s[i]);
LL res=0;
memset(last,-1,sizeof last);
for(int i=1;i<=n;++i){
int c=s[i];
if(last[c]==-1)
f[i]=f[i-1]*2+1;
else f[i]=f[i-1]+f[i-1]-f[last[c]-1]+mod;
f[i]%=mod;
last[c]=i;
}
printf("%lld\n",f[n]);
}
return 0;
}
Esta pregunta es el número de secuencias requeridas para la grabación de un multi-estado, f [i, j] denota el frente i-ésimo longitud de caracteres puede estar compuesto de j
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod=1e9+7;
const int N=1e3+10;
long long f[N][N],last[30];
char str[N];
int main(){
int n,k;
cin>>n>>k;
cin>>str+1;
memset(last,-1,sizeof last);
f[0][0]=1;
for(int i=1;i<=n;++i){
int c=str[i]-'a';
f[i][0]=1;
for(int j=1;j<=k&&j<=i;++j){
if(last[c]==-1)
f[i][j]=(f[i-1][j]+f[i-1][j-1])%mod;
else
f[i][j]=(f[i-1][j]+f[i-1][j-1]-f[last[c]-1][j-1]+mod)%mod;
}
last[c]=i;
}
cout<<f[n][k]<<endl;
return 0;
}
Maestro cálculo línea decapitado
Pensando: solución A \ (A * X + B * Y + C * Z = K \) , se convierte en \ (T * GCD (A, B) + C * Z = K \) exgcd resueltos t, z, y luego convertido a \ (a * X + B * Y * KZ = C \) , aunque algunos de este problema tiene una solución, pero que resolver la ecuación 2, donde hay 2 * 2 tipos, todo lo que necesita para enumerar la primera cz ecuación calculados tres veces la producción en un momento dado pueden ser solucionable.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL gcd(LL a,LL b){
return b==0 ? a : gcd(b,a%b);
}
LL exGcd(LL &x,LL &y,LL a,LL b){
if(b==0){
x=1,y=0;
return a;
}
LL GCD=exGcd(x,y,b,a%b);
LL t=x;
x=y;
y=t-a/b*y;
return GCD;
}
bool solve(LL a,LL b,LL c,LL k,int Case){
LL gab=gcd(a,b);
LL t,x,y,z;
exGcd(t,z,gab,c);//gab*t+c*z=1
LL gabc=gcd(gab,c);
t*=(k/gabc);
z*=(k/gabc);
if(z<0) {
LL tmp=(-z)/(gab/gabc);
z+=gab/gabc*tmp;
t-=c/gabc*tmp;
if(z<0) z+=gab/gabc,t-=c/gabc;
}
if(t<0){
LL tmp=(-t)/(c/gabc);
z-=gab/gabc*tmp;
t+=c/gabc*tmp;
if(t<0) z-=gab/gabc,t+=c/gabc;
}
k-=z*c;
exGcd(x,y,a,b);
x*=(k/gab),y*=(k/gab);
if(x<0){
LL tmp=(-x)/(b/gab);
x+=tmp*(b/gab);
y-=a/gab*tmp;
if(x<0) x+=(b/gab),y-=a/gab;
}
if(y<0){
LL tmp=(-y)/(a/gab);
x-=tmp*(b/gab);
y+=a/gab*tmp;
if(y<0) x-=(b/gab),y+=a/gab;
}
if(x>=0&&y>=0&&z>=0){
if(Case==1)
cout<<x<<" "<<y<<" "<<z<<endl;
else if(Case==2)
cout<<z<<" "<<y<<" "<<x<<endl;
else cout<<x<<" "<<z<<" "<<y<<endl;
return true;
}
else return false;
}
int main(){
LL a,b,c,k;
cin>>a>>b>>c>>k;
if(solve(a,b,c,k,1)) return 0;
if(solve(c,b,a,k,2)) return 0;
if(solve(a,c,b,k,3)) return 0;
return 0;
}
//234 2234 324 241520