精進だから精進なんだよ
3069
結局蟻本
#include <cstdio> #include <algorithm> using namespace std; int main() { int R, n; while (scanf("%d%d", &R, &n)) { if (R == -1 && n == -1) break; int army[n]; for (int i=0; i<n; i++) scanf("%d", &army[i]); sort(army, army+n); int res = 0, i = 0; while (i < n) { int s = army[i++]; while (i<n&&army[i]<=s+R) i++; int p = army[i-1]; while (i<n&&army[i]<=p+R) i++; res++; } printf("%d\n", res); } }
3253
蟻本。long long注意
#include <cstdio> #include <vector> #include <algorithm> #include <queue> #include <functional> using namespace std; typedef long long ll; int main() { int n; scanf("%d", &n); int f[n]; for (int i=0; i<n; i++) scanf("%d", &f[i]); ll res = 0; priority_queue<int, vector<int>, greater<int> > tree; for (int i=0; i<n; i++) tree.push(f[i]); while (tree.size() > 1) { int fir = tree.top(); tree.pop(); int sec = tree.top(); tree.pop(); int sum = fir + sec; res += sum; tree.push(sum); } printf("%lld\n", res); }
2431
蟻本コードも自分で書いたコードも通らない緊急事態
コメントアウトしてないのが正解。
// #include <cstdio> // #include <vector> // #include <queue> // #include <algorithm> // using namespace std; // struct dt { // int a, b; // }; // class dtComp { // public: // bool operator() (const dt& x, const dt& y) { // return x.a < y.b; // } // }; // int main() { // int n, l, p; scanf("%d", &n); // dt dts[n]; // for (int i=n-1; i>=0; i--) scanf("%d%d", &dts[i].a, &dts[i].b); // scanf("%d%d", &l, &p); // for (int i=0; i<n; i++) dts[i].a = l - dts[i].a; // sort(dts, dts+n, dtComp()); // int npos = 0, res = 0, i = 0; // priority_queue<int> que; // while (1) { // for (;i<n;i++) { // if (dts[i].a > npos + p) break; // que.push(dts[i].b); // } // npos += p; // if (npos >= l) break; // else if (que.empty()) break; // p = que.top(); que.pop(); // res++; // } // if (npos < l) printf("-1\n"); // else printf("%d\n", res); // } // int main() { // int n, l, p; scanf("%d", &n); // dt dts[n+1]; // for (int i=n-1; i>=0; i--) scanf("%d%d", &dts[i].a, &dts[i].b); // scanf("%d%d", &l, &p); // for (int i=0; i<n; i++) dts[i].a = l - dts[i].a; // int npos = 0, res = 0, tank = p; // dts[n].a = l; dts[n].b = 0; // priority_queue<int> que; // for (int i=0; i<n+1; i++) { // int d = dts[i].a - npos; // while (tank - d < 0) { // if (que.empty()) { // puts("-1"); // return 0; // } // tank += que.top(); que.pop(); // res++; // } // tank -= d; // npos = dts[i].a; // que.push(dts[i].b); // } // printf("%d\n", res); // } #include <cstdio> #include <vector> #include <queue> #include <algorithm> using namespace std; int main() { int N; vector<pair<int, int> > v; scanf("%d\n", &N); for(int i = 0; i < N; i++){ int x, y; scanf("%d %d\n", &x, &y); v.push_back(make_pair(x, y)); } int L, P; scanf("%d %d\n", &L, &P); sort(v.begin(), v.end()); vector<pair<int, int> >::reverse_iterator rit = v.rbegin(); priority_queue<int> pq; int cnt = 0; while(L){ if(L == (*rit).first){ pq.push((*rit).second); rit++; } if(P == 0){ if(pq.empty()){ cnt = -1; break; } P += pq.top(); pq.pop(); cnt++; } P--;L--; } printf("%d\n", cnt); return 0; }
3047
USACO Bronze part1
leap yearの数は端折らずちゃんと数えて挙げなきゃね
#include <cstdio> typedef long long ll; int mon[] = {31,28,31,30,31,30,31,31,30,31,30,31}; const char* day[] = {"monday","tuesday","wednesday", "thursday","friday","saturday","sunday"}; bool isleap(int y) { if (y % 400 == 0) return true; else if (y % 100 == 0) return false; else if (y % 4 == 0) return true; else return false; } int main() { int y, m, d; scanf("%d%d%d", &y, &m, &d); int normal = 0, leap; for (int i=0; i<12; i++) normal += mon[i]; leap = normal + 1; int cnt = 0; for (int i=1800; i<y; i++) if (isleap(i)) cnt++; ll dist = cnt*leap+(y-1800-cnt)*normal; for (int i=0; i<m-1; i++) { if (i == 1&&isleap(y)) { dist += mon[i] + 1; } else { dist += mon[i]; } } dist += d; int res = (1 + dist % 7) % 7; printf("%s\n", day[res]); }
3048
USACO Bronze part2
例外処理として素数に1を加えなきゃならない・・・
#include <cstdio> #include <algorithm> using namespace std; int main() { int isprime[20001],psize=0; fill(isprime, isprime+20001, 1); isprime[0]=isprime[1]=0; for (int i=2; i<20001; i++) { if (isprime[i]) { for (int j=i+i; j<20001; j+=i) isprime[j]=0; psize++; } } int prime[++psize], npos=1; prime[0]=1; for (int i=2; i<20001; i++) { if (isprime[i]) prime[npos++]=i; } int n; scanf("%d",&n); int num[n],m=0; for (int i=0; i<n; i++) { scanf("%d",&num[i]); m=max(m,num[i]); } int p; for (p=0; p<psize; p++) if (prime[p]>=m) break; int res = 0; for (;p>=0;p--) { for (int i=0; i<n; i++) if (num[i]%prime[p]==0) { res=num[i]; break; } if (res) break; } printf("%d\n",res); }