您的位置:首页 > 其它

CUGBACM14级喜迎开学第1场 解题报告

2015-03-29 17:03 239 查看
地址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=71302#overview赛后AK。AHDU1020字符串。压缩编码。遇到与前一字符不同的字符输出统计数据和前一字符,最后一个单独处理。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#definePIacos(-1)
usingnamespacestd;
intmain()
{
intc,c1;
charb[10010];
intn;
scanf("%d",&n);
while(n--){
scanf("%s",b);
c=0;
inti;
for(i=0;b[i]!='\0';i++){
if(i==0){
c=0;
}
if(i!=0&&b[i]!=b[i-1])
{
if(c>1)printf("%d%c",c,b[i-1]);
elseprintf("%c",b[i-1]);
c=0;}
c++,c1=c;
}
if(c1>1)printf("%d%c",c1,b[i-1]);
elseprintf("%c",b[i-1]);
printf("\n");
}
	return0;
}
[/code]BHDU1032单纯模拟因为tep初值赋早了而卡,看来刷题不够多。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<ctype.h>
#definePIacos(-1)
usingnamespacestd;
intf(intx){
inty=1;
while(x!=1){
if(x%2==1)x=(3*x+1)/2,y+=2;
elsex=x/2,y++;
}
returny;
}
intmain()
{
inti,j;
chars[100],tp[100];
intres;
inttep;
intk,kk;
while(~scanf("%d%d",&i,&j)){
tep=0;
if(i>j)tep=i,i=j,j=tep;
res=f(i);
for(k=i+1;k<=j;k++){
res=max(res,f(k));
}
if(tep==0)printf("%d%d%d\n",i,j,res);
elseprintf("%d%d%d\n",j,i,res);
}}
[/code]CHDU1037大洪水,小于168的情况就输出,没有就nocrash,心理素质差,太慌了,没写nocrash,搞不懂我怎么A的,不科学。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#definePIacos(-1)
usingnamespacestd;
intmain()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<=168)printf("CRASH%d\n",a);
elseif(b<=168)printf("CRASH%d\n",b);
elseif(c<=168)printf("CRASH%d\n",c);
}
[/code]DHDU1050过道里面搬桌子,每搬一个10分钟,有正在使用的过道则搬运延后。全场没人A,估计没人认真看题吧。用一个数组储存各个过道被经过的次数,经过最多的过道的经过次数*10为答案,注意x>y的情况。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<ctype.h>
#definePIacos(-1)
usingnamespacestd;
intmain()
{
inta[210];
intn;
intx,y;
intt;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
memset(a,0,sizeof(a));
for(inti=0;i<n;i++){
scanf("%d%d",&x,&y);
inttep;
if(x>y)tep=x,x=y,y=tep;
for(intk=(x+1)/2;k<=(1+y)/2;k++){
a[k]++;
}
}
sort(a,a+210);
printf("%d\n",a[209]*10);
}
}
[/code]EHDU1062遇到空格就字符反转。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#definePIacos(-1)
usingnamespacestd;
intmain()
{
intn;
	chara[1010];
scanf("%d",&n);
getchar();
while(n--){
gets(a);
inti,s=0,e;
for(i=0;a[i]!='\0';i++)
if(a[i]==''){e=i-1;
for(intk=e;k>=s;k--){
printf("%c",a[k]);
}
printf("");s=i+1;
}
for(intk=i-1;k>=s;k--){
printf("%c",a[k]);
}
printf("\n");
}
	return0;
}
[/code]FHDU1106以前没有A的遇5分割,并排序。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#definePIacos(-1)
usingnamespacestd;
intmain()
{
chara[1010];
longb[1010];
chartep[1010];
while(~scanf("%s",a))
{
intlen=strlen(a);
ints=0,e;
intk=0,kk;
memset(b,0,sizeof(b));
for(inti=0;i<=len;i++)
{
if((a[i]=='5'||a[i]=='\0')&&((a[i-1]=='5')||(a[i-1]<'0'||a[i-1]>'9'))){s++;continue;}
if(a[i]=='5'||a[i]=='\0'){
e=i-1;
for(kk=s;kk<=e;kk++){
tep[kk-s]=a[kk];
}tep[e-s+1]='\0';s=i+1;
b[k++]=atol(tep);
}}
sort(b,b+k);
for(inti=0;i<k-1;i++)
{
printf("%ld",b[i]);
}
printf("%ld\n",b[k-1]);}
}
[/code]GCF520A所有字母全部出现输出YEs,否则输出nO,数组储存。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<ctype.h>
#definePIacos(-1)
usingnamespacestd;
intmain()
{
	inta[27];
	charb[20020];
	intn,i;
scanf("%d",&n);
memset(a,0,sizeof(a));
scanf("%s",b);
for(i=0;i<n;i++)
{if(isupper(b[i]))b[i]=b[i]-'A'+'a';
a[b[i]-'a']=1;}
for(i=0;i<26;i++)
if(a[i]==0){printf("NO\n");break;}
if(i==26)printf("YES\n");
}
[/code]HCF520B两种操作-1和*2,从m运算到n.分解因式,最小2的次方的指数加上各项一分解得到的二的次方项的系数和。
#include<iostream>
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<ctype.h>
#definePIacos(-1)
usingnamespacestd;
intmain()
{
intm,n,t;
while(~scanf("%d%d",&m,&n)){
intk,l;intres;
if(m>=n)printf("%d\n",m-n);
else{for(inti=0;;i++){
if(pow(2,i)*m>=n){k=i;break;}
}
inttep=pow(2,k)*m-n;
l=0;
for(inti=k;i>=0;i--){
t=pow(2,i);
l+=tep/t;
tep%=t;
}
res=k+l;
printf("%d\n",res);}
}
}
[/code]这里有必要提一下队友的广搜的代码:
#include<cstdio>//申则宇
#include<queue>
usingnamespacestd;
boolvis[20000];
structnode
{
intn;
intd;
node(int_n,int_d):n(_n),d(_d){};
};
intbfs(intp,intq)
{
intn,d;
queue<node>qe;
qe.push(node(p,0));
while(!qe.empty())
{
n=qe.front().n,d=qe.front().d;
qe.pop();
if(n==q)returnd;
if(n>1&&vis[n-1]==0)
qe.push(node(n-1,d+1)),vis[n-1]=1;
if(n<q&&vis[n*2]==0)
qe.push(node(n*2,d+1)),vis[n*2]=1;
}
return-1;
}
intmain()
{
intnum1,num2;
scanf("%d%d",&num1,&num2);
printf("%d\n",bfs(num1,num2));
return0;
}
[/code]ICF520C并没有读懂题意,WA了一发.(确实看了题解)给碱基序列,求有最大配对值的总数。要求最大,每个碱基的可能性都是(最多的碱基数的个数)。给出两个我的代码,表示只能用getchar,qmod还没有朴素来得快,醉了。
#include<iostream>//快幂
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
usingnamespacestd;
#defineMX1000000007
longlongqmod(intx,inty)
{
longlongres=1;
longlongt=x;
while(y){
if(y&1)res=(res*t)%MX;
y>>=1;
t=(t*t)%MX;
}
returnres;
}
intmain()
{
chars[10010];
inta[4];
intn;
while(~scanf("%d",&n)){
a[0]=a[1]=a[2]=a[3]=0;
getchar();
for(inti=0;i<n;i++){
switch(getchar()){
case'A':a[0]++;break;
case'C':a[1]++;break;
case'G':a[2]++;break;
case'T':a[3]++;break;
default:break;}
}
sort(a,a+4);
intcnt=0;
for(intk=3;k>=0;k--)
if(a[k]==a[3])cnt++;
longlongres=1;
if(cnt==1)res=1;
else{
res=qmod(cnt,n);
}
printf("%d\n",res);
}
}
[/code]
#include<iostream>//朴素
#include<stdio.h>
#include<cmath>
#include<cstring>
#include<algorithm>
usingnamespacestd;
#defineMX1000000007
intmain()
{
chars[10010];
inta[4];
intn;
while(~scanf("%d",&n)){
a[0]=a[1]=a[2]=a[3]=0;
getchar();
for(inti=0;i<n;i++){
switch(getchar()){
case'A':a[0]++;break;
case'C':a[1]++;break;
case'G':a[2]++;break;
case'T':a[3]++;break;
default:break;}
}
sort(a,a+4);
intcnt=0;
for(intk=3;k>=0;k--)
if(a[k]==a[3])cnt++;
longlongres=1;
if(cnt==1)res=1;
else{
for(inti=0;i<n;i++)
{
res*=cnt;
res%=1000000007;
}
}
printf("%d\n",res);
}
}
[/code]
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  周赛