A. The Useless Toy:http://codeforces.com/contest/834/problem/A
题目意思:给你两个字符,还有一个n,问你旋转n次以后从字符a变成b,是顺时针还是逆时针还是无法确定。
思路: 直接把c=n%4,然后搞出a->b需要顺时针转x下, 那么4-x就是逆时针需要转多少下了,如果顺逆时间是一样的 ,肯定无法判断,如果等于其中一个那该顺时针顺时针,该逆时针逆时针,如果两个时间都不等于c那就是不确定了。 还有一点如果一开始a=b,那就不需要判断肯定是确定了,如果n=0了话,肯定也是不确定了。
代码:
1 //Author: xiaowuga 2 #include <iostream> 3 #include <algorithm> 4 #include <set> 5 #include <vector> 6 #include <queue> 7 #include <cmath> 8 #include <cstring> 9 #include <cstdio> 10 #include <ctime> 11 #include <map> 12 #include <bitset> 13 #include <cctype> 14 #define maxx INT_MAX 15 #define minn INT_MIN 16 #define inf 0x3f3f3f3f 17 #define mem(s,ch) memset(s,ch,sizeof(s)) 18 const long long N=100; 19 using namespace std; 20 typedef long long LL; 21 map<char,int>q; 22 int main() { 23 ios::sync_with_stdio(false);cin.tie(0); 24 char s[10]={'^','>','v','<','^','>','v','<'}; 25 q['^']=0;q['>']=1;q['v']=2;q['<']=3; 26 char a,b,t; 27 int n; 28 cin>>a>>b>>n; 29 if(n==0) {cout<<"undefined"<<endl;return 0;} 30 if(a==b) {cout<<"undefined"<<endl;return 0;} 31 int p1; 32 for(int i=q[a];i<8;i++){ 33 if(s[i]==b){ p1=i-q[a];break;} 34 } 35 int c=n%4; 36 if(c==p1||c==4-p1){ 37 if(c==p1&&c==4-p1) cout<<"undefined"<<endl; 38 else if(c==p1) cout<<"cw"<<endl; 39 else cout<<"ccw"<<endl; 40 } 41 return 0; 42 } 43
B. The Festive Evening:http://codeforces.com/contest/834/problem/B
题目意思:一个城堡里面有26个门,分别用26个大写字母表示。现在不同的宾客用不同大写字母表示,相应字母的客人从相应的门进入,客人的到来按照字符串的顺序。在一个某一个字母的大门第一个客人来到最后一个客人来之前这个门都需要一个士兵把守,但是现在城堡只有k个士兵,问是否存在士兵不够用的前情况。
思路:先把字符串从头到尾扫一遍看一下,每一个字母最后一个出现的位置在哪里把他记录一下。然后再从头到尾扫一遍,开一个vis数组记录第一个客人是否已经来了。如果来了之前没有出现过的字母ct++,如果这个当前位置已经是这个颜色的最后一个位置ct--,去判断这个过程中ct的最大值和k比较,就可以得到答案。
代码:
1 //Author: xiaowuga 2 #include <iostream> 3 #include <algorithm> 4 #include <set> 5 #include <vector> 6 #include <queue> 7 #include <cmath> 8 #include <cstring> 9 #include <cstdio> 10 #include <ctime> 11 #include <map> 12 #include <bitset> 13 #include <cctype> 14 #define maxx INT_MAX 15 #define minn INT_MIN 16 #define inf 0x3f3f3f3f 17 #define mem(s,ch) memset(s,ch,sizeof(s)) 18 #define da cout<<da<<endl 19 #define uoutput(a,i,l,r) for(int i=l;i<r;i++) if(i==l) cout<<a[i];else cout<<" "<<a[i];cout<<endl; 20 #define doutput(a,i,l,r) for(int i=r-1;i>=0;i--) if(i==r-1) cout<<a[i];else cout<<" "<<a[i];cout<<endl; 21 const long long N=26; 22 using namespace std; 23 typedef long long LL; 24 int vis[N]={0}; 25 int en[N]={0}; 26 int main() { 27 ios::sync_with_stdio(false);cin.tie(0); 28 int n,k; 29 cin>>n>>k; 30 char q[1000000+10]; 31 cin>>q; 32 for(int i=0;i<n;i++){ 33 char t=q[i]-'A'; 34 en[t]=i; 35 } 36 int ct=0,mm=minn; 37 for(int i=0;i<n;i++){ 38 char t=q[i]-'A'; 39 if(!vis[t]) {ct++;vis[t]=1;} 40 mm=max(mm,ct); 41 if(i==en[t]) ct--; 42 } 43 if(k<mm) cout<<"YES"<<endl; 44 else cout<<"NO"<<endl; 45 return 0; 46 }
C. The Meaningless Game:http://codeforces.com/contest/834/problem/C
题目意思:每次给两个数a,b问是否满足他的游戏规律所得出来的结果。游戏规律就是每一轮出一个k,赢的一方乘k^2,输的一方乘k,然后你说会否可以找出一个系列的k可以满足a,b这个游戏结果。
思路:数学题,这个很明显就是a*b=(k1*k2*k3*k4*k4*k5*k6*k7…………kn)^3,自己xjb推一下就会发现,我做不出来的问题在于不知道如何判断一个数是一个立方数。
做法:直接把LL x=floor(pow(a*b,1.0/3)+0.5),+0.5是四舍五入的套路以后记住就好了,这样算就可以开三方,然后反向验证x*x*x是否等于a*b就解决了,还有一个cbrt()函数是直接开三方的之前不知道,现在学会了,输入量比较多,所以用了一个究极输入挂。
代码:
1 //Author: xiaowuga 2 #include <iostream> 3 #include <algorithm> 4 #include <set> 5 #include <vector> 6 #include <queue> 7 #include <cmath> 8 #include <cstring> 9 #include <cstdio> 10 #include <ctime> 11 #include <map> 12 #include <bitset> 13 #include <cctype> 14 #define maxx INT_MAX 15 #define minn INT_MIN 16 #define inf 0x3f3f3f3f 17 #define mem(s,ch) memset(s,ch,sizeof(s)) 18 #define da cout<<da<<endl 19 #define uoutput(a,i,l,r) for(int i=l;i<r;i++) if(i==l) cout<<a[i];else cout<<" "<<a[i];cout<<endl; 20 #define doutput(a,i,l,r) for(int i=r-1;i>=0;i--) if(i==r-1) cout<<a[i];else cout<<" "<<a[i];cout<<endl; 21 const long long N=1000; 22 using namespace std; 23 typedef long long LL; 24 const int MAXBUF = 10000; 25 char buf[MAXBUF], *ps = buf, *pe = buf+1; 26 27 inline void rnext() 28 { 29 if(++ps == pe) 30 pe = (ps = buf)+fread(buf,sizeof(char),sizeof(buf)/sizeof(char),stdin); 31 } 32 33 template <class T> 34 inline bool readin(T &ans) 35 { 36 ans = 0; 37 T f = 1; 38 if(ps == pe) return false;//EOF 39 do{ 40 rnext(); 41 if('-' == *ps) f = -1; 42 }while(!isdigit(*ps) && ps != pe); 43 if(ps == pe) return false;//EOF 44 do 45 { 46 ans = (ans<<1)+(ans<<3)+*ps-48; 47 rnext(); 48 }while(isdigit(*ps) && ps != pe); 49 ans *= f; 50 return true; 51 } 52 int main() { 53 ios::sync_with_stdio(false);cin.tie(0); 54 LL a,b; 55 LL n; 56 readin(n); 57 while(n--){ 58 readin(a);readin(b); 59 LL t=a*b; 60 LL x=floor(pow(1.0*t,1.0/3)+0.5); 61 if(x*x*x!=t||a%x||b%x) puts("NO"); 62 else puts("YES"); 63 } 64 return 0; 65 }