Codeforces Round #316 (Div. 2) (ABC题)
2015-08-14 17:43
218 查看
A - Elections
题意:
每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利;最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序),第一位获得胜利;
求最后选举获胜者。
思路:
直接模拟即可。代码:
[code]/* * @author FreeWifi_novicer * language : C++/C */ #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<string> #include<map> #include<set> #include<vector> #include<queue> using namespace std; #define clr( x , y ) memset(x,y,sizeof(x)) #define cls( x ) memset(x,0,sizeof(x)) #define mp make_pair #define pb push_back typedef long long lint; typedef long long ll; typedef long long LL; const int maxn = 105; struct C{ int v; int no; }c[maxn][maxn]; int cnt[maxn]; bool cmp(C a , C b){ if(a.v != b.v) return a.v < b.v; return a.no > b.no; } int main(){ //freopen("input.txt","r",stdin); int n,m; while( cin >> n >> m){ cls(cnt); for(int i = 1 ; i <= m ; i++){ for(int j = 1 ; j <= n ; j++){ c[i][j].no = j; scanf("%d",&c[i][j].v); } sort(c[i]+1 , c[i]+n+1 , cmp); for(int j = 1 ; j <= n ; j++){ } cnt[c[i] .no]++; } int ans = n; int tmp = cnt ; for(int i = n ; i >= 1 ; i--){ if(tmp <= cnt[i]){ ans = i; tmp = cnt[i]; } } cout << ans << endl; } return 0; }
B - Simple Game
题意:
Misha 与 Andrew 玩游戏,两人在1~n范围内各选一个数字(可相同),然后在1~n范围内随机出一个数字x,Misha 和 Andrew 的数字减去x的绝对值较小者获胜,若一致,则 Misha 获胜,现在已知 n 与 Misha 选择的数字,求 Andrew 胜率最高(同等胜率取最小)的数字。思路:
分类讨论,只需要考虑 Misha 左右的位置即可,注意 n = 1 时的情况特判。
代码:
[code]/* * @author FreeWifi_novicer * language : C++/C */ #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<string> #include<map> #include<set> #include<vector> #include<queue> using namespace std; #define clr( x , y ) memset(x,y,sizeof(x)) #define cls( x ) memset(x,0,sizeof(x)) #define mp make_pair #define pb push_back typedef long long lint; typedef long long ll; typedef long long LL; int main(){ // freopen("input.txt","r",stdin); int m,n; while(cin >> n >> m){ if(m == 1){ if(n == 1) cout << 1 << endl; else{ cout << m+1 << endl; } continue; } if(m == n){ if(n == 1) cout << 1 << endl; else{ cout << m-1 << endl; } continue; } int ans; if(n&1){ int tmp = (n+1) / 2; if(m < tmp){ ans = m+1; } else if(m > tmp) ans = m-1; else if(m == tmp) ans = m-1; } else{ int tmp = n / 2; if(m < tmp){ ans = m+1; } else if(m > tmp) ans = m-1; else if(m == tmp) ans = m+1; } cout << ans << endl; } return 0; }
C - Replacement
题意:
输入一个含 ‘.’ 与小写英文字母的字符串。定义一种操作为: 将字符串中的 “..” 替代为 “.” ;
定义字符串的价值等于最大操作次数。
现在有 m 个询问 , 每个询问都将改变字符串指定位置上的字符为指定字符,计算询问后的字符串价值。
思路:
这题神似线段树的风格(用线段树也确实可以做。这题的关键是简化不同情况的分类讨论,我之前的想法一直是记录每一个 ‘.’ 区间的情况,然后询问时二分在哪个区间即可,结果发现写起来思路混乱毫无逻辑,又是set又是map的。。
直到在standing榜看到第二名的神牛的代码。。怒删原来代码重写了一份,简单了很多很多。
代码:
[code]/* * @author FreeWifi_novicer * language : C++/C */ #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<string> #include<map> #include<set> #include<vector> #include<queue> using namespace std; #define clr( x , y ) memset(x,y,sizeof(x)) #define cls( x ) memset(x,0,sizeof(x)) #define mp make_pair #define pb push_back typedef long long lint; typedef long long ll; typedef long long LL; int main(){ //freopen("input.txt","r",stdin); int n , m ; string s; cin >> n >> m >> s; int cnt = 0; for( int i = 1 ; i < s.length() ; i++ ){ if( s[i] == '.' && s[i-1] == '.') cnt ++; } for( int i = 1 ; i <= m ; i++ ){ int p ; char c ; scanf( "%d %c" , &p , &c ); p--; if( p > 0 && s[p] == '.' && s[p - 1] == '.' ) cnt--; if( p < s.length() && s[p] == '.' && s[p + 1] == '.' ) cnt--; s[p] = c; if( p < s.length() && s[p] == '.' && s[p + 1] == '.' ) cnt++; if( p > 0 && s[p] == '.' && s[p - 1] == '.' ) cnt++; cout << cnt << endl; } return 0; }
相关文章推荐
- Javascript 面向对象编程(一):封装
- 竞争学习的基本概念和原理
- POJ 1252 Euro Efficiency
- 利用Filter技术解决中文乱码的简单实现
- php学习-10while循环
- 文章标题
- MySQL Study之--MySQL管理工具sqlyog
- Yii2.0 游客访问限制
- ndk的一些概念
- SqlServer 允许保存对数据库中表结构的修改
- Octopress切换不同电脑写文章
- tcp/ip协议
- 4324 Triangle LOVE
- Ext.form.FileUploadField第二次选择同一附件无效的问题
- php学习-09switch语句
- 对线程同步的理解
- 1081. Rational Sum (20)
- 程序员的数学思维修炼
- (4)信号槽使用规则
- 通过设置P3P头来实现跨域访问COOKIE