ICPC Japan Domestic 2008
ICPC2008年の問題.3時間で5問しか解けなかった…orz.
AOJ 1153-Equal Total Scores
問題概要
(省略)
解法
全てのカードの交換を試してみる.
実装(C++)
#include <vector> #include <iostream> using namespace std; #define REP(i,x) for(int i=0;i<(int)(x);i++) int main(){ int n,m; for(;cin>>n>>m;){ if(n==0&&m==0)break; vector<int> taro(n); int s_t=0; REP(i,n){ cin>>taro[i]; s_t+=taro[i]; } vector<int> hanako(m); int s_h=0; REP(i,m){ cin>>hanako[i]; s_h+=hanako[i]; } int sum=0x10000000; int ri=-2,rj=-2; REP(i,n)REP(j,m){ if(s_t-taro[i]+hanako[j]==s_h-hanako[j]+taro[i]){ if(sum>taro[i]+hanako[j]){ ri=i;rj=j; sum=taro[i]+hanako[j]; } } } if(ri==-2){ cout<<-1<<endl;continue; } cout<<taro[ri]<<" "<<hanako[rj]<<endl; } return 0; }
AOJ 1154-Monday-Saturday Prime Factors
問題概要
(省略)
解法
素数を全て求める.
単純にSqrt(N)までの数で試し割りする方法でも十分間に合う.
実装(C++)
#include <vector> #include <iostream> #include <set> using namespace std; #define REP(i,x) for(int i=0;i<(int)(x);i++) #define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();i++) int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1}; int check(int x){ bool ok=true; for(int i=2;i*i<=x;i++){ if((i%7)!=1&&(i%7)!=6)continue; if(x%i==0){ ok=false; break; } } return ok; } int main(){ vector<int> prime; for(int i=2;i<=300000;i++){ if((i%7)!=1&&(i%7)!=6)continue; if(check(i)){ prime.push_back(i); } } int n; for(;cin>>n;){ if(n==1)break; set<int> res; cout<<n<<":"; REP(i,prime.size()){ if(prime[i]>n)break; if(n%prime[i]==0){ //n/=prime[i]; res.insert(prime[i]); } } FOR(it,res){ cout<<" "<<(*it); } cout<<endl; } return 0; }