• Educational Codeforces Round 84 (Rated for Div. 2)


    原题链接

    题外话

    被教育了,读题不认真,明明能四题的(靠),竟然打不过jy,很烦

    A

    A题意

    给你n,m(m是奇数的数量)问你是否可以使用m个奇数(不相同的)构成n

    A思路

    自己上来以为是判断奇偶就死了
    其实还有点其他的东西,比如k个互不相同的奇数最小就是k*k(记录一下)

    A代码

    #include <bits/stdc++.h>
    #include <ext/pb_ds/assoc_container.hpp>
    #include <ext/pb_ds/tree_policy.hpp>
    #define iinf 0x3f3f3f3f
    #define linf (1ll<<60)
    #define eps 1e-8
    #define maxn 1000010
    #define maxe 1000010
    #define cl(x) memset(x,0,sizeof(x))
    #define rep(i,a,b) for(i=a;i<=b;i++)
    #define drep(i,a,b) for(i=a;i>=b;i--)
    #define em(x) emplace(x)
    #define emb(x) emplace_back(x)
    #define emf(x) emplace_front(x)
    #define fi first
    #define se second
    #define de(x) cerr<<#x<<" = "<<x<<endl
    #define __i __int128
    using namespace std;
    using namespace __gnu_pbds;
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef pair<ll,ll> pll; 
    
    ll read(ll x=0)
    {
        ll c, f(1);
        for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
        for(;isdigit(c);c=getchar())x=x*10+c-0x30;
        return f*x;
    }
    ll n , k ;
    int ar[1000010];
    int  br[100010];
    ll res =0 ;
    
    int main()
    {
      	int n;cin >>n;
      	while (n--){
      		int a, b;cin>>a>>b;
      		int num =0 ;
      		if(a%2 == b%2 && b <= sqrt(a)){
      			cout<<"Yes"<<endl;
    			  continue ;	
    		  }
    		
    		else  cout<<"NO"<<endl;
    	  }
        return 0;
    }
    

    B

    题意

    题面挺长的,其实就是一个简单的模拟,问题就是让你给国王的女儿分配王子,不能分配的就optimal,不然就imporve(自己一开始以为是二分图。。有点尴尬)

    思路

    判断每个公主,是否有一个王子对应, 没有的话,就可以improve , 不然就是optimal
    注意,只能添加一次

    代码

    #include <bits/stdc++.h>
    #include <ext/pb_ds/assoc_container.hpp>
    #include <ext/pb_ds/tree_policy.hpp>
    #define iinf 0x3f3f3f3f
    #define linf (1ll<<60)
    #define eps 1e-8
    #define maxn 1000010
    #define maxe 1000010
    #define cl(x) memset(x,0,sizeof(x))
    #define rep(i,a,b) for(i=a;i<=b;i++)
    #define drep(i,a,b) for(i=a;i>=b;i--)
    #define em(x) emplace(x)
    #define emb(x) emplace_back(x)
    #define emf(x) emplace_front(x)
    #define fi first
    #define se second
    #define de(x) cerr<<#x<<" = "<<x<<endl
    #define __i __int128
    using namespace std;
    using namespace __gnu_pbds;
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef pair<ll,ll> pll; 
    
    ll read(ll x=0)
    {
        ll c, f(1);
        for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
        for(;isdigit(c);c=getchar())x=x*10+c-0x30;
        return f*x;
    }
    ll n , k ;
    int ar[1000010];
    int  br[100010];
    ll res =0 ;
    
    int main()
    {
    	    ios::sync_with_stdio(0);
        cin.tie(0), cout.tie(0);
      	int t;cin >>t;
      	while(t--){
      		int n;cin >>n;
      		map<int ,int >mp;
    //  		memset(ar, 0 ,sizeof ar);
      		int flag=0 ;int pos =0;
      		for(int i=0 ;i<n;i++){
      			int f =0 ;
      			cin >>ar[i];
      			for(int j=0;j<ar[i];j++){
      				int b; cin >>b;
      				if(mp[b]==0 &&f==0 ){
      					mp[b] ++ ;
      					f =1 ;
    				  }
    			  }
    			if(!f){
    				flag =1 ;
    				pos =i+1 ;
    			}
    		  }
    		if(!flag ){
    			cout<<"OPTIMAL"<<endl;
    			continue ;
    		}
    		cout<<"IMPROVE"<<endl;
    		for(int i=1;i<=n;i++)if(!mp[i]){
    			cout<<pos <<" "<< i <<endl;
    			break; 
    		}
    	  }
        return 0;
    }
    

    C

    题意

    就是问你是否有一种方案,可以让所有的芯片至少通过一次给定的位置

    思路

    **注意, 最长不能够超过2mn,然后,每个位置可以放置多个芯片,* 这意味着,你可以先把所有芯片放到(1,1),然后蛇形排列,就好了

    代码

    #include <bits/stdc++.h>
    #include <ext/pb_ds/assoc_container.hpp>
    #include <ext/pb_ds/tree_policy.hpp>
    #define iinf 0x3f3f3f3f
    #define linf (1ll<<60)
    #define eps 1e-8
    #define maxn 1000010
    #define maxe 1000010
    #define cl(x) memset(x,0,sizeof(x))
    #define rep(i,a,n) for (int i=a;i<n;i++)
    #define per(i,a,n) for (int i=n-1;i>=a;i--)
    #define pb push_back
    #define mp make_pair
    #define all(x) (x).begin(),(x).end()
    #define fi first
    #define se second
    #define SZ(x) ((int)(x).size())
    #define drep(i,a,b) for(i=a;i>=b;i--)
    #define em(x) emplace(x)
    #define emb(x) emplace_back(x)
    #define emf(x) emplace_front(x)
    #define fi first
    #define se second
    #define de(x) cerr<<#x<<" = "<<x<<endl
    #define __i __int128
    using namespace std;
    using namespace __gnu_pbds;
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef pair<ll,ll> pll; 
    
    ll read(ll x=0)
    {
        ll c, f(1);
        for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
        for(;isdigit(c);c=getchar())x=x*10+c-0x30;
        return f*x;
    }
    ll n , k, m ;
    string v;
    int main()
    {
    	    ios::sync_with_stdio(0);
        cin.tie(0), cout.tie(0);
    //    int i ;
      	n =read(), m = read() ;
      	rep(i,0,m-1)v.pb('L') ;
      	rep(i,0,n-1)v.pb('U');
      	rep(i,0,n){
      		if(i%2==0)rep(j,0,m-1)v.pb('R');
      		else rep(j,0,m-1)v.pb('L');
      		v.pb('D');
    	  }
    	cout<<SZ(v)<<endl;
    	printf("%s
    ", v.c_str());
        return 0;
    }
    

    E

    题意

    让你在【1,(10^n)-1】里面找出所有n个连续相同的数字块的数量(要从n到1的块都输出)

    思路

    其实就是一个规律题,推一推公式,如果不会的,就上oeis上面蒙蒙数据,看看能否成立啥的那就先打表,发现其实就是(ar[i]= ar[i-1]*10+81*10^{i-1})
    主要要取余一下,其他的就没什么了

    代码

    #include <bits/stdc++.h>
    #include <ext/pb_ds/assoc_container.hpp>
    #include <ext/pb_ds/tree_policy.hpp>
    #define iinf 0x3f3f3f3f
    #define linf (1ll<<60)
    #define eps 1e-8
    #define maxn 1000010
    #define maxe 1000010
    #define cl(x) memset(x,0,sizeof(x))
    #define rep(i,a,n) for (int i=a;i<n;i++)
    #define per(i,a,n) for (int i=n-1;i>=a;i--)
    #define pb push_back
    #define mp make_pair
    #define all(x) (x).begin(),(x).end()
    #define fi first
    #define se second
    #define SZ(x) ((int)(x).size())
    #define drep(i,a,b) for(i=a;i>=b;i--)
    #define em(x) emplace(x)
    #define emb(x) emplace_back(x)
    #define emf(x) emplace_front(x)
    #define fi first
    #define se second
    #define de(x) cerr<<#x<<" = "<<x<<endl
    #define __i __int128
    using namespace std;
    using namespace __gnu_pbds;
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef pair<ll,ll> pll; 
    
    ll read(ll x=0)
    {
        ll c, f(1);
        for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
        for(;isdigit(c);c=getchar())x=x*10+c-0x30;
        return f*x;
    }
    ll n , k, m ;
    ll ar[500010];
    int main()
    {
    	    ios::sync_with_stdio(0);
        cin.tie(0), cout.tie(0);
    //    int i ;
      	n =read();
      	ar[1]=10;
      	ar[2]=180;
      	ll cnt =810 ;
      	for(int i=3;i<=n;i++){
      		ar[i] = ar[i-1]*10%998244353+cnt;
      		ar[i]%=998244353;
      		cnt *=10;
      		cnt%=998244353;
    	  }
    	for(int i=n;i>=1;i--)cout<<ar[i]<<" "; cout<<endl;
        return 0;
    }
    
  • 相关阅读:
    ksoap2 android 调用WebService
    Android App自动更新解决方案(DownloadManager)
    Android 网络加载通用Loading
    工具类ToastUtil 避免在子线程中使用抛异常 "Can't create handler inside thread that has not called Looper.prepare()"
    Material 风格的搜索框MaterialSearchView的使用
    Android集成极光推送
    第三十天
    第二十九天
    第二十八天
    第二十七天
  • 原文地址:https://www.cnblogs.com/gaohaoy/p/12563438.html
Copyright © 2020-2023  润新知