kotonoha_pcg@気ままに雑記

kotonoha_pcgが気分次第で様々書き置きます.dlang関係他:http://kotonoha-pcg.hatenadiary.com

いつもの

 どうも,AOJすらろくに解いてないプログラマの屑です.このままじゃPCKでチーム組むペアに言われ続けられるので,なんとかしたい限りですが.今日は一応2つ出ました.

CF Round #304 (Div2) A

 問題文の意味を読み解くのに時間がかかってしまった.意味が理解できたら簡単.概要は,w個のバナナを買いたいけど今兵隊さんはnドルしか持ってない.1個買うごとに2*kずつ価格が上がっていくから,彼が友人から何ドル借りればいいか計算してあげろ,というもの.

入力

 正の整数,k,n,w (1  ≤  k, w  ≤  1000, 0 ≤ n ≤ 109)

出力

 借りる金額

#include <bits/stdc++.h>
using namespace std;

const int MAX_N = 1000;

int main() {
	
	unsigned int k,n,w,ans;
	unsigned int sum=0;
	int crs[MAX_N];
	cin>>k>>n>>w;
	for(int i=1;i<=w;i++){
		crs[i]=k*i;
		sum=sum+crs[i];
	}
	//ans=sum-n;
		if(n>sum){
			cout<<"0"<<"\n";
		}else{
			cout<<sum-n<<"\n";
		}
	return 0;
}

以上.forを1回回すごとに,kの値をkずつ増やしてあげれば勝手に求まる.

ABC #024 A 動物園

 実装してあげればOK,少し前のPCKに同じ感じの問題があった記憶がある.子供の金額をa,大人の金額をb,割引する金額をc,割引対象になる人数をk,子供の数をs,大人の数をtとする.

入力

 a,b,c,k,s,t

出力

 割引された/又は割引されなかった場合の入園料の合計金額

#include <iostream>
using namespace std;

int main() {
	
	int a,b,k,c;
	int s,t,suma,sumb;
	cin>>a>>b>>c>>k;
	cin>>s>>t;
	int nsu=0,n=0,ans=0;
	nsu=s+t;
	if(nsu>=k){
		n=c*nsu;
		suma=s*a;
		sumb=t*b;
		ans=suma+sumb;
		ans-=n;
	}else{
		suma=s*a;
		sumb=t*b;
		ans=suma+sumb;
	}
	cout<<ans<<endl;
	return 0;
}

結構ゴタゴタかつガバガバコードなので参考にはしないで貰えるといいです(というかそもそもそんな人はいない).とりあえず解くだけ解こうと思って書いてたし気をつけてはいたのですがいつも通りの状態です.

5/24 22:45分追加.コードゴルフをしてみました

 こんなもんコードゴルフじゃねーよ!って人もいるだろうけど,偶には目を瞑ってやって下さい.気分転換のゲームなんです><

#include <iostream>
using namespace std;int main() {int a,b,c,k,s,t; cin>>a>>b>>c>>k>>s>>t; if(s+t>=k){cout<<(s*a)+(t*b)-(s+t)*c<<endl;}else{cout<<(s*a)+(t*b)<<endl;}}

vectorの使い方

 日付変更なのでおとといになってしまうのですが,ちょっとSTLわからなかったので手を付けようと思って,vectorの色々な関数群を試したり学習したりしています.別にPCKのalgorithmヘッダ系の関数群は普通の配列でも使用可能なんですが,それ以外のコンテストでも役に立つだろうと思って書いてました.STLはほんとに初心者なので(それ以外のものでもそう),Google先生に探して貰ったサイトで適当にやっています.

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

typedef long long lint;

void func(vector<int>::iterator begin,vector<int>::iterator end){
	for(;begin!=end;++begin){
		printf("%d,",*begin);
	}
	cout<<endl;
}


int main() {
	
	vector<int> vinta;
	//vector<int> vintb;
	int n;
	vector<int>::iterator begin,end;
	//int m;
	vinta.push_back(20);
	vinta.push_back(10);
	
	begin=vinta.begin();
	end=vinta.end();
	
	/*cin>>m;
	for(int i=0;i<m;i++)	vintb.push_back(i);
	sort(vinta,n);*/
	func(begin,end);
	
	
	return 0;
}

long longでlintを作ってますが,特に意味は無いです,全くもってなにか癖がついてしまっていました.void func{}でイテレータに関しての作業を行っていて,あとは動的配列の取得やら要素数の入力やらを順番におこなっています.

 とりあえず,vectorとalgorithmは完璧に出来上がっていけるようにしたいと考えています.ABCとCFと,特にCFは問題文を正確かつ素早く理解できるように頑張ります.