absi2011's Blog & Daily Life.

全新的开始       我要省选翻盘       I wanna AK in 高考\化学       自此,生无可恋
Codeforces Round #343 (Div. 2 Only)
[恢复状态] 愚人节大赛April Fools Day Contest 2016

[恢复状态] TCO 2016 1A

absi2011 posted @ Mar 27, 2016 01:48:32 AM in 网上比赛 with tags tc 图论 小高考 TCO , 408 阅读

道理我都懂..

然而它就是炸了啊

250

给你个时钟,问你交换时针分针后是几点

Tip:在3:30的时候时针依旧指在3上......

我这个sb输出了00:35..

然而答案是12:35..

嗯..

代码(炸掉的)如下:(好的随手改改即可了)

#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<string>
#include<time.h>
#include<math.h>
#include<memory>
#include<vector>
#include<bitset>
#include<fstream>
#include<stdio.h>
#include<utility>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
struct EllysTimeMachine
{
    string getTime(string time)
    {
        int x1=time[0]*10+time[1];
        int x2=time[3]*10+time[4];
        x1-=48*11;
        x2-=48*11;
        x2/=5;
        swap(x1,x2);
        x2*=5;
        string c;
        c+='0'+x1/10;
        c+='0'+x1%10;
        c+=':';
        c+='0'+x2/10;
        c+='0'+x2%10;
        return c;
    }
};
#ifdef absi2011
int main()
{
    //freopen("input.txt","r",stdin);
   // freopen("output.txt","w",stdout);
    EllysTimeMachine a;
    string b;
    cin>>b;
    
    system("pause");
    return 0;
}
#endif

500

给你n只袜子和它们的型号,你要配出至少m对,使得这m对之间尺码差的最大值最小

直接二分,代码如下:

#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<string>
#include<time.h>
#include<math.h>
#include<memory>
#include<vector>
#include<bitset>
#include<fstream>
#include<stdio.h>
#include<utility>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int a[1005];
int n;
bool check(int x,int y)
{
    int i;
    int sum=0;
    for (i=1;i<n;i++)
    {
        if (a[i]-a[i-1]<=x)
        {
            sum++;
            i++;
        }
    }
    return sum>=y;
}
struct EllysSocks
{
    int getDifference(vector<int> s,int p)
    {
        sort(s.begin(),s.end());
        n=s.size();
        int i;
        for (i=0;i<s.size();i++)
        {
            a[i]=s[i];
        }
        int l=0,r=1000000000;
        for (;l<=r;)
        {
            int mid=(l+r)/2;
            if (check(mid,p)) r=mid-1; else l=mid+1;
        }
        return l;
    }
};
#ifdef absi2011
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    
    return 0;
}
#endif

1000

给你一颗树,你可以从点x直接到它的任意祖先或子树内任意点;一开始你在0号点;你要在n步内从1到n分别访问一遍求访问方案(如果多个字典序最小)(就是说不许再到0了)

不会做....可能没有奇怪的字典序限制会好做很多

最终代码也毫无意义..

#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<string>
#include<time.h>
#include<math.h>
#include<memory>
#include<vector>
#include<bitset>
#include<fstream>
#include<stdio.h>
#include<utility>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int father[205];
int mins[205];
int used[205];
vector<int> v[205];
vector<int> ans;
int f=0;
void dfs1(int x)
{
    int i;
    mins[x]=x;
    if (used[x]) mins[x]=99999;
    for (i=0;i<v[x].size();i++)
    {
        dfs1(v[x][i]);
        mins[x]=min(mins[x],mins[v[x][i]]);
    }
}
void dfs2(int x)
{
    if (f!=0) return; 
    if (v[x].size()>2)
    {
        ans.clear();
        f=2;
        return;
    }
    if (v[x].size()==0)
    {
        if (!used[x])
        {
            ans.push_back(x);
            used[x]=true;
            f=1;
        }
    }
    if (v[x].size()==1)
    {
        if (x==mins[x])
        {
            ans.push_back(x);
            used[x]=true;
            f=1;
        }
        dfs2(v[x][0]);
    }
    if (v[x].size()==2)
    {
        if (mins[v[x][0]]>mins[v[x][1]]) swap(v[x][0],v[x][1]);
        for (;;)
        {
            f=0;
            dfs1(v[x][0]);
            dfs2(v[x][0]);
            if (f!=1) break;
        }
        if (f==0)
        {
            if (x!=0)
            {
                ans.push_back(x);
                used[x]=true;
            }
        }
        if (f==2) return;
        for (;;)
        {
            f=0;
            dfs1(v[x][1]);
            dfs2(v[x][1]);
            if (f!=1) break;
        }
    }
}
struct EllysTree
{
    vector<int> getMoves(vector<int> a)
    {
        int i;
        for (i=0;i<a.size();i++)
        {
            father[i+1]=a[i];
            v[father[i+1]].push_back(i+1);
        }
        used[0]=true;
        for (;;)
        {
            f=0;
            dfs1(0);
            dfs2(0);
            if (f!=1) break;
        }
        vector<int> empty;
        if (f==2) return empty;
        return ans;
    }
};
#ifdef absi2011
int a[25]={9, 13, 7, 9, 8, 14, 14, 0, 6, 9, 2, 2, 5, 5, 7,-1};
int main()
{
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    vector<int> b;
    int i;
    for (i=0;a[i]!=-1;i++)
    {
        b.push_back(a[i]);
    }
    EllysTree a;
    vector<int> c=a.getMoves(b);
    for (i=0;i<c.size();i++)
    {
        printf("%d ",c[i]);
    }
    system("pause"); 
    return 0;
}
#endif

challenge掉一个人,+1;-1 得分25分

最后rank 365大滚粗,果然状态需要恢复....

反正晋级了 Rating应该已经不能看了

Rating: 1516 --> 1500


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter