Codeforces Round #426 (Div. 2)

A题

分析:水题,模拟一下顺时针和逆时针情况就好了

 1 #include "iostream"
 2 #include "cstdio"
 3 #include "cstring"
 4 #include "string"
 5 #include "vector"
 6 using namespace std;
 7 char ch1,ch2;
 8 long long n;
 9 char cw[]={'v','<','^','>'};
10 char ccw[]={'v','>','^','<'};
11 int main()
12 {
13     ch1=getchar();
14     getchar();
15     ch2=getchar();
16     getchar();
17     cin>>n;
18     int res=n%(long long)4;
19     int flag=0;
20     int pos1,pos2;
21     for(int i=0;i<4;i++){
22         if(cw[i]==ch1){
23             pos1=i; break;
24         }
25     }
26     int num1,num2;
27     num1=(pos1+res)%4;
28     if(cw[num1]==ch2){
29         flag=1;
30     }
31     for(int i=0;i<4;i++){
32         if(ccw[i]==ch1){
33             pos2=i; break;
34         }
35     }
36     num2=(pos2+res)%4;
37     if(ccw[num2]==ch2){
38         if(flag){
39             flag=3;
40         }else{
41             flag=2;
42         }
43     }
44     if(flag==1)  cout<<"cw"<<endl;
45     else if(flag==2)  cout<<"ccw"<<endl;
46     else  cout<<"undefined"<<endl;
47 }
View Code

B题

分析:水题,注意统计一下任意时刻开着的门有几个

 1 #include "iostream"
 2 #include "cstdio"
 3 #include "cstring"
 4 #include "string"
 5 using namespace std;
 6 const int maxn=500;
 7 int n,k;
 8 string s;
 9 int vis[maxn];
10 int dp[maxn];
11 int main()
12 {
13     cin>>n>>k;
14     getchar();
15     cin>>s;
16     for(int i=0;i<n;i++){
17         vis[s[i]]++;
18     }
19     int flag=0;
20     for(int i=0;i<n;i++){
21         if(dp[s[i]-'A']==0){
22             dp[s[i]-'A']=1;
23         }
24         int cnt=0;
25         for(int j=0;j<26;j++){
26             if(dp[j])
27                 cnt++;
28         }
29         vis[s[i]]--;
30         if(vis[s[i]]==0)
31             dp[s[i]-'A']=0;
32         if(cnt>k){
33             flag=1; break;
34         }
35     }
36     if(flag)   cout<<"YES"<<endl;
37     else  cout<<"NO"<<endl;
38 }
View Code

C题

分析:我们把式子变形一下就知道a*b必定是一个数的三次方,然后a和b都能够被那个数整除即可,可以二分或者pow

 1 #include "iostream"
 2 #include "cstdio"
 3 #include "cstring"
 4 #include "string"
 5 #include "cmath"
 6 using namespace std;
 7 long long res;
 8 int T;
 9 bool judge(long long x){
10     if(x*x*x<=res)
11         return true;
12     else
13         return false;
14 }
15 int main()
16 {
17     scanf("%d",&T);
18     while(T--){
19         long long a,b;
20         scanf("%lld%lld",&a,&b);
21         res=a*b;
22         long long t=pow(res,1.0/3);
23         while(t*t*t<res){
24             t++;
25         }
26         int flag=0;
27         if(t*t*t==res&&(a%t==0)&&(b%t==0)){
28             flag=1;
29         }
30         if(flag){
31             printf("Yes\n");
32         }else{
33             printf("No\n");
34         }
35     }
36     return 0;
37 }
POW版
 1 #include "iostream"
 2 #include "cstdio"
 3 #include "cstring"
 4 #include "string"
 5 #include "algorithm"
 6 using namespace std;
 7 long long a,b;
 8 int T;
 9 int main()
10 {
11     scanf("%d",&T);
12     while(T--){
13         scanf("%lld%lld",&a,&b);
14         long long res=a*b;
15         long long l=1,r=1e6;
16         int flag=0;
17         while(l<=r){
18             long long mid=(l+r)/2;
19             long long ans=mid*mid*mid;
20             if(ans==res){
21                 if(a%mid==0&&b%mid==0){
22                     flag=1; break;
23                 }else  break;
24             }else if(ans<res)  l=mid+1;
25             else   r=mid-1;
26         }
27         if(flag)  printf("Yes\n");
28         else  printf("No\n");
29     }
30 }
二分版

 

转载于:https://www.cnblogs.com/wolf940509/p/7261676.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值