• CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!)


    发现就是直线距离公式 所以排序之后 取左右两个端点就好

    #include<bits/stdc++.h>
    using namespace std;
    #define lowbit(x) x&(-x)
    #define ll long long
    const int maxn=2e5;
    int T;
    struct node{
    	int val,id;
    }a[maxn];
    bool cmp(node a,node b){
    	return a.val<b.val;
    }
    void solve(){
    	int n,x;
    	cin>>n;
    	for(int i=1;i<=n;i++)cin>>a[i].val,a[i].id=i;
    	sort(a+1,a+1+n,cmp);
    	cout<<a[1].id<<" "<<a[n].id<<endl;
    }
    int main(){
    	cin>>T;
    	while(T--)solve();
         return 0;
    }
    
    

    因为连续相减可以抵消 我们发现最终剩下的数字一定是原序列两个数字之差

    所以map乱搞一下就好

    
    #include<bits/stdc++.h>
    using namespace std;
    #define lowbit(x) x&(-x)
    #define ll long long
    const int maxn=2e5+5;
    int T;
    int a[maxn];
    map<ll,int>mp;
    void solve(){
    	int n;
    	ll k,x;
    	mp.clear();
    	cin>>n>>k;
    	for(int i=1;i<=n;i++)
    		cin>>a[i],mp[a[i]]=1;
    	for(int i=1;i<=n;i++)
    	if(mp[a[i]+k]==1){
    		cout<<"YES"<<endl;
    		return;
    	}
    	cout<<"NO"<<endl;
    }
    int main(){
    	cin>>T;
    	while(T--)solve();
         return 0;
    }
    
    

    因为是整个序列%x 所以我们先对整个序列排序 从大到小开始操作

    最终状态可以都是1 也可以都是0

    如果原序列没有1

    发现对于a[i] 我们只要%a[i] 就可以使得依次变为0

    如果原序列有1

    我们只有使得所有都变为1 所以对于a[i] 只有%(a[i]-1)

    如果排完序后有a[i]=a[i-1]+1 一定不成立

    #include<bits/stdc++.h>
    using namespace std;
    #define lowbit(x) x&(-x)
    #define ll long long
    const int maxn=2e5+5;
    int T;
    int a[maxn];
    void solve(){
    	int n;cin>>n;
    	int pd=0;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    		if(a[i]==1)pd=1;
    	}
    	if(!pd){
    		cout<<"YES"<<endl;
    		return;
    	}
    	sort(a+1,a+1+n);
    	for(int i=2;i<=n;i++)
    	if(a[i]-a[i-1]==1){
    		cout<<"NO"<<endl;
    		return;
    	}
    	cout<<"YES"<<endl;
    }
    int main(){
    	cin>>T;
    	while(T--)solve();
         return 0;
    }
    
    

    不难发现 if ( (n - dp[k]) % k = 0 ) ans = k 其中dp[k]=((1+k)×k)/2

    并且发现如果n为奇数 k=2一定是成立的

    考虑n为奇数的情况

    上面式子可以化简为n-dp[n]≡0(mod k)

    发现当k为奇数的时候满足 dp[n]为k的倍数

    所以只要找到n=mk(k为奇数)

    所以我们先对n不断的/2 最后一定会剩下一个奇数

    但是此时问题来了 如果n<dp[k]呢

    此时交换奇数和2的t次方的位置就好 但是又要保证 后面是2的t次方的倍数

    所以此时我们取 k为2的t+1次方 即可

    还要注意 两个数相乘可能超过long long 的范围 !!!特判

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef unsigned long long LL;
    
    int main()
    {
    int t;
    cin >> t;
    while(t--){
    LL n,t;
    cin >> n;t=n;
    LL k = 1;
    while(n%2 == 0){
    n/=2;
    k*=2;
    }
    if(n == 1) cout << -1 <<'\n';
    else if(n<=2e9&&(n*(n+1))/2 <= t)
    cout<<n<<endl;
    else 
    cout<<2*k<<endl;
    }	
    return 0;
    }
    
  • 相关阅读:
    Mysql中Unsigned和Zerofill数据型的使用
    laravel Excel导入导出
    saas的资料
    Mysql的row_format(fixed与dynamic)
    第七节 css3动画之transform位移
    第六节 css3动画之transform变换
    第五节 css3动画之图片说明滑入效果
    第四节 css3动画之transition
    第三节 css3动画之透明
    第二节 css3动画之圆角
  • 原文地址:https://www.cnblogs.com/wzxbeliever/p/16167951.html
Copyright © 2020-2023  润新知