Codeforces Round #762

A

i和n/2+i是否相等

		cin>>s;
		int  ok = 1;
		n = s.size();
		if(n&1) ok = 0;
		for(int i = 0,j = n/2;i<n/2;i++,j++)
		if(s[i]!=s[j])
			ok = 0;
		ok?puts("YES"):puts("No");

B

2阶到sqrt(n),3阶暴力求,只有当x为z*z才会重合

                 cin>>n; int res = sqrt(n);
		int i = 2;
		while(pow(i,3)<=n)
		{
			if(sqrt(i)-(int)sqrt(i)!=0) res++;
			i++;
		}
		cout<<res<<endl;

C

模拟,不符合break掉(写了半天)

		t = "";
		cin>>a>>s; int ok = 1;
		c = to_string(a);
		int i = 0,j = 0;
		reverse(all(s));
		reverse(all(c));
		while(i<c.size())
		{
			if(s[j]<c[i])
			{
				if(j+1<s.size())
				{
					int ss = (s[j]-'0')+(s[j+1]-'0')*10-(c[i]-'0');
					if(ss<0||ss>9) {ok = 0;break;}
					else t+=to_string(ss);
					j++;
				}
				else {ok = 0;break;}
			}
			else t+=(s[j]-c[i]+'0');
			i++,j++;
		}
		
		while(j!=s.size())
		{
			t+=s[j++];
		}
		
		if(t[t.size()-1]=='0') t.pop_back();
		reverse(all(t));
		
		if(!ok) cout<<-1<<'\n';
		else{
			b = 0;
			i = 0;
			while(i<t.size()) b = b*10+t[i++] - '0';
			cout<<b<<endl;

E

桶排序加栈(单调)随取随用,不足-1;

   int n;
    std::cin >> n;
    
    std::vector<int> cnt(n + 1);
    for (int i = 0; i < n; i++) {
        int x;
        std::cin >> x;
        cnt[x]++;
    }
    
    ll ans = 0;
    std::vector<int> s;
    for (int v = 0; v <= n; v++) {
        if (ans == -1) {
            std::cout << "-1" << " \n"[v == n];
            continue;
        }
        std::cout << ans + cnt[v] << " \n"[v == n];
        
        while (cnt[v]--) {
            s.push_back(v);
        }
        
        if (s.empty()) {
            ans = -1;
        } else {
            ans += v - s.back();
            s.pop_back();
        }
    }

待补···

posted @ 2021-12-21 15:10  InsiApple  阅读(21)  评论(0编辑  收藏  举报