去年の12/12に情報オリンピックの2次試験があった
自分は65/500点しか取れなかった。。。
いつの日かこんな問題も楽々とけるように解きなおしていくぞ!!(二次やりたくない(できない)から一次の問題とくぜ!!!)
ちなみにc++しかできないぜ
#include <bits/stdc++.h>
using namespace std;
#define ll long long//「ll」をlong long とする
#define _GLIBCXX_DEBUG//vector型を使いやすくするやつ
int main(){
}
↑この部分はc++でのプログラミングを始めるに必要な部分です
JOI 2023/2024 一次予選 (第3回)
404 Not Found - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
一問目
コード
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define _GLIBCXX_DEBUG
int main(){
int n,m;//ここで変数「n」「m」を宣言
cin >> n >> m;//nとmにそれぞれ入力
cout<< n*60+m;//n×60にmを足して出力
}
これは解けた人が多いと思う
これは簡単と思えてほしい
二問目
コード
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define _GLIBCXX_DEBUG
int main(){
int n,m,k;//変数n,m,kの宣言
cin>> n >> m;//nとmに入力
k=n+m;//nとmを足したものをkとする
if(k < 10)cout<< '1';//kが10未満なら「1」と出力
if(k >= 10 && k < 100)cout<< '2';//kが10以上かつ100未満なら「2」と出力
if(k >= 100)cout<< '3';//kが100以上なら
「3」と出力
}
自分はこの問題でぐだったので、強行突破した。
こんなことがないようにみんなは頑張ろう!!!
(つまり10で何回割れるかで判断するみたいなかんじでとけると思う)
三問目
コード
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define _GLIBCXX_DEBUG
int main(){
int n,x=0;//変数n,xを宣言。xは初期値0
string s;//文字列sを宣言
cin>> n >> s;//n,sにそれぞれ入力
char t;//一文字だけ入るやつ「char型」のtを宣言
t=s.at(0);//tはsの0文字目
for(int i=0; i<n; i++){//i=0としてiに1ずつ足していきnまで繰り返す
char c;//一文字だけ入るやつ「char型」のcを宣言
c=s.at(i);//cはsのi文字目
if(c!=t)x++;//cがtと違ったらxを1増やす
}
if(x==0)cout<<"Yes";//xが0だったら「Yes」と出力
else{
cout<<"No";
}//そうじゃなかったら「No」と出力
}
けっこう難しかったと思う。for文は無限に使うので使えるようになろう!
文字列と一文字の型の使い分けができるようになれば簡単!
四問目
コード
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define _GLIBCXX_DEBUG
int main(){
int k,n,m,an,bn,x=0;//変数k,n,m,an,bn,x(初期値0)を宣言
cin>> k>> n;//k,nにそれぞれ入力
vector<int> a(n);//要素がたくさん(今回はn個)入るやつ「vector型」aを宣言
for(int j=0; j<n; j++){//j=0としてjに1ずつ足していきnまで繰り返す
cin>>a.at(j);//aのj番目に入力
}
cin>>m;//mに入力
vector<int> b(m);//要素がたくさん(今回はm個)入るやつ「vector型」bを宣言
for(int l=0; l<m; l++){//l=0としてlに1ずつ足していきmまで繰り返す
cin>>b.at(l);//bのl番目に入力
}
for(int i=0; i<m; i++){//i=0としてiに1ずつ足していきmまで繰り返す
bn=b[i];//bnをbのi番目とする
for(int ii=0; ii<n; ii++){//ii=0としてiiに1ずつ足していきnまで繰り返す
an=a[ii];//anをaのii番目とする
if(an+k==bn)x++;//もしan+k=bnだったらxを1増やす
}
}cout<<x;//xを出力する
}
見やすくしようとしたらなんか見にくくなった気がするけど気にしない!!
この問題は結構複雑で二重にfor文を使ったりするので難しかったと思う
「vector」という要素がたくさん入るやつはよく使うから覚えたほうがいい
owari
自分より簡単にかける方法は無限にあると思いますが何かの参考になったらいいなと思います。
二次試験むずすぎだろ!!!!
コメント