Codeforces Round #146 (Div. 2)

靠手速拿了个还可以的rank。。。不会dp依旧硬伤

A.....

A
 1 #include<iostream>
 2 #include<cstring>
 3 #include<string>
 4 using namespace std;
 5 int hash[100];
 6 int main(){
 7     string s;
 8     while(cin>>s){
 9         int cnt=0;
10         memset(hash,0,sizeof(hash));
11         for(int i=0;i<s.size();i++){
12             if(!hash[s[i]-'a'])
13                 hash[s[i]-'a']=1;
14         }
15         for(int i=0;i<26;i++)
16             if(hash[i])++cnt;
17         if((cnt&1)==0)
18             cout<<"CHAT WITH HER!"<<endl;
19         else
20             cout<<"IGNORE HIM!"<<endl;
21     }
22     return 0;
23 }

B.暴力+记忆化

B
 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<vector>
 5 #define N 1000010
 6 using namespace std;
 7 typedef long long ll;
 8 const ll mod=(1<<30);
 9 ll s[N];
10 ll cal(ll n){
11     if(s[n]!=-1)return s[n];
12     s[n]=0;
13     for(ll i=1;i*i<=n;i++)
14         if(n%i==0){
15             if(i*i==n)++s[n];
16             else s[n]+=2;
17         }
18     return s[n];
19 }
20 int main(){
21     ll a,b,c;
22   //  cout<<mod<<endl;
23     while(cin>>a>>b>>c){
24         memset(s,-1,sizeof(s));
25         ll ans=0;
26         for(ll i=1;i<=a;i++)
27             for(ll j=1;j<=b;j++)
28                 for(ll k=1;k<=c;k++){
29              //       cout<<i*j*k<<endl;
30                     ans+=cal(i*j*k);
31              //       cout<<cal(i*j*k)<<endl;;
32                     ans%=mod;
33                 }
34         cout<<ans<<endl;
35     }
36     return 0;
37 }

C.分情况讨论。相邻两个数必然互质,相邻三个数构成mod3的完全剩余系。。。

  如果n为奇数..n,n-1,n-2肯定两两互质。

  如果n是偶数,那么就不能同时选n和n-2。。。这时候能选的最大的是n-3,但是如果n是3的倍数,n和n-3又mod3同余,这样只可以选n-1,n-2,n-3。。。

  还要特判1和2

C
 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int main(){
 6     long long n;
 7     while(cin>>n){
 8         if(n==1||n==2){
 9             cout<<n<<endl;
10             continue;
11         }
12         long long ans;
13         if(n&1)ans=n*(n-1)*(n-2);
14         else if(n%3)
15             ans=n*(n-1)*(n-3);
16         else ans=(n-1)*(n-2)*(n-3);
17         cout<<ans<<endl;
18     }
19     return 0;
20 }

D.概率dp。。暂时不会。。待补充。

E.没看。。。

posted @ 2012-10-21 21:25  silver__bullet  阅读(216)  评论(0编辑  收藏  举报