Codeforces Round #250 (Div. 2) A B C
来源:互联网 发布:java和php全面对比 编辑:程序博客网 时间:2024/06/07 07:41
C 贪心 写的时候突然发现这么容易,所有的绳子都要拆掉,而且绳子的个数固定,所以只要每次拆绳子,只要找绳子两端v小的即可,O(n) //代码里面有没用的冗余
//#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <iostream>#include <iomanip>#include <cmath>#include <map>#include <set>#include <queue>using namespace std;#define ls(rt) rt*2#define rs(rt) rt*2+1#define ll long long#define ull unsigned long long#define rep(i,s,e) for(int i=s;i<e;i++)#define repe(i,s,e) for(int i=s;i<=e;i++)#define CL(a,b) memset(a,b,sizeof(a))#define IN(s) freopen(s,"r",stdin)#define OUT(s) freopen(s,"w",stdout)const ll ll_INF = ((ull)(-1))>>1;const double EPS = 1e-8;const double pi = acos(-1.0);const int INF = 100000000;const int MAXN = 2000*2+100;vector<int>g[MAXN];int v[MAXN],id[MAXN];int n,m;int main(){ //IN("C.txt"); while(~scanf("%d%d",&n,&m)) { int u,t; for(int i=0;i<=n;i++) g[i].clear(); for(int i=1;i<=n;i++) scanf("%d",&v[i]),id[i]=i; //sort(id+1,id) ll ans=0; for(int i=0;i<m;i++) { scanf("%d%d",&u,&t); g[u].push_back(t); g[t].push_back(u); if(v[t]>v[u])ans+=v[u]; else ans+=v[t]; } printf("%I64d\n",ans); } return 0;}
B---胡蒙的,至今不解为啥按lowbit从大到小一定可以找出sum的组合
//#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <iostream>#include <iomanip>#include <cmath>#include <map>#include <set>#include <queue>using namespace std;#define ls(rt) rt*2#define rs(rt) rt*2+1#define ll long long#define ull unsigned long long#define rep(i,s,e) for(int i=s;i<e;i++)#define repe(i,s,e) for(int i=s;i<=e;i++)#define CL(a,b) memset(a,b,sizeof(a))#define IN(s) freopen(s,"r",stdin)#define OUT(s) freopen(s,"w",stdout)const ll ll_INF = ((ull)(-1))>>1;const double EPS = 1e-8;const double pi = acos(-1.0);const int INF = 100000000;const int MAXN = 1e5+100;int vis[MAXN],a[MAXN];int sum,up;inline int lowbit(int x){ return x&(-x);}vector<int>ans;bool cmp(int ca,int cb){ return lowbit(ca)>lowbit(cb);}int main(){ //IN("B.txt"); while(~scanf("%d%d",&sum,&up)) { ans.clear(); for(int i=0;i<=up;i++) a[i]=i; sort(a+1,a+1+up,cmp); for(int i=1;i<=up;i++) { int tmp=lowbit(a[i]); // printf("i=%d %d\n",i,a[i]); ///// if(sum>=tmp)sum-=tmp,ans.push_back(a[i]); if(sum==0)break; } if(sum!=0)puts("-1"); else { printf("%d\n",ans.size()); if(ans.size())printf("%d",ans[0]); for(int i=1;i<ans.size();i++) printf(" %d",ans[i]); putchar('\n'); } } return 0;}
A 纯属联系string类的substr函数了 不过用String数组写更好些,我的代码冗余严重
//#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <iostream>#include <iomanip>#include <cmath>#include <map>#include <set>#include <queue>using namespace std;#define ls(rt) rt*2#define rs(rt) rt*2+1#define ll long long#define ull unsigned long long#define rep(i,s,e) for(int i=s;i<e;i++)#define repe(i,s,e) for(int i=s;i<=e;i++)#define CL(a,b) memset(a,b,sizeof(a))#define IN(s) freopen(s,"r",stdin)#define OUT(s) freopen(s,"w",stdout)const ll ll_INF = ((ull)(-1))>>1;const double EPS = 1e-8;const double pi = acos(-1.0);const int INF = 100000000;string a,b,c,d;int checka(){ int len=a.size()*2; if(len <= b.size() && len <=c.size() && len<=d.size())return 1; if(a.size()>=b.size()*2 && a.size()>=d.size()*2 && a.size()>=c.size()*2)return 1; return 0;}int checkb(){ int len=b.size()*2; if(len <= a.size() && len <=c.size() && len<=d.size())return 1; if(b.size()>=a.size()*2 && b.size()>=d.size()*2 && b.size()>=c.size()*2)return 1; return 0;}int checkc(){ int len=c.size()*2; if(len <= a.size() && len <=c.size() && len<=d.size())return 1; if(c.size()>=a.size()*2 && c.size()>=d.size()*2 && c.size()>=b.size()*2)return 1; return 0;}int checkd(){ int len=d.size()*2; if(len <= a.size() && len <=c.size() && len<=b.size())return 1; if(d.size()>=a.size()*2 && d.size()>=c.size()*2 && d.size()>=b.size()*2)return 1; return 0;}int main(){ //IN("A.txt"); while(cin >> a >> b >> c >> d) { a=a.substr(2,a.size()-2); b=b.substr(2,b.size()-2); c=c.substr(2,c.size()-2); d=d.substr(2,d.size()-2); int flag=0; char ans; if(checka()){ans='A';flag++;} if(checkb()){ans='B';flag++;} if(checkc()){ans='C';flag++;} if(checkd()){ans='D';flag++;} if(flag == 1){printf("%c\n",ans);continue;} puts("C"); } return 0;}
1 1
- Codeforces Round #250 (Div. 2) A B C
- Codeforces Beta Round #95 (Div. 2) A B C E
- 【CodeForce】Codeforces Round #140 (Div. 2) A B C
- 【CodeForce】Codeforces Round #142 (Div. 2) A B C
- Codeforces Round #160 (Div. 2)——A,B,C
- Codeforces Round #177 (Div. 2)——A,B,C
- Codeforces Round #179 (Div. 2)A、B、C、D
- Codeforces Round #184 (Div. 2)——A,B,C
- Codeforces Round #185 (Div. 2)——A,B,C
- Codeforces Round #186 (Div. 2)——A,B,C
- Codeforces Round #186 (Div. 2)A、B、C、D、E
- Codeforces Round #190 (Div. 2) A B C
- Codeforces Round #196 (Div. 2) A,B,C
- Codeforces Round #202 (Div. 2) (A、B、C、D)
- Codeforces Round #211 (Div. 2)(A,B,C,D)
- Codeforces Round #218,#217 (Div. 2) A.B.C
- Codeforces Round #220 (Div. 2)(A,B,C,D)
- Codeforces Round #228(Div.2) A,B,C,E
- spring mvc整合easyui菜单栏目树点击顶级菜单问题
- Linux下置空文件的方法小结
- php Laravel框架学习(四) 之 表单与HTML
- WildFly/JBoss上修改项目上下文
- 输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
- Codeforces Round #250 (Div. 2) A B C
- swift学习之路——UIDatePicker
- 求滑动窗口的最小值
- java中方法的重写(overriding)与重载(overloading)的区别
- 从WildFly默认日志文件中分离应用日志
- C++中的位拷贝和值拷贝
- Remove Duplicates from Sorted List
- WCF配置文件全攻略
- java获得数据库信息常用API(DatabaseMetaData)示例