Submission #72942179


Source Code Expand

#include <bits/stdc++.h>
#include <random>
#include <algorithm>
#include <atcoder/all>
//#pragma GCC optimize("O")
//#pragma GCC optimize("O0")
//#pragma GCC optimize("O1")
//#pragma GCC optimize("O2")
//#pragma GCC optimize("O3")
//#pragma GCC optimize("Os")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("Og")
#define rep(i,n) for(ll i=0;i<(ll)(n);++i)
#define rep1(i,n) for(ll i=1;i<=(ll)(n);++i)
#define rep2(i,m,n) for(ll i=(ll)(m);i<(ll)(n);++i)
#define rrep(i,n) for(ll i=(ll)(n)-1;i>=0;--i)
#define rrep1(i,n) for(ll i=(ll)(n);i>0;--i)
#define rrep2(i,m,n) for(ll i=(ll)(m);i>n;--i)
#define _GLIBCXX_DEBUG
#define _CRT_SECURE_NO_WARNINGS
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define SORT(a) sort(all(a));
#define RSORT(a) sort(rall(a));
#define REV(a) reverse(all(a));
#define MIN(a) *min_element(all(a))
#define MAX(a) *max_element(all(a))
#define SUM(a) accumulate(all(a),0LL)
#define lb(a,x) static_cast<int>(lower_bound(all(a),x)-a.begin())
#define ub(a,x) static_cast<int>(upper_bound(all(a),x)-a.begin())
#define SZ(a) ll(a.size())
#define CEIL(x,y) (x+y-1)/y
#define smallexpect(a,b) (a%smallMOD)*pow_mod(b,smallMOD-2,smallMOD)%smallMOD
#define bigexpect(a,b) (a%bigMOD)*pow_mod(b,bigMOD-2,bigMOD)%bigMOD
#define pf push_front
#define pb push_back
#define eb emplace_back
#define ppf pop_front()
#define ppb pop_back()
#define fi first
#define se second
#define INT(...) int __VA_ARGS__;scan(__VA_ARGS__)
#define LL(...) ll __VA_ARGS__;scan(__VA_ARGS__)
#define STRING(...) string __VA_ARGS__;scan(__VA_ARGS__)
#define CHAR(...) char __VA_ARGS__;scan(__VA_ARGS__)
#define DOUBLE(...) double __VA_ARGS__;scan(__VA_ARGS__)
#define LD(...) ld __VA_ARGS__;scan(__VA_ARGS__)
#define YES print("YES")
#define Yes print("Yes")
#define yes print("yes")
#define NO print("NO")
#define No print("No")
#define no print("no")
#define YESNO {print("YES");}else{print("NO");}
#define YesNo {print("Yes");}else{print("No");}
#define yesno {print("yes");}else{print("no");}
#define TA {print("Takahashi");}else{print("Aoki");}
#define nl {cout << '\n';}
#define nle {cerr << '\n';}

using namespace std;using namespace atcoder;
using ull=unsigned long long;using ll=long long;using ld=long double;using i7=__int128_t;
using pii=pair<int,int>;using pid=pair<int,ld>;using pis=pair<int,string>;using pll=pair<ll,ll>;
using pld=pair<ll,ld>;using pls=pair<ll,string>;using pdi=pair<ld,int>;using pdl=pair<ld,ll>;
using pdd=pair<ld,ld>;using pds=pair<ld,string>;using psi=pair<string, int>;using psl=pair<string,ll>;
using psd=pair<string,ld>;using pss=pair<string, string>;using mii=map<int, int>;using mid=map<int,ld>;
using mis=map<int,string>;using mll=map<ll,ll>;using mld=map<ll,ld>;using mls=map<ll,string>;using mli=map<ll,int>;
using mdi=map<ld,int>;using mdl=map<ld,ll>;using mdd=map<ld,ld>;using mds=map<ld,string>;using mil=map<int,ll>;
using msi=map<string, int>;using msl=map<string, ll>;using msd=map<string,ld>;using mss=map<string,string>;
using vi=vector<int>;using vi7=vector<i7>;using vs=vector<string>;using vl=vector<ll>;using vc=vector<char>;
using vb=vector<bool>;using vd=vector<ld>;using vpii=vector<pii>;using vpll=vector<pll>;using vpsi=vector<psi>;
using vpis=vector<pis>;using si=set<int>;using sl=set<ll>;using sc=set<char>;using ss=set<string>;
using sd=set<ld>;using vvi=vector<vi>;using vvi7=vector<vi7>;using vvl=vector<vl>;using vvc=vector<vc>;
using vvs=vector<vs>;using vvb=vector<vb>;using vvd=vector<vd>;using vvpii=vector<vpii>;using vvpll=vector<vpll>;
using vsi=vector<si>;using vsl=vector<sl>;using vvvi=vector<vvi>;using vvvi7=vector<vvi7>;using vvvl=vector<vvl>;
using vvvc=vector<vvc>;using vvvb=vector<vvb>;using vvvd=vector<vvd>;using mint=modint998244353;
using vvvvi=vector<vvvi>;using vvvvl=vector<vvvl>;using vvvvi7=vector<vvvi7>;using vvvvc=vector<vvvc>;
using vvvvb=vector<vvvb>;using vvvvd=vector<vvvd>;using vmii=vector<mii>;using vmil=vector<mil>;using vmli=vector<mli>;
using vmll=vector<mll>;using vmsi=vector<msi>;using vmsl=vector<msl>;using vmis=vector<mis>;using vmls=vector<mls>;
using vmss=vector<mss>;using vmid=vector<mid>;using vmdi=vector<mdi>;using vmdd=vector<mdd>;using vmld=vector<mld>;
using vmdl=vector<mdl>;using vmds=vector<mds>;using vmsd=vector<msd>;
using P=pair<ll, ll>;

void scan(){}
template<class T>void scan(vector<T> &v){
    for(T &t:v)cin>>t;
}
template<class T>void scan(vector<vector<T>> &v){
    for(auto &row:v)for(T&element:row)cin>>element;
}
template<class Head, class... Tail>void scan(Head &head, Tail &...tail){
    cin>>head;scan(tail...);
}
template<class T>void print(const T &t){
    cout<<t<<endl;
}
template<class Head,class...Tail>void print(const Head &head, const Tail &...tail){
    cout<<head;print(tail...);
}
template<class T>void vecout1(const vector<T> &v,char div='\n'){
    rep(i,v.size())cout<<v[i]<<(i==ll(v.size()-1)?div:' ');
}
template<class T>void vecout2(const vector<T> &v,char div='\n'){
    rep(i,v.size())cout<<v[i]<<div;
}
template<class T>void operator++(vector<T> &v,int){for(T &t:v)t++;}
template<class T>void operator--(vector<T> &v,int){for(T &t:v)t--;}
template<class T>void operator+=(vector<T> &v,T x){for(T &t:v)t+=x;}
template<class T>void operator-=(vector<T> &v,T x){for (T &t:v)t-=x;}
template<class T>void operator*=(vector<T> &v,T x){for(T &t:v)t*=x;}
template<class T>void operator/=(vector<T> &v,T x){for(T &t:v)t/=x;}
template<typename T>bool chmax(T &a, T b){return((a<b)?(a=b,true):(false));}
template<typename T>bool chmin(T &a, T b){return((a>b)?(a=b,true):(false));}
template<class T>void uni(T &a){
    sort(all(a));
    a.erase(unique(all(a)),a.end());
}

const ld PI=3.1415926535897932;
const int INF=INT_MAX-314159;const ll LINF=LLONG_MAX-3141592653;
const int bigMOD=1000000007;int smallMOD=998244353;
const int dx[]={-1,0,1,0,-1,1,1,-1};const int dy[]={0,1,0,-1,1,1,-1,-1};
const string ALPHA="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string alpha="abcdefghijklmnopqrstuvwxyz";
/*--------------------------------------------------------------------------------------------------------------------------
・Tターンまで全ショップを適当に巡回し続ける
・10回りくらいしたら、たまにRに変えていく
・すべての店で持っている文字列をsetに入れておいて、含まれていない文字列になった時点で、最寄りの店に直行する。ただし逆行はしないように。
--------------------------------------------------------------------------------------------------------------------------*/
void solve(){
  ll N,M,K,T; cin >> N >> M >> K >> T;
  vvl to(N);

  rep(i,M) {
    ll a,b; cin >> a >> b;
    to[a].eb(b);
    to[b].eb(a);
  }
  rep(i,N) {
    ll dammyx, dammyy;
    cin >> dammyx >> dammyy;
  }
  set<string> sts;

  random_device rd;
  mt19937 mt(rd());
  uniform_int_distribution<int> distN(0, N-1);

  auto bfs = [&](ll from) -> vl {
    vvl vis(N);
    queue<ll> q;
    q.push(from);
    //    vis[from] = true;

    while (!q.empty()) {
      ll pr = q.front(); q.pop();
      for (ll ne: to[pr]) {
	if (vis[ne].size()) continue;
	vis[ne]=vis[pr];
	vis[ne].eb(ne);
	if (ne>=K) {
	  q.push(ne);
	  //	  vis[ne] = true;
	}
	else {
	  return vis[ne];
	}
      }
    }
    vl ret;
    return ret;
  };
  
  auto fout = [&](ll rst, ld rate) -> vl {

    vl ret;
    ll now = 0;
    ll pre = 0;
    ll numred=0;
    vb isred(N, false);
    sts.insert("W");
    string ice="";

    while (ret.size() < T) {
      if (now>=K && !isred[now] && ret.size()>rst) {
	if (ret.size()<T-1 && ret.size()%max(1LL, N-ll(numred*rate)) == 0) {
	  ret.eb(-1);
	  isred[now] = true;
	  numred++;
	}
      }

      if (now<K) {
	sts.insert(ice);
	ice = "";
      }
      else {
	ice += isred[now] ? "R" : "W";
	if (!sts.contains(ice)) {
	  vl route = bfs(now);
	  if (ret.size()< T-route.size() && route[0] != pre) {
	    for (auto e: route) ret.eb(e);
	    pre = now;
	    if (route.size()>1) pre = route[route.size()-2];
	    now = route.back();
	    continue;
	  }
	}
      }

      ll nx = distN(mt)%to[now].size();
      if (ret.size()>0 && to[now][nx] == pre) nx = (nx+1)%to[now].size();
      ret.eb(to[now][nx]);

      pre = now;
      now = to[now][nx];
    }
    
    return ret;
  };

  auto score = [&](vl cmd) -> ll {
    vector<set<string>> st(K);
    vb isred(N, false);
    string ice="";
    ll pre=0;
    for (auto now: cmd) {
      if (now == -1) {
	isred[pre] = true;
	continue;
      }
      if (now<K) {
	st[now].insert(ice);
	ice = "";
      }
      else {
	ice += isred[now] ? "R" : "W";
      }
      pre = now;
	
    }
    ll ret=0;
    rep(i,K) ret+=st[i].size();
    return ret;
  };


  vl ans;
  ll maxscr=0;
  rep(i,700) {
    ll rst = 100;// + 3000*i/50;
    ld rate = 1.1;// + 0.3*(i%100)/100;
    vl cand = fout(rst, rate);
    ll scr = score(cand);
    if (maxscr < scr) {
      ans = cand;
      maxscr = scr;
    }
  }

  if (ans.size() != T) cerr << "Invalid lines!\n";
  for (auto e: ans) cout << e << '\n';
  cerr << maxscr << endl;


}
/*--------------------------------------------------------------------------------------------------------------------------*/
int main(){
    cin.tie(nullptr);cout.tie(nullptr);
    ios::sync_with_stdio(false);
    cout<<fixed<<setprecision(15);
    srand((unsigned)time(NULL));

    solve();
    return 0;
}

Submission Info

Submission Time
Task A - Ice Cream Collection
User stadag
Language C++23 (GCC 15.2.0)
Score 96044
Code Size 9611 Byte
Status AC
Exec Time 1442 ms
Memory 24540 KiB

Compile Error

./Main.cpp: In lambda function:
./Main.cpp:184:23: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
  184 |     while (ret.size() < T) {
      |            ~~~~~~~~~~~^~~
./Main.cpp:185:46: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
  185 |       if (now>=K && !isred[now] && ret.size()>rst) {
      |                                    ~~~~~~~~~~^~~~
./Main.cpp:186:23: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
  186 |         if (ret.size()<T-1 && ret.size()%max(1LL, N-ll(numred*rate)) == 0) {
      |             ~~~~~~~~~~^~~~
./Main.cpp: In function 'void solve()':
./Main.cpp:261:18: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
  261 |   if (ans.size() != T) cerr << "Invalid lines!\n";
      |       ~~~~~~~~~~~^~~~

Judge Result

Set Name test_ALL
Score / Max Score 96044 / 1500000
Status
AC × 150
Set Name Test Cases
test_ALL test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt, test_0100.txt, test_0101.txt, test_0102.txt, test_0103.txt, test_0104.txt, test_0105.txt, test_0106.txt, test_0107.txt, test_0108.txt, test_0109.txt, test_0110.txt, test_0111.txt, test_0112.txt, test_0113.txt, test_0114.txt, test_0115.txt, test_0116.txt, test_0117.txt, test_0118.txt, test_0119.txt, test_0120.txt, test_0121.txt, test_0122.txt, test_0123.txt, test_0124.txt, test_0125.txt, test_0126.txt, test_0127.txt, test_0128.txt, test_0129.txt, test_0130.txt, test_0131.txt, test_0132.txt, test_0133.txt, test_0134.txt, test_0135.txt, test_0136.txt, test_0137.txt, test_0138.txt, test_0139.txt, test_0140.txt, test_0141.txt, test_0142.txt, test_0143.txt, test_0144.txt, test_0145.txt, test_0146.txt, test_0147.txt, test_0148.txt, test_0149.txt
Case Name Status Exec Time Memory
test_0000.txt AC 1043 ms 16616 KiB
test_0001.txt AC 1137 ms 20032 KiB
test_0002.txt AC 1072 ms 15812 KiB
test_0003.txt AC 1178 ms 20140 KiB
test_0004.txt AC 1089 ms 17320 KiB
test_0005.txt AC 1152 ms 18504 KiB
test_0006.txt AC 1118 ms 17600 KiB
test_0007.txt AC 1090 ms 17848 KiB
test_0008.txt AC 1123 ms 18964 KiB
test_0009.txt AC 1074 ms 18372 KiB
test_0010.txt AC 978 ms 15328 KiB
test_0011.txt AC 1202 ms 20232 KiB
test_0012.txt AC 1083 ms 18184 KiB
test_0013.txt AC 972 ms 14868 KiB
test_0014.txt AC 1080 ms 18508 KiB
test_0015.txt AC 1118 ms 19756 KiB
test_0016.txt AC 936 ms 14504 KiB
test_0017.txt AC 1100 ms 18732 KiB
test_0018.txt AC 1091 ms 18892 KiB
test_0019.txt AC 1199 ms 19860 KiB
test_0020.txt AC 1087 ms 16576 KiB
test_0021.txt AC 1040 ms 17340 KiB
test_0022.txt AC 1006 ms 16456 KiB
test_0023.txt AC 1242 ms 21196 KiB
test_0024.txt AC 979 ms 15680 KiB
test_0025.txt AC 1004 ms 16272 KiB
test_0026.txt AC 1085 ms 18144 KiB
test_0027.txt AC 1074 ms 17240 KiB
test_0028.txt AC 1111 ms 19068 KiB
test_0029.txt AC 1049 ms 16512 KiB
test_0030.txt AC 1016 ms 16348 KiB
test_0031.txt AC 1098 ms 17864 KiB
test_0032.txt AC 1129 ms 16712 KiB
test_0033.txt AC 1055 ms 17500 KiB
test_0034.txt AC 976 ms 15368 KiB
test_0035.txt AC 1080 ms 17812 KiB
test_0036.txt AC 1054 ms 17188 KiB
test_0037.txt AC 1081 ms 18372 KiB
test_0038.txt AC 1069 ms 17068 KiB
test_0039.txt AC 1127 ms 18632 KiB
test_0040.txt AC 1014 ms 15892 KiB
test_0041.txt AC 1021 ms 15944 KiB
test_0042.txt AC 1109 ms 18876 KiB
test_0043.txt AC 1164 ms 18632 KiB
test_0044.txt AC 1096 ms 18632 KiB
test_0045.txt AC 1145 ms 17576 KiB
test_0046.txt AC 1003 ms 14020 KiB
test_0047.txt AC 1194 ms 19136 KiB
test_0048.txt AC 953 ms 15048 KiB
test_0049.txt AC 1087 ms 18856 KiB
test_0050.txt AC 1205 ms 21700 KiB
test_0051.txt AC 1035 ms 17476 KiB
test_0052.txt AC 1297 ms 20320 KiB
test_0053.txt AC 1138 ms 19656 KiB
test_0054.txt AC 1098 ms 17608 KiB
test_0055.txt AC 1085 ms 18944 KiB
test_0056.txt AC 1003 ms 15528 KiB
test_0057.txt AC 1009 ms 17244 KiB
test_0058.txt AC 1164 ms 19008 KiB
test_0059.txt AC 1193 ms 20756 KiB
test_0060.txt AC 1174 ms 17224 KiB
test_0061.txt AC 1055 ms 18016 KiB
test_0062.txt AC 1077 ms 18112 KiB
test_0063.txt AC 1160 ms 18568 KiB
test_0064.txt AC 1149 ms 18756 KiB
test_0065.txt AC 1022 ms 16940 KiB
test_0066.txt AC 1068 ms 17988 KiB
test_0067.txt AC 1003 ms 12972 KiB
test_0068.txt AC 1155 ms 18472 KiB
test_0069.txt AC 977 ms 15556 KiB
test_0070.txt AC 1059 ms 17244 KiB
test_0071.txt AC 1076 ms 16836 KiB
test_0072.txt AC 1225 ms 21056 KiB
test_0073.txt AC 1219 ms 16964 KiB
test_0074.txt AC 1036 ms 16620 KiB
test_0075.txt AC 1170 ms 18888 KiB
test_0076.txt AC 1051 ms 17324 KiB
test_0077.txt AC 1104 ms 17416 KiB
test_0078.txt AC 1091 ms 16300 KiB
test_0079.txt AC 1113 ms 19628 KiB
test_0080.txt AC 923 ms 14784 KiB
test_0081.txt AC 1142 ms 19276 KiB
test_0082.txt AC 979 ms 15892 KiB
test_0083.txt AC 1022 ms 16096 KiB
test_0084.txt AC 989 ms 15764 KiB
test_0085.txt AC 1054 ms 17288 KiB
test_0086.txt AC 1204 ms 21032 KiB
test_0087.txt AC 1089 ms 18628 KiB
test_0088.txt AC 1080 ms 19552 KiB
test_0089.txt AC 1033 ms 16864 KiB
test_0090.txt AC 1051 ms 17352 KiB
test_0091.txt AC 1083 ms 18396 KiB
test_0092.txt AC 1056 ms 17348 KiB
test_0093.txt AC 1091 ms 16968 KiB
test_0094.txt AC 1080 ms 17736 KiB
test_0095.txt AC 1104 ms 18312 KiB
test_0096.txt AC 1158 ms 20424 KiB
test_0097.txt AC 1122 ms 18880 KiB
test_0098.txt AC 1192 ms 20556 KiB
test_0099.txt AC 1001 ms 16028 KiB
test_0100.txt AC 1209 ms 19012 KiB
test_0101.txt AC 1053 ms 16992 KiB
test_0102.txt AC 1128 ms 19164 KiB
test_0103.txt AC 1070 ms 18540 KiB
test_0104.txt AC 944 ms 14120 KiB
test_0105.txt AC 961 ms 15764 KiB
test_0106.txt AC 1176 ms 19732 KiB
test_0107.txt AC 1140 ms 18056 KiB
test_0108.txt AC 1126 ms 19084 KiB
test_0109.txt AC 987 ms 15112 KiB
test_0110.txt AC 1036 ms 16192 KiB
test_0111.txt AC 1187 ms 21852 KiB
test_0112.txt AC 1098 ms 18628 KiB
test_0113.txt AC 1207 ms 19628 KiB
test_0114.txt AC 1236 ms 21324 KiB
test_0115.txt AC 1224 ms 18088 KiB
test_0116.txt AC 1105 ms 16068 KiB
test_0117.txt AC 1020 ms 17092 KiB
test_0118.txt AC 1098 ms 18124 KiB
test_0119.txt AC 1179 ms 20832 KiB
test_0120.txt AC 1086 ms 18344 KiB
test_0121.txt AC 1157 ms 20960 KiB
test_0122.txt AC 1121 ms 18012 KiB
test_0123.txt AC 1442 ms 19780 KiB
test_0124.txt AC 1089 ms 18092 KiB
test_0125.txt AC 1197 ms 21472 KiB
test_0126.txt AC 1089 ms 18636 KiB
test_0127.txt AC 1160 ms 19912 KiB
test_0128.txt AC 1083 ms 18208 KiB
test_0129.txt AC 1264 ms 20444 KiB
test_0130.txt AC 1384 ms 24540 KiB
test_0131.txt AC 1101 ms 16812 KiB
test_0132.txt AC 1108 ms 17860 KiB
test_0133.txt AC 1049 ms 17476 KiB
test_0134.txt AC 1044 ms 16936 KiB
test_0135.txt AC 1054 ms 16392 KiB
test_0136.txt AC 1046 ms 15432 KiB
test_0137.txt AC 984 ms 13076 KiB
test_0138.txt AC 1050 ms 17372 KiB
test_0139.txt AC 1113 ms 18624 KiB
test_0140.txt AC 1170 ms 20544 KiB
test_0141.txt AC 1036 ms 17216 KiB
test_0142.txt AC 988 ms 16556 KiB
test_0143.txt AC 1234 ms 22596 KiB
test_0144.txt AC 1051 ms 17176 KiB
test_0145.txt AC 1139 ms 17116 KiB
test_0146.txt AC 1188 ms 20416 KiB
test_0147.txt AC 940 ms 14532 KiB
test_0148.txt AC 1103 ms 18372 KiB
test_0149.txt AC 1062 ms 17348 KiB