标签:
今天写写cf上以前的水题,找找自信
A. Olesya and Rodion
此题要求一个能被t整除的n位数,直接t为开始,后面全部为0. 当然,需要排除位数为1但t=10的情况。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,t,i;
scanf("%d%d",&n,&t);
if (n==1 && t==10)
printf("-1\n");
else
{
if (t==10)
t=1;
printf("%d",t);
for (int i=0;i<n-1;i++)
printf("0");
printf("\n");
}
return 0;
}
B. Kolya and Tanya
给你一个环,环上有3n个点,每个点的权值可以是1-3,然后问你满足a[i]+a[i+1]+a[i+2]!=6的方案有多少种,具体做法是先求出反例的情况,即a[i]+a[i+1]+a[i+2]=6的情况,这三个数的取值一共有7种,那么答案就是 3^(3n) - 7^n
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define MOD 1000000007
int n;
LL pw(int a,int x)
{
LL k=1;
for (int i=1;i<=x;i++)
k=(k*a)%MOD;
return k%MOD;
}
int main()
{
scanf("%d",&n);
printf("%I64d\n",(pw(27,n)-pw(7,n)+MOD)%MOD);
return 0;
}
C. Marina and Vasya
要求与两个字符串的不同字符都为t的第三个字符串。
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long LL;
#define N 100010
int n,t;
int ans;
char a[N],b[N],c[N];
int main()
{
scanf("%d%d",&n,&t);
scanf("%s%s",a+1,b+1);
t=n-t;
for (int i=1;i<=n;i++)
if (a[i]==b[i])
ans++;
if (ans+(n-ans)/2<t)
{
printf("-1\n");
return 0;
}
int k=min(t,ans);
for (int i=1,j=1;i<=n && j<=k;i++)
if (a[i]==b[i])
c[i]=a[i],j++;
for (int i=1,j=1;i<=n && j<=t-k;i++)
if (a[i]!=b[i] && !c[i])