SRM558, ARC009, CF146
週末のコンテスト3連発。
- TC
easyに時間かけすぎってそれ一番言われてるから(時間あったらmedはとけた)
210位。屑。でもレートは上がる。
rate:1330->1438(+108)
- ARC
Dむずい。というか10^11くらいの解法しか思いつかない。
CはOEISした(屑)
14位。日本のコンテストだから普通かなぁ。
rateがいつの間にかついてて、1836だった。実力より高い。まあたくさん出てるし仕方ないね。
- CF
Aはとりあえず確実に通してhackゲーだと思ったらすでにとられてて絶望した。
Bわからないなぁってなってて、でも最終的にわかって通せたので満足。B19行でかけるのにむずいとかWJMZBMRやばすぎ。
C~Eは無理。
結局58位。わーい。
rate:1843->1949(+106) 初めての黄色!!!
以下ソース
- TC easy
#include<stdio.h> #include "stdafx.h" #include<vector> #include<algorithm> #include<string> #include<iostream> #include<set> using namespace std; //class Stamp //{ //public: int getMinimumCost(string str,int lcost,int ccost) { int mini=1000000000; for(int i=1;i<=str.size();i++) { int sum=i*lcost; int dp[51]; fill(dp,dp+51,1000000000); dp[0]=0; bool han=true; for(int j=1;j<=str.size();j++) { set<char>se; if(j<i) { continue; } int gen=0; for(int k=j-1;k>=0;k--) { if(str[k]!='*') { se.insert(str[k]); } if(se.size()>1) { gen=k+1; break; } } if(j-gen<i) { continue; } if(se.empty()) { dp[j]=((j-1)/i+1)*ccost; } for(int k=j-i;k>=gen;k--) { dp[j]=min(dp[j],dp[k]+((j-k-1)/i+1)*ccost); } } mini=min(mini,sum+dp[str.size()]); } return mini; }/* };*/ int main() { string zan; cin>>zan; int a,b; scanf("%d%d",&a,&b); printf("%d\n",getMinimumCost(zan,a,b)); }
- ARC
A
#include<stdio.h> #include "stdafx.h" int main() { int num; scanf("%d",&num); int sum=0; for(int i=0;i<num;i++) { int a,b; scanf("%d%d",&a,&b); sum+=a*b; } printf("%d\n",sum*21/20); }
B
#include<stdio.h> #include "stdafx.h" #include<vector> #include<algorithm> #include<string> #include<iostream> using namespace std; typedef long long ll; int dat[10]; ll hen(string str) { ll ret=0; for(int i=0;i<str.size();i++) { ret*=10; ret+=dat[str[i]-'0']; } return ret; } typedef pair<ll,string>pii; int main() { for(int i=0;i<10;i++) { int zan; scanf("%d",&zan); dat[zan]=i; } vector<pii>vec; int num; scanf("%d",&num); for(int i=0;i<num;i++) { string zan; cin>>zan; vec.push_back(make_pair(hen(zan),zan)); } sort(vec.begin(),vec.end()); for(int i=0;i<num;i++) { cout<<vec[i].second<<endl; } }
C
#include<stdio.h> #include "stdafx.h" #include<vector> #include<algorithm> using namespace std; typedef long long ll; ll mod=1777777777; ll po(ll a,ll b) { vector<int>vec; for(;;) { if(b==0) { break; } vec.push_back(b%2); b/=2; } reverse(vec.begin(),vec.end()); ll ret=1; for(int i=0;i<vec.size();i++) { ret*=ret; ret%=mod; if(vec[i]) { ret*=a; ret%=mod; } } return ret; } ll inv(ll a) { return po(a,mod-2); } ll kai[1000001]; void calc() { kai[0]=1; for(int i=1;i<=1000000;i++) { kai[i]=kai[i-1]*i; kai[i]%=mod; } } ll com(ll a,ll b) { ll ret=kai[a]; ret*=inv(kai[b]); ret%=mod; ret*=inv(kai[a-b]); ret%=mod; return ret; } ll dp[1000000]; int main() { calc(); ll a,b; scanf("%lld%lld",&a,&b); dp[0]=1; dp[1]=0; ll ret=1; for(ll i=a-b+1;i<=a;i++) { ret*=(i%mod); ret%=mod; } for(int i=1;i<=b;i++) { ret*=inv(i); ret%=mod; } for(ll i=2;i<=b;i++) { dp[i]=((i-1)*(dp[i-1]+dp[i-2]))%mod; } printf("%lld\n",(ret*dp[b])%mod); }
- CF
A
#include<stdio.h> #include"stdafx.h" #include<vector> #include<algorithm> using namespace std; typedef long long ll; ll gcd(ll a,ll b) { for(;;) { if(a<b) { swap(a,b); } if(a%b==0) { return b; } a%=b; } } int main() { ll a=10; int b=1000000,c=10000000; ll p=b/a*c; printf("%lld\n",p); ll num; scanf("%I64d",&num); ll maxi=1; ll low=1; for(ll i=num-2;i>=1;i--) { if(gcd(num,i)==1) { low=i; break; } } for(ll i=low;i<=num;i++) { for(ll j=low;j<=num;j++) { for(ll k=low;k<=num;k++) { ll zan=i*j/gcd(i,j); maxi=max(maxi,zan*k/gcd(zan,k)); } } } printf("%I64d\n",maxi); }
B
#include<stdio.h> #include "stdafx.h" #include<vector> #include<algorithm> using namespace std; double dp[100001]; int main() { int num; scanf("%d",&num); double ans=0.0; for(int i=0;i<num;i++) { double zan; scanf("%lf",&zan); dp[i+1]=(dp[i]+1.0)*zan; ans+=(dp[i]*2+1.0)*zan; } printf("%.10lf\n",ans); }
CF-B短すぎってそれ一番言われてるから