备孕百度之星-9月15日

猎人杀

#include<iostream>
#include<cstring>

using namespace std;
typedef long long ll;
inline ll read(){
    ll x=0;char ch;bool f=true;
    for(ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')f^=f;
    for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
    return x;
}
int main( )
{    
    int T = read();
    while(T-- > 0){
        int t;
        int n = read();
        int bk = 0;//已经寄了的 
        int lang = -1;
        int tag[n];
        memset(tag, 0, sizeof(tag));//1表示寄了
        for(int i = 0; i < n; i++) {
            t = read();
            if(t == 1) lang = i;
        }  
        int kill[n][n];
        for(int i = 0; i < n; i++)
            for(int j = 0; j < n; j++){
                kill[i][j] = read();
                kill[i][j]--; 
            } 
        int cur_l = 0;            
        //狼杀人
        while(tag[kill[lang][cur_l]] == 1) cur_l++;//找个活人 
        tag[kill[lang][cur_l]] = 1;
//        cout << "狼杀" << kill[lang][cur_l] + 1 << endl; 
        
        //死的猎人杀人 
        t = kill[lang][cur_l];
        bk++; 
        while((n-bk) > 2){
            //判断狼是否死
            if(tag[lang] == 1) break;//狼自杀 
            int in = 0; 
            while(tag[kill[t][in]] == 1) in++;//找个活人 
            tag[kill[t][in]] = 1;
            
//            cout << "猎人杀" << kill[t][in] + 1 << endl; 
            t = kill[t][in];
            if(tag[lang] == 1) break;//狼寄 
            bk++;
        }
        if(tag[lang] == 0){
            cout << "langren" << endl;
        }else{
            cout << "lieren" << endl;
        }
    } 
    return 0;
}

区别于前一篇博文发的,这个使用了快速读,一开始没有使用快速读,在马蹄集AC,换了HUD,结果就是卡常,换成快速读之后快了8倍左右,以后涉及大量读写的要用快速读写

二分

看不懂题目啊,又有知识点要恶补了

毒瘤数据结构题

一开始思路是红黑树的map,可以nlogn,看了题解发现维护两个0,O(N)

#include<iostream>
#include<cstring>

using namespace std;
typedef long long ll;
int nums[5000005];

inline ll read(){
    ll x=0;char ch;bool f=true;
    for(ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')f^=f;
    for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
    return x;
}
//快写
void write(int x) {
     if(x<0) putchar('-'),x=-x;
     if(x>9) write(x/10);
     putchar(x%10+'0');
}
struct FastIO//输入挂
{
    static const int S=200;
    int wpos;
    char wbuf[S];
    FastIO():wpos(0){}
    inline int xchar()
    {
        static char buf[S];
        static int len=0,pos=0;
        if(pos==len) pos=0,len=fread(buf,1,S,stdin);
        if(pos==len) exit(0);
        return buf[pos++];
    }
    inline int read()
    {
        int s=1,c=xchar(),x=0;
        while(c<=32) c=xchar();
        if(c=='-') s=-1,c=xchar();
        for(;'0'<=c&&c<='9';c=xchar()) x=x*10+c-'0';
        return x*s;
    }
    ~FastIO()
    {
        if(wpos) fwrite(wbuf,1,wpos,stdout),wpos=0;
    }
}io;
int main( )
{	
	memset(nums, 0, sizeof(nums));
	int T = io.read();
	int n = T;
	int a,b;
	int x = 1, y = 2;//x在前 
	while(T-- > 0){
		a = io.read();
		b = io.read();
		if(a == 1){
			nums[b] = 1;
			if(nums[x] == 1)
				while(x <= n && nums[x] == 1)x++;
			if(x == y || nums[y] == 1){
				y++;
				while(y <= n && nums[y] == 1) y++;
			}
		}else{
			if(b == x){
				write(y);
			}else{
				write(x);
			}
			putchar('\n');
		}
	} 
    return 0;
}


hud真的太卡常了,换了最高效的快读才通过。然后通过马蹄集测了一下两种快读的效率,就差一点。。

alt

全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务