Codeforces Round #426 (Div. 2)

A:v < ^ > v,变换顺序是这样的,给你任意两个字符,问第一个字符,再给你这两个字符之间间隔的字符数,问你通过什么样的方式使得第一个字符变到第二个字符。若是顺时针就是输出cw,逆时针就是ccw,顺时针逆时针都可以的话输出undefined比如:

^ >

1

输出cw

思路:看题解

#include<stdio.h>
#include<iostream>
using namespace std;
char a,c;
int m;
char b[10];
int main()
{
b[0]='v';
b[1]='<';
b[2]='^';
b[3]='>';
b[4]='\0';
cin>>a>>c;
cin>>m;
int flag=1;
int cnt=0,ans=0;
for(int i=0; i<4; i++)
{
if(a==b[i])
cnt=i;
if(c==b[i])
ans=i;
}
int x=(ans+4-cnt)%4;
int y=(4-x)%4;
//printf("%d %d\n",x,y);
if(m%4==x)
flag=2;
if(m%4==y)
flag=1;
if(x==y)
flag=3;
if(flag==2)
printf("cw\n");
else if(flag==1)

printf("ccw\n");
else if(flag==3)
printf("undefined\n");
return 0;
}

B:

题意:给你一个序列,表示每个时候应该开哪个门(用A~Z表示),每个门一旦开启之后必须直到后面不用的时候才关闭(门一旦开启就需要管理员来守),再给你k个管理员,每个管理员在同一时刻只能守一个门,问你需不需要添加管理员,若需要就输出Yes,否则就是No

思路:见代码

#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;

struct letter
{
int r;
int l;
} arr[30];
char str[1000050];

int main()
{
int n, k;
char tmp;

while(cin >> n >> k)
{
for(int i=0; i<26; i++)
arr[i].r = -1, arr[i].l = -1;
getchar();
int flag = 0;
int ans = 0;
for(int i=0; i<n; i++)
{
cin >> str[i];
if(arr[ str[i] - 'A'].r == -1)
arr[ str[i] - 'A'].r = i;
if(arr[ str[i] - 'A'].l == -1)
arr[ str[i] - 'A'].l = i;
else if(i >= arr[ str[i] - 'A'].l)
arr[ str[i] - 'A'].l = i;
printf("arr %d %d %d\n", str[i] - 'A', arr[ str[i] - 'A'].r, arr[ str[i] - 'A'].l);
}
puts(str);
for(int i=0; i<n; i++)
{
if(arr[ str[i] - 'A' ].r == i)
ans++;
if(ans > k)
{
flag = 1;
break;
}
if(arr[ str[i] - 'A' ].l == i)
ans--;
printf("ans = %d\n", ans);
if(ans > k)
{
flag = 1;
break;
}
}
if(flag)
printf("YES\n");
else
printf("NO\n");

}
return 0;
}

C:

题意:Slastyona 和 Pushok 一开始分数都为1,Slastyona 和 Pushok 各自报一个数(数字大的那个人赢)赢得那个人的分数乘k^2(k是报的数字大的那个数),输了的那个人分数乘k。然后给你两个Slastyona 和 Pushok 最后的得分,问有没有情况结果导致Slastyona 和 Pushok 分数是这样的,如果有就是YES,没有就是NO

思路:我一拿着就直接乘起来开三方了,错在精度的问题,交GNU C++14没有过,最后交GNU C++11过了的,也可以二分这题。

#include<stdio.h>
#include<math.h>
#include<algorithm>
#define ll long long
using namespace std;
const long double N=1e-8;
int n;
ll a,b;
int main()
{
while(~scanf("%d",&n))
{
while(n--)
{
scanf("%I64d%I64d",&a,&b);
ll x=a*b;
long double y=powl(x*1.0,1.0/3.0);
int z=pow(x,1.0/3.0);
if(fabs(y-1)>=N)
z++;
// printf("%.14lf %d\n",y,z);
if(fabs(y-z)<N)
{
if(a%z==0&&b%z==0||a%z==0&&z%b==0||z%a==0&&b%z==0||z%a==0&&z%b==0)
printf("Yes\n");
else
printf("No\n");
}
else
{
printf("No\n");
}
}
}
return 0;
}

posted on 2017-07-31 10:28  _Jammy  阅读(78)  评论(0编辑  收藏  举报