简单题暴力解,存入字符串后,求’a’,‘v’,‘i’,‘n’的数量,个数乘积和总数4次方求最大公因数,输出个数积/公因数’/'总数四次方/公因数。
#include<cstdio>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main()
{
char ss[112];
int n;
while(cin>>n){
scanf("%s",&ss);
int i,a[4],s=0;
memset(a,0,sizeof a);
for(i=0;i<strlen(ss);i++){
if(ss[i]=='a') a[0]++;
else if(ss[i]=='v') a[1]++;
else if(ss[i]=='i') a[2]++;
else if(ss[i]=='n') a[3]++;
}
int t=1;
for(i=0;i<4;i++){
if(a[i]==0){
cout<<0<<'/'<<1<<endl;
s=1;
break;
}
}
int c,r;
if(s==0){
for(i=0;i<4;i++){
t*=a[i];
}
c=strlen(ss)*strlen(ss)*strlen(ss)*strlen(ss);
r=gcd(t,c); cout<<t/r<<'/'<<c/r<<endl;
}
}
return 0;
}
暴力解,因为ai,bi最大只能为1000,数据范围很小,先存入数组a,b,在另设数组c,c[1]-c[100]设为0,将c[a]中的数设为1,然后循环从i=0开始判断,如果b数组全满足c[b+i]=0,就得到i。
#include<cstdio>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int ss[21234],a1[11234],b1[11234];
int main()
{
int i,j,n,m,a;
while(cin>>n>>m){
for(i=0;i<n;i++) scanf("%d",&a1[i]);
for(i=0;i<m;i++) scanf("%d",&b1[i]);
memset(ss,0,sizeof ss);
for(i=0;i<n;i++){
ss[a1[i]]=1;
}
for(i=0;;i++){
for(j=0;j<m;j++){
a=b1[j]+i;
if(ss[a]==1) break;
}
if(j==m){
cout<<i<<endl;
break;
}
}
}
return 0;
}
考试时候看到这道题,是没一点头绪的,感觉要是硬算起来会很麻烦的。在听过讲解后,才知道数据是有规律的,这种题还是该算出几组数据,说不定就能得到规律了。
规律就是(n+1)/2nmod1e9+7.
#include<cstdio>
#include<stdio.h>
#include<iostream>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll ksm(ll x,ll y)
{
ll res=1;
while(y){
if(y&1) res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res%mod;
}
int main()
{
ll x;
while(cin>>x){
cout<<(x+(ll)1)*ksm((ll)2*x,mod-2)%mod<<endl;
}
return 0;
}
简单题,但,ai的范围过大,使用double也无法存入,只能以字符串的形式来存,通过判断最后一位的数来得最后的差。
#include<cstdio>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n){
int b=0;
char ss[100];
int i;
for(i=0;i<n;i++){
scanf("%s",&ss);
if(ss[strlen(ss)-1]<='4') b-=(ss[strlen(ss)-1]-'0');
else b=b+10-(ss[strlen(ss)-1]-'0');
}
printf("%.3lf\n",(double)b*0.001);
}
return 0;
}
暴力解,起初在考虑如何求多个数的最大公因数上出了错,还错了好久。其他的没什么了。
#include<cstdio>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<bits/stdc++.h>
#include<cmath>
#include<algorithm>
using namespace std;
int lct(int a,int b){
return a*b/(__gcd(a,b));
}
int a[1123],aa[11],aaa[11];
int main()
{
int i,n,j;
long long m;
while(cin>>n>>m){
memset(aa,0,sizeof aa);
for(i=0;i<n;i++){
cin>>a[i];
aa[a[i]]++;
}
int s=0;
j=0;
for(i=1;i<=10;i++){
if(aa[i]!=0){
aaa[j]=i;
j++;
}
}
if(j==1){
if(m%n==0){
cout<<"Yes"<<endl;
cout<<m/n;
for(i=1;i<n;i++){
cout<<' '<<m/n;
}
cout<<endl;
}
else cout<<"No"<<endl;
}
else{
int b=lct(aaa[0],aaa[1]);
for(i=2;i<j;i++){
b=lct(b,aaa[i]);
}
int c=0;
for(i=0;i<n;i++){
c+=b/a[i];
}
if(m%c==0){
cout<<"Yes"<<endl;
cout<<b/a[0]*(m/c);
for(i=1;i<n;i++){
cout<<' '<<b/a[i]*(m/c);
}
cout<<endl;
}
else cout<<"No"<<endl;
}
}
return 0;
}
简单的a+b问题。
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<(a+b)/2*(a-b)/2<<endl;
return 0;
}