春合宿erお疲れ様でした〜
鬼畜問ばっかで色々とTwitterでは檻の外のJOIerが闇の軍団と化してたらしいですね
AOJ 2204
やるだけ
#include <cstdio> #include <climits> #include <algorithm> #define inf INT_MAX/2; using namespace std; int main() { int n; while (scanf("%d",&n)) { if (!n) break; int M=0, m=inf; for (int i=0; i<n; i++) { int sum=0; for (int j=0; j<5; j++) { int s; scanf("%d",&s); sum+=s; } M=max(M,sum); m=min(m,sum); } printf("%d %d\n",M,m); } }
LoveCalculator
やるだけ
class LoveCalculator { public: void count(int *cnt, string name) { fill(cnt, cnt+4, 0); for (int i=0; i<name.length(); i++) { if (name[i]=='L') cnt[0]++; if (name[i]=='O') cnt[1]++; if (name[i]=='V') cnt[2]++; if (name[i]=='E') cnt[3]++; } } string findBoy( string girl, vector <string> boys ) { int cnt[4]; count(cnt, girl); int mp=-1; string res=""; sort(boys.begin(), boys.end()); for (int i=0; i<boys.size(); i++) { int temp[4]; count(temp, boys[i]); for (int j=0; j<4; j++) temp[j]+=cnt[j]; int r=((temp[0]+temp[1])*(temp[0]+temp[2])*(temp[0]+temp[3])*(temp[1]+temp[2])*(temp[1]+temp[3])*(temp[2]+temp[3]))%100; if (mp<r) { mp=r; res=boys[i]; } } return res; } };
DesignCalculator
問題文が・・・
class DesignCalendar { public: int gcd(int a, int b) { return b?gcd(b,a%b):a; } int shortestPeriod( int dayLength, int yearLength ) { return dayLength/gcd(dayLength, yearLength); } };
Teaching
全列挙が間に合うとは思わなかった
class Teaching { public: int count( vector <string> words, int K ) { if (K<5) return 0; int sz=words.size(); int cnt[sz]; memset(cnt, 0, sizeof(cnt)); for (int i=0; i<sz; i++) { int len=words[i].length(); for (int j=0; j<len; j++) { cnt[i]|=(1<<(words[i][j]-'a')); } } int res=0; for (int i=0; i < 1<<26 ; i++) { if (!(i&(1<<('a'-'a')))) continue; if (!(i&(1<<('c'-'a')))) continue; if (!(i&(1<<('i'-'a')))) continue; if (!(i&(1<<('n'-'a')))) continue; if (!(i&(1<<('t'-'a')))) continue; int c=0; if (__builtin_popcount(i)==K) { for (int j=0; j<sz; j++) { if ((i&cnt[j])==cnt[j]) c++; } res=max(res, c); } } return res; } };
AOJ 2101
やるだけ
#include <cstdio> #include <algorithm> using namespace std; typedef long long ll; int main() { int n; while (scanf("%d",&n)) { if (!n) break; ll sum=1; if (n==1) { puts("deficient number"); continue; } for (int i=2; i*i<=n; i++) { if (n%i==0) { if (i!=n/i) sum+=n/i+i; else sum+=i; } } if (sum>n) puts("abundant number"); else if (sum<n) puts("deficient number"); else puts("perfect number"); } }
AOJ 2281
やるだけ
#include <cstdio> #include <iostream> using namespace std; int a[101], b[101]; int main() { int n; while (scanf("%d",&n)) { if (!n) break; string str; cin>>str; for (int i=0; i<n; i++) { scanf("%d%d",&a[i],&b[i]); a[i]--; b[i]--; } for (int i=n-1; i>=0; i--) { int diff=(b[i]-a[i])%26; char c1, c2; if (str[a[i]]+diff>'z') c1=str[a[i]]+diff-26; else c1=str[a[i]]+diff; if (str[b[i]]+diff>'z') c2=str[b[i]]+diff-26; else c2=str[b[i]]+diff; str[a[i]]=c2; str[b[i]]=c1; } cout<<str<<endl; } }
2273
戦略ゲーこわい
#include <cstdio> #include <iostream> #include <set> using namespace std; string play="aaaaaaaaaa", str; int main() { set<string> used; int i=0; while (true) { bool end=false; for (int j=1; j<8; j++) { for (int k=0; k<26; k++) { play[j]='a'+k; if (used.find(play)==used.end()) { cout<<"?"<<play<<endl; fflush(stdout); used.insert(play); cin>>str; if (used.find(str)!=used.end()||str[0]!='a') { end=true; break; } used.insert(str); play[0]=str[str.length()-1]; } } if (end) break; } if (end) { puts("!OUT"); break; } } }
AOJ 2272
やるだけ
#include <cstdio> #include <iostream> #include <climits> #include <vector> #include <queue> #include <map> #include <algorithm> #include <functional> #define inf INT_MAX/2 using namespace std; typedef pair<int, int> P; struct edge { int to, cost; }; int h, w; vector<edge> G[2500]; int d[2500]; string field[50]; int dijkstra() { fill(d, d+2500, inf); d[0]=0; priority_queue<P, vector<P>, greater<P> > que; que.push(P(0,0)); while (!que.empty()) { P p=que.top(); que.pop(); int v=p.second; if (d[v]<p.first) continue; for (int i=0; i<G[v].size(); i++) { edge e=G[v][i]; if (d[e.to]>d[v]+e.cost) { d[e.to]=d[v]+e.cost; que.push(P(d[e.to],e.to)); } } } return d[h*w-1]; } int main() { scanf("%d%d",&h,&w); for (int i=0; i<h; i++) { cin>>field[i]; } for (int i=0; i<h; i++) { for (int j=0; j<w; j++) { if (i!=h-1) { G[i*w+j].push_back((edge){(i+1)*w+j,field[i+1][j]-'0'}); } if (j!=w-1) { G[i*w+j].push_back((edge){i*w+j+1,field[i][j+1]-'0'}); } } } printf("%d\n",dijkstra()); }
まとめ
LCAとフローと強連結成分分解とSegTreeとBITと(ryが扱えるようにならなければならない