HIR180's diary

ICPC World Finals 2022 を集大成に

2012-12-26

JOI予選参加記(2012/12/16) 03:40

初めてのJOIです!

前日まで期末があったのでCodingしてない><

期末なんて嫌いだっ!!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

起床(11:15)

予選練習が終了していた(絶望)

準備(~13:00)

Terapad,Cygwin起動

すたーと!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. やるだけ(20点)

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef pair<int,int> P;
#define make_pair mp
#define first f
#define second s
int n,a,b,c,d;
int main(){
scanf("%d",&n);
scanf("%d %d %d %d",&a,&b,&c,&d);
int e=a%c==0?a/c:a/c+1;
int f=b%d==0?b/d:b/d+1;
printf("%d\r\n",n-max(e,f));
return 0;
}

2.やるだけ(20点)

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef pair<int,int> P;
#define make_pair mp
#define first f
#define second s
int num[205][3],n,ans[205]={};
int main(){
scanf("%d",&n);
for(int i=0;i"%d %d %d",&num[i][0],&num[i][1],&num[i][2]);
}
bool a=false;
for(int k=0;k<3;k++){
for(int i=0;ifor(int j=0;jif(i!=j){
if(num[i][k]==num[j][k]){
a=true;
break;
}
}
}
if(!a){ ans[i]+=num[i][k];}
a=false;
}
}
for(int i=0;i"%d\r\n",ans[i]);
}
return 0;
}

3.やるだけだけどミスしていた(8点)

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef pair<int,int> P;
#define make_pair mp
#define first f
#define second s
int n,num=0;
char ans[30];
char str[101][105];
bool a=true;
int main(){
scanf("%d",&n);
scanf("%s",&ans);
int ppp=strlen(ans);
char s1=ans[0],s2=ans[1];
for(int i=0;i"%s",&str[i]);
	int length=strlen(str[i]);
	for(int j=0;jif(str[i][j]==s1){
			for(int k=j+1;kif(str[i][k]==s2){
					int br=k-j,now=j;
					for(int g=2;gif(now+br*gtrue;
						}else{
							a=false;
							//ここにbreak;を入れなかったので途中までがどうであれ,str[now+br*(ppp-1)]==ans[ppp-1]ならばok,というミスが発生した						}
					}
					if(a){ num++; goto we; }
					a=true;
				}
			}
		}
	}
	we:;
}
printf("%d\n",num);
return 0;
}

4.DP(20点)

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef pair<int,int> P;
#define make_pair mp
#define first f
#define second s
int dp[205][105];
int cloth[205][3];
int temp[205],n,d;
int main(){
memset(dp,-1,sizeof(dp));
scanf("%d %d",&d,&n);
for(int i=1;i<=d;i++){
	scanf("%d",&temp[i]);
}
for(int i=1;i<=n;i++){
	scanf("%d %d %d",&cloth[i][0],&cloth[i][1],&cloth[i][2]);
}
for(int i=1;i<=n;i++){
	if(cloth[i][0]<=temp[1] && temp[1]<=cloth[i][1]){
		dp[1][cloth[i][2]]=0;
	}
}
for(int i=2;i<=d;i++){
	for(int j=1;j<=n;j++){
		if(cloth[j][0]<=temp[i] && temp[i]<=cloth[j][1]){
			for(int h=0;h<=100;h++){
				if(dp[i-1][h]!=-1){
					dp[i][cloth[j][2]]=max(dp[i][cloth[j][2]],dp[i-1][h]+max(cloth[j][2],h)-min(h,cloth[j][2]));
				}
			}
		}
	}
}
int ans=0;
for(int i=0;i<=100;i++){
	ans=max(ans,dp[d][i]);
}
printf("%d\r\n",ans);
return 0;
}

5.全探索(4点)

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef pair<int,int> P;
#define make_pair mp
#define first f
#define second s
int n,kk;
int con[51][6];
int field[101][101][101]={};
int main(){
scanf("%d %d",&n,&kk);
for(int i=0;i"%d %d %d %d %d %d",&con[i][0],&con[i][1],&con[i][2],&con[i][3],&con[i][4],&con[i][5]);
}
for(int i=0;i<=100;i++){
	for(int j=0;jif(con[j][2]<=i && con[j][5]>i){
			for(int a=con[j][0];a3];a++){
				for(int b=con[j][1];b4];b++){
					field[a][b][i]++;
				}
			}
		}
	}
}
int ans=0;
for(int i=0;i<=100;i++){
for(int j=0;j<=100;j++){
for(int k=0;k<=100;k++){
if(field[i][j][k]>=kk){
ans++;
}
}
}
}
printf("%d\r\n",ans);
return 0;
}

6.できない(0点)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

しゅうりょー!!

20+20+8+20+4+0=72(Aランク)でした。

3で8点とれたことは本当に運がよかった。

あと、5で4点とったことが最終的に助けてくれた。

部分点はとても大切だと分かった。

本選はこんなミスをしないように気をつけます><