zoukankan      html  css  js  c++  java
  • Codeforces Round #671 Div. 2

    A. Digit Game

    给定一串数字,A和B轮流选数,A只能选奇数位的,B只能选偶数位的,最后一个数是奇数A胜,否则B胜。

    判断数字长度的奇偶性,判断即可。

    因为我菜的一批导致没有搞定取非的优先级FST了 我爬爬爬爬爬
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include<vector>
    #include<iomanip>
    #include<map>
    #include<queue>
    #include<stack>
    #define lc(i) (2*i+1)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> P;
    int n;
    stack<long long>up, down;
    ll dataa[1000000 + 5];
    ll dp[1000000 + 5];
    int main() {
    	cin >> n;
    	while (n--) {
    		ll m;
    		cin >> m;
    		string tmp;
    		cin >> tmp;
    		if (m & 1) {
    			int flag = 2;
    			for (int i = 0; i < m; i += 2) {
    				if ((tmp[i] - '0') % 2)flag = 1;
    			}
    			cout << flag << '
    ';
    		}
    		else {
    			int flag = 1;
    			for (int i = 1; i < m; i += 2) {
    				if (!((tmp[i] - '0') % 2))flag = 2;
    			}
    			cout << flag << '
    ';
    		}
    	}
    }
    
    
    

    B. Stairs

    这鬼东西看题看了半年。。

    其实就是规定宽为1,1+2,1+2+4。。。。。等为一个好的阶梯

    然后问给定一定的空格,最多能做多少个不重复的阶梯

    观察数据,1e18时结果为30,我们只要处理到前30个这种阶梯各自需要多少方格,然后从小到大贪心即可。

    开ll正好不会爆

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include<vector>
    #include<iomanip>
    #include<map>
    #include<queue>
    #include<stack>
    #define lc(i) (2*i+1)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> P;
    int n;
    stack<long long>up,down;
    ll dataa[31];
    int main() {
    	cin >> n;
    	ll tmp = 1,pow=2;
    	for (int i = 0; i < 31; i++) {
    		dataa[i] = tmp * (tmp + 1) / 2;
    		tmp += pow;
    		pow *= 2;
    	}
    	while (n--) {
    		ll m;
    		cin >> m;
    		ll ans = 0;
    		while (m>0)
    		{
    			if (m - dataa[ans] >= 0) { m -= dataa[ans]; ans++; }
    			else break;
    		}
    		cout << ans<<'
    ';
    	}
    }
    
    

    C. Killjoy

    给定最初被感染账号的rating,和其他所有账号的rating,只要有正常账号rating和被感染的一致,就会被感染,出了最出被感染的账号外,其他账号都可以一起改变,且每次所有账号改变之和为0,问最少要多少次这种改变,所有账号都被感染。

    有以下几种情况

    • 大家都和被感染账号rating一致,直接0次
    • 和的平均值==初始rating,让所有账号都变为初始rating,1次
    • 存在1个或以上直接被感染的账号,那么我们可以这样改变:将其他未感染账号rating改为和初始账号一致,1次
    • 其他情况,先改变让一个账号被感染,之后同上一个情况,2次
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include<vector>
    #include<iomanip>
    #include<map>
    #include<queue>
    #include<stack>
    #define lc(i) (2*i+1)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> P;
    int n;
    stack<long long>up,down;
    ll dataa[300000] = {};
    void solve() {
    	ll x,n;
    	cin >> n >> x;
    	ll sum=0, flag1 = 0, flag2 = 1;;
    	for (int i = 0; i < n; i++) {
    		scanf("%lld", &dataa[i]);
    		sum += dataa[i];
    		if (dataa[i] == x)flag1 = 1;
    		else flag2 = 0;
    	}
    	if (flag2 == 1)cout << 0 << '
    ';
    	else if (flag1 == 1 || sum == x * n)cout << 1 << '
    ';
    	else cout << 2 << "
    ";
    }
    int main() {
    	cin >> n;
    	
    	while (n--) {
    		solve();
    	}
    }
    

    D1&D2. Sage's Birthday

    当一个商品小于左边和右边的价格,我们就能购买它,问如何排列商品能让我们能买的最多

    排序,从小到大放偶数位置,剩下从小到大放奇数位置,D2加个左右相等的特判即可

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include<vector>
    #include<iomanip>
    #include<map>
    #include<queue>
    #include<stack>
    #define lc(i) (2*i+1)
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> P;
    int n;
    stack<long long>up,down;
    ll dataa[300000] = {};
    ll ans[300000] = {};
    int main() {
    	cin >> n;
    	for (int i = 1; i <= n; i++)scanf("%lld", &dataa[i]);
    	sort(dataa+1, dataa+1 + n);
    	ll anss = 0;
    	for (int i = 1,j=1; i <= ((n&1)?n+1:n); i += 2,j++) {
    		ans[i+1] = dataa[j];
    		ans[i] = dataa[j+n/2];
    	}
    	for (int i = 2; i < n; i++)if (ans[i - 1] > ans[i] && ans[i + 1] > ans[i])anss++;
    	cout << anss << endl;
    	//ans[n] = dataa[n];
    	for (int i = 1; i <= n; i++)cout << ans[i] << ' ';
    }
    
    
    K-ON!!
  • 相关阅读:
    Java第十次作业-房地产;学生成绩计算
    找回感觉之模拟房地产首付计算
    软件工程第四次作业—结对项目
    【作业】需要改进的用户体验二三则
    项目互测测试方式及报告
    [ASE]项目介绍及项目跟进——TANK BATTLE·INFINITE
    Hello World!
    [ASE]sprint3 总结 & sprint4计划
    [ASE][Daily Scrum]12.15
    [ASE][Daily Scrum]12.12
  • 原文地址:https://www.cnblogs.com/pophirasawa/p/13702937.html
Copyright © 2011-2022 走看看