Codeforces #395 Div2

来源:互联网 发布:周笔畅淘宝店服装 编辑:程序博客网 时间:2024/05/20 11:23

A. Taymyr is calling you

Accepted

#include<iostream>using namespace std;int gcd(int a, int b) {    if(!b) return a;    else return gcd(b, a % b);}int main() {    int n, m, z;    cin >> n >> m >> z;    int t = n*m/gcd(n, m);    cout << z / t << endl;    return 0;}

B. Timofey and cubes

Accepted

#include<iostream>using namespace std;int main(){    int n,i,t;    cin >> n;    int a[n+1];    for(i=1;i<=n;i++)        cin >> a[i];    for(i=1;i<=n/2;i++)    {        if(i%2==1)        {            t=a[i];            a[i]=a[n+1-i];            a[n+1-i]=t;        }    }    for(i=1;i<=n;i++)        cout << a[i] <<' ';}

C. Timofey and a tree

Accepted

思路:遍历所有连着不同颜色的点的边,若这些边有一个公共结点,则为YES,否则为NO。

#include<iostream>#include<vector>#include<cstring>using namespace std;const int maxn = 100000 + 10;struct Node {    int v1, v2;    Node(int x = -1, int y = -1): v1(x), v2(y) {}};vector<Node> edge;int n, c[maxn], f[maxn];int main() {    cin >> n;    int s, t, cnt = 0;    for(int i = 0; i < n-1; i++) {        cin >> s >> t;        edge.push_back(Node(s-1, t-1));    }    for(int i = 0; i < n; i++) cin >> c[i];    memset(f, 0, sizeof(f));    for(int i = 0; i < n-1; i++) {        Node& u = edge[i];        if(c[u.v1] == c[u.v2]) continue;        cnt++;        f[u.v1]++; f[u.v2]++;        //if(f[u.v1] != cnt && f[u.v2] != cnt) { cout << "NO" << endl; return 0; }    }    for(int i = 0; i < n; i++)        if(f[i] == cnt) { cout << "YES" << endl << i+1 << endl; return 0; }    cout << "NO" << endl;    return 0;}

D. Timofey and rectangles

Accepted
思路:以右下方点的坐标(x, y)代表矩形,如果两个矩阵接触,那么x和x1, y和y1的奇偶不能同时相同,因为各个边的长度是奇数。取contrapositive, 奇偶性都相同,那么一定不接触。所以只要保证每种奇偶性一种颜色即可。奇奇、偶偶、奇偶、偶奇,四种颜色刚好够。此问题必然有解!

#include<iostream>using namespace std;int main() {    int n, x0, y0, x1, y1;    cin >> n;    cout << "YES" << endl;    for(int i = 0; i < n; i++) {        cin >> x0 >> y0 >> x1 >> y1;        cout << 2*abs(x0 % 2) + abs(y0 % 2) + 1 << endl;    }    return 0;}

E. Timofey and remoduling

Wrong answer on test 8

#include<iostream>#include<algorithm>using namespace std;int main(){    int n,start=1,i,val[2],cnt[2],loc[2];    unsigned long long int m;    cin >> m >> n;    unsigned long long int a[n+1],d[n+1];    for(i=1;i<=n;i++)        cin >> a[i];    sort(a+1,a+n+1);    for(i=1;i<=n-1;i++)        d[i]=a[i+1]-a[i];    d[n]=(m+a[1]-a[n])%m;    val[0]=d[1];    val[1]=-1;    cnt[0]=1;    cnt[1]=0;    loc[0]=1;    loc[1]=0;    for(i=2;i<=n;i++)    {        if(d[i]==val[0])            cnt[0]++;        else if(val[1]==-1)                {                    val[1]=d[i];                    cnt[1]++;                    loc[1]=i;                }                else if(val[1]==d[i])                        cnt[1]++;                        else                        {                            val[0]=-1;                            break;                        }    }    if(val[0]==-1)        cout <<-1;    else if(cnt[0]>1&&cnt[1]>1)            cout <<-1;        else if(cnt[0]>1||cnt[1]==0) cout << a[1+loc[1]%n] << ' ' << val[0];                else cout << a[1+loc[0]%n ]<< ' ' << val[1];}
1 0
原创粉丝点击