A: switch文を用いて答えを列挙しました。というのは、せいぜい25種類しか入力がないからです。提出して、Pretest Passedが0:05でした。
B: コンテストの前に仕事があって疲れていたので、問題に集中できませんでした。おかげで、理解するのに時間がかかってしまいましたが、計算方法を考えて、0:25にsubmit/pretest passed。
E: 単に数列の部分和を計算するだけの問題で、高速化のしようがないのでは?と思ってしまいました。良いアルゴリズムは得られず、TLEでした(1:20)。
D: 問題文の意味がわからなかったので、入出力例から推測して作ってみたところ、なんとPretest Passed!(1:54) もちろん、Wrong Answerでしたが。
結果、1398,310位/1093人でした。問題はこちら。
今回はDiv.1 A=Div.2 B,1B=2C,1C=2D,1D=2Eと、少し難しかったように感じます。
A#include<stdio.h>
int main(void){
int n,k;
scanf("%d",&n);
switch(n){
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 21:
k=4;
break;
case 20:
k=15;
break;
default:
k=0;
}
printf("%d\n",k);
return 0;
}
B
#include<stdio.h>
int main(void){
unsigned long long int n,sum=0,i,in;
scanf("%I64u",&n);
for(i=1;i<=n;i++){
scanf("%I64u",&in);
sum+=i*in-(i-1);
}
printf("%I64u\n",sum);
return 0;
}
D(Wrong)
#include<stdio.h>
int main(void){
unsigned long long int p,k,n,x;
int flg;
scanf("%I64u %I64u %I64u",&n,&k,&p);
flg=n%2;
if(flg==0 && 2*k>n) flg=2;
while(p--){
scanf("%I64u",&x);
if(flg==0){
if(x%2==0 && (n-x)/2+1<=k) putchar('X');
else putchar('.');
}else if(flg==1){
if(x<=n-k) putchar('.');
else putchar('X');
}else{
if(x%2==0) putchar('X');
else if((n-x)/2+1<=k-n/2) putchar('X');
else putchar('.');
}
}
putchar('\n');
return 0;
}
E(TLE)
#include<stdio.h>
#include<stdlib.h>
int main(void){
unsigned int n,a,b,*w,p,i,j;
unsigned long long int sum,allsum=0;
scanf("%u",&n);
w=(unsigned int *)calloc(n,sizeof(unsigned int));
for(i=0;i<n;i++){
scanf("%u",w+i);
allsum+=*(w+i);
}
scanf("%u",&p);
while(p--){
scanf("%u %u",&a,&b);
if(((n-a)/b+1)*2<=n){
sum=0;
for(i=a-1;i<n;i+=b) sum+=*(w+i);
}else{
sum=allsum;
for(i=0;i<a-1;i++) sum-=*(w+i);
for(i=a-1;i<n;i+=b) for(j=1;j<b;j++) sum-=*(w+i+j);
}
printf("%I64u\n",sum);
}
free(w);
return 0;
}
0 件のコメント:
コメントを投稿