这一场就只有div. 2,没有div. 1
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
if(n==1 && m==10)
{
printf("-1\n");
return 0;
}
printf("%d",m);
if(m==10) n-=2;
else n--;
while(n--)
{
printf("0");
}
printf("\n");
return 0;
}
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define ll __int64
#define mod 1000000007
ll mul(ll a,ll n)
{
ll ans=1;
while(n)
{
if(n&1) ans=(ans*a)%mod;
a=(a*a)%mod;
n>>=1;
}
return ans;
}
int main()
{
ll n;
scanf("%I64d",&n);
ll s1=mul(3,3*n);
ll s2=mul(7,n);
s1=(s1-s2+mod)%mod;
printf("%I64d\n",s1);
return 0;
}
len表示s3要有len个与s1,s2相同
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define inf 100005
char s1[inf],s2[inf],s3[inf];
int main()
{
int n,t;
scanf("%d%d",&n,&t);
scanf("%s%s",s1,s2);
for(int i=0;i<n;i++) s3[i]='#';
int len=n-t;
for(int i=0;i<n;i++)
{
if(len==0) break;
if(s1[i]==s2[i] && len)
{
s3[i]=s1[i];
len--;
}
}
int l1=len,l2=len;
if(len)
{
int i;
for(i=0;i<n;i++)
{
if(!l1) break;
if(s3[i]=='#')
{
s3[i]=s1[i];
l1--;
}
}
for(i;i<n;i++)
{
if(!l2) break;
if(s3[i]=='#')
{
s3[i]=s2[i];
l2--;
}
}
}
if(l1 || l2)
{
printf("-1\n");
return 0;
}
for(int i=0;i<n;i++)
{
if(s3[i]=='#')
{
for(int j=0;j<26;j++)
{
if(j+'a'!=s1[i] && j+'a'!=s2[i])
{
s3[i]=j+'a';
break;
}
}
}
}
printf("%s\n",s3);
return 0;
}
相邻两个素数之间的差值不是很大,10^9以内,两个素数之间差值最大是282
给我们的n是奇数,减去的素数也是奇数(除了2),所以剩下的就是偶数,300以内的偶数都可以由两个素数相加得到
先暴力求出离n最近的素数,剩下的数如果本身就是素数,直接输出,否则,两层for就能求出来
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <math.h>
using namespace std;
#define inf 1e9
int prime[405],vis[405];
void init()
{
memset(prime,0,sizeof(prime));
memset(vis,0,sizeof(vis));
for(int i=2;i<400;i++)
{
if(vis[i]==0)
{
for(int j=i;j<400;j+=i)
{
vis[j]=1;
}
prime[i]=1;
}
}
}
int main()
{
init();
int n;
scanf("%d",&n);
int p;
for(int i=n;i>=1;i--)
{
int flag=0;
for(int j=2;j<=(int)sqrt(i*1.0)+1;j++)
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag==0)
{
p=i;
break;
}
}
int ans=n-p;
if(ans==0)
{
printf("1\n%d\n",n);
return 0;
}
else
{
if(prime[ans]==1)
{
printf("2\n%d %d\n",p,ans);
}
else
{
for(int i=2;i<300;i++)
{
if(prime[i]==1 && prime[ans-i]==1)
{
printf("3\n%d %d %d\n",p,i,ans-i);
return 0;
}
}
}
}
return 0;
}
要求的是最少的钱,从i位置换到j位置,最少需要的钱必定是abs(i-j)
然后逐个交换判断
#include <cstdio>
#include <algorithm>
#define N 2005
using namespace std;
int n, a[N], p[N], z, x[N * N], y[N * N], c;
int main()
{
scanf("%d", &n);
for(int i=1;i<=n;i++) scanf("%d", &a[i]);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d", &x);
p[x] = i;
}
for(int i=1;i<=n;i++)
{
a[i] = p[a[i]];
z += abs(i - a[i]);
}
for(int i=1;i<=n;i++) p[a[i]] = i;
printf("%d\n", z / 2);
for(int i=1;i<=n;i++)
{
for(int j=p[i]-1;j>=i;j--)
{
if(a[j] >= p[i])
{
x[c] = p[i];
y[c++] = j;
int temp = p[i];
swap(p[a[j]], p[i]);
swap(a[temp], a[j]);
}
}
}
printf("%d\n", c);
for(int i=0;i<c;i++) printf("%d %d\n", x[i], y[i]);
scanf("\n");
}