#include #include #include #include #include #include using namespace std;typedef long long ll;int arr[100010];int cnt[100010];int col[100010];int n,a,b;char c;string s = "qwertyuiopasdfghjkl;zxcvbnm,./";int main(){ while(cin>>c) { string input; cin>>input; if(c=='L') { string output=""; for(int i=0;i
B题:数据只有100000,故可以直接用一个map记录每个点所在的区间标识。
#include #include #include #include #include #include using namespace std;typedef long long ll;int arr[100010];int cnt[100010];int col[100010];int n,a,b;char c;string s = "qwertyuiopasdfghjkl;zxcvbnm,./";int main(){ while(cin>>n) { int all = 0; map m; for(int i=1;i >arr[i]; for(int j=all+1;j >k; for(int i=0;i >q; cout
C题:直接暴力枚举旋转的可能性,因为每个点最多转3次,最后判断是不是正方形就行。
#include #include #include #include const int inf=9999999; using namespace std; struct node { int x; int y; }p[5][5],home[5]; long long d[8]; long long dis(node a,node b)//距离的平方 { return (long long)(a.x-b.x)*(a.x-b.x)+(long long)(a.y-b.y)*(a.y-b.y); } void solve() { int ans=inf; for(int i=0;i
D题:用dp[i][0]表示第i位不是W,dp[i][1]表示第i位是W,这样转移方程就很容易出来了,具体见代码,记得dp[0]时的初始化
#include #include #include #include #include #include using namespace std;typedef long long ll;ll dp[100010][2];ll sum[100010];int cnt[100010];int col[100010];int n,a,b,t,k;const int mod = 1e9+7;char c;string s = "qwertyuiopasdfghjkl;zxcvbnm,./";int main(){ while(cin>>t>>k) { memset(dp,0,sizeof(dp)); dp[0][0]=1; dp[0][1]=0; for(int i=1;i =0) { dp[i][1] = (dp[i][1]+dp[i-k][0]+dp[i-k][1])%mod; } } sum[0] = 0; for(int i=1;i >a>>b; ll ans = sum[b]-sum[a-1]; if(ans<0) ans+=mod; cout<查看更多关于CodeforcesRound#271(Div.2)_html/css_WEB-ITnose的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did105785