具体分析见:
下面部分是转载的。
4143 :a simple game
#include <iostream>
#include<math.h>
using namespace std;
#define N 1000000009
void solve(int n)
{
int i,flag=0,k;
int min=N;
for(i=1;i<=sqrt(n)+1;i++)
{
if(n%i==0)
{
k=1;
int r=n/i;
if(r>=i)
k=r-i;
else
k=i-r;
if(k%2==0&&k!=0)
{
flag=1;
int x=k/2;
if(x<min)
min=x;
}
}
}
if(!flag)
printf("-1\n");
else
printf("%d\n",min);
}
int main()
{
int n;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
solve(n);
}
return 0;
}
4144 : Bacon's Cipher
#include<iostream>
#include<math.h>
using namespace std;
int hroh(int a[])
{
int s=0,i;
for(i=4;i>=0;i--)
s=s+a[4-i]*(int)pow((float)2,(float)i);
return s;
}
int main()
{
int l;
char a[10001];
while(cin>>l>>a)
{
int i,k=0,j=0,c[2001];
int b[5];
for(i=0;i<l;i++)
{k++;
if(a[i]>='A'&&a[i]<='Z')
{b[i%5]=0;}
else
if(a[i]>='0'&&a[i]<='9')
{ b[i%5]=1;}
if(k%5==0)
{c[j++]=hroh(b);}
}
for(i=0;i<j;i++)
// printf("%d ",c[i]+65);cout<<endl;
// for(i=0;i<j;i++)
printf("%c",c[i]+65);
cout<<endl;
}
}
4145
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct point {
double x,y;
}p[100010],a,b;
double dis(point a,point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int cmp(point x,point y)
{
return dis(x,a)<dis(y,a);
}
double max(double a,double b)
{
return a>b?a:b;
}
double min(double a,double b)
{
return a<b?a:b;
}
double aa[100010];
int main()
{
int t;
int i,j,n;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
}
double ans=1000000000;
sort(p+1,p+n+1,cmp);
aa[n]=dis(p[n],b);
for(i=n-1;i>=1;i--)
{
aa[i]=max(dis(p[i],b),aa[i+1]);
}
double tmp=aa[1];
for(i=1;i<n;i++)
{
tmp=min(tmp,aa[i+1]+dis(p[i],a));
}
tmp=min(dis(p[n],a),tmp);
printf("%.0lf\n",tmp);
}
}
4146
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN=1024;
int map[MAXN][MAXN];
int row[MAXN];
int col[MAXN];
char buffer[MAXN];
int read()
{
int ret=0;
char c;
while((c=getchar())==' '||c=='\n'||c=='\r');
ret=c-'0';
while((c=getchar())!=' '&&c!='\n'&&c!='\r')
ret=ret*10+c-'0';
return ret;
}
int main()
{
int n,i,j;
char ch;
int t;
int casenum;
t=read();
for(casenum=1; casenum<=t; casenum++)
{
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
n=read();
for(i=1; i<=n; i++) {
scanf("%s",buffer+1);
for(j=1; j<=n; j++) {
map[i][j]= (buffer[j]=='b' ? 0: 1);
}
}
int opnum;
int a,b;
opnum=read();
while(opnum--) {
a=read();
b=read();
row[a]=!row[a];
col[b]=!col[b];
}
int ans=0;
for(i=1; i<=n; i++) {
for(j=1; j<=n; j++) {
if(row[i]^col[j]) map[i][j]=!map[i][j];
ans+=map[i][j];
}
}
printf("Case #%d: ",casenum);
printf("%d\n",ans);
}
return 0;
}
4147
#include<iostream>
#include <string>
using namespace std;
int main()
{
string t;
int n,B,D,f,F;
int ans;
int i,j,cnt_a,cnt_b,cnt_c;
while(cin>>n>>B>>D>>f>>F){
ans=~0U>>1;
for(j=1; j<=n; j++){
cnt_a=0;
cnt_b=0;
cnt_c=0;
cin>>t;
for(i=0; i<t.size(); i++){
switch(t[i]){
case 'A':cnt_a++;break;
case 'B':cnt_b++;break;
case 'C':cnt_c++;break;
}
}
int now=cnt_a*B + cnt_a*D + cnt_a*f;
now+=cnt_b*2*B + cnt_b*D*2 + cnt_b*F;
now+=cnt_c*3*B + cnt_c*D*3 + cnt_c*F*2;
if(now<ans) ans=now;
}
cout<<ans<<endl;
}
return 0;
}
4148
#include<iostream>
using namespace std;
int s[40];
char str[40][10000];
void solve()
{
int i,j,q;
s[1]=1;
s[2]=2;
str[2][0]='1'; str[2][1]='1'; str[2][2]='\0';
for(i=3;i<=30;i++)
{
int len=strlen(str[i-1]);
int k=0;
for(j=0;j<len;j++)
{
char t=str[i-1][j];int cnt=0;
for(q=j;q<len;q++)
{
if(str[i-1][j]==str[i-1][q])
{
cnt++;
}
else
break;
}
j=q-1;
str[i][k++]=cnt+'0';
str[i][k++]=t;
}
str[i][k]='\0';
len=strlen(str[i]);
// puts(str[i]);
s[i]=len;
}
}
int main()
{
solve();
int n;
while(cin>>n&&n)
{
printf("%d\n",s[n]);
}
return 0;
}
4149
#include<stdio.h>
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
int x[8],sum,i;
for( i=0; i<8; i++)
{
scanf("%d",&x[i]);
}
scanf("%d",&sum);
int jin=0,flag=1;
int ans[35],at=0;
while(flag)
{
int now=0; //表示当前这位只和
flag=0;
for( i=0; i<8; i++)
{
now+=1& x[i];
x[i]=x[i]>>1;
if(x[i]!=0) flag=1;
}
if((now+jin)%2==0)
{
if((1&sum)==1)
{
ans[at++]=1;
jin=(8-now+jin)/2; //如果当前这些位是取反的,需要8-now,jin(进位)不影响
}
else
{
ans[at++]=0;
jin=(now+jin)/2;
}
}
else
{
if((1&sum)==1)
{
ans[at++]=0;
jin=(now+jin)/2;
}
else
{
ans[at++]=1;
jin=(8-now+jin)/2;
}
}
sum=sum>>1;
if(jin!=0 || sum!=0) flag=1;
}
int res=0,two=1;
for(i=0; i<at; i++)
{
res+=two*ans[i];
two*=2;
}
printf("%d\n",res);
}
return 0;
}
4150
#include<iostream>
using namespace std;
char str[1000009];
char temp[10];
int main()
{
int t,i,j;
cin>>t;
while(t--)
{
int ans=0;
scanf("%s%s",str,temp);
// cin>>str;cin>>temp;
int lena=strlen(str);
int lenb=strlen(temp);
int l=0;
for(i=0;i<lena;i++)
{
if(str[i]==temp[0])
{
int l=i+1;
for(j=1;j<lenb;j++,l++)
{
if(str[l]!=temp[j])
break;
}
if(j==lenb)
{
ans++;
i=l-1;
}
}
}
printf("%d\n",ans);
}
return 0;
}
4151 这题可以二分。。我是很暴力的。。
#include<iostream>
using namespace std;
#define N 11000001
bool f[N];
void solve()
{
int i,j,k,l,m,n,o,p,q;
for(i=1;i<=9;i++)
f[i]=1;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
{
if(i!=j)
f[i*10+j]=1;
}
for(i=1;i<=9;i++)
{
for(j=0;j<=9;j++)
{
if(i!=j)
for(k=0;k<=9;k++)
if(j!=k&&k!=i)
f[i*100+j*10+k]=1;
}
}
for(i=1;i<=9;i++)
{
for(j=0;j<=9;j++)
{
if(j!=i)
{
for(k=0;k<=9;k++) {
if(k!=j&&k!=i) {
for(l=0;l<=9;l++)
if(l!=k&&l!=j&&l!=i)
f[i*1000+j*100+k*10+l]=1;
}
}
}
}
}
for(i=1;i<=9;i++){
for(j=0;j<=9;j++) {
if(j!=i) {
for(k=0;k<=9;k++) {
if(k!=j&&k!=i) {
for(l=0;l<=9;l++)
if(l!=k&&l!=i&&l!=j)
{
for(m=0;m<=9;m++)
if(m!=l&&m!=i&&m!=j&&m!=k)
f[i*10000+j*1000+k*100+l*10+m]=1;
}
}
}
}
}
}
for(i=1;i<=9;i++){
for(j=0;j<=9;j++) {
if(j!=i) {
for(k=0;k<=9;k++) {
if(k!=j&&k!=i) {
for(l=0;l<=9;l++)
if(l!=k&&l!=i&&l!=j)
{
for(m=0;m<=9;m++)
if(m!=l&&m!=i&&m!=j&&m!=k)
{
for(n=0;n<=9;n++)
if(n!=m&&n!=i&&n!=j&&n!=k&&n!=l)
f[i*100000+j*10000+k*1000+l*100+m*10+n]=1;
}
}
}
}
}
}
}
for(i=1;i<=9;i++){
for(j=0;j<=9;j++) {
if(j!=i) {
for(k=0;k<=9;k++) {
if(k!=j&&k!=i) {
for(l=0;l<=9;l++)
if(l!=k&&l!=i&&l!=j)
{
for(m=0;m<=9;m++)
if(m!=l&&m!=i&&m!=j&&m!=k)
{
for(n=0;n<=9;n++)
if(n!=m&&n!=i&&n!=j&&n!=k&&n!=l)
{
for(o=0;o<=9;o++)
if(o!=n&&o!=i&&o!=j&&o!=k&&o!=l&&o!=m)
f[i*1000000+j*100000+k*10000+l*1000+m*100+n*10+o]=1;
}
}
}
}
}
}
}
}
}
int main()
{
solve();
int n;
int ans=0,i;
while(cin>>n)
{
ans=0;
for(i=1;i<n;i++)
if(f[i])
ans++;
printf("%d\n",ans);
}
return 0;
}
4152
#include<cstdio>
#include<cstring>
int hab[20][25];
int main()
{
int n,m;
int i,j,k;
int sat[25];
while(scanf("%d",&n) != EOF)
{
for( i=0; i<n; i++) scanf("%d",&sat[i]);
scanf("%d",&m);
for( i=0; i<m; i++)
{
for( j=0; j<n; j++)
{
scanf("%d",&hab[i][j]);
}
}
int res=0,r[20];
int to=1<<m;
for( i=1; i<to; i++)
{
int tr[20],tt=0;
int tsat[25];
memset(tsat,0,sizeof(tsat));
for( j=0; j<m; j++) if( (i>>j) & 1)
{
tr[tt++]=j;
for( k=0; k<n; k++)
{
tsat[k]+=hab[j][k];
}
}
int flag=1;
for(int j=0; j<n; j++)
{
if(tsat[j]<sat[j])
{
flag=0; break;
}
}
if(flag && tt==res){
for( j=0; j<tt; j++)
{
if(tr[j]>r[j])
{
flag=0; break;
}
}
}
if(flag && tt>=res)
{
res=tt;
for( j=0; j<res; j++)
{
r[j]=tr[j];
}
}
}
printf("%d",res);
for(int i=0; i<res; i++)
{
printf(" %d",r[i]+1);
}
puts("");
}
}