橙になりたいaquarium

にゃーんにゃーんにゃにゃーん

DDCC2022決勝に参加しました

shinchan(@Sophia_maki)です。
DDCCに24卒枠で決勝行って来ました。

予選

3完。4問目でTSP書いたが間に合わなかった。
なんか通った。

決勝

本番前

前日の朝東京入り。当日の午前3時まで日本酒飲んでた。家主が通話ゲームをずっとしていたためあまり寝れず、コンディションはかなり悪かった。会場入りFA成功。

本番

シミュレーション問題。20点で21位だった。

実機シミュレーション。10点。

実機確認。10点。70発同じところにぶちこんだ(いろんなところにいれると点数上がる)。下から2番目。

実機シミュレーション2。148点。改行で操作分けれることをそこで知る。

実機確認2。136点。30人中9位。阪大内1位。なぜ。

実際に書いたプログラム

最終提出コードが残ってました。

#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <numeric>
#include <utility>
#include <iomanip>
#include <algorithm>
#include <functional>
#define be(v) (v).begin(),(v).end()
#define pb(q) push_back(q)
#define rep(i, n) for(int i=0;i<n;i++)
#define all(i, v) for(auto& i : v)
typedef long long ll;
using namespace std;
const ll mod=1000000007, INF=(1LL<<60);
#define doublecout(a) cout<<fixed<<setprecision(10)<<a<<endl;


double tt(int y, int x) {
    double t = atan2(y, x);
    if(t < 0) {
        t = -M_PI / 2.0 - t;
    } else {
        t = M_PI / 2.0 - t;
    }
    t *= 180.0 / M_PI;
    t *= 1000;
    return t;
}
void solve(int i) {
    vector<int> x(7), y(7);
    vector<int> xx(3), yy(3);
    // double sum = 0;
    rep(i, 7) {
        cin >> x[i] >> y[i];
        // sum += atan2(y[i], x[i]);
    }
    // sum /= 7.0;
    // sum -= M_PI / 2.0;
    // sum *= 1000.0;
    rep(i, 3) {
        cin >> xx[i] >> yy[i];
    }

    
    cout << "100,0,0," << 0 << ",10,0" << endl;
    double t = tt(450, 200);
    cout << "0,0,0," << int(t) << ",10,100" << endl;
    cout << "0,0,0," << -int(t) << ",10,100" << endl;

    t = tt(600, 250);
    cout << "0,0,0," << int(t) << ",10,100" << endl;

    t = tt(600, -150);
    cout << "0,0,0," << int(t) << ",10,1000" << endl;

    t = tt(925, -325);
    cout << "0,0,0," << int(t) << ",10,1600" << endl;

    t = tt(600, 250);
    cout << "1000,0,0," << int(t) << ",10,1000" << endl;

}
int main() {
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(false);
    rep(i, 1) {
        solve(i);
    }
    return 0;
}

本番後

優勝者の方にしゃぶしゃぶごちそうになりました。ありがとうございます。

まとめ

ラソンは苦手だったし、物理演算とか邪魔するバーとか一切無視した。余計なことせずに待ち時間だけを、シミュレーションでスコアが高くなるように二分探索で調整した。多少の幾何をした。x,yを逆にしてatan2やったりした。ぐらい。余計なことしないほうがいい。



初めてのオンサイト、楽しかった。東京旅行も楽しかったです。