• cf1191 解题报告


    cf1191 解题报告

    A-简单模拟

    脑内算出来让计算机输出

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    int main() {
    	int x;
    	cin>>x;
    	if(x%4==0) return puts("1 A"),0;
    	if(x%4==1) return puts("0 A"),0;
    	if(x%4==2) return puts("1 B"),0;
    	if(x%4==3) return puts("2 A"),0;
    	return 0;
    }
    

    B-细节模拟

    脑内算出来让计算机输出。wa了几发、、、

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    int n;
    string a[4];
    int main() {
    	cin>>a[1]>>a[2]>>a[3];
    	sort(a+1,a+1+3);
    	if(a[1]==a[2]&&a[2]==a[3]) return puts("0"),0;
    	if(a[1][1]==a[2][1] and a[1][1]==a[3][1]) {
    		int x=a[1][0]-'0',y=a[2][0]-'0',z=a[3][0]-'0';
    		int b[44];
    		b[1]=x,b[2]=y,b[3]=z;
    		sort(b+1,b+1+3);
    		if(b[1]+1==b[2]&&b[2]+1==b[3]) return puts("0"),0;	
    	}
    	int x=a[1][0]-'0',y=a[2][0]-'0',z=a[3][0]-'0';
    	if(a[1][1]==a[2][1])
    		if(abs(x-y)<=2) return puts("1"),0;	
    	if(a[1][1]==a[3][1])
    		if(abs(x-z)<=2) return puts("1"),0;	
    	if(a[2][1]==a[3][1])
    		if(abs(y-z)<=2) return puts("1"),0;
    	puts("2");
    	return 0;
    }
    

    C-模拟

    每次暴力模拟就行,(a[l]-l+1)%k为当前在块内的初始位置。

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=1e5+7;
    int n,a[N],m,k;
    signed main() {
    	cin>>n>>m>>k;
    	for(int i=1;i<=m;++i) cin>>a[i];
    	sort(a+1,a+1+m);
    	int ans=0,l=1;
    	while(l<=m) {
    		int j=(a[l]-l+1)%k;
    		if(!j) j=k;
    		while(j+(a[l+1]-a[l])<=k&&l<=m) l++,j+=a[l]-a[l-1];
    		l++,ans++;
    	}
    	cout<<ans;
    	return 0;
    }
    

    D-博弈

    一条线上有n个点,点点之间不能占同一个位置。
    先把开始就输的结果判掉。
    之后的局面就要是0~n-1的排列了。
    博弈是真的不会o(╥﹏╥)o

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=1e5+7;
    int n,a[N],sum;
    signed main() {
    	cin>>n;
    	for(int i=1;i<=n;++i) cin>>a[i],sum+=a[i];
    	sort(a+1,a+1+n);
    	int flag=0;
    	for(int i=1;i<n;++i)
    		if(a[i]==a[i+1])
    			if(a[i]==0||(i>1&&a[i-1]+1==a[i])||++flag>1)
    				return puts("cslnb"),0;
    	int las=sum-n*(n-1)/2;
    	if(las&1) puts("sjfnb");
    	else puts("cslnb");
    	return 0;
    }
    

    E-博弈

    咕咕咕

    F-数据结构

    离散化后,枚举a的位置。
    然后考虑一行的贡献。
    把此行及其以上的点压缩到数轴上。
    贡献显然产生在有此行的点的区间内,计算出来区间个数就是此行的贡献。
    因为不在此行的话,上面已经统计过了。
    具体统计的话,就是总的区间-不包含的小区间。
    统计用BIT就OK。

    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int N=2e5+7;
    int n,b[N],lsh[2][N];
    struct node {
    	int first,second;
    	bool operator < (const node &b) const {
    		return first==b.first?second<b.second:first>b.first;
    	}
    }a[N];
    namespace BIT {
    	int sum[N];
    	int lowbit(int x) {return x&-x;}
    	void add(int x) {for(int i=x;i<=n;i+=lowbit(i)) sum[i]++;}
    	int query(int x) {int ans=0;for(int i=x;i>=1;i-=lowbit(i)) ans+=sum[i];return ans;}
    }
    int main() {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i) {
    		scanf("%d%d",&a[i].second,&a[i].first);
    		lsh[0][i]=a[i].first;
    		lsh[1][i]=a[i].second;
    	}
    	sort(lsh[0]+1,lsh[0]+1+n);
    	sort(lsh[1]+1,lsh[1]+1+n);
    	int len[2];
    	len[0]=unique(lsh[0]+1,lsh[0]+1+n)-lsh[0]-1;
    	len[1]=unique(lsh[1]+1,lsh[1]+1+n)-lsh[1]-1;
    	for(int i=1;i<=n;++i) {
    		a[i].first=lower_bound(lsh[0]+1,lsh[0]+1+len[0],a[i].first)-lsh[0];
    		a[i].second=lower_bound(lsh[1]+1,lsh[1]+1+len[1],a[i].second)-lsh[1];
    	}
    	sort(a+1,a+1+n);
    	ll ans=0;
    	for(int i=len[0],now=0,tmp=0,gs=0;i>=1;--i) {
    		int las=0;
    		while(a[now+1].first==i&&now+1<=n) {
    			now++;
    			tmp=BIT::query(a[now].second-1)-BIT::query(las);
    			ans-=1LL*tmp*(tmp+1)/2;
    			if(!b[a[now].second]) {
    				BIT::add(a[now].second);
    				b[a[now].second]=1;
    				gs++;
    			}
    			las=a[now].second;
    		}
    		tmp=gs-BIT::query(las);
    		ans-=1LL*tmp*(tmp+1)/2;
    		ans+=1LL*gs*(gs+1)/2;
    	}
    	cout<<ans<<"
    ";
    	return 0;
    }
    
    
  • 相关阅读:
    Does the C standard guarantee buffers are not touched past their null terminator?
    Why does the C# compiler translate this != comparison as if it were a > comparison?
    Vim settings file on Windows
    你的团队需要一套工具指南
    精华阅读第 10 期 |解开阿尔法狗(AlphaGo)人工智能的画皮
    时序列数据库武斗大会之TSDB名录 Part 2
    如何用 ANTLR 4 实现自己的脚本语言?
    HTTP/2 对 Web 性能的影响(下)
    如何使用 Apache ab 以及 OneAPM 进行压力测试?
    你所不知道的黑客工具之 EK 篇
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/11181999.html
Copyright © 2020-2023  润新知