2016年安徽省プログラム設計コンテスト水題C,D,E問題解


A,Bは水が多すぎて書かない--
考えがはっきりしているような気がして、あまり説明しませんでした.
C.ぐるぐる回る
Time Limit: 1000 MS
Memory Limit: 65536 KB
Total Submissions: 7
Accepted: 2
Description
2 D平面には、固定された円と固定された点(円上にないことを保証)があり、もう1つの動点は円上で角速度で
w円心をぐるぐる回る.t時点で、この動点と定点とを結ぶ直線kは、直線kが円で切断された線分の長さ(すなわち、直線kが円内部分の長さ)を求める.
動点の初期時刻は、円の3時方向(すなわち、x軸の正方向と平行)であり、反時計回りに回転する.
  
Input
まず整数Tを入力し、T(T<50)グループデータを表す.
各組のデータ1行7個の実数a,b,r(r>0),x,y,w(w>=0),t(t>=0)はそれぞれ円の円心座標(a,b),半径r,固定点座標(x,y),角速度wを表し,照会する時刻tである.
上記のすべてのデータの絶対値は10000未満です.
Output
出力の答えは1行を占め、2桁の小数を保持します.
Sample Input
1
1 1 1 3 1 3 0
Sample Output
2.00
Hint
角速度の定義:
円弧単位の円(円周2π、すなわち360度=2π)であり、単位時間で走行する円弧は角速度である.
#include
using namespace std;
typedef long long LL;
typedef long double LD;
const double pi = acos(-1.0);
///////////////////////////////



///////////////////////////////
int main(int argc, char**argv) {
	//ios_base::sync_with_stdio(0); cin.tie(0);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	////////////////////////////
	int T;
	cin>>T;
	while(T--){
		double a,b,r;
		cin>>a>>b>>r;
		double xa,ya;
		cin>>xa>>ya;
		double w,t;
		cin>>w>>t;
		
		double xb=a+r*cos(w*t);
		double yb=b+r*sin(w*t);
		//cout<

D.棚田AGAIN
Time Limit: 1000 MS
Memory Limit: 65536 KB
Total Submissions: 1
Accepted: 1
Description
皆さんは去年の棚田を覚えていますか?土豪YZKは小さな島にn*mの棚田があり、1*1の畑ごとに高さがある.奴隷たちはYZKに搾取されることに甘んじず、彼らは連合して津波でYZKの棚田の一部を水没させることにした.
奴隷たちは昨年試みた結果、土質が柔らかすぎるため、水が土地を透過して隣接する棚田に浸透することができ、つまり津波の高さhに対して、棚田の中のh以下の土地はすべて土質が柔らかくて水没していることが分かった.
棚田の各畑の高さを表すn*mの行列をあげます.次にq個の質問を与え、各質問に津波の高さhを与え、この高さの下で、水没しない棚田の数はいくらであるかを尋ねた.
Input
1行目の整数Tは、テストデータ群数を表す.
テストデータのセットごとに:
第1行の3つの数字n,m,qは,棚田の行数,列数,問合せ数を表す.
その後n行、各行m個の数字は、各畑の高さを表し、棚田の高さは1000000以下である.
その後q行、各行に津波の高さhを与え、この高さより大きい棚田が何枚あるかを尋ねた.
0
0
0<=q<1000.
0<=h<=1000000.
Output
各質問に対して、この津波の高さより大きい棚田の数を表す整数が与えられる.
Sample Input
2
2 2 2
1 2
3 4
2
3
2 3 3
1 2 3
3 4 5
0
4
5
Sample Output
​2
1
6
1
0
#include
using namespace std;
typedef long long LL;
typedef long double LD;
const double pi = acos(-1.0);
///////////////////////////////



///////////////////////////////
int main(int argc, char**argv) {
	ios_base::sync_with_stdio(0); cin.tie(0);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	////////////////////////////
	
	int T;
	cin>>T;
	while(T--){
		int m,n,q;
		cin>>n;
		cin>>m;
		cin>>q;
		int st[40010];
		for(int i=1;i<=m*n;i++){
			cin>>st[i];
		}
		sort(st+1,st+1+m*n);
		while(q--){
			int L;
			cin>>L;
			int h=upper_bound(st+1,st+1+m*n,L)-(st+1);
			cout<

E.矢は虚発がない
Time Limit: 1000 MS
Memory Limit: 65536 KB
Total Submissions: 2
Accepted: 1
Description
JHは10年も练习して、ついに1人の神の矢の手になって、山を下りる前に、大师兄YZは心配して、彼を试して、ただ一定の时间tをあげて、同时に彼にn本の矢をあげて、最后に彼の表现によって、彼が山を下りることができるかどうかを考えます.
矢を放つたびに、YZは彼に4種類の成績(優、良、中、差)を与え、JHは3種類の弓を引くことと照準時間a、b、c(a>=b>=c)がそれぞれ優、良、中等級を取ることができ、弓を引かなければ照準(直接射)しなければ、差(ターゲットに当たらない)しか取れない.
今JHが知りたいのは、自分が弾けない(差を取らない)ことを保証する場合、せいぜいどれだけの優を取ることができるかということです.
もしJHが弾けなかったら、Oh、my godを出力します! 
Input
入力データはTグループを含む:
各データのセットについて、第1の動作は整数nであり、合計n本の矢があることを示す.
(0
その後n行、各行は3つの数字a,b,cを含み、それぞれ対応するレベルを取るのにかかる時間を表す.
       (0
次の数字tは、JHの総審査時間がtであることを示しています.
       (0<=t<=1e6)
Output
各入力セットについて、JHが虚発しなければ、最大で取れる優の数を表す数字xが出力される.できない場合はOh,my godを出力します!
Sample Input
3
1
3 2 1
1
2
3 2 1
3 2 1
4
2
3 2 1
3 2 1
1
Sample Output
0
1
Oh,my god!
#include
using namespace std;
typedef long long LL;
typedef long double LD;
const double pi = acos(-1.0);
///////////////////////////////



///////////////////////////////
int main(int argc, char**argv) {
	ios_base::sync_with_stdio(0); cin.tie(0);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	////////////////////////////
	
	int T;
	cin>>T;
	while(T--){
		int n;
		cin>>n;
		
		int a[1010],b[1010],c[1010];
		for(int i=1;i<=n;i++){
			cin>>a[i]>>b[i]>>c[i];
			a[i]=a[i]-c[i];
		}
		int t;
		cin>>t;
		sort(a+1,a+1+n);
		//sort(b+1,b+1+n);
		sort(c+1,c+1+n);
		
		int tc=t;
		for(int i=1;i<=n;i++){
			tc-=c[i];
		}
		
		
		
		int num_a=0;
		int ta=tc;
		for(int i=1;i<=n;i++){
			ta-=a[i];
			if(ta<0) break;
			num_a++;
		}
		int cnt=0;
		
		if(tc<0){
			cout<